diff --git a/v2.5/src/app/controllers/wizardController.coffee b/v2.5/src/app/controllers/wizardController.coffee index feaf355..79cded6 100644 --- a/v2.5/src/app/controllers/wizardController.coffee +++ b/v2.5/src/app/controllers/wizardController.coffee @@ -210,6 +210,11 @@ define(['./baseController'], ()-> $scope.commit = (sendRequest) -> wizardService.targetSystemConfigCommit($scope, sendRequest) + + $scope.addValue = (key1,key2) -> + if !$scope.package_config[key1][key2] + $scope.package_config[key1][key2] = [] + $scope.package_config[key1][key2].push "" ] .controller 'roleAssignCtrl', ['$scope', 'wizardService', '$filter', 'ngTableParams', ($scope, wizardService, $filter, ngTableParams) -> diff --git a/v2.5/src/app/factory/wizardFactory.coffee b/v2.5/src/app/factory/wizardFactory.coffee index bea3ad6..9382d06 100644 --- a/v2.5/src/app/factory/wizardFactory.coffee +++ b/v2.5/src/app/factory/wizardFactory.coffee @@ -19,7 +19,7 @@ define(['./baseFactory'], () -> @network_mapping = {} @ceph_config = {} @os_gloable_config = {} - + @package_config = {} clean: -> @cluster = {} @steps = [] @@ -37,7 +37,7 @@ define(['./baseFactory'], () -> @console_credentials = {} @network_mapping = {} @ceph_config = {} - + @package_config = {} preConfig: (config) -> @setInterfaces(config.interface) @@ -48,6 +48,7 @@ define(['./baseFactory'], () -> @setConsoleCredentials(config.console_credentials) @setNetworkMapping(config.network_mapping) @setCephConfig(config.ceph_config) if config.ceph_config + @setPackageConfig(config.package_config) if config.package_config setClusterInfo: (cluster) -> @cluster = cluster @@ -131,10 +132,12 @@ define(['./baseFactory'], () -> return @commit setServers: (servers) -> return @servers = servers - - + setPackageConfig: (packageConfig) -> + @package_config = packageConfig + getPackageConfig: -> + return @package_config angular.module('compass.factories').factory('wizardFactory',[ () -> new WizardFactory()]) ) \ No newline at end of file diff --git a/v2.5/src/app/partials/package_config.tpl.html b/v2.5/src/app/partials/package_config.tpl.html index 6a3b169..eab96b8 100644 --- a/v2.5/src/app/partials/package_config.tpl.html +++ b/v2.5/src/app/partials/package_config.tpl.html @@ -1,39 +1,119 @@
+
+
+
+
+ + + + {{value.accordion_heading}} + + +
+ + + + + + + + + + + + + +
{{header}}
{{service}} + + {{credential[val]}} + + + + + + + + + +
+
+ +
+
+
+ +
+
+
+ +
+ + +
+ +
+ + +
+ +
+ +
+
+ + + + + + + + + + + + + +
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+ - @@ -68,17 +148,17 @@ - - - --> + + - --> + + - --> + + - --> + + - - - - - - + @@ -247,4 +305,4 @@ - \ No newline at end of file + --> diff --git a/v2.5/src/app/server/appDev.js b/v2.5/src/app/server/appDev.js index 1bd52cf..b83ba77 100644 --- a/v2.5/src/app/server/appDev.js +++ b/v2.5/src/app/server/appDev.js @@ -972,6 +972,7 @@ define(['angular', 'angularMocks'], function() { "create_at": "2014-3-25 12:00:00", "updated_at": "2014-3-26 13:00:00", "flavor": { + "id": 1, "roles": [{ "display_name": "Compute", "name": "os-compute-worker" @@ -1003,6 +1004,171 @@ define(['angular', 'angularMocks'], function() { return [200, cluster, {}]; }); + $httpBackend.whenGET(/\.*\/flavors\/([0-9]|[1-9][0-9])\/ui_metadata$/).respond(function(method,url,data){ + console.log(method, url); + var uiData = { + "flavor_config":[{ + "category": "service_credentials", + "modifiable_data": ["username","password"], + "table_display_header": ["Service","UserName","Password","Action"], + "accordion_heading": "OpenStack Database and Queue Credentials", + "action": 'true', + "data_structure": "table", + "config": { + "rabbitmq": { + "username": "guest", + "password": "guest" + }, + "compute": { + "username": "nova", + "password": "nova" + }, + "dashboard": { + "username": "dashboard", + "password": "dashboard" + }, + "identity": { + "username": "keystone", + "password": "keystone" + }, + "image": { + "username": "glance", + "password": "glance" + }, + "metering": { + "username": "ceilometer", + "password": "ceilometer" + }, + "mysql": { + "username": "root", + "password": "root" + }, + "volume": { + "username": "cinder", + "password": "cinder" + } + } + },{ + "category": "console_credentials", + "modifiable_data": ["username","password"], + "table_display_header": ["Service","UserName","Password","Action"], + "accordion_heading": "OpenStack Keystone User Credentials", + "action": 'true', + "data_structure": "table", + "config":{ + "admin": { + "username": "admin", + "password": "admin" + }, + "compute": { + "username": "nova", + "password": "nova" + }, + "dashboard": { + "username": "dashboard", + "password": "dashboard" + }, + "image": { + "username": "glance", + "password": "glance" + }, + "metering": { + "username": "ceilometer", + "password": "ceilometer" + }, + "network": { + "username": "quantum", + "password": "quantum" + }, + "object-store": { + "username": "swift", + "password": "swift" + }, + "volume": { + "username": "cinder", + "password": "cinder" + } + } + },{ + "accordion_heading": "Ceph Global Configurations", + "category": "ceph_config", + "form_name": "cephForm", + "data_structure": "form", + "data":[{ + "label": "OP Threads", + "is_required": 'false', + "name": "op_threads", + "default_value": "1", + "display_type": "text" + },{ + "label": "Journal Size", + "is_required": 'false', + "default_value": "1", + "name": "journal_size", + "display_type": "text" + },{ + "label": "OSD Pool Size", + "is_required": 'true', + "default_value": "1", + "name": "osd_pool_size", + "display_type": "text" + },{ + "label": "OSD Pool PG Number", + "is_required": 'true', + "default_value": "1", + "name": "osd_pool_pgp_num", + "display_type": "text" + }] + },{ + "accordion_heading": "Neutron Configurations", + "category": "neutron_config", + "form_name": "neutronForm", + "data_structure": "form", + "data":[{ + "name": "tenant_network_type", + "input_type": "dropdown", + "label": "Tenant Network Type", + "content_data":{ + "gre":[{ + "is_required": 'true', + "display_type": "dropdown_text_multiple", + "name": "tunnel_id_ranges", + "label": "Tunnel ID Ranges", + "hint": "e.g. 1:1000" + }], + "vlan":[{ + "is_required": 'true', + "display_type": "dropdown_text_multiple", + "name": "vlan_ranges", + "label": "Network Vlan Ranges", + "hint": "e.g. physnet1:2700:2999" + },{ + "is_required": 'true', + "display_type": "dropdown_text_multiple", + "name": "bridge", + "label": "Bridge Mapping", + "hint": "e.g. physnet1:br-eth1" + }] + }, + "is_required": 'true', + "options":['gre', 'vlan'] + }] + },{ + "accordion_heading": "High Availability Configurations", + "category": "ha_proxy", + "form_name": "haForm", + "data_structure": "form", + "data":[{ + "label": "VIP", + "is_required": 'true', + "name": "vip", + "display_type": "text" + }] + }] + }; + return [200, uiData, {}]; + }); + $httpBackend.whenGET(/\.*\/clusters\/([0-9]|[1-9][0-9])*\/config/).respond(function(method, url, data) { console.log(method, url, data); var config = { diff --git a/v2.5/src/app/services/dataService.coffee b/v2.5/src/app/services/dataService.coffee index cbb0cf2..8f77c87 100644 --- a/v2.5/src/app/services/dataService.coffee +++ b/v2.5/src/app/services/dataService.coffee @@ -118,6 +118,7 @@ define(['./baseService'], () -> getOsGlobalConfigMetaData: (id) -> return @$http.get(@settings.apiUrlBase + '/oses/'+ id + '/ui_metadata') - + getPackageConfigUiElements: (id) -> + return @$http.get(@settings.apiUrlBase + '/flavors/' + id + '/ui_metadata') angular.module('compass.services').service('dataService', ['$http', 'settings', ($http,settings) -> new DS($http,settings)]) ) \ No newline at end of file diff --git a/v2.5/src/app/services/wizardService.coffee b/v2.5/src/app/services/wizardService.coffee index 1a864ed..c36a821 100644 --- a/v2.5/src/app/services/wizardService.coffee +++ b/v2.5/src/app/services/wizardService.coffee @@ -52,6 +52,7 @@ define(['./baseService'], ()-> wizardFactory.setConsoleCredentials(oldConfig.package_config.security.console_credentials) if oldConfig.package_config.security.console_credentials wizardFactory.setNetworkMapping(oldConfig.package_config.network_mapping) if oldConfig.package_config.network_mapping wizardFactory.setCephConfig(oldConfig.package_config.ceph_config) if oldConfig.package_config.ceph_config + wizardFactory.setPackageConfig(oldConfig.package_config) getClusterInfo: -> @@ -256,6 +257,48 @@ define(['./baseService'], ()-> $scope.service_credentials = @wizardFactory.getServiceCredentials() $scope.console_credentials = @wizardFactory.getConsoleCredentials() + $scope.package_config = @wizardFactory.getPackageConfig(); + + @dataService.getPackageConfigUiElements($scope.cluster.flavor.id).success (data) -> + $scope.metaData = data.flavor_config + for key,value of $scope.metaData + if value.category isnt "service_credentials" and value.category isnt "console_credentials" + if !$scope.package_config[value.category] + $scope.package_config[value.category] = {}; + + if value.data_structure is "form" + for serialNum, content of value.data + if !$scope.package_config[value.category][content.name] + if !content.default_value + $scope.package_config[value.category][content.name] = ""; + else + $scope.package_config[value.category][content.name] = content.default_value; + for content_data_key, content_data_value of content.content_data + for details_content_data_key, details_content_data_value of content_data_value + if !$scope.package_config[value.category][details_content_data_value.name] + $scope.package_config[value.category][details_content_data_value.name] = [""] + + if value.category is "service_credentials" or value.category is "console_credentials" + if !$scope.package_config["security"] + $scope.package_config["security"] = {} + $scope.package_config["security"][value.category] = value.config + $scope.metaData[key].dataSource = $scope.package_config["security"][value.category] + else + $scope.metaData[key].dataSource = $scope.package_config[value.category] + + $scope.change = (category,name,value) -> + for i of $scope.package_config[category] + if i!=name + delete $scope.package_config[category][i] + for metaKey, metaValue of $scope.metaData + if metaValue.category is category + for serialNum, content of metaValue.data + for content_data_key, content_data_value of content.content_data + if content_data_key is value + for i in content_data_value + if !$scope.package_config[category][i.name] + $scope.package_config[category][i.name] = [""] + keyLength_service_credentials = Object.keys($scope.service_credentials).length; $scope.editServiceMode = [] $scope.editServiceMode.length = keyLength_service_credentials @@ -676,30 +719,91 @@ define(['./baseService'], ()-> "message": "" ) return; + $scope.$emit "loading", true - targetSysConfigData = - "package_config": - "security": - "service_credentials": $scope.service_credentials - "console_credentials": $scope.console_credentials - targetSysConfigData["package_config"]["ceph_config"] = $scope.cephConfig if $scope.currentAdapterName == "ceph_openstack_icehouse" + # targetSysConfigData = + # "package_config": + # "security": + # "service_credentials": $scope.service_credentials + # "console_credentials": $scope.console_credentials + # targetSysConfigData["package_config"]["ceph_config"] = $scope.cephConfig if $scope.currentAdapterName == "ceph_openstack_icehouse" if $scope.currentAdapterName == "ceph_firefly" targetSysConfigData["package_config"]={} targetSysConfigData["package_config"]["ceph_config"] = $scope.cephConfig - @dataService.updateClusterConfig($scope.cluster.id, targetSysConfigData).success (data) -> - wizardFactory.setCommitState( - "name": "package_config" - "state": "success" - "message": "" - ) - .error (response) -> - wizardFactory.setCommitState( - "name": "package_config" - "state": "error" - "message": response + if $scope.package_config["neutron_config"] + if !$scope.package_config["neutron_config"]["openvswitch"] + $scope.package_config["neutron_config"]["openvswitch"] = {} + for key,value of $scope.package_config["neutron_config"] + if key isnt "openvswitch" + if typeof value is "string" + $scope.package_config["neutron_config"]["openvswitch"][key] = value + else + $scope.package_config["neutron_config"]["openvswitch"][key] = [] + for num,item of value + $scope.package_config["neutron_config"]["openvswitch"][key].push(item) + delete $scope.package_config["neutron_config"][key] + + + if $scope.package_config["ceph_config"] + if !$scope.package_config["ceph_config"]["osd_config"] + $scope.package_config["ceph_config"]["osd_config"] = {} + if !$scope.package_config["ceph_config"]["global_config"] + $scope.package_config["ceph_config"]["global_config"] = {} + for key, value of $scope.package_config["ceph_config"] + if key is "op_threads" or key is "journal_size" + if key is "op_threads" + $scope.package_config["ceph_config"]["osd_config"][key] = parseInt(value) + else + $scope.package_config["ceph_config"]["osd_config"][key] = value + delete $scope.package_config["ceph_config"][key] + if key is "osd_pool_size" or key is "osd_pool_pgp_num" or key is "osd_pool_pg_num" + $scope.package_config["ceph_config"]["global_config"][key] = value + delete $scope.package_config["ceph_config"][key] + + targetSysConfigData = + "package_config": $scope.package_config + + console.log($scope.package_config) + + if $scope.packageConfigForm.$valid + @dataService.updateClusterConfig($scope.cluster.id, targetSysConfigData).success (configData) -> + wizardFactory.setCommitState({ + "name": "package_config" + "state": "success" + "message": "" + }) + .error (response) -> + wizardFactory.setCommitState({ + "name": "package_config" + "state": "error" + "message": response + }) + else + if $scope.packageConfigForm.$error.required + message = "The required(*) fields can not be empty !" + else if $scope.packageConfigForm.$error.match + message = "The passwords do not match" + + @wizardFactory.setCommitState( + "name": "package_config", + "state": "invalid", + "message": message ) + + # @dataService.updateClusterConfig($scope.cluster.id, targetSysConfigData).success (data) -> + # wizardFactory.setCommitState( + # "name": "package_config" + # "state": "success" + # "message": "" + # ) + # .error (response) -> + # wizardFactory.setCommitState( + # "name": "package_config" + # "state": "error" + # "message": response + # ) # manually assign roles assignRole: ($scope, role) -> serverChecked = false