Updated Branches: refs/heads/trunk b009c49b5 -> a811db6d4
AMBARI-2972 Provide read-only view of security wizard entries. (atkach) Project: http://git-wip-us.apache.org/repos/asf/incubator-ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ambari/commit/a811db6d Tree: http://git-wip-us.apache.org/repos/asf/incubator-ambari/tree/a811db6d Diff: http://git-wip-us.apache.org/repos/asf/incubator-ambari/diff/a811db6d Branch: refs/heads/trunk Commit: a811db6d4aabddacfbde2c0507137001cc06b49a Parents: b009c49 Author: atkach <[email protected]> Authored: Wed Aug 21 14:47:47 2013 +0300 Committer: atkach <[email protected]> Committed: Wed Aug 21 14:47:47 2013 +0300 ---------------------------------------------------------------------- .../app/controllers/main/admin/security.js | 175 ++++++++++++++++++- .../main/admin/security/add/step2.js | 13 +- .../common/configs/services_config.hbs | 2 +- .../app/templates/main/admin/security.hbs | 6 +- .../app/views/common/configs/services_config.js | 3 + ambari-web/app/views/main/admin/security.js | 27 ++- 6 files changed, 213 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/a811db6d/ambari-web/app/controllers/main/admin/security.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/admin/security.js b/ambari-web/app/controllers/main/admin/security.js index a0f6894..3c662f7 100644 --- a/ambari-web/app/controllers/main/admin/security.js +++ b/ambari-web/app/controllers/main/admin/security.js @@ -41,6 +41,178 @@ App.MainAdminSecurityController = Em.Controller.extend({ notifySecurityOff: false, notifySecurityAdd: false, + stepConfigs: [], + desiredConfigs: [], + securityUsers: [], + serviceConfigTags: [], + selectedService: null, + isNotEditable: true, + services: function(){ + var secureServices; + var services = []; + if(App.get('isHadoop2Stack')) { + secureServices = $.extend(true, [], require('data/HDP2/secure_configs')); + } else { + secureServices = $.extend(true, [], require('data/secure_configs')); + } + + var installedServices = App.Service.find().mapProperty('serviceName'); + //General (only non service tab) tab is always displayed + services.push(secureServices.findProperty('serviceName', 'GENERAL')); + installedServices.forEach(function (_service) { + var secureService = secureServices.findProperty('serviceName', _service); + if (secureService) { + services.push(secureService); + } + }, this); + return services; + }.property(), + + loadStep: function(){ + var step2Controller = App.router.get('mainAdminSecurityAddStep2Controller'); + var services = this.get('services'); + this.get('stepConfigs').clear(); + this.get('securityUsers').clear(); + this.get('serviceConfigTags').clear(); + this.loadSecurityUsers(); + //loadSecurityUsers - desired configs fetched from server + step2Controller.addUserPrincipals(services, this.get('securityUsers')); + step2Controller.addMasterHostToGlobals(services); + step2Controller.addSlaveHostToGlobals(services); + this.renderServiceConfigs(services); + step2Controller.changeCategoryOnHa(services, this.get('stepConfigs')); + + services.forEach(function (_secureService) { + this.setServiceTagNames(_secureService, this.get('desiredConfigs')); + }, this); + var serverConfigs = App.config.loadConfigsByTags(this.get('serviceConfigTags')); + this.setConfigValuesFromServer(this.get('stepConfigs'), serverConfigs); + + this.set('installedServices', App.Service.find().mapProperty('serviceName')); + }, + + /** + * get actual values of configurations from server + * @param stepConfigs + * @param serverConfigs + */ + setConfigValuesFromServer: function(stepConfigs, serverConfigs){ + var allConfigs = {}; + serverConfigs.mapProperty('properties').forEach(function(_properties){ + allConfigs = $.extend(allConfigs, _properties); + }, this); + // for all services` + stepConfigs.forEach(function (_content) { + //for all components + _content.get('configs').forEach(function (_config) { + + var componentVal = allConfigs[_config.get('name')]; + //if we have config for specified component + if (componentVal) { + //set it + _config.set('value', componentVal); + } + }, this); + }, this); + + }, + + /** + * set tag names according to installed services and desired configs + * @param secureService + * @param configs + * @return {Object} + */ + setServiceTagNames: function (secureService, configs) { + //var serviceConfigTags = this.get('serviceConfigTags'); + for (var index in configs) { + if (secureService.sites && secureService.sites.contains(index)) { + var serviceConfigObj = { + siteName: index, + tagName: configs[index].tag, + newTagName: null, + configs: {} + }; + console.log("The value of serviceConfigTags[index]: " + configs[index]); + this.get('serviceConfigTags').pushObject(serviceConfigObj); + } + } + return serviceConfigObj; + }, + + loadSecurityUsers: function () { + var securityUsers = this.get('serviceUsers'); + if (!securityUsers || securityUsers.length < 1) { // Page could be refreshed in middle + if (App.testMode) { + securityUsers.pushObject({id: 'puppet var', name: 'hdfs_user', value: 'hdfs'}); + securityUsers.pushObject({id: 'puppet var', name: 'mapred_user', value: 'mapred'}); + securityUsers.pushObject({id: 'puppet var', name: 'hbase_user', value: 'hbase'}); + securityUsers.pushObject({id: 'puppet var', name: 'hive_user', value: 'hive'}); + securityUsers.pushObject({id: 'puppet var', name: 'smokeuser', value: 'ambari-qa'}); + } else { + this.setSecurityStatus(); + securityUsers = this.get('serviceUsers'); + } + } + this.set('securityUsers', securityUsers); + }, + /** + * fill config with hosts of component + * @param service + * @param configName + * @param componentName + */ + setHostsToConfig: function (service, configName, componentName) { + if (service) { + var hosts = service.configs.findProperty('name', configName); + if (hosts) { + hosts.defaultValue = App.Service.find(service.serviceName) + .get('hostComponents') + .filterProperty('componentName', componentName) + .mapProperty('host.hostName'); + } + } + }, + + /** + * Load child components to service config object + * @param _componentConfig + * @param componentConfig + */ + loadComponentConfigs: function (_componentConfig, componentConfig) { + _componentConfig.configs.forEach(function (_serviceConfigProperty) { + var serviceConfigProperty = App.ServiceConfigProperty.create(_serviceConfigProperty); + componentConfig.configs.pushObject(serviceConfigProperty); + serviceConfigProperty.set('isEditable', serviceConfigProperty.get('isReconfigurable')); + serviceConfigProperty.validate(); + }, this); + }, + + /** + * Render configs for active services + * @param serviceConfigs + */ + renderServiceConfigs: function (serviceConfigs) { + serviceConfigs.forEach(function (_serviceConfig) { + + var serviceConfig = App.ServiceConfig.create({ + filename: _serviceConfig.filename, + serviceName: _serviceConfig.serviceName, + displayName: _serviceConfig.displayName, + configCategories: _serviceConfig.configCategories, + showConfig: true, + configs: [] + }); + + this.loadComponentConfigs(_serviceConfig, serviceConfig); + + console.log('pushing ' + serviceConfig.serviceName, serviceConfig); + + this.get('stepConfigs').pushObject(serviceConfig); + }, this); + this.set('selectedService', this.get('stepConfigs').filterProperty('showConfig', true).objectAt(0)); + }, + notifySecurityOffPopup: function () { var self = this; if (!this.get('isSubmitDisabled')) { @@ -96,6 +268,7 @@ App.MainAdminSecurityController = Em.Controller.extend({ getSecurityStatusFromServerSuccessCallback: function (data) { var configs = data.Clusters.desired_configs; + this.set('desiredConfigs', configs); if ('global' in configs && 'hdfs-site' in configs) { this.set('tag.global', configs['global'].tag); this.set('tag.hdfs-site', configs['hdfs-site'].tag); @@ -138,7 +311,7 @@ App.MainAdminSecurityController = Em.Controller.extend({ setNnHaStatus: function(hdfsConfigs) { var nnHaStatus = hdfsConfigs && hdfsConfigs['dfs.nameservices']; - var namenodes; + var namenodesKey; if (nnHaStatus) { namenodesKey = 'dfs.ha.namenodes.' + hdfsConfigs['dfs.nameservices']; } http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/a811db6d/ambari-web/app/controllers/main/admin/security/add/step2.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/admin/security/add/step2.js b/ambari-web/app/controllers/main/admin/security/add/step2.js index 7511b86..b85a8c5 100644 --- a/ambari-web/app/controllers/main/admin/security/add/step2.js +++ b/ambari-web/app/controllers/main/admin/security/add/step2.js @@ -44,11 +44,11 @@ App.MainAdminSecurityAddStep2Controller = Em.Controller.extend({ console.log("TRACE: Loading addSecurity step2: Configure Services"); this.clearStep(); this.loadUsers(); - this.addUserPrincipals(this.get('content.services')); + this.addUserPrincipals(this.get('content.services'), this.get('securityUsers')); this.addMasterHostToGlobals(this.get('content.services')); this.addSlaveHostToGlobals(this.get('content.services')); this.renderServiceConfigs(this.get('content.services')); - this.changeCategoryOnHa(this.get('content.services')); + this.changeCategoryOnHa(this.get('content.services'), this.get('stepConfigs')); var storedServices = this.get('content.serviceConfigProperties'); if (storedServices) { var configs = new Ember.Set(); @@ -149,8 +149,7 @@ App.MainAdminSecurityAddStep2Controller = Em.Controller.extend({ this.set('securityUsers', securityUsers); }, - addUserPrincipals: function (serviceConfigs) { - var securityUsers = this.get('securityUsers'); + addUserPrincipals: function (serviceConfigs, securityUsers) { var smokeUser = securityUsers.findProperty('name', 'smokeuser'); var hdfsUser = securityUsers.findProperty('name', 'hdfs_user'); var hbaseUser = securityUsers.findProperty('name', 'hbase_user'); @@ -263,10 +262,10 @@ App.MainAdminSecurityAddStep2Controller = Em.Controller.extend({ this.setHostsToConfig(zooKeeperService, 'zookeeperserver_hosts', 'ZOOKEEPER_SERVER'); }, - changeCategoryOnHa: function (serviceConfigs) { + changeCategoryOnHa: function (serviceConfigs, stepConfigs) { var hdfsService = serviceConfigs.findProperty('serviceName', 'HDFS'); if (hdfsService) { - var hdfsProperties = this.get('stepConfigs').findProperty('serviceName','HDFS').get('configs'); + var hdfsProperties = stepConfigs.findProperty('serviceName','HDFS').get('configs'); var configCategories = hdfsService.configCategories; var dfsHttpPrincipal = hdfsProperties.findProperty('name', 'hadoop_http_principal_name'); var dfsHttpKeytab = hdfsProperties.findProperty('name', 'hadoop_http_keytab'); @@ -305,4 +304,4 @@ App.MainAdminSecurityAddStep2Controller = Em.Controller.extend({ } } -}); \ No newline at end of file +}); http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/a811db6d/ambari-web/app/templates/common/configs/services_config.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/common/configs/services_config.hbs b/ambari-web/app/templates/common/configs/services_config.hbs index b10df6e..98992e3 100644 --- a/ambari-web/app/templates/common/configs/services_config.hbs +++ b/ambari-web/app/templates/common/configs/services_config.hbs @@ -28,7 +28,7 @@ {{/if}} {{/each}} </ul> -{{view App.ServiceConfigView}} +{{view App.ServiceConfigView isNotEditableBinding="controller.isNotEditable"}} {{#if isSubmitDisabled}} <div class="alert">{{t installer.step7.attentionNeeded}}</div> {{/if}} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/a811db6d/ambari-web/app/templates/main/admin/security.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/main/admin/security.hbs b/ambari-web/app/templates/main/admin/security.hbs index 2c1ab01..56c75f7 100644 --- a/ambari-web/app/templates/main/admin/security.hbs +++ b/ambari-web/app/templates/main/admin/security.hbs @@ -24,8 +24,8 @@ </a> <br/> </p> </div> - <div> - {{outlet}} + <div id="serviceConfig"> + {{view App.ServicesConfigView}} </div> {{else}} <div> @@ -38,4 +38,4 @@ {{/if}} {{else}} <div class="spinner"></div> -{{/if}} \ No newline at end of file +{{/if}} http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/a811db6d/ambari-web/app/views/common/configs/services_config.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/common/configs/services_config.js b/ambari-web/app/views/common/configs/services_config.js index a22eacc..38c14ca 100644 --- a/ambari-web/app/views/common/configs/services_config.js +++ b/ambari-web/app/views/common/configs/services_config.js @@ -39,6 +39,9 @@ App.ServiceConfigView = Em.View.extend({ this.set('isRestartMessageCollapsed', !this.get('isRestartMessageCollapsed')); }, didInsertElement: function () { + if(this.get('isNotEditable') === true) { + this.set('canEdit', false); + } this.$('.service-body').hide(); $(".restart-required-property").tooltip({html: true}); $(".icon-lock").tooltip({placement: 'right'}); http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/a811db6d/ambari-web/app/views/main/admin/security.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/main/admin/security.js b/ambari-web/app/views/main/admin/security.js index d52002d..4c7ee14 100644 --- a/ambari-web/app/views/main/admin/security.js +++ b/ambari-web/app/views/main/admin/security.js @@ -22,6 +22,31 @@ App.MainAdminSecurityView = Em.View.extend({ templateName: require('templates/main/admin/security'), didInsertElement: function() { this.get('controller').setSecurityStatus(); - } + }, + + configProperties: function () { + var configProperties = []; + var stepConfigs = this.get('controller.stepConfigs'); + if (stepConfigs) { + this.get('controller.stepConfigs').mapProperty('configs').forEach(function (_stepProperties) { + _stepProperties.forEach(function (_stepConfigProperty) { + configProperties.pushObject(_stepConfigProperty); + }, this); + }, this); + } + return configProperties; + }.property('[email protected]'), + + realmName: function () { + return this.get('configProperties').findProperty('name', 'kerberos_domain'); + }.property('configProperties'), + + onRealmNameChange: function () { + this.get('configProperties').forEach(function (_globalProperty) { + if (/principal_name?$/.test(_globalProperty.get('name'))) { + _globalProperty.set('unit', '@' + this.get('realmName.value')); + } + }, this); + }.observes('realmName.value') }); \ No newline at end of file
