You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by yu...@apache.org on 2013/04/11 20:09:15 UTC
svn commit: r1467022 - in /incubator/ambari/trunk: ./
ambari-web/app/assets/data/configurations/ ambari-web/app/models/
ambari-web/app/utils/ ambari-web/app/views/common/configs/
Author: yusaku
Date: Thu Apr 11 18:09:14 2013
New Revision: 1467022
URL: http://svn.apache.org/r1467022
Log:
AMBARI-1876. Capacity Scheduler: implement user/group and admin user/group validation rules. (yusaku)
Modified:
incubator/ambari/trunk/CHANGES.txt
incubator/ambari/trunk/ambari-web/app/assets/data/configurations/cluster_level_configs.json
incubator/ambari/trunk/ambari-web/app/models/service_config.js
incubator/ambari/trunk/ambari-web/app/utils/config.js
incubator/ambari/trunk/ambari-web/app/views/common/configs/services_config.js
Modified: incubator/ambari/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/CHANGES.txt?rev=1467022&r1=1467021&r2=1467022&view=diff
==============================================================================
--- incubator/ambari/trunk/CHANGES.txt (original)
+++ incubator/ambari/trunk/CHANGES.txt Thu Apr 11 18:09:14 2013
@@ -241,6 +241,9 @@ Trunk (unreleased changes):
IMPROVEMENTS
+ AMBARI-1876. Capacity Scheduler: implement user/group and admin user/group
+ validation rules. (yusaku)
+
AMBARI-1864. Remove package dependency on mocha-phantomjs. (yusaku)
AMBARI-1844. Need ability to update multiple hosts in 1 PUT call.
Modified: incubator/ambari/trunk/ambari-web/app/assets/data/configurations/cluster_level_configs.json
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/assets/data/configurations/cluster_level_configs.json?rev=1467022&r1=1467021&r2=1467022&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/assets/data/configurations/cluster_level_configs.json (original)
+++ incubator/ambari/trunk/ambari-web/app/assets/data/configurations/cluster_level_configs.json Thu Apr 11 18:09:14 2013
@@ -143,10 +143,10 @@
"cluster_name" : "vmc"
},
"properties" : {
- "mapred.queue.default.acl-submit-job" : "* *",
- "mapred.queue.default.acl-administer-jobs" : "* *",
- "mapred.queue.new_qeuue.acl-administer-jobs" : "* *",
- "mapred.queue.new_qeuue.acl-submit-job" : "* *"
+ "mapred.queue.default.acl-submit-job" : "*",
+ "mapred.queue.default.acl-administer-jobs" : "*",
+ "mapred.queue.new_qeuue.acl-administer-jobs" : "*",
+ "mapred.queue.new_qeuue.acl-submit-job" : "*"
}
},
{
Modified: incubator/ambari/trunk/ambari-web/app/models/service_config.js
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/models/service_config.js?rev=1467022&r1=1467021&r2=1467022&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/models/service_config.js (original)
+++ incubator/ambari/trunk/ambari-web/app/models/service_config.js Thu Apr 11 18:09:14 2013
@@ -474,7 +474,11 @@ App.ServiceConfigProperty = Ember.Object
values = value.split(',');
for(var i = 0, l = values.length; i < l; i++){
if(!validator.isValidUNIXUser(values[i])){
- this.set('errorMessage', 'Must be a valid list of user names');
+ if(this.get('type') == 'USERS'){
+ this.set('errorMessage', 'Must be a valid list of user names');
+ } else {
+ this.set('errorMessage', 'Must be a valid list of group names');
+ }
isError = true;
}
}
Modified: incubator/ambari/trunk/ambari-web/app/utils/config.js
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/utils/config.js?rev=1467022&r1=1467021&r2=1467022&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/utils/config.js (original)
+++ incubator/ambari/trunk/ambari-web/app/utils/config.js Thu Apr 11 18:09:14 2013
@@ -172,7 +172,7 @@ App.config = Em.Object.create({
*/
mergePreDefinedWithStored: function (storedConfigs) {
var mergedConfigs = [];
- var preDefinedConfigs = this.get('preDefinedConfigProperties');
+ var preDefinedConfigs = $.extend(true, [], this.get('preDefinedConfigProperties'));
var preDefinedNames = [];
var storedNames = [];
var names = [];
@@ -314,10 +314,10 @@ App.config = Em.Object.create({
customConfig.value = 'false';
break;
case 'mapred.queue.' + queueName + '.acl-submit-job':
- customConfig.value = '* *';
+ customConfig.value = '*';
break;
case 'mapred.queue.' + queueName + '.acl-administer-jobs':
- customConfig.value = '* *';
+ customConfig.value = '*';
break;
}
},
@@ -477,7 +477,7 @@ App.config = Em.Object.create({
name: item.property_name,
value: item.property_value,
description: item.property_description,
- filename: item.filename
+ filename: item.filename || item.type
});
}, this);
serviceComponents[data.items[0].StackConfigurations.service_name] = properties;
Modified: incubator/ambari/trunk/ambari-web/app/views/common/configs/services_config.js
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/views/common/configs/services_config.js?rev=1467022&r1=1467021&r2=1467022&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/views/common/configs/services_config.js (original)
+++ incubator/ambari/trunk/ambari-web/app/views/common/configs/services_config.js Thu Apr 11 18:09:14 2013
@@ -994,6 +994,7 @@ App.ServiceConfigCapacityScheduler = App
* @return {*}
*/
insertExtraConfigs: function(content){
+ var that = this;
var admin = content.configs.findProperty('name', 'mapred.queue.' + content.name + '.acl-administer-jobs').get('value');
var submit = content.configs.findProperty('name', 'mapred.queue.' + content.name + '.acl-submit-job').get('value');
admin = (admin) ? admin.split(' ') : [''];
@@ -1044,7 +1045,8 @@ App.ServiceConfigCapacityScheduler = App
});
newField.validate();
content.configs.unshift(newField);
- newField = App.ServiceConfigProperty.create({
+
+ var submitUser = App.ServiceConfigProperty.create({
name: 'mapred.queue.' + content.name + '.acl-submit-job',
displayName: Em.I18n.t('common.users'),
value: submit[0],
@@ -1055,22 +1057,8 @@ App.ServiceConfigCapacityScheduler = App
displayType: "UNIXList",
index: 3
});
- newField.validate();
- content.configs.push(newField);
- newField = App.ServiceConfigProperty.create({
- name: 'mapred.queue.' + content.name + '.acl-administer-jobs',
- displayName: Em.I18n.t('services.mapReduce.config.queue.adminUsers'),
- description: Em.I18n.t('services.mapReduce.description.queue.admin.user'),
- value: admin[0],
- isRequired: true,
- isVisible: true,
- type: 'USERS',
- displayType: "UNIXList",
- index: 5
- });
- newField.validate();
- content.configs.push(newField);
- newField = App.ServiceConfigProperty.create({
+
+ var submitGroup = App.ServiceConfigProperty.create({
name: 'mapred.queue.' + content.name + '.acl-submit-job',
displayName: Em.I18n.t('services.mapReduce.config.queue.groups'),
description: Em.I18n.t('services.mapReduce.description.queue.submit.group'),
@@ -1081,9 +1069,20 @@ App.ServiceConfigCapacityScheduler = App
type: 'GROUPS',
index: 4
});
- newField.validate();
- content.configs.push(newField);
- newField = App.ServiceConfigProperty.create({
+
+ var adminUser = App.ServiceConfigProperty.create({
+ name: 'mapred.queue.' + content.name + '.acl-administer-jobs',
+ displayName: Em.I18n.t('services.mapReduce.config.queue.adminUsers'),
+ description: Em.I18n.t('services.mapReduce.description.queue.admin.user'),
+ value: admin[0],
+ isRequired: true,
+ isVisible: true,
+ type: 'USERS',
+ displayType: "UNIXList",
+ index: 5
+ });
+
+ var adminGroup = App.ServiceConfigProperty.create({
name: 'mapred.queue.' + content.name + '.acl-administer-jobs',
displayName: Em.I18n.t('services.mapReduce.config.queue.adminGroups'),
value: admin[1],
@@ -1094,10 +1093,42 @@ App.ServiceConfigCapacityScheduler = App
type: 'GROUPS',
index: 6
});
- newField.validate();
- content.configs.push(newField);
+
+ submitUser.reopen({
+ validate: function(){
+ that.userGroupValidation(this, submitGroup);
+ }.observes('value')
+ });
+ submitGroup.reopen({
+ validate: function(){
+ that.userGroupValidation(this, submitUser);
+ }.observes('value')
+ });
+ adminUser.reopen({
+ validate: function(){
+ that.userGroupValidation(this, adminGroup);
+ }.observes('value')
+ });
+ adminGroup.reopen({
+ validate: function(){
+ that.userGroupValidation(this, adminUser);
+ }.observes('value')
+ });
+
+ submitUser.validate();
+ adminUser.validate();
+ content.configs.push(submitUser);
+ content.configs.push(submitGroup);
+ content.configs.push(adminUser);
+ content.configs.push(adminGroup);
+
return content;
},
+ /**
+ * sort properties of queue by index
+ * @param configs
+ * @return {Array}
+ */
sortQueueProperties: function(configs){
var sortedConfigs = [];
var skippedConfigs = [];
@@ -1109,6 +1140,27 @@ App.ServiceConfigCapacityScheduler = App
}
});
return sortedConfigs.concat(skippedConfigs);
+ },
+ /**
+ * Validate by follow rules:
+ * Users can be blank. If this is blank, Groups must not be blank.
+ * Groups can be blank. If this is blank, Users must not be blank.
+ * @param context
+ * @param boundConfig
+ */
+ userGroupValidation: function(context, boundConfig){
+ if(context.get('value') == ''){
+ if(boundConfig.get('value') == ''){
+ context._super();
+ } else {
+ boundConfig.validate();
+ }
+ } else {
+ if(boundConfig.get('value') == ''){
+ boundConfig.set('errorMessage', '');
+ }
+ context._super();
+ }
}
})
}