blob: 449b83015dbbce633f556575dd59cf0b8c66b03c [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with this
* work for additional information regarding copyright ownership. The ASF
* licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
var App = require('app');
require('utils/configs/modification_handlers/modification_handler');
module.exports = App.ServiceConfigModificationHandler.create({
serviceId : 'MISC',
getDependentConfigChanges : function(changedConfig, selectedServices, allConfigs, securityEnabled) {
var affectedProperties = [];
var newValue = changedConfig.get("value");
var curConfigs = "";
var affectedPropertyName = "dfs.permissions.superusergroup";
if (changedConfig.get("name") == "hdfs_user") {
curConfigs = allConfigs.findProperty("serviceName", "HDFS").get("configs");
if (newValue != curConfigs.findProperty("name", affectedPropertyName).get("value")) {
affectedProperties.push({
serviceName : "HDFS",
sourceServiceName : "MISC",
propertyName : affectedPropertyName,
propertyDisplayName : affectedPropertyName,
newValue : newValue,
curValue : curConfigs.findProperty("name", affectedPropertyName).get("value"),
changedPropertyName : "hdfs_user",
remove : false,
filename : 'hdfs-site.xml'
});
}
if ($.trim(newValue) != $.trim(curConfigs.findProperty("name", "dfs.cluster.administrators").get("value"))) {
affectedProperties.push({
serviceName : "HDFS",
sourceServiceName : "MISC",
propertyName : "dfs.cluster.administrators",
propertyDisplayName : "dfs.cluster.administrators",
newValue : " " + $.trim(newValue),
curValue : curConfigs.findProperty("name", "dfs.cluster.administrators").get("value"),
changedPropertyName : "hdfs_user",
remove : false,
filename : 'hdfs-site.xml'
});
}
} else if (changedConfig.get("name") == "yarn_user") {
curConfigs = allConfigs.findProperty('serviceName', 'YARN').get('configs');
var currentUsers,
currentGroups;
var initialUser = changedConfig.get('initialValue');
var newUser = newValue;
var currentAclValue = curConfigs.findProperty("name", "yarn.admin.acl").get("value");
var currentAclValueSplits = $.trim(currentAclValue).split(/\s+/).filter(function(i) { return !Em.isEmpty(i); });
if (currentAclValueSplits.length == 2) {
currentUsers = currentAclValueSplits[0];
currentGroups = currentAclValueSplits[1];
} else {
currentUsers = currentAclValueSplits.length > 0 ? currentAclValueSplits.shift() : '';
currentGroups = currentAclValueSplits.join(" ");
}
var currentUserList = currentUsers.split(',').filter(function(i) { return !Em.isEmpty(i); });
if (!currentUserList.contains(newUser)) {
var currentUserIndex = currentUserList.indexOf(initialUser);
if (currentUserIndex > -1) {
currentUserList.splice(currentUserIndex, 1);
}
if (!currentUserList.contains(newUser)) {
currentUserList.push(newUser);
}
var newAclValue = $.trim(currentUserList.join(',') + ' ' + currentGroups);
if (currentAclValue != newAclValue) {
affectedProperties.push({
serviceName : "YARN",
sourceServiceName : "MISC",
propertyName : "yarn.admin.acl",
propertyDisplayName : "yarn.admin.acl",
newValue : newAclValue,
curValue : currentAclValue,
changedPropertyName : "yarn_user",
remove : false,
filename : 'yarn-site.xml'
});
}
}
} else if (changedConfig.get("name") == "user_group") {
if (!selectedServices.contains('YARN')) {
return [];
}
if (selectedServices.contains("MAPREDUCE2")) {
curConfigs = allConfigs.findProperty("serviceName", "MAPREDUCE2").get("configs");
if ($.trim(newValue) != $.trim(curConfigs.findProperty("name", "mapreduce.cluster.administrators").get("value"))) {
affectedProperties.push({
serviceName : "MAPREDUCE2",
sourceServiceName : "MISC",
propertyName : "mapreduce.cluster.administrators",
propertyDisplayName : "mapreduce.cluster.administrators",
newValue : " " + $.trim(newValue),
curValue : curConfigs.findProperty("name", "mapreduce.cluster.administrators").get("value"),
changedPropertyName : "user_group",
filename : 'mapred-site.xml'
});
}
}
if (selectedServices.contains("YARN")) {
curConfigs = allConfigs.findProperty("serviceName", "YARN").get("configs");
if (newValue != curConfigs.findProperty("name", "yarn.nodemanager.linux-container-executor.group").get("value")) {
affectedProperties.push({
serviceName : "YARN",
sourceServiceName : "MISC",
propertyName : "yarn.nodemanager.linux-container-executor.group",
propertyDisplayName : "yarn.nodemanager.linux-container-executor.group",
newValue : newValue,
curValue : curConfigs.findProperty("name", "yarn.nodemanager.linux-container-executor.group").get("value"),
changedPropertyName : "user_group",
filename : 'yarn-site.xml'
})
}
}
}
return affectedProperties;
}
});