You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ja...@apache.org on 2015/01/15 03:06:51 UTC
ambari git commit: AMBARI-9137. Configure Identities page tweaks.
(jaimin)
Repository: ambari
Updated Branches:
refs/heads/trunk 65577e223 -> d32eefdaf
AMBARI-9137. Configure Identities page tweaks. (jaimin)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/d32eefda
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/d32eefda
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/d32eefda
Branch: refs/heads/trunk
Commit: d32eefdafd14c30b852128b38245581223fb97ed
Parents: 65577e2
Author: Jaimin Jetly <ja...@hortonworks.com>
Authored: Wed Jan 14 18:05:34 2015 -0800
Committer: Jaimin Jetly <ja...@hortonworks.com>
Committed: Wed Jan 14 18:05:41 2015 -0800
----------------------------------------------------------------------
.../app/controllers/main/admin/kerberos.js | 27 ++++++-
.../main/admin/kerberos/step4_controller.js | 83 +++++++++++++++-----
ambari-web/app/data/HDP2/site_properties.js | 37 +++++++++
ambari-web/app/messages.js | 4 +-
.../app/mixins/wizard/addSecurityConfigs.js | 12 ++-
.../admin/kerberos/step4_controller_test.js | 34 ++++----
6 files changed, 152 insertions(+), 45 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/d32eefda/ambari-web/app/controllers/main/admin/kerberos.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/kerberos.js b/ambari-web/app/controllers/main/admin/kerberos.js
index be5b23f..640c92c 100644
--- a/ambari-web/app/controllers/main/admin/kerberos.js
+++ b/ambari-web/app/controllers/main/admin/kerberos.js
@@ -153,13 +153,34 @@ App.MainAdminKerberosController = App.KerberosWizardStep4Controller.extend({
*/
prepareConfigProperties: function(configs) {
var configProperties = configs.slice(0);
+ var siteProperties = App.config.get('preDefinedSiteProperties');
var installedServiceNames = ['Cluster'].concat(App.Service.find().mapProperty('serviceName'));
configProperties = configProperties.filter(function(item) {
return installedServiceNames.contains(item.get('serviceName'));
});
- configProperties.forEach(function(item) {
- if (item.get('serviceName') == 'Cluster') item.set('category', 'General');
- else item.set('category', 'Advanced');
+ configProperties.setEach('isSecureConfig', false);
+ configProperties.forEach(function(property, item, allConfigs) {
+ if (property.get('observesValueFrom')) {
+ var observedValue = allConfigs.findProperty('name', property.get('observesValueFrom')).get('value');
+ property.set('value', observedValue);
+ property.set('defaultValue', observedValue);
+ }
+ if (property.get('serviceName') == 'Cluster') {
+ property.set('category', 'Global');
+ } else {
+ property.set('category', property.get('serviceName'));
+ }
+ // All user identity should be grouped under "Ambari Principals" category
+ if (property.get('identityType') == 'user') property.set('category', 'Ambari Principals');
+ var siteProperty = siteProperties.findProperty('name', property.get('name'));
+ if (siteProperty) {
+ if (siteProperty.category === property.get('category')) {
+ property.set('displayName',siteProperty.displayName);
+ if (siteProperty.index) {
+ property.set('index', siteProperty.index);
+ }
+ }
+ }
});
configProperties.setEach('isEditable', false);
return configProperties;
http://git-wip-us.apache.org/repos/asf/ambari/blob/d32eefda/ambari-web/app/controllers/main/admin/kerberos/step4_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/kerberos/step4_controller.js b/ambari-web/app/controllers/main/admin/kerberos/step4_controller.js
index 8ac005c..79707dd 100644
--- a/ambari-web/app/controllers/main/admin/kerberos/step4_controller.js
+++ b/ambari-web/app/controllers/main/admin/kerberos/step4_controller.js
@@ -22,7 +22,7 @@ require('controllers/wizard/step7_controller');
App.KerberosWizardStep4Controller = App.WizardStep7Controller.extend(App.AddSecurityConfigs, {
name: 'kerberosWizardStep4Controller',
- adminPropertyNames: ['admin_principal', 'admin_password'],
+ adminPropertyNames: [{name: 'admin_principal', displayName: 'Admin principal'}, {name: 'admin_password', displayName: 'Admin password'}],
clearStep: function() {
this.set('isRecommendedLoaded', false);
@@ -42,20 +42,45 @@ App.KerberosWizardStep4Controller = App.WizardStep7Controller.extend(App.AddSecu
/**
* Create service config object for Kerberos service.
*
- * @param {Em.Object[]} configCategories
* @param {App.ServiceConfigProperty[]} configs
* @returns {Em.Object}
*/
- createServiceConfig: function(configCategories, configs) {
- return App.ServiceConfig.create({
- displayName: 'Kerberos Descriptor',
- name: 'KERBEROS',
- serviceName: 'KERBEROS',
- configCategories: configCategories,
- configs: configs,
+ createServiceConfig: function(configs) {
+ // Identity configs related to user principal
+ var userConfigs = configs.filterProperty('identityType','user');
+ var nonUserConfig = configs.rejectProperty('identityType','user');
+ var categoryForUserConfigs = [
+ App.ServiceConfigCategory.create({ name: 'Ambari Principals', displayName: 'Ambari Principals'})
+ ];
+ var categoryForNonUserConfigs = [
+ App.ServiceConfigCategory.create({ name: 'Global', displayName: 'Global'})
+ ].concat(this.createCategoryForServices());
+ return [
+ App.ServiceConfig.create({
+ displayName: 'General',
+ name: 'GENERAL',
+ serviceName: 'KERBEROS_GENERAL',
+ configCategories: categoryForUserConfigs,
+ configs: userConfigs,
showConfig: true,
selected: true
- });
+ }),
+ App.ServiceConfig.create({
+ displayName: 'Advanced',
+ name: 'ADVANCED',
+ serviceName: 'KERBEROS_ADVANCED',
+ configCategories: categoryForNonUserConfigs,
+ configs: nonUserConfig,
+ showConfig: true,
+ selected: false
+ })
+ ];
+ },
+
+ createCategoryForServices: function() {
+ return App.Service.find().mapProperty('serviceName').map(function(item) {
+ return App.ServiceConfigCategory.create({ name: item, displayName: App.Service.find().findProperty('serviceName',item).get('displayName')});
+ })
},
/**
@@ -64,19 +89,17 @@ App.KerberosWizardStep4Controller = App.WizardStep7Controller.extend(App.AddSecu
* @param {App.ServiceConfigProperty[]} configs
*/
setStepConfigs: function(configs) {
- var selectedService = App.StackService.find().findProperty('serviceName', 'KERBEROS');
- var configCategories = selectedService.get('configCategories');
var configProperties = this.prepareConfigProperties(configs);
if (this.get('wizardController.name') == 'addServiceController') {
// config properties for installed services should be disabled on Add Service Wizard
configProperties.forEach(function(item) {
- if (this.get('adminPropertyNames').contains(item.get('name'))) return;
+ if (this.get('adminPropertyNames').mapProperty('name').contains(item.get('name'))) return;
if (this.get('installedServiceNames').contains(item.get('serviceName')) || item.get('serviceName') == 'Cluster') {
item.set('isEditable', false);
}
}, this);
}
- this.get('stepConfigs').pushObject(this.createServiceConfig(configCategories, configProperties));
+ this.get('stepConfigs').pushObjects(this.createServiceConfig(configProperties));
this.set('selectedService', this.get('stepConfigs')[0]);
},
@@ -97,12 +120,13 @@ App.KerberosWizardStep4Controller = App.WizardStep7Controller.extend(App.AddSecu
var installedServiceNames = ['Cluster'].concat(App.Service.find().mapProperty('serviceName'));
var adminProps = [];
var configProperties = configs.slice(0);
+ var siteProperties = App.config.get('preDefinedSiteProperties');
if (this.get('wizardController.name') == 'addServiceController') {
installedServiceNames = installedServiceNames.concat(this.get('selectedServiceNames'));
this.get('adminPropertyNames').forEach(function(item) {
- var property = storedServiceConfigs.filterProperty('filename', 'krb5-conf.xml').findProperty('name', item);
+ var property = storedServiceConfigs.filterProperty('filename', 'krb5-conf.xml').findProperty('name', item.name);
if (!!property) {
- var _prop = App.ServiceConfigProperty.create($.extend({}, property, { value: '', defaultValue: '', serviceName: 'Cluster', displayName: item }));
+ var _prop = App.ServiceConfigProperty.create($.extend({}, property, { name: item.name, value: '', defaultValue: '', serviceName: 'Cluster', displayName: item.displayName}));
_prop.validate();
adminProps.push(_prop);
}
@@ -125,8 +149,23 @@ App.KerberosWizardStep4Controller = App.WizardStep7Controller.extend(App.AddSecu
property.set('value', observedValue);
property.set('defaultValue', observedValue);
}
- if (property.get('serviceName') == 'Cluster') property.set('category', 'General');
- else property.set('category', 'Advanced');
+ if (property.get('serviceName') == 'Cluster') {
+ property.set('category', 'Global');
+ }
+ else {
+ property.set('category', property.get('serviceName'));
+ }
+ // All user identity should be grouped under "Ambari Principals" category
+ if (property.get('identityType') == 'user') property.set('category', 'Ambari Principals');
+ var siteProperty = siteProperties.findProperty('name', property.get('name'));
+ if (siteProperty) {
+ if (siteProperty.category === property.get('category')) {
+ property.set('displayName',siteProperty.displayName);
+ if (siteProperty.index) {
+ property.set('index', siteProperty.index);
+ }
+ }
+ }
});
return configProperties;
@@ -139,7 +178,8 @@ App.KerberosWizardStep4Controller = App.WizardStep7Controller.extend(App.AddSecu
*/
spnegoPropertiesObserver: function(configProperty) {
var self = this;
- this.get('stepConfigs')[0].get('configs').forEach(function(config) {
+ var stepConfig = this.get('stepConfigs').findProperty('name', 'ADVANCED');
+ stepConfig.get('configs').forEach(function(config) {
if (config.get('observesValueFrom') == configProperty.get('name')) {
Em.run.once(self, function() {
config.set('value', configProperty.get('value'));
@@ -156,7 +196,10 @@ App.KerberosWizardStep4Controller = App.WizardStep7Controller.extend(App.AddSecu
saveConfigurations: function() {
var kerberosDescriptor = this.get('kerberosDescriptor');
- var configs = this.get('stepConfigs')[0].get('configs');
+ var configs = [];
+ this.get('stepConfigs').forEach(function(_stepConfig){
+ configs = configs.concat(_stepConfig.get('configs'));
+ });
this.updateKerberosDescriptor(kerberosDescriptor, configs);
this.get('wizardController').saveKerberosDescriptorConfigs(kerberosDescriptor);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/d32eefda/ambari-web/app/data/HDP2/site_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/HDP2/site_properties.js b/ambari-web/app/data/HDP2/site_properties.js
index 6ab8adb..fa1490a 100644
--- a/ambari-web/app/data/HDP2/site_properties.js
+++ b/ambari-web/app/data/HDP2/site_properties.js
@@ -4502,6 +4502,43 @@ module.exports =
"filename": "ams-site.xml",
"category": "MetricCollector",
"index" : 3
+ },
+ /************************************************Kerberos Descriptor******************************************/
+ {
+ "name": "smokeuser_principal_name",
+ "displayName": "Smokeuser principal",
+ "category": "Ambari Principals",
+ "index" : 1
+ },
+ {
+ "name": "smokeuser_keytab",
+ "displayName": "Smokeuser keytab",
+ "category": "Ambari Principals",
+ "index" : 2
+ },
+ {
+ "name": "hdfs_principal_name",
+ "displayName": "HDFS user principal",
+ "category": "Ambari Principals",
+ "index" : 3
+ },
+ {
+ "name": "hdfs_user_keytab",
+ "displayName": "HDFS user keytab",
+ "category": "Ambari Principals",
+ "index" : 4
+ },
+ {
+ "name": "hbase_principal_name",
+ "displayName": "HBase user principal",
+ "category": "Ambari Principals",
+ "index" : 5
+ },
+ {
+ "name": "hbase_user_keytab",
+ "displayName": "HBase user keytab",
+ "category": "Ambari Principals",
+ "index" : 6
}
]
};
http://git-wip-us.apache.org/repos/asf/ambari/blob/d32eefda/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index 5fe6c4f..a9ea7e3 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -983,10 +983,10 @@ Em.I18n.translations = {
'admin.kerberos.wizard.step1.body.text': 'What type of KDC do you plan on using?',
'admin.kerberos.wizard.step1.option.kdc': 'Existing MIT KDC',
'admin.kerberos.wizard.step1.option.kdc.condition.1': 'An administrative principal is created in the MIT KDC to be shared with Ambari when prompted.',
- 'admin.kerberos.wizard.step1.option.kdc.condition.2': 'Java Cryptography Extension (JCE) is installed on all hosts.',
+ 'admin.kerberos.wizard.step1.option.kdc.condition.2': 'Java Cryptography Extension (JCE) is installed on ambari server host.',
'admin.kerberos.wizard.step1.option.ad': 'Existing Active Directory',
'admin.kerberos.wizard.step1.option.ad.condition.1': 'An administrative principal is created in the Active Directory to be shared with Ambari when prompted.',
- 'admin.kerberos.wizard.step1.option.ad.condition.2': 'Java Cryptography Extension (JCE) is installed on all hosts.',
+ 'admin.kerberos.wizard.step1.option.ad.condition.2': 'Java Cryptography Extension (JCE) is installed on ambari server host.',
'admin.kerberos.wizard.step1.prerequisites.label': 'Following prerequisites needs to be checked to progress ahead in the wizard.',
'admin.kerberos.wizard.step2.info.body': 'Please configure kerberos related properties.',
'admin.kerberos.wizard.step3.task0.title': 'Install Kerberos',
http://git-wip-us.apache.org/repos/asf/ambari/blob/d32eefda/ambari-web/app/mixins/wizard/addSecurityConfigs.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/wizard/addSecurityConfigs.js b/ambari-web/app/mixins/wizard/addSecurityConfigs.js
index ee14a49..2c63120 100644
--- a/ambari-web/app/mixins/wizard/addSecurityConfigs.js
+++ b/ambari-web/app/mixins/wizard/addSecurityConfigs.js
@@ -407,9 +407,15 @@ App.AddSecurityConfigs = Em.Mixin.create({
// generate configs for root level identities object, currently spnego property
clusterConfigs = clusterConfigs.concat(this.createConfigsByIdentities(kerberosDescriptor.identities, 'Cluster'));
clusterConfigs.setEach('serviceName', 'Cluster');
- // generate properties for services object
kerberosDescriptor.services.forEach(function (service) {
var serviceName = service.name;
+ // generate configs for service level identity objects
+ if (service.identities) {
+ var serviceIdentityConfigs = self.createConfigsByIdentities(service.identities, serviceName);
+ serviceIdentityConfigs.setEach('serviceName', serviceName);
+ configs = configs.concat(serviceIdentityConfigs);
+ }
+ // generate configs for service component level identity object
service.components.forEach(function (component) {
var componentName = component.name;
if (component.identities) {
@@ -446,9 +452,9 @@ App.AddSecurityConfigs = Em.Mixin.create({
isVisible: true,
isSecureConfig: true,
componentName: componentName,
- name: identity.name
+ name: identity.name,
+ identityType: identity.principal && identity.principal.type
};
-
self.parseIdentityObject(identity).forEach(function (item) {
configs.push(App.ServiceConfigProperty.create($.extend({}, defaultObject, item)));
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/d32eefda/ambari-web/test/controllers/main/admin/kerberos/step4_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/admin/kerberos/step4_controller_test.js b/ambari-web/test/controllers/main/admin/kerberos/step4_controller_test.js
index 361175b..12aec8b 100644
--- a/ambari-web/test/controllers/main/admin/kerberos/step4_controller_test.js
+++ b/ambari-web/test/controllers/main/admin/kerberos/step4_controller_test.js
@@ -22,13 +22,10 @@ describe('App.KerberosWizardStep4Controller', function() {
describe('#isSubmitDisabled', function() {
var controller = App.KerberosWizardStep4Controller.create({});
- var configCategories = Em.A([
- App.ServiceConfigCategory.create({ name: 'Advanced', displayName: 'Advanced'})
- ]);
var configs = Em.A([
- App.ServiceConfigProperty.create({ name: 'prop1', value: 'someVal1', category: 'Advanced'})
+ App.ServiceConfigProperty.create({ name: 'prop1', value: 'someVal1', identityType: 'user', category: 'Ambari Principals'})
]);
- controller.set('stepConfigs', [controller.createServiceConfig(configCategories, configs)]);
+ controller.set('stepConfigs', controller.createServiceConfig(configs));
it('configuration errors are absent, submit should be not disabled', function() {
expect(controller.get('stepConfigs')[0].get('errorCount')).to.be.eql(0);
@@ -46,7 +43,9 @@ describe('App.KerberosWizardStep4Controller', function() {
describe('#createServiceConfig', function() {
var controller = App.KerberosWizardStep4Controller.create({});
it('should create instance of App.ServiceConfig', function() {
- expect(controller.createServiceConfig([], [])).be.instanceof(App.ServiceConfig);
+ controller.createServiceConfig([], []).forEach(function(item){
+ expect(item).be.instanceof(App.ServiceConfig);
+ });
});
});
@@ -75,32 +74,33 @@ describe('App.KerberosWizardStep4Controller', function() {
var properties = Em.A([
Em.Object.create({ name: 'realm', value: '', serviceName: 'Cluster' }),
Em.Object.create({ name: 'spnego_keytab', value: 'spnego_keytab_value', serviceName: 'Cluster' }),
- Em.Object.create({ name: 'hdfs_keytab', value: '', serviceName: 'HDFS', observesValueFrom: 'spnego_keytab' }),
+ Em.Object.create({ name: 'hdfs_keytab', value: '', serviceName: 'HDFS', identityType: 'user', observesValueFrom: 'spnego_keytab' }),
Em.Object.create({ name: 'falcon_keytab', value: 'falcon_keytab_value', serviceName: 'FALCON' }),
Em.Object.create({ name: 'mapreduce_keytab', value: 'mapreduce_keytab_value', serviceName: 'MAPREDUCE2' }),
- Em.Object.create({ name: 'hdfs_principal', value: 'hdfs_principal_value', serviceName: 'HDFS' })
+ Em.Object.create({ name: 'hdfs_principal', value: 'hdfs_principal_value', identityType: 'user', serviceName: 'HDFS' })
]);
var propertyValidationCases = [
{
property: 'spnego_keytab',
e: [
- { key: 'category', value: 'General' },
- { key: 'observesValueFrom', absent: true },
+ { key: 'category', value: 'Global' },
+ { key: 'observesValueFrom', absent: true }
]
},
{
property: 'realm',
e: [
- { key: 'category', value: 'General' },
- { key: 'value', value: 'realm_value' },
+ { key: 'category', value: 'Global' },
+ { key: 'value', value: 'realm_value' }
]
},
{
property: 'hdfs_keytab',
e: [
+ {key: 'category', value: 'Ambari Principals'},
{ key: 'value', value: 'spnego_keytab_value' },
- { key: 'observesValueFrom', value: 'spnego_keytab' },
+ { key: 'observesValueFrom', value: 'spnego_keytab' }
]
}
];
@@ -144,7 +144,7 @@ describe('App.KerberosWizardStep4Controller', function() {
}),
Em.Object.create({
serviceName: 'HDFS',
- configCategories: [],
+ configCategories: []
}),
Em.Object.create({
serviceName: 'MAPREDUCE2'
@@ -167,13 +167,13 @@ describe('App.KerberosWizardStep4Controller', function() {
return Em.A([
Em.Object.create({ name: 'realm', value: 'realm_value' }),
Em.Object.create({ name: 'admin_principal', value: 'some_val1', defaultValue: 'some_val1', filename: 'krb5-conf.xml' }),
- Em.Object.create({ name: 'admin_password', value: 'some_password', defaultValue: 'some_password', filename: 'krb5-conf.xml' }),
+ Em.Object.create({ name: 'admin_password', value: 'some_password', defaultValue: 'some_password', filename: 'krb5-conf.xml' })
]);
}
})
});
controller.setStepConfigs(properties);
- this.result = controller.get('stepConfigs')[0].get('configs');
+ this.result = controller.get('stepConfigs')[0].get('configs').concat(controller.get('stepConfigs')[1].get('configs'));
});
after(function() {
@@ -199,7 +199,7 @@ describe('App.KerberosWizardStep4Controller', function() {
];
propertiesEditableTests.forEach(function(test) {
- it('Add Service: property `{0}` should be {1}editable'.format(test.name, !!test.e ? '' : 'not '), function() {
+ it('Add Service: property `{0}` should be {1} editable'.format(test.name, !!test.e ? '' : 'not '), function() {
expect(this.result.findProperty('name', test.name).get('isEditable')).to.eql(test.e);
});
});