Explorar o código

AMBARI-4366 Manage ZooKeeper configs with zoo.cfg. (atkach)

atkach %!s(int64=11) %!d(string=hai) anos
pai
achega
fcfbf01aa6

+ 3 - 1
ambari-web/app/controllers/main/service/info/configs.js

@@ -1289,6 +1289,7 @@ App.MainServiceInfoConfigsController = Em.Controller.extend({
     this.setNewTagNames(serviceConfigTags);
     var siteNameToServerDataMap = {};
     var configController = App.router.get('configurationController');
+    var filenameExceptions = App.config.get('filenameExceptions');
 
     serviceConfigTags.forEach(function (_serviceTags) {
       if (_serviceTags.siteName === 'global') {
@@ -1316,7 +1317,8 @@ App.MainServiceInfoConfigsController = Em.Controller.extend({
           }
         }
       } else {
-        var siteConfigs = this.get('uiConfigs').filterProperty('filename', _serviceTags.siteName + '.xml');
+        var filename = (filenameExceptions.contains(_serviceTags.siteName)) ? _serviceTags.siteName : _serviceTags.siteName + '.xml';
+        var siteConfigs = this.get('uiConfigs').filterProperty('filename', filename);
         var serverConfigs = this.createSiteObj(_serviceTags.siteName, _serviceTags.newTagName, siteConfigs);
         siteNameToServerDataMap[_serviceTags.siteName] = serverConfigs;
         var loadedProperties = configController.getConfigsByTags([{siteName: _serviceTags.siteName, tagName: this.loadedClusterSiteToTagMap[_serviceTags.siteName]}]);

+ 11 - 0
ambari-web/app/controllers/wizard/step8_controller.js

@@ -1506,6 +1506,7 @@ App.WizardStep8Controller = Em.Controller.extend({
       this.get('serviceConfigTags').pushObject(this.createStormSiteObj('STORM'));
     }
     if (selectedServices.someProperty('serviceName', 'ZOOKEEPER')) {
+      this.get('serviceConfigTags').pushObject(this.createZooCfgObj());
       this.get('serviceConfigTags').pushObject(this.createLog4jObj('ZOOKEEPER'));
     }
 
@@ -1832,6 +1833,16 @@ App.WizardStep8Controller = Em.Controller.extend({
     return {type: 'webhcat-site', tag: 'version1', properties: webHCatProperties};
   },
 
+  createZooCfgObj: function () {
+    var configs = this.get('configs').filterProperty('filename', 'zoo.cfg');
+    var csProperties = {};
+    configs.forEach(function (_configProperty) {
+      csProperties[_configProperty.name] = App.config.escapeXMLCharacters(_configProperty.value);
+      this._recordHostOverrideFromObj(_configProperty, 'zoo.cfg', 'version1', this);
+    }, this);
+    return {type: 'zoo.cfg', tag: 'version1', properties: csProperties};
+  },
+
   createStormSiteObj: function (s) {
     var configs = this.get('configs').filterProperty('filename', 'storm-site.xml');
     var stormProperties = {};

+ 3 - 2
ambari-web/app/data/service_configs.js

@@ -156,9 +156,10 @@ module.exports = [
     configCategories: [
       App.ServiceConfigCategory.create({ name: 'ZooKeeper Server', displayName : 'ZooKeeper Server'}),
       App.ServiceConfigCategory.create({ name: 'Advanced', displayName : 'Advanced'}),
-      App.ServiceConfigCategory.create({ name: 'AdvancedZooLog4j', displayName : 'Custom zoo-log4j.xml', siteFileName: 'zoo-log4j.xml', canAddProperty: true})
+      App.ServiceConfigCategory.create({ name: 'AdvancedZooLog4j', displayName : 'Custom zoo-log4j.xml', siteFileName: 'zoo-log4j.xml', canAddProperty: true}),
+      App.ServiceConfigCategory.create({ name: 'AdvancedZooCfg', displayName : 'Custom zoo.cfg', siteFileName: 'zoo.cfg', canAddProperty: true})
     ],
-    sites: ['global', 'zoo-log4j'],
+    sites: ['global', 'zoo-log4j', 'zoo.cfg'],
     configs: []
   },
 

+ 7 - 1
ambari-web/app/utils/config.js

@@ -45,6 +45,11 @@ App.config = Em.Object.create({
   
   CONFIG_GROUP_NAME_MAX_LENGTH: 40,
 
+  /**
+   * filename exceptions used to support substandard sitenames which don't have "xml" extension
+   */
+  filenameExceptions: ['zoo.cfg'],
+
   /**
    * Since values end up in XML files (core-sit.xml, etc.), certain
    * XML sensitive characters should be escaped. If not we will have
@@ -230,6 +235,7 @@ App.config = Em.Object.create({
     var globalConfigs = [];
     var preDefinedConfigs = this.get('preDefinedGlobalProperties').concat(this.get('preDefinedSiteProperties'));
     var mappingConfigs = [];
+    var filenameExceptions = this.get('filenameExceptions');
     tags.forEach(function (_tag) {
       var isAdvanced = null;
       var properties = configGroups.filter(function (serviceConfigProperties) {
@@ -243,7 +249,7 @@ App.config = Em.Object.create({
           name: index,
           value: properties[index],
           defaultValue: properties[index],
-          filename: _tag.siteName + ".xml",
+          filename: (filenameExceptions.contains(_tag.siteName)) ? _tag.siteName : _tag.siteName + ".xml",
           isUserProperty: false,
           isOverridable: true,
           serviceName: serviceName,