Explorar o código

AMBARI-11216 Refactor service-config 'defaultValue' property into 'savedValue' and 'recommendedValue'. (ababiichuk)

aBabiichuk %!s(int64=10) %!d(string=hai) anos
pai
achega
07616603c4
Modificáronse 61 ficheiros con 984 adicións e 1558 borrados
  1. 1 1
      ambari-web/app/controllers/main/admin/highAvailability/nameNode/step3_controller.js
  2. 7 7
      ambari-web/app/controllers/main/admin/highAvailability/resourceManager/step3_controller.js
  3. 1 1
      ambari-web/app/controllers/main/admin/kerberos.js
  4. 5 5
      ambari-web/app/controllers/main/admin/kerberos/step4_controller.js
  5. 9 5
      ambari-web/app/controllers/main/service/info/configs.js
  6. 4 9
      ambari-web/app/controllers/wizard.js
  7. 14 19
      ambari-web/app/controllers/wizard/step7_controller.js
  8. 0 119
      ambari-web/app/controllers/wizard/step8_controller.js
  9. 113 111
      ambari-web/app/data/BIGTOP/site_properties.js
  10. 33 33
      ambari-web/app/data/HDP2.2/site_properties.js
  11. 30 30
      ambari-web/app/data/HDP2.3/site_properties.js
  12. 0 127
      ambari-web/app/data/HDP2/custom_configs.js
  13. 17 17
      ambari-web/app/data/HDP2/ha_properties.js
  14. 13 13
      ambari-web/app/data/HDP2/rm_ha_properties.js
  15. 88 88
      ambari-web/app/data/HDP2/secure_properties.js
  16. 113 111
      ambari-web/app/data/HDP2/site_properties.js
  17. 113 111
      ambari-web/app/data/PHD/site_properties.js
  18. 2 2
      ambari-web/app/mappers/configs/config_versions_mapper.js
  19. 3 3
      ambari-web/app/mappers/configs/stack_config_properties_mapper.js
  20. 1 0
      ambari-web/app/messages.js
  21. 1 117
      ambari-web/app/mixins/common/configs/configs_saver.js
  22. 63 19
      ambari-web/app/mixins/common/configs/enhanced_configs.js
  23. 15 8
      ambari-web/app/models/configs/config_property.js
  24. 1 2
      ambari-web/app/models/configs/objects/service_config.js
  25. 65 19
      ambari-web/app/models/configs/objects/service_config_property.js
  26. 4 4
      ambari-web/app/models/configs/stack_config_property.js
  27. 7 1
      ambari-web/app/templates/common/modal_popups/dependent_configs_list.hbs
  28. 40 52
      ambari-web/app/utils/config.js
  29. 33 33
      ambari-web/app/utils/configs/config_property_helper.js
  30. 0 1
      ambari-web/app/views.js
  31. 10 9
      ambari-web/app/views/common/configs/service_configs_by_category_view.js
  32. 0 7
      ambari-web/app/views/common/configs/widgets/checkbox_config_widget_view.js
  33. 1 2
      ambari-web/app/views/common/configs/widgets/combo_config_widget_view.js
  34. 23 10
      ambari-web/app/views/common/configs/widgets/config_widget_view.js
  35. 1 0
      ambari-web/app/views/common/configs/widgets/directory_config_widget_view.js
  36. 1 1
      ambari-web/app/views/common/configs/widgets/list_config_widget_view.js
  37. 1 1
      ambari-web/app/views/common/configs/widgets/plain_config_text_field.js
  38. 16 8
      ambari-web/app/views/common/configs/widgets/slider_config_widget_view.js
  39. 5 5
      ambari-web/app/views/common/configs/widgets/time_interval_spinner_view.js
  40. 1 0
      ambari-web/app/views/common/configs/widgets/toggle_config_widget_view.js
  41. 8 8
      ambari-web/app/views/common/controls_view.js
  42. 0 54
      ambari-web/app/views/common/modal_popups/prompt_popup.js
  43. 7 7
      ambari-web/test/controllers/main/admin/highAvailability/resourceManager/step3_controller_test.js
  44. 2 2
      ambari-web/test/controllers/main/admin/kerberos/step4_controller_test.js
  45. 0 132
      ambari-web/test/controllers/main/service/info/config_test.js
  46. 32 32
      ambari-web/test/controllers/wizard/step7_test.js
  47. 1 133
      ambari-web/test/controllers/wizard/step8_test.js
  48. 1 1
      ambari-web/test/controllers/wizard_test.js
  49. 3 3
      ambari-web/test/data/HDP2/site_properties_test.js
  50. 2 2
      ambari-web/test/mappers/configs/config_versions_mapper_test.js
  51. 2 2
      ambari-web/test/mappers/configs/stack_config_properties_mapper_test.js
  52. 8 8
      ambari-web/test/mock_data_setup/configs_mock_data.js
  53. 1 1
      ambari-web/test/models/configs/config_property_test.js
  54. 4 4
      ambari-web/test/models/configs/objects/service_config_property_test.js
  55. 20 20
      ambari-web/test/utils/config_test.js
  56. 23 23
      ambari-web/test/utils/configs/config_property_helper_test.js
  57. 4 4
      ambari-web/test/views/common/configs/service_configs_by_category_view_test.js
  58. 2 2
      ambari-web/test/views/common/configs/widgets/list_config_widget_view_test.js
  59. 3 3
      ambari-web/test/views/common/configs/widgets/slider_config_widget_view_test.js
  60. 1 1
      ambari-web/test/views/common/configs/widgets/toggle_config_widget_view_test.js
  61. 5 5
      ambari-web/test/views/common/controls_view_test.js

+ 1 - 1
ambari-web/app/controllers/main/admin/highAvailability/nameNode/step3_controller.js

@@ -164,7 +164,7 @@ App.HighAvailabilityWizardStep3Controller = Em.Controller.extend({
 
   setConfigInitialValue: function(config,value) {
     config.value = value;
-    config.defaultValue = value;
+    config.recommendedValue = value;
   },
 
   renderServiceConfigs: function (_serviceConfig) {

+ 7 - 7
ambari-web/app/controllers/main/admin/highAvailability/resourceManager/step3_controller.js

@@ -123,25 +123,25 @@ App.RMHighAvailabilityWizardStep3Controller = Em.Controller.extend({
         return item.get('hostName') + ':' + zkPort;
       }).join(',');
 
-    configProperties.findProperty('name', 'yarn.resourcemanager.hostname.rm1').set('value', currentRMHost).set('defaultValue', currentRMHost);
-    configProperties.findProperty('name', 'yarn.resourcemanager.hostname.rm2').set('value', additionalRMHost).set('defaultValue', additionalRMHost);
-    configProperties.findProperty('name', 'yarn.resourcemanager.zk-address').set('value', zooKeeperHostsWithPort).set('defaultValue', zooKeeperHostsWithPort);
+    configProperties.findProperty('name', 'yarn.resourcemanager.hostname.rm1').set('value', currentRMHost).set('recommendedValue', currentRMHost);
+    configProperties.findProperty('name', 'yarn.resourcemanager.hostname.rm2').set('value', additionalRMHost).set('recommendedValue', additionalRMHost);
+    configProperties.findProperty('name', 'yarn.resourcemanager.zk-address').set('value', zooKeeperHostsWithPort).set('recommendedValue', zooKeeperHostsWithPort);
 
     configProperties.findProperty('name', 'yarn.resourcemanager.webapp.address.rm1')
       .set('value', currentRMHost + webAddressPort)
-      .set('defaultValue', currentRMHost + webAddressPort);
+      .set('recommendedValue', currentRMHost + webAddressPort);
 
     configProperties.findProperty('name', 'yarn.resourcemanager.webapp.address.rm2')
       .set('value', additionalRMHost + webAddressPort)
-      .set('defaultValue', additionalRMHost + webAddressPort);
+      .set('recommendedValue', additionalRMHost + webAddressPort);
 
     configProperties.findProperty('name', 'yarn.resourcemanager.webapp.https.address.rm1')
       .set('value', currentRMHost + httpsWebAddressPort)
-      .set('defaultValue', currentRMHost + httpsWebAddressPort);
+      .set('recommendedValue', currentRMHost + httpsWebAddressPort);
 
     configProperties.findProperty('name', 'yarn.resourcemanager.webapp.https.address.rm2')
       .set('value', additionalRMHost + httpsWebAddressPort)
-      .set('defaultValue', additionalRMHost + httpsWebAddressPort);
+      .set('recommendedValue', additionalRMHost + httpsWebAddressPort);
   },
 
   /**

+ 1 - 1
ambari-web/app/controllers/main/admin/kerberos.js

@@ -326,7 +326,7 @@ App.MainAdminKerberosController = App.KerberosWizardStep4Controller.extend({
       if (property.get('observesValueFrom')) {
         var observedValue = allConfigs.findProperty('name', property.get('observesValueFrom')).get('value');
         property.set('value', observedValue);
-        property.set('defaultValue', observedValue);
+        property.set('recommendedValue', observedValue);
       }
       if (property.get('serviceName') == 'Cluster') {
         property.set('category', 'Global');

+ 5 - 5
ambari-web/app/controllers/main/admin/kerberos/step4_controller.js

@@ -143,7 +143,7 @@ App.KerberosWizardStep4Controller = App.WizardStep7Controller.extend(App.AddSecu
       this.get('adminPropertyNames').forEach(function(item) {
         var property = storedServiceConfigs.filterProperty('filename', 'krb5-conf.xml').findProperty('name', item.name);
         if (!!property) {
-          var _prop = App.ServiceConfigProperty.create($.extend({}, property, { name: item.name, value: '', defaultValue: '', serviceName: 'Cluster', displayName: item.displayName}));
+          var _prop = App.ServiceConfigProperty.create($.extend({}, property, { name: item.name, value: '', recommendedValue: '', serviceName: 'Cluster', displayName: item.displayName}));
           _prop.validate();
           adminProps.push(_prop);
         }
@@ -156,7 +156,7 @@ App.KerberosWizardStep4Controller = App.WizardStep7Controller.extend(App.AddSecu
     if (this.get('wizardController.name') != 'addServiceController') {
       var realmValue = storedServiceConfigs.findProperty('name', 'realm').value;
       configProperties.findProperty('name', 'realm').set('value', realmValue);
-      configProperties.findProperty('name', 'realm').set('defaultValue', realmValue);
+      configProperties.findProperty('name', 'realm').set('recommendedValue', realmValue);
     }
 
     configProperties.setEach('isSecureConfig', false);
@@ -167,7 +167,7 @@ App.KerberosWizardStep4Controller = App.WizardStep7Controller.extend(App.AddSecu
       if (property.get('observesValueFrom')) {
         var observedValue = allConfigs.findProperty('name', property.get('observesValueFrom')).get('value');
         property.set('value', observedValue);
-        property.set('defaultValue', observedValue);
+        property.set('recommendedValue', observedValue);
       }
       if (property.get('serviceName') == 'Cluster') {
         property.set('category', 'Global');
@@ -211,7 +211,7 @@ App.KerberosWizardStep4Controller = App.WizardStep7Controller.extend(App.AddSecu
         }
         var configValue =  config.value.replace(/thrift.+[0-9]{2,},/i, hiveMSHostNames.join('\\,') + ",");
         config.set('value', configValue);
-        config.set('defaultValue', configValue);
+        config.set('recommendedValue', configValue);
       }
     }
   },
@@ -228,7 +228,7 @@ App.KerberosWizardStep4Controller = App.WizardStep7Controller.extend(App.AddSecu
       if (config.get('observesValueFrom') == configProperty.get('name')) {
         Em.run.once(self, function() {
           config.set('value', configProperty.get('value'));
-          config.set('defaultValue', configProperty.get('value'));
+          config.set('recommendedValue', configProperty.get('value'));
         });
       }
     });

+ 9 - 5
ambari-web/app/controllers/main/service/info/configs.js

@@ -442,13 +442,13 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
           name: advanced.get('name'),
           displayName: advanced.get('displayName'),
           value: advanced.get('value'),
-          defaultValue: advanced.get('defaultValue'),
+          savedValue: null,
           filename: advanced.get('fileName'),
           isUserProperty: false,
           isNotSaved: true,
           recommendedValue: advanced.get('value'),
           isFinal: advanced.get('isFinal'),
-          defaultIsFinal: advanced.get('defaultIsFinal'),
+          recommendedIsFinal: advanced.get('recommendedIsFinal'),
           serviceName: advanced.get('serviceName'),
           supportsFinal: advanced.get('supportsFinal'),
           category: 'Advanced ' + App.config.getConfigTagFromFileName(advanced.get('fileName')),
@@ -1029,8 +1029,11 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
   createNewSCP: function (override, _serviceConfigProperty, serviceConfigProperty, defaultGroupSelected) {
     var newSCP = App.ServiceConfigProperty.create(_serviceConfigProperty, {
       value: Em.get(override, 'value'),
-      defaultValue: Em.get(override, 'value'),
+      savedValue: Em.get(override, 'value'),
+      recommendedValue: serviceConfigProperty.get('recommendedValue'),
       isFinal: Em.get(override, 'isFinal'),
+      savedIsFinal: Em.get(override, 'isFinal'),
+      recommendedIsFinal: serviceConfigProperty.get('recommendedIsFinal'),
       group: Em.get(override, 'group'),
       supportsFinal: serviceConfigProperty.get('supportsFinal'),
       isOriginalSCP: false,
@@ -1210,7 +1213,7 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
     var serviceConfigs = this.get('serviceConfigs').findProperty('serviceName', serviceName).get('configs');
     var hostConfig = serviceConfigs.findProperty('name', hostProperty);
     if (hostConfig) {
-      hostConfig.defaultValue = this.getMasterComponentHostValue(componentName, multiple);
+      hostConfig.recommendedValue = this.getMasterComponentHostValue(componentName, multiple);
       configs.push(hostConfig);
     }
   },
@@ -1347,7 +1350,8 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
       // create new override with new value
       var newSCP = App.ServiceConfigProperty.create(serviceConfigProperty, {
         value: value || '',
-        defaultValue: serviceConfigProperty.get('defaultValue'),
+        recommendedValue: serviceConfigProperty.get('recommendedValue'),
+        recommendedIsFinal: serviceConfigProperty.get('recommendedIsFinal'),
         isOriginalSCP: false,
         parentSCP: serviceConfigProperty,
         isEditable: true,

+ 4 - 9
ambari-web/app/controllers/wizard.js

@@ -892,13 +892,14 @@ App.WizardController = Em.Controller.extend(App.LocalStorage, App.ThemesMappingM
           name: _configProperties.get('name'),
           displayName: _configProperties.get('displayName'),
           value: _configProperties.get('value'),
-          defaultValue: _configProperties.get('defaultValue'),
+          savedValue: _configProperties.get('savedValue'),
+          recommendedValue: _configProperties.get('recommendedValue'),
           description: _configProperties.get('description'),
           serviceName: _configProperties.get('serviceName'),
           domain: _configProperties.get('domain'),
           isVisible: _configProperties.get('isVisible'),
           isFinal: _configProperties.get('isFinal'),
-          defaultIsFinal: _configProperties.get('isFinal'),
+          recommendedIsFinal: _configProperties.get('isFinal'),
           supportsFinal: _configProperties.get('supportsFinal'),
           filename: _configProperties.get('filename'),
           displayType: _configProperties.get('displayType'),
@@ -915,7 +916,7 @@ App.WizardController = Em.Controller.extend(App.LocalStorage, App.ThemesMappingM
       if (stepController.get('installedServiceNames') && stepController.get('installedServiceNames').contains(_content.get('serviceName'))) {
         // get only modified configs
         var configs = _content.get('configs').filter(function (config) {
-          if (config.get('isNotDefaultValue') || (config.get('defaultValue') === null)) {
+          if (config.get('isNotDefaultValue') || (config.get('savedValue') === null)) {
             var notAllowed = ['masterHost', 'masterHosts', 'slaveHosts', 'slaveHost'];
             return !notAllowed.contains(config.get('displayType')) && !!config.filename;
           }
@@ -925,12 +926,6 @@ App.WizardController = Em.Controller.extend(App.LocalStorage, App.ThemesMappingM
         if (configs.length) {
           fileNamesToUpdate = fileNamesToUpdate.concat(configs.mapProperty('filename').uniq());
         }
-        // watch for properties that are not modified but have to be updated
-        if (_content.get('configs').someProperty('forceUpdate')) {
-          // check for already added modified properties
-          var forceUpdatedFileNames = _content.get('configs').filterProperty('forceUpdate', true).mapProperty('filename').uniq();
-          fileNamesToUpdate = fileNamesToUpdate.concat(forceUpdatedFileNames).uniq();
-        }
       }
     }, this);
     this.setDBProperty('serviceConfigProperties', serviceConfigProperties);

+ 14 - 19
ambari-web/app/controllers/wizard/step7_controller.js

@@ -559,9 +559,8 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E
         if (!Em.isNone(config.value)) {
           var replaceStr = config.value.match(/.jar=host[^,]+/)[0];
           var replaceWith = replaceStr.slice(0, replaceStr.lastIndexOf('=') - replaceStr.length + 1) + gangliaServerHost;
-          config.value = config.defaultValue = config.value.replace(replaceStr, replaceWith);
+          config.value = config.recommendedValue = config.value.replace(replaceStr, replaceWith);
         }
-        config.forceUpdate = true;
       }, this);
     }
   },
@@ -578,9 +577,8 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E
     if (cfgToChange) {
       var res = this.get('allSelectedServiceNames').contains('SLIDER');
       if (Em.get(cfgToChange, 'value') !== res) {
-        Em.set(cfgToChange, 'defaultValue', res);
+        Em.set(cfgToChange, 'recommendedValue', res);
         Em.set(cfgToChange, 'value', res);
-        Em.set(cfgToChange, 'forceUpdate', true);
       }
     }
   },
@@ -625,7 +623,7 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E
 
   applyServicesConfigs: function (configs, storedConfigs) {
     if (this.get('allSelectedServiceNames').contains('YARN')) {
-      configs = App.config.fileConfigsIntoTextarea(configs, 'capacity-scheduler.xml');
+      configs = App.config.fileConfigsIntoTextarea(configs, 'capacity-scheduler.xml', []);
     }
     var dependedServices = ["STORM", "YARN"];
     dependedServices.forEach(function (serviceName) {
@@ -635,14 +633,13 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E
     }, this);
     //STEP 6: Distribute configs by service and wrap each one in App.ServiceConfigProperty (configs -> serviceConfigs)
     var self = this;
+    if (self.get('securityEnabled') && self.get('wizardController.name') == 'addServiceController') {
+      self.addKerberosDescriptorConfigs(configs, self.get('wizardController.kerberosDescriptorConfigs') || []);
+    }
+    self.setStepConfigs(configs, storedConfigs);
     this.loadServerSideConfigsRecommendations().always(function () {
       self.set('isRecommendedLoaded', true);
       // format descriptor configs
-      if (self.get('securityEnabled') && self.get('wizardController.name') == 'addServiceController') {
-        self.addKerberosDescriptorConfigs(configs, self.get('wizardController.kerberosDescriptorConfigs') || []);
-      }
-      self.setStepConfigs(configs, storedConfigs);
-
       var serviceConfigProperties = (self.get('content.serviceConfigProperties') || []).mapProperty('name');
       var recommendedToDelete = self.get('_dependentConfigValues').filterProperty('toDelete');
       recommendedToDelete.forEach(function (c) {
@@ -653,7 +650,6 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E
       });
 
       self.updateDependentConfigs();
-      self.clearDependentConfigs();
       self.checkHostOverrideInstaller();
       self.activateSpecialConfigs();
       self.selectProperService();
@@ -740,7 +736,7 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E
       masterComponentHosts: this.get('wizardController.content.masterComponentHosts'),
       slaveComponentHosts: this.get('wizardController.content.slaveComponentHosts')
     };
-    var serviceConfigs = App.config.renderConfigs(configs, storedConfigs, this.get('allSelectedServiceNames'), this.get('installedServiceNames'), localDB, this.get('recommendationsConfigs'));
+    var serviceConfigs = App.config.renderConfigs(configs, storedConfigs, this.get('allSelectedServiceNames'), this.get('installedServiceNames'), localDB);
     if (this.get('wizardController.name') === 'addServiceController') {
       serviceConfigs.setEach('showConfig', true);
       serviceConfigs.setEach('selected', false);
@@ -769,7 +765,7 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E
 
           hRootDir.setProperties({
             'value':  valueToChange,
-            'defaultValue' : valueToChange
+            'recommendedValue' : valueToChange
           });
         }
       }
@@ -858,23 +854,22 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E
    */
   setInstalledServiceConfigs: function (serviceConfigTags, configs, configsByTags, installedServiceNames) {
     var configsMap = {};
-    var configTypeMap = {};
     var configMixin = App.get('config');
+    var nonServiceTab = require('data/service_configs');
     var self = this;
 
     configsByTags.forEach(function (configSite) {
       configsMap[configSite.type] = configSite.properties || {};
     });
     configs.forEach(function (_config) {
-      var nonServiceTab = require('data/service_configs');
       var type = _config.filename ? App.config.getConfigTagFromFileName(_config.filename) : null;
       var mappedConfigValue = type && configsMap[type] ? configsMap[type][_config.name] : null;
       if (!Em.isNone(mappedConfigValue) && ((installedServiceNames && installedServiceNames.contains(_config.serviceName) || nonServiceTab.someProperty('serviceName', _config.serviceName)))) {
         // prevent overriding already edited properties
-        if (_config.defaultValue != mappedConfigValue) {
+        if (_config.savedValue != mappedConfigValue) {
           _config.value = mappedConfigValue;
         }
-        _config.defaultValue = mappedConfigValue;
+        _config.savedValue = mappedConfigValue;
         _config.hasInitialValue = true;
         App.config.handleSpecialProperties(_config);
         delete configsMap[type][_config.name];
@@ -890,7 +885,7 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E
           name: propertyName,
           serviceName: configMixin.getServiceNameByConfigType(filename),
           value: configsMap[filename][propertyName],
-          defaultValue: configsMap[filename][propertyName],
+          savedValue: configsMap[filename][propertyName],
           filename: configMixin.get('filenameExceptions').contains(filename) ? filename : filename + '.xml',
           category: 'Advanced',
           hasInitialValue: true,
@@ -932,7 +927,7 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E
       var propertyName = propertyPrefix + '_existing_' + dbPrefix + '_host';
       var existingDBConfig = configs.findProperty('name', propertyName);
       if (!existingDBConfig.value)
-        existingDBConfig.value = existingDBConfig.defaultValue = configs.findProperty('name', dbHostName).value;
+        existingDBConfig.value = existingDBConfig.savedValue = configs.findProperty('name', dbHostName).value;
     }, this);
   },
   /**

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

@@ -380,18 +380,6 @@ App.WizardStep8Controller = Em.Controller.extend(App.AddSecurityConfigs, App.wiz
    */
   loadUiSideConfigs: function (configMapping) {
     var uiConfig = [];
-    var configs = configMapping.filterProperty('foreignKey', null);
-    this.addDynamicProperties(configs);
-    configs.forEach(function (_config) {
-      var valueWithOverrides = this.getGlobConfigValueWithOverrides(_config.templateName, _config.value, _config.name);
-      uiConfig.pushObject({
-        "id": "site property",
-        "name": _config.name,
-        "value": valueWithOverrides.value,
-        "filename": _config.filename,
-        "overrides": valueWithOverrides.overrides
-      });
-    }, this);
     var dependentConfig = $.extend(true, [], configMapping.filterProperty('foreignKey'));
     dependentConfig.forEach(function (_config) {
       App.config.setConfigValue(uiConfig, this.get('content.serviceConfigProperties'), _config);
@@ -406,24 +394,6 @@ App.WizardStep8Controller = Em.Controller.extend(App.AddSecurityConfigs, App.wiz
     return uiConfig;
   },
 
-  /**
-   * Add dynamic properties to configs
-   * @param {Array} configs
-   * @method addDynamicProperties
-   */
-  addDynamicProperties: function (configs) {
-    var templetonHiveProperty = this.get('content.serviceConfigProperties').someProperty('name', 'templeton.hive.properties');
-    if (!templetonHiveProperty) {
-      configs.pushObject({
-        "name": "templeton.hive.properties",
-        "templateName": ["hive.metastore.uris"],
-        "foreignKey": null,
-        "value": "hive.metastore.local=false,hive.metastore.uris=<templateName[0]>,hive.metastore.sasl.enabled=yes,hive.metastore.execute.setugi=true,hive.metastore.warehouse.dir=/apps/hive/warehouse",
-        "filename": "webhcat-site.xml"
-      });
-    }
-  },
-
   /**
    * Format <code>content.hosts</code> from Object to Array
    * @returns {Array}
@@ -443,95 +413,6 @@ App.WizardStep8Controller = Em.Controller.extend(App.AddSecurityConfigs, App.wiz
     return hosts;
   },
 
-  /**
-   * Set all site property that are derived from other puppet-variable
-   * @param {String} templateName
-   * @param {String} expression
-   * @param {String} name
-   * @return {Object}
-   * example: <code>{
-   *   value: '...',
-   *   overrides: [
-   *    {
-   *      value: 'v1',
-   *      hosts: ['h1', 'h2']
-   *    },
-   *    {
-   *      value: 'v2',
-   *      hosts: ['h2', 'h3']
-   *    },
-   *    ....
-   *   ]
-   * }</code>
-   * @method getGlobConfigValueWithOverrides
-   */
-  getGlobConfigValueWithOverrides: function (templateName, expression, name) {
-    var express = expression.match(/<(.*?)>/g);
-    var value = expression;
-    if (express == null) {
-      return { value: expression, overrides: []};      // if site property do not map any global property then return the value
-    }
-    var overrideHostToValue = {};
-    express.forEach(function (_express) {
-      //console.log("The value of template is: " + _express);
-      var index = parseInt(_express.match(/\[([\d]*)(?=\])/)[1]);
-      if (this.get('configs').someProperty('name', templateName[index])) {
-        //console.log("The name of the variable is: " + this.get('content.serviceConfigProperties').findProperty('name', templateName[index]).name);
-        var globalObj = this.get('configs').findProperty('name', templateName[index]);
-        var globValue = globalObj.value;
-        // Hack for templeton.zookeeper.hosts
-        var preReplaceValue = null;
-        if (value !== null) {   // if the property depends on more than one template name like <templateName[0]>/<templateName[1]> then don't proceed to the next if the prior is null or not found in the global configs
-          preReplaceValue = value;
-          value = App.config.replaceConfigValues(name, _express, value, globValue);
-        }
-        if (globalObj.overrides != null) {
-          globalObj.overrides.forEach(function (override) {
-            var ov = override.value;
-            var hostsArray = override.hosts;
-            hostsArray.forEach(function (host) {
-              if (!(host in overrideHostToValue)) {
-                overrideHostToValue[host] = App.config.replaceConfigValues(name, _express, preReplaceValue, ov);
-              } else {
-                overrideHostToValue[host] = App.config.replaceConfigValues(name, _express, overrideHostToValue[host], ov);
-              }
-            }, this);
-          }, this);
-        }
-      } else {
-        /*
-         console.log("ERROR: The variable name is: " + templateName[index]);
-         console.log("ERROR: mapped config from configMapping file has no corresponding variable in " +
-         "content.serviceConfigProperties. Two possible reasons for the error could be: 1) The service is not selected. " +
-         "and/OR 2) The service_config metadata file has no corresponding global var for the site property variable");
-         */
-        value = null;
-      }
-    }, this);
-
-    var valueWithOverrides = {
-      value: value,
-      overrides: []
-    };
-    var overrideValueToHostMap = {};
-    if (!jQuery.isEmptyObject(overrideHostToValue)) {
-      for (var host in overrideHostToValue) {
-        var hostVal = overrideHostToValue[host];
-        if (!(hostVal in overrideValueToHostMap)) {
-          overrideValueToHostMap[hostVal] = [];
-        }
-        overrideValueToHostMap[hostVal].push(host);
-      }
-    }
-    for (var val in overrideValueToHostMap) {
-      valueWithOverrides.overrides.push({
-        value: val,
-        hosts: overrideValueToHostMap[val]
-      });
-    }
-    return valueWithOverrides;
-  },
-
   /**
    * Load all info about cluster to <code>clusterInfo</code> variable
    * @method loadClusterInfo

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 113 - 111
ambari-web/app/data/BIGTOP/site_properties.js


+ 33 - 33
ambari-web/app/data/HDP2.2/site_properties.js

@@ -49,7 +49,7 @@ hdp22properties.push(
     "id": "site property",
     "name": "hive.zookeeper.quorum",
     "displayName": "hive.zookeeper.quorum",
-    "defaultValue": "localhost:2181",
+    "recommendedValue": "localhost:2181",
     "displayType": "multiLine",
     "isRequired": false,
     "isVisible": true,
@@ -61,7 +61,7 @@ hdp22properties.push(
     "id": "site property",
     "name": "hadoop.registry.rm.enabled",
     "displayName": "hadoop.registry.rm.enabled",
-    "defaultValue": "false",
+    "recommendedValue": "false",
     "displayType": "checkbox",
     "isVisible": true,
     "serviceName": "YARN",
@@ -72,7 +72,7 @@ hdp22properties.push(
     "id": "site property",
     "name": "hadoop.registry.zk.quorum",
     "displayName": "hadoop.registry.zk.quorum",
-    "defaultValue": "localhost:2181",
+    "recommendedValue": "localhost:2181",
     "isVisible": true,
     "serviceName": "YARN",
     "filename": "yarn-site.xml",
@@ -158,7 +158,7 @@ hdp22properties.push(
     "id": "site property",
     "name": "policy_user",
     "value": "ambari-qa",
-    "defaultValue": "ambari-qa",
+    "recommendedValue": "ambari-qa",
     "displayName": "policy User for HDFS",
     "filename": "ranger-hdfs-plugin-properties.xml",
     "category": "Advanced ranger-hdfs-plugin-properties",
@@ -207,7 +207,7 @@ hdp22properties.push(
     "id": "site property",
     "name": "policy_user",
     "value": "ambari-qa",
-    "defaultValue": "ambari-qa",
+    "recommendedValue": "ambari-qa",
     "displayName": "policy User for HIVE",
     "filename": "ranger-hive-plugin-properties.xml",
     "category": "Advanced ranger-hive-plugin-properties",
@@ -224,7 +224,7 @@ hdp22properties.push(
   {
     "id": "site property",
     "name": "UPDATE_XAPOLICIES_ON_GRANT_REVOKE",
-    "defaultValue": true,
+    "recommendedValue": true,
     "displayType": "checkbox",
     "displayName": "Should Hive GRANT/REVOKE update XA policies?",
     "filename": "ranger-hive-plugin-properties.xml",
@@ -266,7 +266,7 @@ hdp22properties.push(
     "id": "site property",
     "name": "policy_user",
     "value": "ambari-qa",
-    "defaultValue": "ambari-qa",
+    "recommendedValue": "ambari-qa",
     "displayName": "policy User for HBASE",
     "filename": "ranger-hbase-plugin-properties.xml",
     "category": "Advanced ranger-hbase-plugin-properties",
@@ -283,7 +283,7 @@ hdp22properties.push(
   {
     "id": "site property",
     "name": "UPDATE_XAPOLICIES_ON_GRANT_REVOKE",
-    "defaultValue": true,
+    "recommendedValue": true,
     "displayName": "Should HBase GRANT/REVOKE update XA policies?",
     "displayType": "checkbox",
     "filename": "ranger-hbase-plugin-properties.xml",
@@ -325,7 +325,7 @@ hdp22properties.push(
     "id": "site property",
     "name": "policy_user",
     "value": "ambari-qa",
-    "defaultValue": "ambari-qa",
+    "recommendedValue": "ambari-qa",
     "displayName": "policy User for STORM",
     "filename": "ranger-storm-plugin-properties.xml",
     "category": "Advanced ranger-storm-plugin-properties",
@@ -374,7 +374,7 @@ hdp22properties.push(
     "id": "site property",
     "name": "policy_user",
     "value": "ambari-qa",
-    "defaultValue": "ambari-qa",
+    "recommendedValue": "ambari-qa",
     "displayName": "policy User for KNOX",
     "filename": "ranger-knox-plugin-properties.xml",
     "category": "Advanced ranger-knox-plugin-properties",
@@ -393,7 +393,7 @@ hdp22properties.push(
     "id": "site property",
     "name": "spark.driver.extraJavaOptions",
     "displayName": "spark.driver.extraJavaOptions",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isRequired": false,
     "category": "Advanced spark-defaults",
     "serviceName": "SPARK",
@@ -403,7 +403,7 @@ hdp22properties.push(
     "id": "site property",
     "name": "spark.yarn.am.extraJavaOptions",
     "displayName": "spark.yarn.am.extraJavaOptions",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isRequired": false,
     "category": "Advanced spark-defaults",
     "serviceName": "SPARK",
@@ -414,7 +414,7 @@ hdp22properties.push(
     "id": "site property",
     "name": "ranger_admin_password",
     "displayName": "Ranger Admin user's password for Ambari",
-    "defaultValue": "ambari",
+    "recommendedValue": "ambari",
     "isReconfigurable": true,
     "displayType": "password",
     "isOverridable": false,
@@ -427,7 +427,7 @@ hdp22properties.push(
     "id": "site property",
     "name": "SQL_CONNECTOR_JAR",
     "displayName": "Location of Sql Connector Jar",
-    "defaultValue": "/usr/share/java/mysql-connector-java.jar",
+    "recommendedValue": "/usr/share/java/mysql-connector-java.jar",
     "isReconfigurable": true,
     "displayType": "",
     "isOverridable": false,
@@ -441,7 +441,7 @@ hdp22properties.push(
     "name": "DB_FLAVOR",
     "displayName": "DB FLAVOR",
     "value": "MYSQL",
-    "defaultValue": "MYSQL",
+    "recommendedValue": "MYSQL",
     "isReconfigurable": true,
     "options": [
       {
@@ -463,7 +463,7 @@ hdp22properties.push(
     "id": "site property",
     "name": "SQL_COMMAND_INVOKER",
     "displayName": "SQL Command Invoker",
-    "defaultValue": "mysql",
+    "recommendedValue": "mysql",
     "isReconfigurable": true,
     "displayType": "",
     "isOverridable": false,
@@ -476,7 +476,7 @@ hdp22properties.push(
     "id": "site property",
     "name": "db_host",
     "displayName": "Ranger DB host",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isReconfigurable": true,
     "displayType": "",
     "isOverridable": false,
@@ -489,7 +489,7 @@ hdp22properties.push(
     "id": "site property",
     "name": "db_root_user",
     "displayName": "Ranger DB root user",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isReconfigurable": true,
     "displayType": "",
     "isOverridable": false,
@@ -502,7 +502,7 @@ hdp22properties.push(
     "id": "site property",
     "name": "db_root_password",
     "displayName": "Ranger DB root password",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isReconfigurable": true,
     "displayType": "password",
     "isOverridable": false,
@@ -515,7 +515,7 @@ hdp22properties.push(
     "id": "site property",
     "name": "db_name",
     "displayName": "Ranger DB name",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isReconfigurable": true,
     "displayType": "",
     "isOverridable": false,
@@ -529,7 +529,7 @@ hdp22properties.push(
     "id": "site property",
     "name": "db_user",
     "displayName": "Ranger DB username",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isReconfigurable": true,
     "displayType": "",
     "isOverridable": false,
@@ -542,7 +542,7 @@ hdp22properties.push(
     "id": "site property",
     "name": "db_password",
     "displayName": "Ranger DB password",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isReconfigurable": true,
     "displayType": "password",
     "isOverridable": false,
@@ -555,7 +555,7 @@ hdp22properties.push(
     "id": "site property",
     "name": "audit_db_name",
     "displayName": "Ranger Audit DB name",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isReconfigurable": true,
     "displayType": "",
     "isOverridable": false,
@@ -568,7 +568,7 @@ hdp22properties.push(
     "id": "site property",
     "name": "audit_db_user",
     "displayName": "Ranger Audit DB username",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isReconfigurable": true,
     "displayType": "",
     "isOverridable": false,
@@ -581,7 +581,7 @@ hdp22properties.push(
     "id": "site property",
     "name": "audit_db_password",
     "displayName": "Ranger Audit DB password",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isReconfigurable": true,
     "displayType": "password",
     "isOverridable": false,
@@ -594,7 +594,7 @@ hdp22properties.push(
     "id": "puppet var",
     "name": "policymgr_external_url",
     "displayName": "External URL",
-    "defaultValue": "http://localhost:6080",
+    "recommendedValue": "http://localhost:6080",
     "isReconfigurable": true,
     "displayType": "",
     "isOverridable": false,
@@ -607,7 +607,7 @@ hdp22properties.push(
     "id": "puppet var",
     "name": "policymgr_http_enabled",
     "displayName": "HTTP enabled",
-    "defaultValue": true,
+    "recommendedValue": true,
     "isReconfigurable": true,
     "displayType": "checkbox",
     "isOverridable": false,
@@ -620,7 +620,7 @@ hdp22properties.push(
     "id": "puppet var",
     "name": "ranger_user",
     "displayName": "Used to create user and assign permission",
-    "defaultValue": "ranger",
+    "recommendedValue": "ranger",
     "isReconfigurable": true,
     "displayType": "",
     "isOverridable": false,
@@ -633,7 +633,7 @@ hdp22properties.push(
     "id": "puppet var",
     "name": "ranger_group",
     "displayName": "Used to create group and assign permission",
-    "defaultValue": "ranger",
+    "recommendedValue": "ranger",
     "isReconfigurable": true,
     "displayType": "",
     "isOverridable": false,
@@ -646,7 +646,7 @@ hdp22properties.push(
     "id": "site property",
     "name": "authentication_method",
     "displayName": "Authentication method",
-    "defaultValue": "NONE",
+    "recommendedValue": "NONE",
     "options": [
       {
         displayName: 'LDAP',
@@ -677,7 +677,7 @@ hdp22properties.push(
     "id": "site property",
     "name": "remoteLoginEnabled",
     "displayName": "Allow remote Login",
-    "defaultValue": true,
+    "recommendedValue": true,
     "isReconfigurable": true,
     "displayType": "checkbox",
     "isOverridable": false,
@@ -690,7 +690,7 @@ hdp22properties.push(
     "id": "site property",
     "name": "authServiceHostName",
     "displayName": "authServiceHostName",
-    "defaultValue": 'localhost',
+    "recommendedValue": 'localhost',
     "isReconfigurable": true,
     "isOverridable": false,
     "isVisible": true,
@@ -702,7 +702,7 @@ hdp22properties.push(
     "id": "site property",
     "name": "authServicePort",
     "displayName": "authServicePort",
-    "defaultValue": '5151',
+    "recommendedValue": '5151',
     "isReconfigurable": true,
     "displayType": "int",
     "isOverridable": false,

+ 30 - 30
ambari-web/app/data/HDP2.3/site_properties.js

@@ -54,7 +54,7 @@ hdp23properties.push({
     "name": "DB_FLAVOR",
     "displayName": "DB FLAVOR",
     "value": "",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isReconfigurable": true,
     "options": [
       {
@@ -89,7 +89,7 @@ hdp23properties.push({
     "id": "puppet var",
     "displayName": "Database Type",
     "value": "",
-    "defaultValue": "MySQL",
+    "recommendedValue": "MySQL",
     "description": "Using a MySQL database for Ranger",
     "displayType": "masterHost",
     "isOverridable": false,
@@ -105,7 +105,7 @@ hdp23properties.push({
     "id": "puppet var",
     "displayName": "Database Type",
     "value": "",
-    "defaultValue": "ORACLE",
+    "recommendedValue": "ORACLE",
     "description": "Using an Oracle database for Ranger",
     "displayType": "masterHost",
     "isOverridable": false,
@@ -121,7 +121,7 @@ hdp23properties.push({
     "id": "puppet var",
     "displayName": "Database Type",
     "value": "",
-    "defaultValue": "Postgres",
+    "recommendedValue": "Postgres",
     "description": "Using a Postgres database for Ranger",
     "displayType": "masterHost",
     "isOverridable": false,
@@ -137,7 +137,7 @@ hdp23properties.push({
     "id": "puppet var",
     "displayName": "Database Type",
     "value": "",
-    "defaultValue": "MSSQL",
+    "recommendedValue": "MSSQL",
     "description": "Using a MS SQL database for Ranger",
     "displayType": "masterHost",
     "isOverridable": false,
@@ -153,7 +153,7 @@ hdp23properties.push({
     "id": "puppet var",
     "displayName": "Ranger Server host",
     "value": "",
-    "defaultValue": "",
+    "recommendedValue": "",
     "description": "The host that has been assigned to run Ranger Server",
     "displayType": "masterHost",
     "isOverridable": false,
@@ -169,7 +169,7 @@ hdp23properties.push({
     "id": "site property",
     "name": "xasecure.audit.hdfs.config.encoding",
     "displayName": "xasecure.audit.hdfs.config.encoding",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isRequired": false,
     "filename": "ranger-hdfs-audit.xml",
     "category": "Advanced ranger-hdfs-audit",
@@ -206,7 +206,7 @@ hdp23properties.push({
     "id": "site property",
     "name": "xasecure.audit.hdfs.config.encoding",
     "displayName": "xasecure.audit.hdfs.config.encoding",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isRequired": false,
     "filename": "ranger-hive-audit.xml",
     "category": "Advanced ranger-hive-audit",
@@ -216,7 +216,7 @@ hdp23properties.push({
     "id": "site property",
     "name": "xasecure.audit.hdfs.config.encoding",
     "displayName": "xasecure.audit.hdfs.config.encoding",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isRequired": false,
     "filename": "ranger-knox-audit.xml",
     "category": "Advanced ranger-knox-audit",
@@ -226,7 +226,7 @@ hdp23properties.push({
     "id": "site property",
     "name": "xasecure.audit.hdfs.config.encoding",
     "displayName": "xasecure.audit.hdfs.config.encoding",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isRequired": false,
     "filename": "ranger-storm-audit.xml",
     "category": "Advanced ranger-storm-audit",
@@ -236,7 +236,7 @@ hdp23properties.push({
     "id": "site property",
     "name": "xasecure.audit.hdfs.config.encoding",
     "displayName": "xasecure.audit.hdfs.config.encoding",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isRequired": false,
     "filename": "ranger-yarn-audit.xml",
     "category": "Advanced ranger-yarn-audit",
@@ -284,7 +284,7 @@ hdp23properties.push({
     "id": "site property",
     "name": "xasecure.audit.hdfs.config.encoding",
     "displayName": "xasecure.audit.hdfs.config.encoding",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isRequired": false,
     "filename": "ranger-hbase-audit.xml",
     "category": "Advanced ranger-hbase-audit",
@@ -403,7 +403,7 @@ hdp23properties.push({
     "id": "puppet var",
     "displayName": "MYSQL database Host",
     "description": "Specify the host on which the existing database is hosted",
-    "defaultValue": "",
+    "recommendedValue": "",
     "value": "",
     "displayType": "host",
     "isOverridable": false,
@@ -419,7 +419,7 @@ hdp23properties.push({
     "id": "puppet var",
     "displayName": "Oracle database Host",
     "description": "Specify the host on which the existing database is hosted",
-    "defaultValue": "",
+    "recommendedValue": "",
     "value": "",
     "displayType": "host",
     "isOverridable": false,
@@ -435,7 +435,7 @@ hdp23properties.push({
     "id": "puppet var",
     "displayName": "Database Host",
     "description": "Specify the host on which the existing database is hosted",
-    "defaultValue": "",
+    "recommendedValue": "",
     "value": "",
     "displayType": "host",
     "isOverridable": false,
@@ -451,7 +451,7 @@ hdp23properties.push({
     "id": "puppet var",
     "displayName": "Database Host",
     "description": "Specify the host on which the existing database is hosted",
-    "defaultValue": "",
+    "recommendedValue": "",
     "value": "",
     "displayType": "host",
     "isOverridable": false,
@@ -466,7 +466,7 @@ hdp23properties.push({
     "name": "SQL_COMMAND_INVOKER",
     "id": "site property",
     "displayName": "SQL Command Invoker",
-    "defaultValue": "mysql",
+    "recommendedValue": "mysql",
     "isObserved": true,
     "isReconfigurable": true,
     "displayType": "",
@@ -481,7 +481,7 @@ hdp23properties.push({
     "name": "ranger_jdbc_connection_url",
     "id": "site property",
     "displayName": "JDBC connect string for a Ranger database",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isReconfigurable": true,
     "displayType": "",
     "isOverridable": false,
@@ -496,7 +496,7 @@ hdp23properties.push({
     "name": "ranger_jdbc_driver",
     "id": "site property",
     "displayName": "Driver class name for a JDBC Ranger database",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isReconfigurable": true,
     "isObserved": true,
     "displayType": "",
@@ -511,7 +511,7 @@ hdp23properties.push({
     "name": "db_root_user",
     "id": "site property",
     "displayName": "Ranger DB root user",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isReconfigurable": true,
     "isObserved": true,
     "displayType": "",
@@ -526,7 +526,7 @@ hdp23properties.push({
     "name": "db_root_password",
     "id": "site property",
     "displayName": "Ranger DB root password",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isReconfigurable": true,
     "isObserved": true,
     "displayType": "password",
@@ -541,7 +541,7 @@ hdp23properties.push({
     "name": "db_name",
     "id": "site property",
     "displayName": "Ranger DB name",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isReconfigurable": true,
     "isObserved": true,
     "displayType": "",
@@ -565,7 +565,7 @@ hdp23properties.push({
     "id": "puppet var",
     "name": "ranger.external.url",
     "displayName": "External URL",
-    "defaultValue": "http://localhost:6080",
+    "recommendedValue": "http://localhost:6080",
     "isReconfigurable": true,
     "displayType": "",
     "isOverridable": false,
@@ -578,7 +578,7 @@ hdp23properties.push({
     "id": "puppet var",
     "name": "ranger.service.http.enabled",
     "displayName": "HTTP enabled",
-    "defaultValue": true,
+    "recommendedValue": true,
     "isReconfigurable": true,
     "displayType": "checkbox",
     "isOverridable": false,
@@ -591,7 +591,7 @@ hdp23properties.push({
     "id": "site property",
     "name": "ranger.authentication.method",
     "displayName": "Authentication method",
-    "defaultValue": "NONE",
+    "recommendedValue": "NONE",
     "options": [
       {
         displayName: 'LDAP',
@@ -622,7 +622,7 @@ hdp23properties.push({
     "id": "site property",
     "name": "ranger.unixauth.remote.login.enabled",
     "displayName": "Allow remote Login",
-    "defaultValue": true,
+    "recommendedValue": true,
     "isReconfigurable": true,
     "displayType": "checkbox",
     "isOverridable": false,
@@ -635,7 +635,7 @@ hdp23properties.push({
     "id": "site property",
     "name": "ranger.unixauth.service.hostname",
     "displayName": "ranger.unixauth.service.hostname",
-    "defaultValue": 'localhost',
+    "recommendedValue": 'localhost',
     "isReconfigurable": true,
     "isOverridable": false,
     "isVisible": true,
@@ -647,7 +647,7 @@ hdp23properties.push({
     "id": "site property",
     "name": "ranger.unixauth.service.port",
     "displayName": "ranger.unixauth.service.port",
-    "defaultValue": '5151',
+    "recommendedValue": '5151',
     "isReconfigurable": true,
     "displayType": "int",
     "isOverridable": false,
@@ -716,7 +716,7 @@ hdp23properties.push({
   {
     "id": "site property",
     "name": "xasecure.hbase.update.xapolicies.on.grant.revoke",
-    "defaultValue": true,
+    "recommendedValue": true,
     "displayName": "Should HBase GRANT/REVOKE update XA policies?",
     "displayType": "checkbox",
     "filename": "ranger-hbase-security.xml",
@@ -727,7 +727,7 @@ hdp23properties.push({
   {
     "id": "site property",
     "name": "xasecure.hive.update.xapolicies.on.grant.revoke",
-    "defaultValue": true,
+    "recommendedValue": true,
     "displayName": "Should Hive GRANT/REVOKE update XA policies?",
     "displayType": "checkbox",
     "filename": "ranger-hive-security.xml",

+ 0 - 127
ambari-web/app/data/HDP2/custom_configs.js

@@ -1,127 +0,0 @@
-/**
- * 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.
- */
-
-
-module.exports =
-  [
-    {
-      "id": "site property",
-      "name": "yarn.scheduler.capacity.root.<queue-name>.capacity",
-      "displayName": "Capacity",
-      "value": '',
-      "defaultValue": '',
-      "description": "Percentage of the number of slots in the cluster that are made to be available for jobs in this queue. The sum of capacities for all queues should be less than or equal 100.",
-      "isVisible": true,
-      "isRequired": true,
-      "serviceName": "",
-      "category": "CapacityScheduler",
-      "unit": "%",
-      "isQueue": true,
-      "filename": 'capacity-scheduler.xml',
-      "inTable": true,
-      "index": 1
-    },
-    {
-      "id": "site property",
-      "name": "yarn.scheduler.capacity.root.<queue-name>.maximum-capacity",
-      "displayName": "Max Capacity",
-      "value": '',
-      "defaultValue": '100',
-      "displayType": "int",
-      "description": "Defines a limit beyond which a queue cannot use the capacity of the cluster." +
-        "This provides a means to limit how much excess capacity a queue can use. By default, there is no limit." +
-        "The Max Capacity of a queue can only be greater than or equal to its minimum capacity. " +
-        "This property could be to curtail certain jobs which are long running in nature from occupying more than a certain " +
-        "percentage of the cluster, which in the absence of pre-emption, could lead to capacity guarantees of other queues being affected. " +
-        "One important thing to note is that maximum-capacity is a percentage , so based on the cluster's capacity it would change. " +
-        "So if large no of nodes or racks get added to the cluster, Max Capacity in absolute terms would increase accordingly. ",
-      "isVisible": true,
-      "isRequired": true,
-      "serviceName": "YARN",
-      "category": "CapacityScheduler",
-      "unit": "%",
-      "valueRange": [0, 100],
-      "isQueue": true,
-      "filename": 'capacity-scheduler.xml',
-      "inTable": true,
-      "index": 2
-    },
-    {
-      "id": "site property",
-      "name": "yarn.scheduler.capacity.root.<queue-name>.user-limit-factor",
-      "displayName": "User Limit Factor",
-      "value": '',
-      "defaultValue": '1',
-      "displayType": "int",
-      "description": "The multiple of the queue capacity which can be configured to allow a single user to acquire more slots. " +
-        "By default this is set to 1 which ensure that a single user can never take more than the queue's configured capacity " +
-        "irrespective of how idle the cluster is.",
-      "isVisible": true,
-      "isRequired": true,
-      "serviceName": "YARN",
-      "category": "CapacityScheduler",
-      "isQueue": true,
-      "filename": 'capacity-scheduler.xml',
-      "inTable": true,
-      "index": 7
-    },
-    {
-      "id": "site property",
-      "name": "yarn.scheduler.capacity.root.<queue-name>.state",
-      "displayName": "State",
-      "value": '',
-      "defaultValue": 'RUNNING',
-      "description": "state",
-      "isVisible": true,
-      "isRequired": true,
-      "serviceName": "YARN",
-      "category": "CapacityScheduler",
-      "isQueue": true,
-      "filename": 'capacity-scheduler.xml',
-      "inTable": true,
-      "index": 8
-    },
-    {
-      "id": "site property",
-      "name": "yarn.scheduler.capacity.root.<queue-name>.acl_submit_jobs",
-      "displayName": "",
-      "value": '',
-      "defaultValue": '*',
-      "description": "",
-      "isVisible": false,
-      "isRequired": true,
-      "serviceName": "YARN",
-      "category": "CapacityScheduler",
-      "isQueue": true,
-      "filename": 'capacity-scheduler.xml'
-    },
-    {
-      "id": "site property",
-      "name": "yarn.scheduler.capacity.root.<queue-name>.acl_administer_jobs",
-      "displayName": "",
-      "value": '',
-      "defaultValue": '*',
-      "description": "",
-      "isVisible": false,
-      "isRequired": true,
-      "serviceName": "YARN",
-      "category": "CapacityScheduler",
-      "isQueue": true,
-      "filename": 'capacity-scheduler.xml'
-    }
-  ];

+ 17 - 17
ambari-web/app/data/HDP2/ha_properties.js

@@ -34,7 +34,7 @@ module.exports =
         "displayName": "dfs.journalnode.edits.dir",
         "description": "The Directory where the JournalNode will store its local state.",
         "isReconfigurable": true,
-        "defaultValue": "/hadoop/hdfs/journal",
+        "recommendedValue": "/hadoop/hdfs/journal",
         "value": "/hadoop/hdfs/journal",
         "defaultDirectory": "/hadoop/hdfs/journal",
         "displayType": "directory",
@@ -47,7 +47,7 @@ module.exports =
         "name": "fs.defaultFS",
         "displayName": "fs.defaultFS",
         "description": "The default path prefix used by the Hadoop FS client when none is given.",
-        "defaultValue": "hdfs://haCluster",
+        "recommendedValue": "hdfs://haCluster",
         "isReconfigurable": false,
         "value": "hdfs://haCluster",
         "category": "HDFS",
@@ -60,7 +60,7 @@ module.exports =
         "displayName": "ha.zookeeper.quorum",
         "isReconfigurable": false,
         "description": "This lists the host-port pairs running the ZooKeeper service.",
-        "defaultValue": "zk1.example.com:2181,zk2.example.com:2181,zk3.example.com:2181",
+        "recommendedValue": "zk1.example.com:2181,zk2.example.com:2181,zk3.example.com:2181",
         "value": "zk1.example.com:2181,zk2.example.com:2181,zk3.example.com:2181",
         "category": "HDFS",
         "filename": "core-site",
@@ -72,7 +72,7 @@ module.exports =
         "displayName": "dfs.nameservices",
         "description": "Comma-separated list of nameservices.",
         "isReconfigurable": false,
-        "defaultValue": "haCluster",
+        "recommendedValue": "haCluster",
         "value": "haCluster",
         "category": "HDFS",
         "filename": "hdfs-site",
@@ -84,7 +84,7 @@ module.exports =
         "displayName": "dfs.ha.namenodes.${dfs.nameservices}",
         "description": "The prefix for a given nameservice, contains a comma-separated list of namenodes for a given nameservice.",
         "isReconfigurable": false,
-        "defaultValue": "nn1,nn2",
+        "recommendedValue": "nn1,nn2",
         "value": "nn1,nn2",
         "category": "HDFS",
         "filename": "hdfs-site",
@@ -96,7 +96,7 @@ module.exports =
         "displayName": "dfs.namenode.rpc-address.${dfs.nameservices}.nn1",
         "description": "RPC address that handles all clients requests for nn1.",
         "isReconfigurable": false,
-        "defaultValue": "0.0.0.0:8020",
+        "recommendedValue": "0.0.0.0:8020",
         "value": "0.0.0.0:8020",
         "category": "HDFS",
         "filename": "hdfs-site",
@@ -108,7 +108,7 @@ module.exports =
         "displayName": "dfs.namenode.rpc-address.${dfs.nameservices}.nn2",
         "description": "RPC address that handles all clients requests for nn2.",
         "isReconfigurable": false,
-        "defaultValue": "0.0.0.0:8020",
+        "recommendedValue": "0.0.0.0:8020",
         "value": "0.0.0.0:8020",
         "category": "HDFS",
         "filename": "hdfs-site",
@@ -120,7 +120,7 @@ module.exports =
         "displayName": "dfs.namenode.http-address.${dfs.nameservices}.nn1",
         "description": "The fully-qualified HTTP address for nn1 NameNode.",
         "isReconfigurable": false,
-        "defaultValue": "0.0.0.0:50070",
+        "recommendedValue": "0.0.0.0:50070",
         "value": "0.0.0.0:50070",
         "category": "HDFS",
         "filename": "hdfs-site",
@@ -132,7 +132,7 @@ module.exports =
         "displayName": "dfs.namenode.http-address.${dfs.nameservices}.nn2",
         "description": "The fully-qualified HTTP address for nn2 NameNode.",
         "isReconfigurable": false,
-        "defaultValue": "0.0.0.0:50070",
+        "recommendedValue": "0.0.0.0:50070",
         "value": "0.0.0.0:50070",
         "category": "HDFS",
         "filename": "hdfs-site",
@@ -144,7 +144,7 @@ module.exports =
         "displayName": "dfs.namenode.https-address.${dfs.nameservices}.nn1",
         "description": "The fully-qualified HTTP address for nn1 NameNode.",
         "isReconfigurable": false,
-        "defaultValue": "0.0.0.0:50470",
+        "recommendedValue": "0.0.0.0:50470",
         "value": "0.0.0.0:50470",
         "category": "HDFS",
         "filename": "hdfs-site",
@@ -156,7 +156,7 @@ module.exports =
         "displayName": "dfs.namenode.https-address.${dfs.nameservices}.nn2",
         "description": "The fully-qualified HTTP address for nn2 NameNode.",
         "isReconfigurable": false,
-        "defaultValue": "0.0.0.0:50470",
+        "recommendedValue": "0.0.0.0:50470",
         "value": "0.0.0.0:50470",
         "category": "HDFS",
         "filename": "hdfs-site",
@@ -167,7 +167,7 @@ module.exports =
         "name": "dfs.client.failover.proxy.provider.${dfs.nameservices}",
         "displayName": "dfs.client.failover.proxy.provider.${dfs.nameservices}",
         "description": "The Java class that HDFS clients use to contact the Active NameNode.",
-        "defaultValue": "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider",
+        "recommendedValue": "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider",
         "isReconfigurable": false,
         "value": "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider",
         "category": "HDFS",
@@ -180,7 +180,7 @@ module.exports =
         "displayName": "dfs.namenode.shared.edits.dir",
         "description": " The URI which identifies the group of JNs where the NameNodes will write/read edits.",
         "isReconfigurable": false,
-        "defaultValue": "qjournal://node1.example.com:8485;node2.example.com:8485;node3.example.com:8485/mycluster",
+        "recommendedValue": "qjournal://node1.example.com:8485;node2.example.com:8485;node3.example.com:8485/mycluster",
         "value": "qjournal://node1.example.com:8485;node2.example.com:8485;node3.example.com:8485/mycluster",
         "category": "HDFS",
         "filename": "hdfs-site",
@@ -192,7 +192,7 @@ module.exports =
         "displayName": "dfs.ha.fencing.methods",
         "description": "A list of scripts or Java classes which will be used to fence the Active NameNode during a failover.",
         "isReconfigurable": false,
-        "defaultValue": "shell(/bin/true)",
+        "recommendedValue": "shell(/bin/true)",
         "value": "shell(/bin/true)",
         "category": "HDFS",
         "filename": "hdfs-site",
@@ -204,7 +204,7 @@ module.exports =
         "displayName": "dfs.ha.automatic-failover.enabled",
         "description": "Enable Automatic failover.",
         "isReconfigurable": false,
-        "defaultValue": true,
+        "recommendedValue": true,
         "value": true,
         "displayType": "checkbox",
         "category": "HDFS",
@@ -217,7 +217,7 @@ module.exports =
         "displayName": "dfs.namenode.safemode.threshold-pct",
         "description": "Specifies the percentage of blocks that should satisfy\n        the minimal replication requirement defined by dfs.namenode.replication.min.\n        Values less than or equal to 0 mean not to start in safe mode.\n        Values greater than 1 will make safe mode permanent.\n ",
         "isReconfigurable": false,
-        "defaultValue": "0.99f",
+        "recommendedValue": "0.99f",
         "value": "0.99f",
         "category": "HDFS",
         "filename": "hdfs-site",
@@ -229,7 +229,7 @@ module.exports =
         "displayName": "hbase.rootdir",
         "description": "The directory shared by region servers and into which HBase persists.",
         "isReconfigurable": false,
-        "defaultValue": "/hadoop/hdfs/journal",
+        "recommendedValue": "/hadoop/hdfs/journal",
         "value": "/hadoop/hdfs/journal",
         "category": "HBASE",
         "filename": "hbase-site",

+ 13 - 13
ambari-web/app/data/HDP2/rm_ha_properties.js

@@ -32,7 +32,7 @@ module.exports =
         "name": "yarn.resourcemanager.ha.enabled",
         "displayName": "yarn.resourcemanager.ha.enabled",
         "isReconfigurable": false,
-        "defaultValue": true,
+        "recommendedValue": true,
         "value": true,
         "displayType": "checkbox",
         "category": "YARN",
@@ -44,7 +44,7 @@ module.exports =
         "name": "yarn.resourcemanager.ha.rm-ids",
         "displayName": "yarn.resourcemanager.ha.rm-ids",
         "isReconfigurable": false,
-        "defaultValue": "rm1,rm2",
+        "recommendedValue": "rm1,rm2",
         "value": "rm1,rm2",
         "category": "YARN",
         "filename": "yarn-site",
@@ -55,7 +55,7 @@ module.exports =
         "name": "yarn.resourcemanager.hostname.rm1",
         "displayName": "yarn.resourcemanager.hostname.rm1",
         "isReconfigurable": false,
-        "defaultValue": "",
+        "recommendedValue": "",
         "value": "",
         "category": "YARN",
         "filename": "yarn-site",
@@ -67,7 +67,7 @@ module.exports =
         "name": "yarn.resourcemanager.webapp.address.rm1",
         "displayName": "yarn.resourcemanager.webapp.address.rm1",
         "isReconfigurable": false,
-        "defaultValue": "",
+        "recommendedValue": "",
         "value": "",
         "category": "YARN",
         "filename": "yarn-site",
@@ -78,7 +78,7 @@ module.exports =
         "name": "yarn.resourcemanager.webapp.address.rm2",
         "displayName": "yarn.resourcemanager.webapp.address.rm2",
         "isReconfigurable": false,
-        "defaultValue": "",
+        "recommendedValue": "",
         "value": "",
         "category": "YARN",
         "filename": "yarn-site",
@@ -89,7 +89,7 @@ module.exports =
         "name": "yarn.resourcemanager.webapp.https.address.rm1",
         "displayName": "yarn.resourcemanager.webapp.https.address.rm1",
         "isReconfigurable": false,
-        "defaultValue": "",
+        "recommendedValue": "",
         "value": "",
         "category": "YARN",
         "filename": "yarn-site",
@@ -100,7 +100,7 @@ module.exports =
         "name": "yarn.resourcemanager.webapp.https.address.rm2",
         "displayName": "yarn.resourcemanager.webapp.https.address.rm2",
         "isReconfigurable": false,
-        "defaultValue": "",
+        "recommendedValue": "",
         "value": "",
         "category": "YARN",
         "filename": "yarn-site",
@@ -112,7 +112,7 @@ module.exports =
         "name": "yarn.resourcemanager.hostname.rm2",
         "displayName": "yarn.resourcemanager.hostname.rm2",
         "isReconfigurable": false,
-        "defaultValue": "",
+        "recommendedValue": "",
         "value": "",
         "category": "YARN",
         "filename": "yarn-site",
@@ -123,7 +123,7 @@ module.exports =
         "name": "yarn.resourcemanager.recovery.enabled",
         "displayName": "yarn.resourcemanager.recovery.enabled",
         "isReconfigurable": false,
-        "defaultValue": true,
+        "recommendedValue": true,
         "value": true,
         "displayType": "checkbox",
         "category": "YARN",
@@ -135,7 +135,7 @@ module.exports =
         "name": "yarn.resourcemanager.store.class",
         "displayName": "yarn.resourcemanager.store.class",
         "isReconfigurable": false,
-        "defaultValue": "org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore",
+        "recommendedValue": "org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore",
         "value": "org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore",
         "category": "YARN",
         "filename": "yarn-site",
@@ -146,7 +146,7 @@ module.exports =
         "name": "yarn.resourcemanager.zk-address",
         "displayName": "yarn.resourcemanager.zk-address",
         "isReconfigurable": false,
-        "defaultValue": "",
+        "recommendedValue": "",
         "value": "",
         "category": "YARN",
         "filename": "yarn-site",
@@ -157,7 +157,7 @@ module.exports =
         "name": "yarn.resourcemanager.cluster-id",
         "displayName": "yarn.resourcemanager.cluster-id",
         "isReconfigurable": false,
-        "defaultValue": "yarn-cluster",
+        "recommendedValue": "yarn-cluster",
         "value": "yarn-cluster",
         "category": "YARN",
         "filename": "yarn-site",
@@ -168,7 +168,7 @@ module.exports =
         "name": "yarn.resourcemanager.ha.automatic-failover.zk-base-path",
         "displayName": "yarn.resourcemanager.ha.automatic-failover.zk-base-path",
         "isReconfigurable": false,
-        "defaultValue": "/yarn-leader-election",
+        "recommendedValue": "/yarn-leader-election",
         "value": "/yarn-leader-election",
         "category": "YARN",
         "filename": "yarn-site",

+ 88 - 88
ambari-web/app/data/HDP2/secure_properties.js

@@ -34,7 +34,7 @@ var props = {
       "name": "security_enabled",
       "displayName": "Enable security",
       "value": "",
-      "defaultValue": 'true',
+      "recommendedValue": 'true',
       "description": "Enable kerberos security for the cluster",
       "isVisible": false,
       "isOverridable": false,
@@ -47,7 +47,7 @@ var props = {
       "name": "kerberos_install_type",
       "displayName": "Type of security",
       "value": "",
-      "defaultValue": "MANUALLY_SET_KERBEROS",
+      "recommendedValue": "MANUALLY_SET_KERBEROS",
       "description": "Type of kerberos security for the cluster",
       "isVisible": false,
       "isOverridable": false,
@@ -59,7 +59,7 @@ var props = {
       "name": "kerberos_domain",
       "displayName": "Realm name",
       "value": "",
-      "defaultValue": "EXAMPLE.COM",
+      "recommendedValue": "EXAMPLE.COM",
       "description": "Realm name to be used for all principal names",
       "displayType": "advanced",
       "isVisible": true,
@@ -73,7 +73,7 @@ var props = {
       "name": "kinit_path_local",
       "displayName": "Kerberos tool path",
       "value": "",
-      "defaultValue": "/usr/bin",
+      "recommendedValue": "/usr/bin",
       "description": "Directoy path to installed kerberos tools like kinit, kdestroy etc. This can have multiple comma delimited paths",
       "displayType": "directory",
       "isVisible": true,
@@ -87,7 +87,7 @@ var props = {
       "name": "smokeuser_principal_name",
       "displayName": "Smoke test user principal",
       "value": "",
-      "defaultValue": "ambari-qa",
+      "recommendedValue": "ambari-qa",
       "description": "This is the principal name for Smoke test user",
       "displayType": "principal",
       "isVisible": true,
@@ -101,7 +101,7 @@ var props = {
       "name": "smokeuser_keytab",
       "displayName": "Path to smoke test user keytab file",
       "value": "",
-      "defaultValue": "/etc/security/keytabs/smokeuser.headless.keytab",
+      "recommendedValue": "/etc/security/keytabs/smokeuser.headless.keytab",
       "description": "Path to keytab file for smoke test user",
       "displayType": "directory",
       "isVisible": true,
@@ -115,7 +115,7 @@ var props = {
       "name": "hdfs_principal_name",
       "displayName": "HDFS user principal",
       "value": "",
-      "defaultValue": "hdfs",
+      "recommendedValue": "hdfs",
       "description": "This is the principal name for HDFS user",
       "displayType": "principal",
       "isVisible": false,
@@ -130,7 +130,7 @@ var props = {
       "name": "hdfs_user_keytab",
       "displayName": "Path to HDFS user keytab file",
       "value": "",
-      "defaultValue": "/etc/security/keytabs/hdfs.headless.keytab",
+      "recommendedValue": "/etc/security/keytabs/hdfs.headless.keytab",
       "description": "Path to keytab file for HDFS user",
       "displayType": "directory",
       "isVisible": false,
@@ -144,7 +144,7 @@ var props = {
       "name": "hbase_principal_name",
       "displayName": "HBase user principal",
       "value": "",
-      "defaultValue": "hbase",
+      "recommendedValue": "hbase",
       "description": "This is the principal name for HBase user",
       "displayType": "principal",
       "isVisible": false,
@@ -159,7 +159,7 @@ var props = {
       "name": "hbase_user_keytab",
       "displayName": "Path to HBase user keytab file",
       "value": "",
-      "defaultValue": "/etc/security/keytabs/hbase.headless.keytab",
+      "recommendedValue": "/etc/security/keytabs/hbase.headless.keytab",
       "description": "Path to keytab file for Hbase user",
       "displayType": "directory",
       "isVisible": false,
@@ -175,7 +175,7 @@ var props = {
       "name": "namenode_host",
       "displayName": "NameNode hosts",
       "value": "",
-      "defaultValue": "",
+      "recommendedValue": "",
       "description": "The hosts that has been assigned to run NameNode",
       "displayType": "masterHosts",
       "isOverridable": false,
@@ -188,7 +188,7 @@ var props = {
       "name": "namenode_principal_name",
       "displayName": "Principal name",
       "value": "",
-      "defaultValue": "nn/_HOST",
+      "recommendedValue": "nn/_HOST",
       "description": "Principal name for NameNode. _HOST will get automatically replaced with actual hostname at an instance of NameNode",
       "displayType": "principal",
       "isVisible": true,
@@ -202,7 +202,7 @@ var props = {
       "name": "namenode_keytab",
       "displayName": "Path to Keytab File",
       "value": "",
-      "defaultValue": "/etc/security/keytabs/nn.service.keytab",
+      "recommendedValue": "/etc/security/keytabs/nn.service.keytab",
       "description": "Path to NameNode keytab file",
       "displayType": "directory",
       "isVisible": true,
@@ -216,7 +216,7 @@ var props = {
       "name": "snamenode_host",
       "displayName": "SNameNode host",
       "value": "",
-      "defaultValue": "localhost",
+      "recommendedValue": "localhost",
       "description": "The host that has been assigned to run SecondaryNameNode",
       "displayType": "masterHost",
       "isOverridable": false,
@@ -229,7 +229,7 @@ var props = {
       "name": "snamenode_principal_name",
       "displayName": "Principal name",
       "value": "",
-      "defaultValue": "nn/_HOST",
+      "recommendedValue": "nn/_HOST",
       "description": "Principal name for SNameNode. _HOST will get automatically replaced with actual hostname at an instance of SNameNode",
       "displayType": "principal",
       "isVisible": true,
@@ -243,7 +243,7 @@ var props = {
       "name": "snamenode_keytab",
       "displayName": "Path to Keytab File",
       "value": "",
-      "defaultValue": "/etc/security/keytabs/nn.service.keytab",
+      "recommendedValue": "/etc/security/keytabs/nn.service.keytab",
       "description": "Path to SNameNode keytab file",
       "displayType": "directory",
       "isVisible": true,
@@ -257,7 +257,7 @@ var props = {
       "name": "journalnode_hosts",
       "displayName": "JournalNode hosts",
       "value": "",
-      "defaultValue": "localhost",
+      "recommendedValue": "localhost",
       "description": "The hosts that have been assigned to run JournalNodes",
       "displayType": "masterHosts",
       "isOverridable": false,
@@ -270,7 +270,7 @@ var props = {
       "name": "journalnode_principal_name",
       "displayName": "Principal name",
       "value": "",
-      "defaultValue": "jn/_HOST",
+      "recommendedValue": "jn/_HOST",
       "description": "Principal name for JournalNode. _HOST will get automatically replaced with actual hostname at every instance of JournalNode",
       "displayType": "principal",
       "isVisible": true,
@@ -284,7 +284,7 @@ var props = {
       "name": "journalnode_keytab",
       "displayName": "Path to keytab file",
       "value": "",
-      "defaultValue": "/etc/security/keytabs/jn.service.keytab",
+      "recommendedValue": "/etc/security/keytabs/jn.service.keytab",
       "description": "Path to JournalNode keytab file",
       "displayType": "directory",
       "isVisible": true,
@@ -298,7 +298,7 @@ var props = {
       "name": "datanode_hosts", //not in the schema. For UI purpose
       "displayName": "DataNode hosts",
       "value": "",
-      "defaultValue": "",
+      "recommendedValue": "",
       "description": "The hosts that have been assigned to run DataNode",
       "displayType": "slaveHosts",
       "isOverridable": false,
@@ -311,7 +311,7 @@ var props = {
       "name": "dfs_datanode_address",
       "displayName": "Datanode address",
       "value": "",
-      "defaultValue": "1019",
+      "recommendedValue": "1019",
       "description": "Address for DataNode",
       "displayType": "principal",
       "isVisible": false,
@@ -324,7 +324,7 @@ var props = {
       "name": "dfs_datanode_http_address",
       "displayName": "Datanode HTTP address",
       "value": "",
-      "defaultValue": "1022",
+      "recommendedValue": "1022",
       "description": "Address for DataNode",
       "displayType": "principal",
       "isVisible": false,
@@ -337,7 +337,7 @@ var props = {
       "name": "datanode_principal_name",
       "displayName": "Principal name",
       "value": "",
-      "defaultValue": "dn/_HOST",
+      "recommendedValue": "dn/_HOST",
       "description": "Principal name for DataNode. _HOST will get automatically replaced with actual hostname at every instance of DataNode",
       "displayType": "principal",
       "isVisible": true,
@@ -351,7 +351,7 @@ var props = {
       "name": "datanode_keytab",
       "displayName": "Path to keytab file",
       "value": "",
-      "defaultValue": "/etc/security/keytabs/dn.service.keytab",
+      "recommendedValue": "/etc/security/keytabs/dn.service.keytab",
       "description": "Path to DataNode keytab file",
       "displayType": "directory",
       "isVisible": true,
@@ -365,7 +365,7 @@ var props = {
       "name": "hadoop_http_principal_name",
       "displayName": "DFS web principal name",
       "value": "",
-      "defaultValue": "HTTP/_HOST",
+      "recommendedValue": "HTTP/_HOST",
       "description": "Principal name for SPNEGO access for HDFS components. _HOST will get automatically replaced with actual hostname at instance of HDFS component",
       "displayType": "principal",
       "isVisible": true,
@@ -378,7 +378,7 @@ var props = {
       "name": "hadoop_http_keytab",
       "displayName": "Path to SPNEGO keytab file",
       "value": "",
-      "defaultValue": "/etc/security/keytabs/spnego.service.keytab",
+      "recommendedValue": "/etc/security/keytabs/spnego.service.keytab",
       "description": "Path to SPNEGO keytab file for NameNode and SNameNode",
       "displayType": "directory",
       "isVisible": true,
@@ -393,7 +393,7 @@ var props = {
       "name": "jobhistoryserver_host",
       "displayName": "History Server host",
       "value": "",
-      "defaultValue": "",
+      "recommendedValue": "",
       "description": "The host that has been assigned to run History Server",
       "displayType": "masterHost",
       "isOverridable": false,
@@ -406,7 +406,7 @@ var props = {
       "name": "jobhistory_principal_name",
       "displayName": "Principal name",
       "value": "",
-      "defaultValue": "jhs/_HOST",
+      "recommendedValue": "jhs/_HOST",
       "description": "Principal name for History Server. _HOST will get automatically replaced with actual hostname at an instance of History Server",
       "displayType": "principal",
       "isVisible": true,
@@ -420,7 +420,7 @@ var props = {
       "name": "jobhistory_keytab",
       "displayName": "Path to keytab file",
       "value": "",
-      "defaultValue": "/etc/security/keytabs/jhs.service.keytab",
+      "recommendedValue": "/etc/security/keytabs/jhs.service.keytab",
       "description": "Path to History Server keytab file",
       "displayType": "directory",
       "isVisible": true,
@@ -434,7 +434,7 @@ var props = {
       "name": "jobhistory_http_principal_name",
       "displayName": "Web principal name",
       "value": "",
-      "defaultValue": "HTTP/_HOST",
+      "recommendedValue": "HTTP/_HOST",
       "description": "Principal name for SPNEGO access to Job History Server. _HOST will get automatically replaced with actual hostname at an instance of Job History Server",
       "displayType": "principal",
       "isVisible": true,
@@ -447,7 +447,7 @@ var props = {
       "name": "jobhistory_http_keytab",
       "displayName": "Path to SPNEGO keytab file",
       "value": "",
-      "defaultValue": "/etc/security/keytabs/spnego.service.keytab",
+      "recommendedValue": "/etc/security/keytabs/spnego.service.keytab",
       "description": "Path to SPNEGO keytab file for Job History Server",
       "displayType": "directory",
       "isVisible": true,
@@ -462,7 +462,7 @@ var props = {
       "name": "resourcemanager_host",
       "displayName": "ResourceManager host",
       "value": "",
-      "defaultValue": "",
+      "recommendedValue": "",
       "description": "The host that has been assigned to run ResourceManager",
       "displayType": "masterHost",
       "isOverridable": false,
@@ -476,7 +476,7 @@ var props = {
       "name": "apptimelineserver_host",
       "displayName": "Application Timeline Server host",
       "value": "",
-      "defaultValue": "",
+      "recommendedValue": "",
       "description": "The host that has been assigned to run AppTimelineServer",
       "displayType": "masterHost",
       "isOverridable": false,
@@ -489,7 +489,7 @@ var props = {
       "name": "apptimelineserver_principal_name",
       "displayName": "App Timeline Server Principal name",
       "value": "",
-      "defaultValue": "yarn/_HOST",
+      "recommendedValue": "yarn/_HOST",
       "description": "Principal name for App Timeline Server. _HOST will get automatically replaced with actual hostname at an instance of App Timeline Server",
       "displayType": "principal",
       "isVisible": true,
@@ -503,7 +503,7 @@ var props = {
       "name": "apptimelineserver_keytab",
       "displayName": "Path to App Timeline Server keytab file",
       "value": "",
-      "defaultValue": "/etc/security/keytabs/yarn.service.keytab",
+      "recommendedValue": "/etc/security/keytabs/yarn.service.keytab",
       "description": "Path to App Timeline Server keytab file",
       "displayType": "directory",
       "isVisible": true,
@@ -517,7 +517,7 @@ var props = {
       "name": "apptimelineserver_http_principal_name",
       "displayName": "App Timeline Server HTTP Principal name",
       "value": "",
-      "defaultValue": "HTTP/_HOST",
+      "recommendedValue": "HTTP/_HOST",
       "description": "Principal name for App Timeline Server HTTP. _HOST will get automatically replaced with actual hostname at an instance of App Timeline Server",
       "displayType": "principal",
       "isVisible": true,
@@ -530,7 +530,7 @@ var props = {
       "name": "apptimelineserver_http_keytab",
       "displayName": "Path to App Timeline Server SPNEGO HTTP keytab file",
       "value": "",
-      "defaultValue": "/etc/security/keytabs/spnego.service.keytab",
+      "recommendedValue": "/etc/security/keytabs/spnego.service.keytab",
       "description": "Path to App Timeline Server SPNEGO HTTP keytab file",
       "displayType": "directory",
       "isVisible": true,
@@ -545,7 +545,7 @@ var props = {
       "name": "resourcemanager_principal_name",
       "displayName": "Principal name",
       "value": "",
-      "defaultValue": "rm/_HOST",
+      "recommendedValue": "rm/_HOST",
       "description": "Principal name for ResourceManager. _HOST will get automatically replaced with actual hostname at an instance of ResourceManager",
       "displayType": "principal",
       "isVisible": true,
@@ -559,7 +559,7 @@ var props = {
       "name": "resourcemanager_keytab",
       "displayName": "Path to keytab file",
       "value": "",
-      "defaultValue": "/etc/security/keytabs/rm.service.keytab",
+      "recommendedValue": "/etc/security/keytabs/rm.service.keytab",
       "description": "Path to ResourceManager keytab file",
       "displayType": "directory",
       "isVisible": true,
@@ -573,7 +573,7 @@ var props = {
       "name": "resourcemanager_http_principal_name",
       "displayName": "Web principal name",
       "value": "",
-      "defaultValue": "HTTP/_HOST",
+      "recommendedValue": "HTTP/_HOST",
       "description": "Principal name for SPNEGO access to ResourceManager. _HOST will get automatically replaced with actual hostname at an instance of ResourceManager",
       "displayType": "principal",
       "isVisible": true,
@@ -586,7 +586,7 @@ var props = {
       "name": "resourcemanager_http_keytab",
       "displayName": "Path to SPNEGO keytab file",
       "value": "",
-      "defaultValue": "/etc/security/keytabs/spnego.service.keytab",
+      "recommendedValue": "/etc/security/keytabs/spnego.service.keytab",
       "description": "Path to SPNEGO keytab file for ResourceManager",
       "displayType": "directory",
       "isVisible": true,
@@ -599,7 +599,7 @@ var props = {
       "name": "nodemanager_host",
       "displayName": "NodeManager hosts",
       "value": "",
-      "defaultValue": "",
+      "recommendedValue": "",
       "description": "The hosts that has been assigned to run NodeManager",
       "displayType": "slaveHosts",
       "isOverridable": false,
@@ -612,7 +612,7 @@ var props = {
       "name": "nodemanager_principal_name",
       "displayName": "Principal name",
       "value": "",
-      "defaultValue": "nm/_HOST",
+      "recommendedValue": "nm/_HOST",
       "description": "Principal name for NodeManager. _HOST will get automatically replaced with actual hostname at all instances of NodeManager",
       "displayType": "principal",
       "isVisible": true,
@@ -626,7 +626,7 @@ var props = {
       "name": "nodemanager_keytab",
       "displayName": "Path to keytab file",
       "value": "",
-      "defaultValue": "/etc/security/keytabs/nm.service.keytab",
+      "recommendedValue": "/etc/security/keytabs/nm.service.keytab",
       "description": "Path to NodeManager keytab file",
       "displayType": "directory",
       "isVisible": true,
@@ -640,7 +640,7 @@ var props = {
       "name": "nodemanager_http_principal_name",
       "displayName": "Web principal name",
       "value": "",
-      "defaultValue": "HTTP/_HOST",
+      "recommendedValue": "HTTP/_HOST",
       "description": "Principal name for SPNEGO access to NodeManager. _HOST will get automatically replaced with actual hostname at all instances of NodeManager",
       "displayType": "principal",
       "isVisible": true,
@@ -653,7 +653,7 @@ var props = {
       "name": "nodemanager_http_keytab",
       "displayName": "Path to SPNEGO keytab file",
       "value": "",
-      "defaultValue": "/etc/security/keytabs/spnego.service.keytab",
+      "recommendedValue": "/etc/security/keytabs/spnego.service.keytab",
       "description": "Path to SPNEGO keytab file for NodeManager",
       "displayType": "directory",
       "isVisible": true,
@@ -666,7 +666,7 @@ var props = {
       "name": "yarn_nodemanager_container-executor_class",
       "displayName": "yarn.nodemanager.container-executor.class",
       "value": "",
-      "defaultValue": "org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor",
+      "recommendedValue": "org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor",
       "description": "Executor(launcher) of the containers",
       "displayType": "advanced",
       "isVisible": true,
@@ -679,7 +679,7 @@ var props = {
       "name": "webhcatserver_host",
       "displayName": "WebHCat Server host",
       "value": "",
-      "defaultValue": "localhost",
+      "recommendedValue": "localhost",
       "description": "The host that has been assigned to run WebHCat Server",
       "displayType": "masterHost",
       "isVisible": true,
@@ -692,7 +692,7 @@ var props = {
       "name": "webHCat_http_principal_name",
       "displayName": "Principal name",
       "value": "",
-      "defaultValue": "HTTP/_HOST",
+      "recommendedValue": "HTTP/_HOST",
       "description": "Principal name for SPNEGO access for WebHCat",
       "displayType": "principal",
       "isVisible": true,
@@ -705,7 +705,7 @@ var props = {
       "name": "webhcat_http_keytab",
       "displayName": "Path to keytab file",
       "value": "",
-      "defaultValue": "/etc/security/keytabs/spnego.service.keytab",
+      "recommendedValue": "/etc/security/keytabs/spnego.service.keytab",
       "description": "Path to SPNEGO keytab file for WebHCat",
       "displayType": "directory",
       "isVisible": true,
@@ -720,7 +720,7 @@ var props = {
       "name": "hbasemaster_host",
       "displayName": "HBase Master hosts",
       "value": "",
-      "defaultValue": "",
+      "recommendedValue": "",
       "description": "The host that has been assigned to run HBase Master",
       "displayType": "masterHosts",
       "isOverridable": false,
@@ -733,7 +733,7 @@ var props = {
       "name": "hbase_master_principal_name",
       "displayName": "Principal name",
       "value": "",
-      "defaultValue": "hbase/_HOST",
+      "recommendedValue": "hbase/_HOST",
       "description": "Principal name for HBase master. _HOST will get automatically replaced with actual hostname at an instance of HBase Master",
       "displayType": "principal",
       "isVisible": true,
@@ -747,7 +747,7 @@ var props = {
       "name": "hbase_master_keytab",
       "displayName": "Path to keytab file",
       "value": "",
-      "defaultValue": "/etc/security/keytabs/hbase.service.keytab",
+      "recommendedValue": "/etc/security/keytabs/hbase.service.keytab",
       "description": "Path to HBase master keytab file",
       "displayType": "directory",
       "isVisible": true,
@@ -761,7 +761,7 @@ var props = {
       "name": "regionserver_hosts",
       "displayName": "RegionServer hosts",
       "value": "",
-      "defaultValue": "",
+      "recommendedValue": "",
       "description": "The hosts that have been assigned to run RegionServer",
       "displayType": "slaveHosts",
       "isOverridable": false,
@@ -774,7 +774,7 @@ var props = {
       "name": "hbase_regionserver_principal_name",
       "displayName": "Principal name",
       "value": "",
-      "defaultValue": "hbase/_HOST",
+      "recommendedValue": "hbase/_HOST",
       "description": "Principal name for RegionServer. _HOST will get automatically replaced with actual hostname at every instance of RegionServer",
       "displayType": "principal",
       "isVisible": true,
@@ -788,7 +788,7 @@ var props = {
       "name": "hbase_regionserver_keytab",
       "displayName": "Path to keytab file",
       "value": "",
-      "defaultValue": "/etc/security/keytabs/hbase.service.keytab",
+      "recommendedValue": "/etc/security/keytabs/hbase.service.keytab",
       "description": "Path to RegionServer keytab file",
       "displayType": "directory",
       "isVisible": true,
@@ -804,7 +804,7 @@ var props = {
       "name": "hive_metastore",
       "displayName": "Hive Metastore hosts",
       "value": "",
-      "defaultValue": "localhost",
+      "recommendedValue": "localhost",
       "description": "The hosts that have been assigned to run Hive Metastore and HiveServer2",
       "displayType": "masterHosts",
       "isVisible": true,
@@ -817,7 +817,7 @@ var props = {
       "name": "hive_metastore_principal_name",
       "displayName": "Principal name",
       "value": "",
-      "defaultValue": "hive/_HOST",
+      "recommendedValue": "hive/_HOST",
       "description": "Principal name for Hive Metastore and HiveServer2. _HOST will get automatically replaced with actual hostname at an instance of Hive Metastore and HiveServer2",
       "displayType": "principal",
       "isVisible": true,
@@ -831,7 +831,7 @@ var props = {
       "name": "hive_metastore_keytab",
       "displayName": "Path to keytab file",
       "value": "",
-      "defaultValue": "/etc/security/keytabs/hive.service.keytab",
+      "recommendedValue": "/etc/security/keytabs/hive.service.keytab",
       "description": "Path to Hive Metastore and HiveServer2 keytab file",
       "displayType": "directory",
       "isVisible": true,
@@ -845,7 +845,7 @@ var props = {
       "name": "hive_metastore_http_principal_name",
       "displayName": "Web principal name",
       "value": "",
-      "defaultValue": "HTTP/_HOST",
+      "recommendedValue": "HTTP/_HOST",
       "description": "Principal name for SPNEGO access to Hive Metastore and HiveServer2. _HOST will get automatically replaced with actual hostname at an instance of Hive Metastore and HiveServer2",
       "displayType": "principal",
       "isVisible": true,
@@ -858,7 +858,7 @@ var props = {
       "name": "hive_metastore_http_keytab",
       "displayName": "Path to SPNEGO keytab file",
       "value": "",
-      "defaultValue": "/etc/security/keytabs/spnego.service.keytab",
+      "recommendedValue": "/etc/security/keytabs/spnego.service.keytab",
       "description": "Path to SPNEGO keytab file for  Hive Metastore and HiveServer2",
       "displayType": "directory",
       "isVisible": true,
@@ -873,7 +873,7 @@ var props = {
       "name": "oozie_servername",
       "displayName": "Oozie Server host",
       "value": "",
-      "defaultValue": "localhost",
+      "recommendedValue": "localhost",
       "description": "Oozie server host name",
       "displayType": "masterHost",
       "isVisible": true,
@@ -886,7 +886,7 @@ var props = {
       "name": "oozie_principal_name",
       "displayName": "Principal name",
       "value": "",
-      "defaultValue": "oozie/_HOST",
+      "recommendedValue": "oozie/_HOST",
       "description": "Principal name for Oozie server",
       "displayType": "principal",
       "isVisible": true,
@@ -900,7 +900,7 @@ var props = {
       "name": "oozie_keytab",
       "displayName": "Path to keytab file",
       "value": "",
-      "defaultValue": "/etc/security/keytabs/oozie.service.keytab",
+      "recommendedValue": "/etc/security/keytabs/oozie.service.keytab",
       "description": "Path to Oozie server keytab file",
       "displayType": "directory",
       "isVisible": true,
@@ -915,7 +915,7 @@ var props = {
       "name": "oozie_http_principal_name",
       "displayName": "Web principal name",
       "value": "",
-      "defaultValue": "HTTP/_HOST",
+      "recommendedValue": "HTTP/_HOST",
       "description": "Principal name for SPNEGO access to Oozie",
       "displayType": "principal",
       "isVisible": true,
@@ -928,7 +928,7 @@ var props = {
       "name": "oozie_http_keytab",
       "displayName": "Path to SPNEGO keytab file",
       "value": "",
-      "defaultValue": "/etc/security/keytabs/spnego.service.keytab",
+      "recommendedValue": "/etc/security/keytabs/spnego.service.keytab",
       "description": "Path to SPNEGO keytab file for oozie",
       "displayType": "directory",
       "isVisible": true,
@@ -943,7 +943,7 @@ var props = {
       "name": "zookeeperserver_hosts",
       "displayName": "ZooKeeper Server hosts",
       "value": "",
-      "defaultValue": "",
+      "recommendedValue": "",
       "description": "The host that has been assigned to run ZooKeeper Server",
       "displayType": "masterHosts",
       "isVisible": true,
@@ -956,7 +956,7 @@ var props = {
       "name": "zookeeper_principal_name",
       "displayName": "Principal name",
       "value": "",
-      "defaultValue": "zookeeper/_HOST",
+      "recommendedValue": "zookeeper/_HOST",
       "description": "Principal name for ZooKeeper. _HOST will get automatically replaced with actual hostname at every instance of zookeeper server",
       "displayType": "principal",
       "isVisible": true,
@@ -971,7 +971,7 @@ var props = {
       "name": "zookeeper_keytab_path",
       "displayName": "Path to keytab file",
       "value": "",
-      "defaultValue": "/etc/security/keytabs/zk.service.keytab",
+      "recommendedValue": "/etc/security/keytabs/zk.service.keytab",
       "description": "Path to ZooKeeper keytab file",
       "displayType": "directory",
       "isVisible": true,
@@ -987,7 +987,7 @@ var props = {
       "name": "falcon_server_host",
       "displayName": "Falcon server host",
       "value": "",
-      "defaultValue": "",
+      "recommendedValue": "",
       "description": "Falcon Server host",
       "displayType": "masterHost",
       "isVisible": true,
@@ -1000,7 +1000,7 @@ var props = {
       "name": "falcon_principal_name",
       "displayName": "Falcon principal name",
       "value": "",
-      "defaultValue": "falcon/_HOST",
+      "recommendedValue": "falcon/_HOST",
       "description": "This is the principal name for Falcon Server",
       "displayType": "principal",
       "isVisible": true,
@@ -1014,7 +1014,7 @@ var props = {
       "name": "falcon_keytab",
       "displayName": "Path to Falcon server keytab file",
       "value": "",
-      "defaultValue": "/etc/security/keytabs/falcon.service.keytab",
+      "recommendedValue": "/etc/security/keytabs/falcon.service.keytab",
       "description": "Path to the Falcon Server keytab file",
       "displayType": "directory",
       "isVisible": true,
@@ -1028,7 +1028,7 @@ var props = {
       "name": "falcon_http_principal_name",
       "displayName": "Web principal name",
       "value": "",
-      "defaultValue": "HTTP/_HOST",
+      "recommendedValue": "HTTP/_HOST",
       "description": "Principal name for SPNEGO access to Falcon",
       "displayType": "principal",
       "isVisible": true,
@@ -1041,7 +1041,7 @@ var props = {
       "name": "falcon_http_keytab",
       "displayName": "Path to SPNEGO keytab file",
       "value": "",
-      "defaultValue": "/etc/security/keytabs/spnego.service.keytab",
+      "recommendedValue": "/etc/security/keytabs/spnego.service.keytab",
       "description": "Path to SPNEGO keytab file for Falcon",
       "displayType": "directory",
       "isVisible": true,
@@ -1054,7 +1054,7 @@ var props = {
       "name": "namenode_principal_name_falcon",
       "displayName": "NameNode principal name",
       "value": "",
-      "defaultValue": "nn/_HOST",
+      "recommendedValue": "nn/_HOST",
       "description": "NameNode principal to talk to config store",
       "displayType": "principal",
       "isVisible": true,
@@ -1069,7 +1069,7 @@ var props = {
       "name": "knox_gateway_hosts",
       "displayName": "Knox Gateway hosts",
       "value": "",
-      "defaultValue": "",
+      "recommendedValue": "",
       "description": "The hosts that has been assigned to run Knox Gateway",
       "displayType": "masterHosts",
       "isOverridable": false,
@@ -1082,7 +1082,7 @@ var props = {
       "name": "knox_principal_name",
       "displayName": "Principal name",
       "value": "",
-      "defaultValue": "knox/_HOST",
+      "recommendedValue": "knox/_HOST",
       "description": "This is the principal name for Knox Gateway",
       "displayType": "principal",
       "isVisible": true,
@@ -1097,7 +1097,7 @@ var props = {
       "name": "knox_keytab_path",
       "displayName": "Path to keytab file",
       "value": "",
-      "defaultValue": "/etc/security/keytabs/knox.service.keytab",
+      "recommendedValue": "/etc/security/keytabs/knox.service.keytab",
       "description": "This is the keytab file for Knox Gateway",
       "displayType": "directory",
       "isVisible": true,
@@ -1116,7 +1116,7 @@ var stormProperties = [
     "name": "storm_host",
     "displayName": "Storm component hosts",
     "value": "",
-    "defaultValue": "",
+    "recommendedValue": "",
     "description": "Storm component hosts",
     "displayType": "slaveHosts",
     "isVisible": true,
@@ -1129,7 +1129,7 @@ var stormProperties = [
     "name": "storm_principal_name",
     "displayName": " Storm principal name",
     "value": "",
-    "defaultValue": "storm/_HOST",
+    "recommendedValue": "storm/_HOST",
     "description": "Principal name for Supervisor. _HOST will get automatically replaced with actual hostname at an instance of every storm component.",
     "displayType": "principal",
     "isVisible": true,
@@ -1144,7 +1144,7 @@ var stormProperties = [
     "name": "storm_keytab",
     "displayName": "Path to Storm keytab file",
     "value": "",
-    "defaultValue": "/etc/security/keytabs/storm.service.keytab",
+    "recommendedValue": "/etc/security/keytabs/storm.service.keytab",
     "description": "Path to the storm keytab file",
     "displayType": "directory",
     "isVisible": true,
@@ -1161,7 +1161,7 @@ var storm22Properties = [
     "name": "storm_principal_name",
     "displayName": " Storm principal name",
     "value": "",
-    "defaultValue": "storm/_HOST",
+    "recommendedValue": "storm/_HOST",
     "description": "Principal name for Storm components. _HOST will get automatically replaced with actual hostname at an instance of every storm component.",
     "displayType": "principal",
     "isVisible": true,
@@ -1176,7 +1176,7 @@ var storm22Properties = [
     "name": "storm_keytab",
     "displayName": "Path to Storm keytab file",
     "value": "",
-    "defaultValue": "/etc/security/keytabs/storm.service.keytab",
+    "recommendedValue": "/etc/security/keytabs/storm.service.keytab",
     "description": "Path to the storm keytab file",
     "displayType": "directory",
     "isVisible": true,
@@ -1191,7 +1191,7 @@ var storm22Properties = [
     "name": "nimbus_host",
     "displayName": "Nimbus hosts",
     "value": "",
-    "defaultValue": "",
+    "recommendedValue": "",
     "description": "Nimbus component hosts",
     "displayType": "slaveHosts",
     "isVisible": true,
@@ -1204,7 +1204,7 @@ var storm22Properties = [
     "name": "nimbus_principal_name",
     "displayName": " Nimbus principal name",
     "value": "",
-    "defaultValue": "nimbus/_HOST",
+    "recommendedValue": "nimbus/_HOST",
     "description": "Nimbus Principal name",
     "displayType": "principal",
     "isVisible": true,
@@ -1219,7 +1219,7 @@ var storm22Properties = [
     "name": "nimbus_keytab",
     "displayName": "Path to Nimbus keytab file",
     "value": "",
-    "defaultValue": "/etc/security/keytabs/nimbus.service.keytab",
+    "recommendedValue": "/etc/security/keytabs/nimbus.service.keytab",
     "description": "Path to the nimbus keytab file",
     "displayType": "directory",
     "isVisible": true,
@@ -1234,7 +1234,7 @@ var storm22Properties = [
     "name": "storm_ui_principal_name",
     "displayName": "Storm UI principal name",
     "value": "",
-    "defaultValue": "HTTP/_HOST",
+    "recommendedValue": "HTTP/_HOST",
     "description": "Principal name for Storm UI",
     "displayType": "principal",
     "isVisible": false,
@@ -1248,7 +1248,7 @@ var storm22Properties = [
     "name": "storm_ui_keytab",
     "displayName": "Path to Nimbus UI keytab file",
     "value": "",
-    "defaultValue": "/etc/security/keytabs/spnego.service.keytab",
+    "recommendedValue": "/etc/security/keytabs/spnego.service.keytab",
     "description": "Path to the Storm UI keytab file",
     "displayType": "directory",
     "isVisible": false,

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 113 - 111
ambari-web/app/data/HDP2/site_properties.js


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 113 - 111
ambari-web/app/data/PHD/site_properties.js


+ 2 - 2
ambari-web/app/mappers/configs/config_versions_mapper.js

@@ -78,8 +78,8 @@ App.configVersionsMapper = App.QuickDataMapper.create({
                 config_version_id: parsedItem.id,
                 stack_config_property_id: key  + '_' + type
               };
-              property.value = property.default_value = config.properties[key];
-              property.is_final = property.default_is_final = !!item.properties_attributes && item.properties_attributes.final[key] === "true";
+              property.value = property.recommended_value = config.properties[key];
+              property.is_final = property.recommended_is_final = !!item.properties_attributes && item.properties_attributes.final[key] === "true";
 
               properties.push(property);
               requestedProperties.push(property.id);

+ 3 - 3
ambari-web/app/mappers/configs/stack_config_properties_mapper.js

@@ -26,7 +26,7 @@ App.stackConfigPropertiesMapper = App.QuickDataMapper.create({
     file_name: 'StackConfigurations.type',
     description: 'StackConfigurations.property_description',
     value: 'StackConfigurations.property_value',
-    default_value: 'StackConfigurations.property_value',
+    recommended_value: 'StackConfigurations.property_value',
     type: 'StackConfigurations.property_type',
     service_name: 'StackConfigurations.service_name',
     stack_name: 'StackConfigurations.stack_name',
@@ -34,7 +34,7 @@ App.stackConfigPropertiesMapper = App.QuickDataMapper.create({
     property_depended_by: 'StackConfigurations.property_depended_by',
     value_attributes: 'StackConfigurations.property_value_attributes',
     is_final: 'default_is_final',
-    default_is_final: 'default_is_final',
+    recommended_is_final: 'default_is_final',
     supports_final: 'supports_final',
     widget: 'widget',
     /**** ui properties ***/
@@ -52,7 +52,7 @@ App.stackConfigPropertiesMapper = App.QuickDataMapper.create({
         stackItem.configurations.forEach(function(config) {
           var configType = App.config.getConfigTagFromFileName(config.StackConfigurations.type);
           config.id = config.StackConfigurations.property_name + '_' + configType;
-          config.default_is_final = config.StackConfigurations.final === "true";
+          config.recommended_is_final = config.StackConfigurations.final === "true";
           config.supports_final = !!configTypeInfo[configType] && configTypeInfo[configType].supports.final === "true";
           // Map from /dependencies to property_depended_by
           config.StackConfigurations.property_depended_by = [];

+ 1 - 0
ambari-web/app/messages.js

@@ -265,6 +265,7 @@ Em.I18n.translations = {
   'common.preview': 'Preview',
   'common.scope': 'Scope',
   'common.clone': 'Clone',
+  'common.removed': 'Removed',
 
   'models.alert_instance.tiggered.verbose': "Occured on {0} <br> Checked on {1}",
   'models.alert_definition.triggered.verbose': "Occured on {0}",

+ 1 - 117
ambari-web/app/mixins/common/configs/configs_saver.js

@@ -312,13 +312,10 @@ App.ConfigsSaverMixin = Em.Mixin.create({
    * @method saveSiteConfigs
    */
   saveSiteConfigs: function (configs) {
-    //storedConfigs contains custom configs as well
     configs = this.setHiveHostName(configs);
     configs = this.setOozieHostName(configs);
     this.formatConfigValues(configs);
-    var mappedConfigs = App.config.excludeUnsupportedConfigs(this.get('configMapping').all(), App.Service.find().mapProperty('serviceName'));
-    var allUiConfigs = this.loadUiSideConfigs(mappedConfigs);
-    return configs.concat(allUiConfigs);
+    return configs;
   },
 
   /**
@@ -437,119 +434,6 @@ App.ConfigsSaverMixin = Em.Mixin.create({
     return configs;
   },
 
-  /*********************************** 2.2 ADD DYNAMIC CONFIGS ********************************/
-  /**
-   * return configs from the UI side
-   * @param configMapping array with configs
-   * @return {Array}
-   * @private
-   * @method loadUiSideConfigs
-   */
-  loadUiSideConfigs: function (configMapping) {
-    var uiConfig = [];
-    var configs = configMapping.filterProperty('foreignKey', null);
-    this.addDynamicProperties(configs);
-    configs.forEach(function (_config) {
-      var valueWithOverrides = this.getGlobConfigValueWithOverrides(_config.templateName, _config.value, _config.name);
-      if (valueWithOverrides !== null) {
-        uiConfig.pushObject({
-          "id": "site property",
-          "name": _config.name,
-          "value": valueWithOverrides.value,
-          "filename": _config.filename,
-          "overrides": valueWithOverrides.overrides
-        });
-      }
-    }, this);
-    return uiConfig;
-  },
-
-  /**
-   * @param configs
-   * @private
-   * @method addDynamicProperties
-   */
-  addDynamicProperties: function (configs) {
-    var allConfigs = this.get('stepConfigs').findProperty('serviceName', this.get('content.serviceName')).get('configs');
-    var templetonHiveProperty = allConfigs.someProperty('name', 'templeton.hive.properties');
-    if (!templetonHiveProperty && this.get('content.serviceName') === 'HIVE') {
-      configs.pushObject({
-        "name": "templeton.hive.properties",
-        "templateName": ["hive.metastore.uris"],
-        "foreignKey": null,
-        "value": "hive.metastore.local=false,hive.metastore.uris=<templateName[0]>,hive.metastore.sasl.enabled=yes,hive.metastore.execute.setugi=true,hive.metastore.warehouse.dir=/apps/hive/warehouse",
-        "filename": "webhcat-site.xml"
-      });
-    }
-  },
-
-  /**
-   * return config value
-   * @param templateName
-   * @param expression
-   * @param name
-   * @return {Object}
-   * example: <code>{
-   *   value: '...',
-   *   overrides: {
-   *    'value1': [h1, h2],
-   *    'value2': [h3]
-   *   }
-   * }</code>
-   * @private
-   * @method getGlobConfigValueWithOverrides
-   */
-  getGlobConfigValueWithOverrides: function (templateName, expression, name) {
-    var express = expression.match(/<(.*?)>/g);
-    var value = expression;
-    var overrideHostToValue = {};
-    if (express != null) {
-      express.forEach(function (_express) {
-        var index = parseInt(_express.match(/\[([\d]*)(?=\])/)[1]);
-        var globalObj = this.get('allConfigs').findProperty('name', templateName[index]);
-        if (globalObj) {
-          var globOverride = globalObj.overrides;
-          if (globOverride != null) {
-            for (var ov in globOverride) {
-              globOverride[ov].forEach(function (host) {
-                var replacedVal = (host in overrideHostToValue) ? overrideHostToValue[host] : expression;
-                overrideHostToValue[host] = App.config.replaceConfigValues(name, _express, replacedVal, ov);
-              }, this);
-            }
-          }
-          value = App.config.replaceConfigValues(name, _express, expression, globalObj.value);
-        } else {
-          value = null;
-        }
-      }, this);
-    }
-    return this.getValueWithOverrides(value, overrideHostToValue)
-  },
-
-  /**
-   * @param value
-   * @param overrideHostToValue
-   * @returns {{value: *, overrides: {}}}
-   * @private
-   * @method getValueWithOverrides
-   */
-  getValueWithOverrides: function (value, overrideHostToValue) {
-    var valueWithOverrides = {
-      value: value,
-      overrides: {}
-    };
-    if (!jQuery.isEmptyObject(overrideHostToValue)) {
-      for (var host in overrideHostToValue) {
-        var hostVal = overrideHostToValue[host];
-        if (!(hostVal in valueWithOverrides.overrides)) {
-          valueWithOverrides.overrides[hostVal] = [];
-        }
-        valueWithOverrides.overrides[hostVal].push(host);
-      }
-    }
-    return valueWithOverrides;
-  },
-
   /*********************************** 3. GENERATING JSON TO SAVE *****************************/
 
   /**

+ 63 - 19
ambari-web/app/mixins/common/configs/enhanced_configs.js

@@ -33,9 +33,28 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
    * @type {boolean}
    */
   hasChangedDependencies: function() {
-    return App.get('isClusterSupportsEnhancedConfigs') && this.get('_dependentConfigValues.length') > 0;
+    return App.get('isClusterSupportsEnhancedConfigs') && this.get('isControllerSupportsEnhancedConfigs') && this.get('_dependentConfigValues.length') > 0;
   }.property('_dependentConfigValues.length'),
 
+  /**
+   * defines is block with changed dependent configs should be shown
+   * rely on controller
+   * @type {boolean}
+   */
+  isControllerSupportsEnhancedConfigs: function() {
+    return ['wizardStep7Controller','mainServiceInfoConfigsController'].contains(this.get('name'));
+  }.property('name'),
+
+  /**
+   * defines if initialValue of config can be used on current controller
+   * if not savedValue is used instead
+   * @type {boolean}
+   */
+  useInitialValue: function() {
+    ['wizardStep7Controller'].contains(this.get('name'));
+  }.property('name'),
+
+
   /**
    * message fro alert box for dependent configs
    * @type {string}
@@ -121,7 +140,11 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
   },
 
   onConfigGroupChangeForEnhanced: function() {
-    this.clearDependentConfigs();
+    if (this.get('name') === 'mainServiceInfoConfigsController') {
+      this.clearDependentConfigs();
+    } else {
+      this.set('groupsToSave', {});
+    }
     this.get('dependentServiceNames').forEach(function(serviceName) {
       var defaultGroup = this.get('dependentConfigGroups').filterProperty('service.serviceName', serviceName).findProperty('isDefault');
       this.get('groupsToSave')[serviceName] = defaultGroup.get('name');
@@ -389,7 +412,7 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
       var serviceName = service.get('serviceName');
       var stepConfig = this.get('stepConfigs').findProperty('serviceName', serviceName);
       if (stepConfig) {
-
+        var initialValue;
         var configProperties = stepConfig ? stepConfig.get('configs').filterProperty('filename', App.config.getOriginalFileName(key)) : [];
 
         var group = this.getGroupForService(serviceName);
@@ -401,14 +424,28 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
           var override = (notDefaultGroup && group && cp && cp.get('overrides')) ? cp.get('overrides').findProperty('group.name', group.get('name')) : null;
 
           var value = override ? override.get('value') : cp && cp.get('value');
-          var defaultValue = override ? override.get('defaultValue') : cp && cp.get('defaultValue');
+
+          if (this.get('useInitialValue')) {
+            initialValue = override ? override.get('initialValue') : cp && cp.get('initialValue');
+          } else {
+            initialValue = override ? override.get('savedValue') : cp && cp.get('savedValue');
+          }
+
+
+          initialValue = Em.isNone(initialValue) ? value : initialValue;
           var recommendedValue = configObject[key].properties[propertyName];
 
           var isNewProperty = (!notDefaultGroup && Em.isNone(cp)) || (notDefaultGroup && group && Em.isNone(override));
 
-          if (!updateOnlyBoundaries && !parentPropertiesNames.contains(propertyName) && defaultValue != recommendedValue) { //on first initial request we don't need to change values
+          var parsedInit = parseFloat(initialValue);
+          var parsedRecommended = parseFloat(recommendedValue);
+          if (!isNaN(parsedInit) && !isNaN(parsedRecommended)) {
+            initialValue = parsedInit.toString();
+            recommendedValue = parsedRecommended.toString();
+          }
+          if (!updateOnlyBoundaries && !parentPropertiesNames.contains(propertyName) && initialValue != recommendedValue) { //on first initial request we don't need to change values
             if (dependentProperty) {
-              Em.set(dependentProperty, 'value', defaultValue);
+              Em.set(dependentProperty, 'value', initialValue);
               Em.set(dependentProperty, 'recommendedValue', recommendedValue);
               Em.set(dependentProperty, 'toDelete', false);
               Em.set(dependentProperty, 'toAdd', isNewProperty);
@@ -423,7 +460,7 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
                 fileName: key,
                 propertyName: propertyName,
                 configGroup: group ? group.get('name') : service.get('displayName') + " Default",
-                value: defaultValue,
+                value: initialValue,
                 parentConfigs: parentPropertiesNames,
                 serviceName: serviceName,
                 allowChangeGroup: serviceName != this.get('content.serviceName') && !this.get('selectedConfigGroup.isDefault'),
@@ -448,21 +485,21 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
            * properties that wasn't changed while recommendations
            */
 
-          if ((defaultValue == recommendedValue) || (Em.isNone(defaultValue) && Em.isNone(recommendedValue))) {
+          if ((initialValue == recommendedValue) || (Em.isNone(initialValue) && Em.isNone(recommendedValue))) {
             /** if recommended value same as default we shouldn't show it in popup **/
             if (notDefaultGroup) {
               if (override) {
                 if (override.get('isNotSaved')) {
                   cp.get('overrides').removeObject(override);
                 } else {
-                  override.set('value', defaultValue);
+                  override.set('value', initialValue);
                 }
                 if (dependentProperty) {
                   this.get('_dependentConfigValues').removeObject(dependentProperty);
                 }
               }
             } else {
-              cp.set('value', defaultValue);
+              cp.set('value', initialValue);
               if (dependentProperty) {
                 this.get('_dependentConfigValues').removeObject(dependentProperty);
               }
@@ -508,7 +545,7 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
                 self.get('_dependentConfigValues').pushObject({
                   saveRecommended: true,
                   saveRecommendedDefault: true,
-                  propertyValue: cp && cp.get('defaultValue'),
+                  propertyValue: cp && (cp.get('useInitialValue') ? cp.get('initialValue') : cp.get('savedValue')),
                   toDelete: true,
                   toAdd: false,
                   isDeleted: true,
@@ -568,13 +605,13 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
             name: Em.get(propertyToAdd, 'propertyName'),
             displayName: Em.get(propertyToAdd, 'propertyName'),
             value: Em.get(propertyToAdd, 'recommendedValue'),
-            defaultValue: Em.get(propertyToAdd, 'recommendedValue'),
+            recommendedValue: Em.get(propertyToAdd, 'recommendedValue'),
+            savedValue: null,
             category: 'Advanced ' + Em.get(propertyToAdd, 'fileName'),
             serviceName: stepConfigs.get('serviceName'),
             filename: App.config.getOriginalFileName(Em.get(propertyToAdd, 'fileName')),
             isNotSaved: !Em.get(propertyToAdd, 'isDeleted'),
-            isRequired: true,
-            forceUpdate: true
+            isRequired: true
           });
           stepConfigs.get('configs').pushObject(addedProperty);
           addedProperty.validate();
@@ -652,16 +689,23 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
         if (propertyToUpdate) {
           var valueToSave = propertyToUpdate.saveRecommended ? propertyToUpdate.recommendedValue : propertyToUpdate.value;
           if (!selectedGroup || selectedGroup.get('isDefault')) {
-            cp.set('value', valueToSave);
-            cp.set('forceUpdate', true);
+            if (propertyToUpdate.saveRecommended || cp.get('value') == propertyToUpdate.recommendedValue) {
+              cp.set('value', valueToSave);
+            }
+            cp.set('recommendedValue', propertyToUpdate.recommendedValue);
           } else {
             if (stepConfigs.get('serviceName') !== this.get('content.serviceName')) {
-              cp.set('value', cp.get('defaultValue'));
-              cp.set('forceUpdate', true);
+              if (propertyToUpdate.saveRecommended || cp.get('value') == propertyToUpdate.recommendedValue) {
+                cp.set('value', this.get('useInitialValue') ? cp.get('initialValue') : cp.get('savedValue'));
+              }
+              cp.set('recommendedValue', propertyToUpdate.recommendedValue);
             }
             var overriddenConfig = cp.get('overrides') && cp.get('overrides').findProperty('group.name', selectedGroup.get('name'));
             if (overriddenConfig) {
-              overriddenConfig.set('value', valueToSave);
+              if (propertyToUpdate.saveRecommended || overriddenConfig.get('value') == propertyToUpdate.recommendedValue) {
+                overriddenConfig.set('value', valueToSave);
+              }
+              overriddenConfig.set('recommendedValue', propertyToUpdate.recommendedValue);
             }
           }
         }

+ 15 - 8
ambari-web/app/models/configs/config_property.js

@@ -36,18 +36,19 @@ App.ConfigProperty = DS.Model.extend({
    * @property {string}
    */
   fileName: DS.attr('string'),
+
   /**
    * value of property
-   * by default is same as <code>defaultValue<code>
+   * by default is same as <code>savedValue<code>
    * @property {string}
    */
   value: DS.attr('string'),
 
   /**
-   * default value of property
+   * saved value of property
    * @property {string}
    */
-  defaultValue: DS.attr('string'),
+  savedValue: DS.attr('string'),
 
   /**
    * recommended value of property
@@ -62,11 +63,17 @@ App.ConfigProperty = DS.Model.extend({
    */
   isFinal: DS.attr('boolean', {defaultValue: false}),
 
+
+  /**
+   * value saved on cluster
+   */
+  savedIsFinal: DS.attr('boolean', {defaultValue: false}),
+
   /**
-   * defines if property is final by default
+   * value recommendedFrom Server
    * @property {boolean}
    */
-  defaultIsFinal: DS.attr('boolean', {defaultValue: false}),
+  recommendedIsFinal: DS.attr('boolean', {defaultValue: false}),
 
   /**
    * link to config version
@@ -224,9 +231,9 @@ App.ConfigProperty = DS.Model.extend({
    */
   isNotDefaultValue: function () {
     return this.get('isEditable')
-      && ((this.get('defaultValue') != null && this.get('value') !== this.get('defaultValue'))
-      || (this.get('supportsFinal') && this.get('isFinal') !== this.get('defaultIsFinal')));
-  }.property('value', 'defaultValue', 'isEditable', 'isFinal', 'defaultIsFinal'),
+      && (!Em.isNone(this.get('savedValue') && this.get('value') !== this.get('savedValue'))
+      || (this.get('supportsFinal') && !Em.isNone(this.get('savedIsFinal')) && this.get('isFinal') !== this.get('savedIsFinal')));
+  }.property('value', 'savedValue', 'isEditable', 'isFinal', 'savedIsFinal'),
 
   /**
    * opposite to <code>hasErrors<code>

+ 1 - 2
ambari-web/app/models/configs/objects/service_config.js

@@ -66,8 +66,7 @@ App.ServiceConfig = Ember.Object.extend({
     return requiredByAgent.someProperty('isNotSaved') ||
            requiredByAgent.someProperty('isNotDefaultValue') ||
            requiredByAgent.someProperty('isOverrideChanged') ||
-           this.get('configs.length') !== this.get('initConfigsLength') ||
-           (this.get('configs.length') === this.get('initConfigsLength') && this.get('configs').someProperty('defaultValue', null));
+           this.get('configs.length') !== this.get('initConfigsLength');
   }.property('configs.@each.isNotDefaultValue', 'configs.@each.isOverrideChanged', 'configs.length', 'configs.@each.isNotSaved')
 });
 

+ 65 - 19
ambari-web/app/models/configs/objects/service_config_property.js

@@ -24,9 +24,61 @@ App.ServiceConfigProperty = Em.Object.extend({
   id: '', //either 'puppet var' or 'site property'
   name: '',
   displayName: '',
+
+  /**
+   * value that is shown on IU
+   * and is changing by user
+   * @type {String|null}
+   */
   value: '',
+
+  /**
+   * value that is saved on cluster configs
+   * and stored in /api/v1/clusters/{name}/configurations
+   * @type {String|null}
+   */
+  savedValue: null,
+
+  /**
+   * value that is returned from server as recommended
+   * or stored on stack
+   * @type {String|null}
+   */
+  recommendedValue: null,
+
+  /**
+   * initial value of config. if value is saved it will be initial
+   * otherwise first recommendedValue will be initial
+   * @type {String|null}
+   */
+  initialValue: null,
+
+  /**
+   * value that is shown on IU
+   * and is changing by user
+   * @type {boolean}
+   */
+  isFinal: false,
+
+  /**
+   * value that is saved on cluster configs api
+   * @type {boolean}
+   */
+  savedIsFinal: null,
+
+  /**
+   * value that is returned from server as recommended
+   * or stored on stack
+   * @type {boolean}
+   */
+  recommendedIsFinal: null,
+
+  /**
+   * @type {boolean}
+   */
+  supportsFinal: false,
+
   retypedPassword: '',
-  defaultValue: '',
   defaultDirectory: '',
   description: '',
   displayType: 'string', // string, digits, number, directories, custom
@@ -36,12 +88,9 @@ App.ServiceConfigProperty = Em.Object.extend({
   isReconfigurable: true, // by default a config property is reconfigurable
   isEditable: true, // by default a config property is editable
   isNotEditable: Ember.computed.not('isEditable'),
-  isFinal: false,
   hideFinalIcon: function () {
     return (!this.get('isFinal'))&& this.get('isNotEditable');
   }.property('isFinal', 'isNotEditable'),
-  defaultIsFinal: false,
-  supportsFinal: false,
   isVisible: true,
   isMock: false, // mock config created created only to displaying
   isRequiredByAgent: true, // Setting it to true implies property will be stored in configuration
@@ -84,18 +133,11 @@ App.ServiceConfigProperty = Em.Object.extend({
   rowStyleClass: null, // CSS-Class to be applied on the row showing this config
   showAsTextBox: false,
 
-  forceUpdate: false,
-  /**
-   * value that is returned from server as recommended
-   * @type {String}
-   */
-  recommendedValue: null,
-
   /**
    * @type {boolean}
    */
   recommendedValueExists: function () {
-    return !Em.isNone(this.get('recommendedValue'));
+    return !Em.isNone(this.get('recommendedValue')) && this.get('isRequiredByAgent') && !this.get('cantBeUndone');
   }.property('recommendedValue'),
 
   /**
@@ -148,9 +190,13 @@ App.ServiceConfigProperty = Em.Object.extend({
       this.set('retypedPassword', this.get('value'));
     }
     if ((this.get('id') === 'puppet var') && this.get('value') == '') {
-      this.set('value', this.get('defaultValue'));
+      if (this.get('savedValue')) {
+        this.set('value', this.get('savedValue'));
+      } else if (this.get('recommendedValue')) {
+        this.set('value', this.get('recommendedValue'));
+      }
     }
-    // TODO: remove mock data
+    this.set('initialValue', this.get('value'));
   },
 
   /**
@@ -159,18 +205,18 @@ App.ServiceConfigProperty = Em.Object.extend({
    */
   isNotDefaultValue: function () {
     var value = this.get('value');
-    var defaultValue = this.get('defaultValue');
+    var savedValue = this.get('savedValue');
     var supportsFinal = this.get('supportsFinal');
     var isFinal = this.get('isFinal');
-    var defaultIsFinal = this.get('defaultIsFinal');
+    var savedIsFinal = this.get('savedIsFinal');
     // ignore precision difference for configs with type of `float` which value may ends with 0
     // e.g. between 0.4 and 0.40
     if (this.get('stackConfigProperty') && this.get('stackConfigProperty.valueAttributes.type') == 'float') {
-      defaultValue = '' + parseFloat(defaultValue);
+      savedValue = !Em.isNone(savedValue) ? '' + parseFloat(savedValue) : null;
       value = '' + parseFloat(value);
     }
-    return (defaultValue != null && value !== defaultValue) || (supportsFinal && isFinal !== defaultIsFinal);
-  }.property('value', 'defaultValue', 'isEditable', 'isFinal', 'defaultIsFinal'),
+    return (savedValue != null && value !== savedValue) || (supportsFinal && !Em.isNone(savedIsFinal) && isFinal !== savedIsFinal);
+  }.property('value', 'savedValue', 'isEditable', 'isFinal', 'savedIsFinal'),
 
   /**
    * Don't show "Undo" for hosts on Installer Step7

+ 4 - 4
ambari-web/app/models/configs/stack_config_property.js

@@ -62,7 +62,7 @@ App.StackConfigProperty = DS.Model.extend({
    * after cluster created is taken from cluster properties value
    * @property {string}
    */
-  defaultValue: DS.attr('string'),
+  recommendedValue: DS.attr('string'),
 
   /**
    * defines if property support usage <code>isFinal<code> flag
@@ -71,10 +71,10 @@ App.StackConfigProperty = DS.Model.extend({
   supportsFinal: DS.attr('boolean', {defaultValue: true}),
 
   /**
-   * defines the defaultValue value of <code>isFinal<code> value
+   * defines the recommended value of <code>isFinal<code> value
    * @property {boolean}
    */
-  defaultIsFinal: DS.attr('boolean', {defaultValue: false}),
+  recommendedIsFinal: DS.attr('boolean', {defaultValue: false}),
 
   /**
    * type of property
@@ -172,7 +172,7 @@ App.StackConfigProperty = DS.Model.extend({
   value: DS.attr('string'),
 
   /**
-   * config property isFinal value same as defaultIsFinal
+   * config property isFinal value same as recommendedIsFinal
    * @property {boolean}
    */
   isFinal: DS.attr('boolean', {defaultValue: false})

+ 7 - 1
ambari-web/app/templates/common/modal_popups/dependent_configs_list.hbs

@@ -46,7 +46,13 @@
         </td>
         <td>{{config.fileName}}</td>
         <td>{{config.value}}</td>
-        <td>{{config.recommendedValue}}</td>
+        <td>
+          {{#if config.isDeleted}}
+            {{t common.removed}}
+          {{else}}
+            {{config.recommendedValue}}
+          {{/if}}
+        </td>
       </tr>
     {{/each}}
     </tbody>

+ 40 - 52
ambari-web/app/utils/config.js

@@ -151,7 +151,6 @@ App.config = Em.Object.create({
                 "name": "content",
                 "displayName": type.endsWith('-env') ? type + ' template' : "content",
                 "value": "",
-                "defaultValue": "",
                 "description": type + " properties",
                 "displayType": "content",
                 "isOverridable": true,
@@ -231,7 +230,7 @@ App.config = Em.Object.create({
   handleSpecialProperties: function (config) {
     if (Em.get(config, 'displayType') === 'int' && /\d+m$/.test(Em.get(config, 'value') )) {
       Em.set(config, 'value', Em.get(config, 'value').slice(0, Em.get(config, 'value.length') - 1));
-      Em.set(config, 'defaultValue', Em.get(config, 'value'));
+      Em.set(config, 'savedValue', Em.get(config, 'value'));
     }
   },
 
@@ -311,7 +310,8 @@ App.config = Em.Object.create({
         var serviceConfigObj = App.ServiceConfig.create({
           name: index,
           value: value,
-          defaultValue: value,
+          savedValue: value,
+          recommendedValue: advancedConfig ? Em.get(advancedConfig, 'recommencedValue') : null,
           filename: filename,
           isUserProperty: !advancedConfig,
           isVisible: !!service,
@@ -319,7 +319,8 @@ App.config = Em.Object.create({
           isReconfigurable: true,
           isRequired: isAdvanced,
           isFinal: finalAttributes[index] === "true",
-          defaultIsFinal: finalAttributes[index] === "true",
+          savedIsFinal: finalAttributes[index] === "true",
+          recommendedIsFinal: advancedConfig ? Em.get(advancedConfig, 'recommendedIsFinal') : null,
           showLabel: true,
           serviceName: serviceName,
           belongsToService: [],
@@ -405,13 +406,13 @@ App.config = Em.Object.create({
     if (serviceConfigObj.get('displayType') == 'directories' && (serviceConfigObj.get('category') == 'DataNode' || serviceConfigObj.get('category') == 'NameNode')) {
       var dirs = serviceConfigObj.get('value').split(',').sort();
       serviceConfigObj.set('value', dirs.join(','));
-      serviceConfigObj.set('defaultValue', dirs.join(','));
+      serviceConfigObj.set('savedValue', dirs.join(','));
     }
 
     if (serviceConfigObj.get('displayType') == 'directory' && serviceConfigObj.get('category') == 'SNameNode') {
       var dirs = serviceConfigObj.get('value').split(',').sort();
       serviceConfigObj.set('value', dirs[0]);
-      serviceConfigObj.set('defaultValue', dirs[0]);
+      serviceConfigObj.set('savedValue', dirs[0]);
     }
 
     if (serviceConfigObj.get('displayType') == 'masterHosts') {
@@ -515,7 +516,8 @@ App.config = Em.Object.create({
         if (preDefined && stored) {
           configData = preDefined;
           configData.value = stored.value;
-          configData.defaultValue = stored.defaultValue;
+          configData.savedValue = stored.savedValue;
+          configData.recommendedValue = stored.recommendedValue;
           configData.overrides = stored.overrides;
           configData.displayName = stored.displayName;
           configData.name = stored.name;
@@ -565,7 +567,8 @@ App.config = Em.Object.create({
           var storedCfg = storedCfgs.findProperty('filename', cfg.filename);
           if (storedCfg) {
             configData.value = storedCfg.value;
-            configData.defaultValue = storedCfg.defaultValue;
+            configData.recommendedValue = storedCfg.recommendedValue;
+            configData.savedValue = storedCfg.savedValue;
             configData.overrides = storedCfg.overrides;
             configData.filename = storedCfg.filename;
             configData.description = storedCfg.description;
@@ -599,7 +602,7 @@ App.config = Em.Object.create({
     } else {
       configData.value = advanced ? advanced.value : configData.value;
     }
-    configData.defaultValue = configData.value;
+    configData.recommendedValue = configData.value;
     configData.filename = advanced ? advanced.filename : configData.filename;
     configData.displayName = advanced && advanced.displayName ? advanced.displayName : configData.displayName;
     configData.name = advanced && advanced.name ? advanced.name : configData.name;
@@ -645,7 +648,7 @@ App.config = Em.Object.create({
             _config.id = "site property";
             _config.category = configCategory;
             _config.displayName = _config.displayName || _config.name;
-            _config.defaultValue = _config.value;
+            _config.recommendedValue = _config.value;
             // make all advanced configs optional and populated by default
             /*
              * if (/\${.*}/.test(_config.value) || (service.serviceName !==
@@ -685,10 +688,9 @@ App.config = Em.Object.create({
    * @param allSelectedServiceNames
    * @param installedServiceNames
    * @param localDB
-   * @param recommended
    * @return {Array}
    */
-  renderConfigs: function (configs, storedConfigs, allSelectedServiceNames, installedServiceNames, localDB, recommended) {
+  renderConfigs: function (configs, storedConfigs, allSelectedServiceNames, installedServiceNames, localDB) {
     var renderedServiceConfigs = [];
     var services = [];
 
@@ -713,15 +715,15 @@ App.config = Em.Object.create({
           var hiveMetastoreUrisConfig = configs.filterProperty('filename', 'hive-site.xml').findProperty('name', 'hive.metastore.uris');
           var clientPortConfig = configs.filterProperty('filename', 'zoo.cfg.xml').findProperty('name', 'clientPort');
           var dependencies = {
-            'hive.metastore.uris': hiveMetastoreUrisConfig && hiveMetastoreUrisConfig.defaultValue,
-            'clientPort': clientPortConfig && clientPortConfig.defaultValue
+            'hive.metastore.uris': hiveMetastoreUrisConfig && hiveMetastoreUrisConfig.recommendedValue,
+            'clientPort': clientPortConfig && clientPortConfig.recommendedValue
           };
           configPropertyHelper.initialValue(serviceConfigProperty, localDB, dependencies);
         }
         if (storedConfigs && storedConfigs.filterProperty('name', _config.name).length && !!_config.filename) {
           var storedConfig = storedConfigs.filterProperty('name', _config.name).findProperty('filename', _config.filename);
           if (storedConfig) {
-            serviceConfigProperty.set('defaultValue', storedConfig.defaultValue);
+            serviceConfigProperty.set('recommendedValue', storedConfig.recommendedValue);
             serviceConfigProperty.set('value', storedConfig.value);
           }
         }
@@ -731,28 +733,6 @@ App.config = Em.Object.create({
       }, this);
       var serviceConfig = this.createServiceConfig(service.get('serviceName'));
       serviceConfig.set('showConfig', service.get('showConfig'));
-
-      // Use calculated default values for some configs
-      var recommendedDefaults = {};
-      if (!storedConfigs && service.get('configTypes')) {
-        Object.keys(service.get('configTypes')).forEach(function (type) {
-          if (!recommended || !recommended[type]) {
-            return;
-          }
-          var defaults = recommended[type].properties;
-          for (var name in defaults) {
-            var config = configsByService.findProperty('name', name);
-            if (!config) {
-              continue;
-            }
-            recommendedDefaults[name] = defaults[name];
-            config.set('value', defaults[name]);
-            config.set('defaultValue', defaults[name]);
-            config.set('recommendedValue', defaults[name]);
-            config.set('forceUpdate', true);
-          }
-        });
-      }
       serviceConfig.set('configs', configsByService);
       renderedServiceConfigs.push(serviceConfig);
     }, this);
@@ -770,9 +750,9 @@ App.config = Em.Object.create({
       break;
     }
     try {
-      if (typeof(config.defaultValue) == "string" && config.defaultValue.indexOf("{firstHost}") >= 0) {
+      if (typeof(config.recommendedValue) == "string" && config.recommendedValue.indexOf("{firstHost}") >= 0) {
         serviceConfigProperty.set('value', serviceConfigProperty.value.replace(new RegExp("{firstHost}"), firstHost));
-        serviceConfigProperty.set('defaultValue', serviceConfigProperty.defaultValue.replace(new RegExp("{firstHost}"), firstHost));
+        serviceConfigProperty.set('recommendedValue', serviceConfigProperty.recommendedValue.replace(new RegExp("{firstHost}"), firstHost));
       }
     } catch (err) {
       // Nothing to worry about here, most likely trying indexOf on a non-string
@@ -989,7 +969,7 @@ App.config = Em.Object.create({
       description: item.property_description,
       isVisible: item.isVisible,
       isFinal: item.final === "true",
-      defaultIsFinal: item.final === "true",
+      recommendedIsFinal: item.final === "true",
       filename: item.filename || fileName
     };
 
@@ -1145,7 +1125,7 @@ App.config = Em.Object.create({
     var propertyObject = {
       name: propertyName,
       displayName: propertyName,
-      defaultValue: propertyValue,
+      savedValue: propertyValue,
       value: propertyValue,
       displayType: stringUtils.isSingleLine(propertyValue) ? 'advanced' : 'multiLine',
       isSecureConfig: false,
@@ -1219,7 +1199,7 @@ App.config = Em.Object.create({
         if (Em.isNone(cFromMapped)) {
           var cFromAll = allConfigs.findProperty('name', cfk);
           if (!Em.isNone(cFromAll)) {
-            globalValue = Em.get(cFromAll, 'value') === '' ? Em.get(cFromAll, 'defaultValue') : Em.get(cFromAll, 'value');
+            globalValue = Em.get(cFromAll, 'value') === '' ? Em.get(cFromAll, 'recommendedValue') : Em.get(cFromAll, 'value');
             config.value = config.value.replace(_fkValue, globalValue);
           }
         }
@@ -1244,7 +1224,7 @@ App.config = Em.Object.create({
             config.noMatchSoSkipThisConfig = true;
           }
           else {
-            globalValue = Em.get(cFromAll, 'value') === '' ? Em.get(cFromAll, 'defaultValue') : Em.get(cFromAll, 'value');
+            globalValue = Em.get(cFromAll, 'value') === '' ? Em.get(cFromAll, 'recommendedValue') : Em.get(cFromAll, 'value');
             config._name = config.name.replace(_fkName, globalValue);
           }
         }
@@ -1305,7 +1285,8 @@ App.config = Em.Object.create({
           this.getOriginalConfigAttribute(stored, 'displayName', advancedConfigs) : App.format.normalizeName(stored.name),
         serviceName: stored.serviceName,
         value: stored.value,
-        defaultValue: stored.defaultValue,
+        savedValue: stored.savedValue,
+        recommendedValue: stored.recommendedValue,
         displayType: skipAttributeChanges.displayType.contains(stored.name) ?
           this.getOriginalConfigAttribute(stored, 'displayType', advancedConfigs) :
           (stringUtils.isSingleLine(stored.value) ? 'advanced' : 'multiLine'),
@@ -1317,7 +1298,7 @@ App.config = Em.Object.create({
         isRequired: false,
         isVisible: stored.isVisible,
         isFinal: stored.isFinal,
-        defaultIsFinal: stored.defaultIsFinal,
+        savedIsFinal: stored.savedIsFinal,
         supportsFinal: stored.supportsFinal,
         showLabel: stored.showLabel !== false,
         category: stored.category
@@ -1341,7 +1322,6 @@ App.config = Em.Object.create({
       "name": "capacity-scheduler",
       "displayName": "Capacity Scheduler",
       "value": "",
-      "defaultValue": "",
       "description": "Capacity Scheduler properties",
       "displayType": "custom",
       "isOverridable": true,
@@ -1366,22 +1346,30 @@ App.config = Em.Object.create({
    */
   fileConfigsIntoTextarea: function (configs, filename, configsToSkip) {
     var fileConfigs = configs.filterProperty('filename', filename);
-    var value = '';
-    var defaultValue = '';
+    var value = '', savedValue = '', recommendedValue = '';
     var template = this.get('complexConfigsTemplate').findProperty('filename', filename);
     var complexConfig = $.extend({}, template);
     if (complexConfig) {
       fileConfigs.forEach(function (_config) {
         if (!(configsToSkip && configsToSkip.someProperty('name', _config.name))) {
           value += _config.name + '=' + _config.value + '\n';
-          defaultValue += _config.name + '=' + _config.defaultValue + '\n';
+          if (!Em.isNone(_config.savedValue)) {
+            savedValue += _config.name + '=' + _config.savedValue + '\n';
+          }
+          if (!Em.isNone(_config.recommendedValue)) {
+            recommendedValue += _config.name + '=' + _config.recommendedValue + '\n';
+          }
         }
       }, this);
       var isFinal = fileConfigs.someProperty('isFinal', true);
+      var savedIsFinal = fileConfigs.someProperty('savedIsFinal', true);
+      var recommendedIsFinal = fileConfigs.someProperty('recommendedIsFinal', true);
       complexConfig.value = value;
-      complexConfig.defaultValue = defaultValue;
+      complexConfig.savedValue = savedValue;
+      complexConfig.recommendedValue = recommendedValue;
       complexConfig.isFinal = isFinal;
-      complexConfig.defaultIsFinal = isFinal;
+      complexConfig.savedIsFinal = savedIsFinal;
+      complexConfig.recommendedIsFinal = recommendedIsFinal;
       configs = configs.filter(function (_config) {
         return _config.filename !== filename || (configsToSkip && configsToSkip.someProperty('name', _config.name));
       });
@@ -1413,7 +1401,7 @@ App.config = Em.Object.create({
             id: configsTextarea.get('id'),
             name: name,
             value: value,
-            defaultValue: value,
+            savedValue: value,
             serviceName: configsTextarea.get('serviceName'),
             filename: filename,
             isFinal: configsTextarea.get('isFinal'),

+ 33 - 33
ambari-web/app/utils/configs/config_property_helper.js

@@ -36,14 +36,14 @@ module.exports = {
       case 'dfs.https.address':
       case 'dfs.namenode.https-address':
         var nnHost =  masterComponentHostsInDB.findProperty('component', 'NAMENODE').hostName;
-        this.setDefaultValue(configProperty, hostWithPort,nnHost);
+        this.setRecommendedValue(configProperty, hostWithPort,nnHost);
         break;
       case 'fs.default.name':
       case 'fs.defaultFS':
       case 'hbase.rootdir':
       case 'instance.volumes':
         var nnHost = masterComponentHostsInDB.filterProperty('component', 'NAMENODE').mapProperty('hostName');
-        this.setDefaultValue(configProperty, hostWithPrefix,'://' + nnHost);
+        this.setRecommendedValue(configProperty, hostWithPrefix,'://' + nnHost);
         break;
       case 'snamenode_host':
         // Secondary NameNode does not exist when NameNode HA is enabled
@@ -56,7 +56,7 @@ module.exports = {
       case 'dfs.namenode.secondary.http-address':
         var snnHost = masterComponentHostsInDB.findProperty('component', 'SECONDARY_NAMENODE');
         if (snnHost) {
-          this.setDefaultValue(configProperty, hostWithPort,snnHost.hostName);
+          this.setRecommendedValue(configProperty, hostWithPort,snnHost.hostName);
         }
         break;
       case 'datanode_hosts':
@@ -73,12 +73,12 @@ module.exports = {
         break;
       case 'yarn.log.server.url':
         var hsHost = masterComponentHostsInDB.filterProperty('component', 'HISTORYSERVER').mapProperty('hostName');
-        this.setDefaultValue(configProperty, hostWithPrefix,'://' + hsHost);
+        this.setRecommendedValue(configProperty, hostWithPrefix,'://' + hsHost);
         break;
       case 'mapreduce.jobhistory.webapp.address':
       case 'mapreduce.jobhistory.address':
         var hsHost = masterComponentHostsInDB.filterProperty('component', 'HISTORYSERVER').mapProperty('hostName');
-        this.setDefaultValue(configProperty, hostWithPort,hsHost);
+        this.setRecommendedValue(configProperty, hostWithPort,hsHost);
         break;
       case 'rm_host':
         configProperty.set('value', masterComponentHostsInDB.findProperty('component', 'RESOURCEMANAGER').hostName);
@@ -92,8 +92,8 @@ module.exports = {
         break;
       case 'yarn.resourcemanager.hostname':
         var rmHost = masterComponentHostsInDB.findProperty('component', 'RESOURCEMANAGER').hostName;
-        configProperty.set('defaultValue',rmHost);
-        configProperty.set('value',configProperty.get('defaultValue'));
+        configProperty.set('recommendedValue',rmHost);
+        configProperty.set('value',configProperty.get('recommendedValue'));
         break;
       case 'yarn.resourcemanager.resource-tracker.address':
       case 'yarn.resourcemanager.webapp.https.address':
@@ -102,14 +102,14 @@ module.exports = {
       case 'yarn.resourcemanager.address':
       case 'yarn.resourcemanager.admin.address':
         var rmHost = masterComponentHostsInDB.findProperty('component', 'RESOURCEMANAGER').hostName;
-        this.setDefaultValue(configProperty, hostWithPort,rmHost);
+        this.setRecommendedValue(configProperty, hostWithPort,rmHost);
         break;
       case 'yarn.timeline-service.webapp.address':
       case 'yarn.timeline-service.webapp.https.address':
       case 'yarn.timeline-service.address':
         var atsHost =  masterComponentHostsInDB.findProperty('component', 'APP_TIMELINE_SERVER');
         if (atsHost && atsHost.hostName) {
-          this.setDefaultValue(configProperty, hostWithPort,atsHost.hostName);
+          this.setRecommendedValue(configProperty, hostWithPort,atsHost.hostName);
         }
         break;
       case 'nm_hosts':
@@ -121,11 +121,11 @@ module.exports = {
       case 'mapred.job.tracker':
       case 'mapred.job.tracker.http.address':
         var jtHost = masterComponentHostsInDB.findProperty('component', 'JOBTRACKER').hostName;
-        this.setDefaultValue(configProperty, hostWithPort,jtHost);
+        this.setRecommendedValue(configProperty, hostWithPort,jtHost);
         break;
       case 'mapreduce.history.server.http.address':
         var jtHost = masterComponentHostsInDB.findProperty('component', 'HISTORYSERVER').hostName;
-        this.setDefaultValue(configProperty, hostWithPort,jtHost);
+        this.setRecommendedValue(configProperty, hostWithPort,jtHost);
         break;
       case 'tasktracker_hosts':
         configProperty.set('value', slaveComponentHostsInDB.findProperty('componentName', 'TASKTRACKER').hosts.mapProperty('hostName'));
@@ -164,7 +164,7 @@ module.exports = {
         break;
       case 'oozie.base.url':
         var oozieHost = masterComponentHostsInDB.findProperty('component', 'OOZIE_SERVER').hostName;
-        this.setDefaultValue(configProperty, hostWithPrefix,'://' + oozieHost);
+        this.setRecommendedValue(configProperty, hostWithPrefix,'://' + oozieHost);
         break;
       case 'webhcatserver_host':
         configProperty.set('value', masterComponentHostsInDB.findProperty('component', 'WEBHCAT_SERVER').hostName);
@@ -181,12 +181,12 @@ module.exports = {
       case 'hive_existing_mssql_server_host':
       case 'hive_existing_mssql_server_2_host':
         var hiveServerHost = masterComponentHostsInDB.findProperty('component', 'HIVE_SERVER').hostName;
-        configProperty.set('value', hiveServerHost).set('defaultValue', hiveServerHost);
+        configProperty.set('value', hiveServerHost).set('recommendedValue', hiveServerHost);
         break;
       case 'hive.metastore.uris':
         var hiveMSUris = this.getHiveMetastoreUris(masterComponentHostsInDB, dependencies['hive.metastore.uris']);
         if (hiveMSUris) {
-          this.setDefaultValue(configProperty, "(.*)", hiveMSUris);
+          this.setRecommendedValue(configProperty, "(.*)", hiveMSUris);
         }
         break;
       case 'oozie_existing_mysql_host':
@@ -195,7 +195,7 @@ module.exports = {
       case 'oozie_existing_mssql_server_host':
       case 'oozie_existing_mssql_server_2_host':
         var oozieServerHost = masterComponentHostsInDB.findProperty('component', 'OOZIE_SERVER').hostName;
-        configProperty.set('value', oozieServerHost).set('defaultValue', oozieServerHost);
+        configProperty.set('value', oozieServerHost).set('recommendedValue', oozieServerHost);
         break;
       case 'storm.zookeeper.servers':
       case 'zookeeperserver_hosts':
@@ -243,14 +243,14 @@ module.exports = {
       case 'hbase.zookeeper.quorum':
         if (configProperty.get('filename') == 'hbase-site.xml') {
           var zkHosts = masterComponentHostsInDB.filterProperty('component', 'ZOOKEEPER_SERVER').mapProperty('hostName');
-          this.setDefaultValue(configProperty, "(\\w*)", zkHosts);
+          this.setRecommendedValue(configProperty, "(\\w*)", zkHosts);
         }
         break;
       case 'yarn.resourcemanager.zk-address':
         var value = masterComponentHostsInDB.findProperty('component', 'ZOOKEEPER_SERVER').hostName + ':' + dependencies.clientPort;
         configProperty.setProperties({
           value: value,
-          defaultValue: value
+          recommendedValue: value
         });
         break;
       case 'zookeeper.connect':
@@ -262,21 +262,21 @@ module.exports = {
         var zkHosts = masterComponentHostsInDB.filterProperty('component', 'ZOOKEEPER_SERVER').mapProperty('hostName');
         var zkHostPort = zkHosts;
         var regex = "\\w*:(\\d+)";   //regex to fetch the port
-        var portValue = configProperty.get('defaultValue').match(new RegExp(regex));
+        var portValue = configProperty.get('recommendedValue').match(new RegExp(regex));
         if (!portValue) return;
         if (portValue[1]) {
           for ( var i = 0; i < zkHosts.length; i++ ) {
             zkHostPort[i] = zkHosts[i] + ":" + portValue[1];
           }
         }
-        this.setDefaultValue(configProperty, "(.*)", zkHostPort);
+        this.setRecommendedValue(configProperty, "(.*)", zkHostPort);
         break;
       case 'templeton.hive.properties':
         var hiveMSUris = this.getHiveMetastoreUris(masterComponentHostsInDB, dependencies['hive.metastore.uris']).replace(',', '\\,');
         if (/\/\/localhost:/g.test(configProperty.get('value'))) {
-          configProperty.set('defaultValue', configProperty.get('value') + ',hive.metastore.execute.setugi=true');
+          configProperty.set('recommendedValue', configProperty.get('value') + ',hive.metastore.execute.setugi=true');
         }
-        this.setDefaultValue(configProperty, "(hive\\.metastore\\.uris=)([^\\,]+)", "$1" + hiveMSUris);
+        this.setRecommendedValue(configProperty, "(hive\\.metastore\\.uris=)([^\\,]+)", "$1" + hiveMSUris);
         break;
       case 'dfs.name.dir':
       case 'dfs.namenode.name.dir':
@@ -306,7 +306,7 @@ module.exports = {
         break;
       case '*.broker.url':
         var falconServerHost = masterComponentHostsInDB.findProperty('component', 'FALCON_SERVER').hostName;
-        this.setDefaultValue(configProperty, 'localhost', falconServerHost);
+        this.setRecommendedValue(configProperty, 'localhost', falconServerHost);
         break;
       case 'RANGER_HOST':
         var rangerAdminHost = masterComponentHostsInDB.findProperty('component', 'RANGER_ADMIN');
@@ -331,7 +331,7 @@ module.exports = {
         var masterComponent = masterComponentHostsInDB.findProperty('component', 'RANGER_ADMIN'),
           rangerServerHost = masterComponent ? masterComponentHostsInDB.findProperty('component', 'RANGER_ADMIN').hostName : '';
         if (rangerServerHost) {
-          configProperty.set('value', rangerServerHost).set('defaultValue', rangerServerHost);
+          configProperty.set('value', rangerServerHost).set('recommendedValue', rangerServerHost);
         }
         break;
     }
@@ -340,14 +340,14 @@ module.exports = {
   /**
    * Get hive.metastore.uris initial value
    * @param hosts
-   * @param defaultValue
+   * @param recommendedValue
    * @returns {string}
    */
-  getHiveMetastoreUris: function (hosts, defaultValue) {
+  getHiveMetastoreUris: function (hosts, recommendedValue) {
     var hiveMSHosts = hosts.filterProperty('component', 'HIVE_METASTORE').mapProperty('hostName'),
       hiveMSUris = hiveMSHosts,
       regex = "\\w*:(\\d+)",
-      portValue = defaultValue && defaultValue.match(new RegExp(regex));
+      portValue = recommendedValue && recommendedValue.match(new RegExp(regex));
 
     if (!portValue) return '';
     if (portValue[1]) {
@@ -363,12 +363,12 @@ module.exports = {
    * @param replaceWith : String
    * @param configProperty
    */
-  setDefaultValue: function(configProperty, regex, replaceWith) {
-    var defaultValue = configProperty.get('defaultValue');
+  setRecommendedValue: function(configProperty, regex, replaceWith) {
+    var recommendedValue = !Em.isNone(configProperty.get('recommendedValue')) ? configProperty.get('recommendedValue') : '';
     var re = new RegExp(regex);
-    defaultValue = defaultValue.replace(re,replaceWith);
-    configProperty.set('defaultValue',defaultValue);
-    configProperty.set('value',configProperty.get('defaultValue'));
+    recommendedValue = recommendedValue.replace(re,replaceWith);
+    configProperty.set('recommendedValue', recommendedValue);
+    configProperty.set('value', !Em.isNone(configProperty.get('recommendedValue')) ? configProperty.get('recommendedValue') : '');
   },
 
   unionAllMountPoints: function (configProperty, isOnlyFirstOneNeeded, localDB) {
@@ -543,7 +543,7 @@ module.exports = {
           mPoint += eachDrive.mountpoint + configProperty.get('defaultDirectory') + "\n";
         }
         configProperty.set('value', mPoint);
-        configProperty.set('defaultValue', mPoint);
+        configProperty.set('recommendedValue', mPoint);
       }, this);
     } else {
       var mPoint = allMountPoints[0].mountpoint;
@@ -570,7 +570,7 @@ module.exports = {
         mPoint = mPoint + configProperty.get('defaultDirectory');
       }
       configProperty.set('value', mPoint);
-      configProperty.set('defaultValue', mPoint);
+      configProperty.set('recommendedValue', mPoint);
     }
   }
 };

+ 0 - 1
ambari-web/app/views.js

@@ -30,7 +30,6 @@ require('views/common/modal_popups/alert_popup');
 require('views/common/modal_popups/confirmation_feedback_popup');
 require('views/common/modal_popups/confirmation_popup');
 require('views/common/modal_popups/hosts_table_list_popup');
-require('views/common/modal_popups/prompt_popup');
 require('views/common/modal_popups/cluster_check_popup');
 require('views/common/modal_popups/invalid_KDC_popup');
 require('views/common/modal_popups/dependent_configs_list_popup');

+ 10 - 9
ambari-web/app/views/common/configs/service_configs_by_category_view.js

@@ -188,7 +188,7 @@ App.ServiceConfigsByCategoryView = Em.View.extend(App.UserPref, App.ConfigOverri
           var affected = self.get("newAffectedProperties").objectAt(0),
             changedProperty = self.get("controller.stepConfigs").findProperty("serviceName", affected.sourceServiceName)
               .get("configs").findProperty("name", affected.changedPropertyName);
-          changedProperty.set('value', changedProperty.get('defaultValue'));
+          changedProperty.set('value', changedProperty.get('savedValue'));
           self.get("controller").set("miscModalVisible", false);
           this.hide();
         },
@@ -252,7 +252,7 @@ App.ServiceConfigsByCategoryView = Em.View.extend(App.UserPref, App.ConfigOverri
           return false;
         }
 
-        var searchString = config.get('defaultValue') + config.get('description') +
+        var searchString = config.get('savedValue') + config.get('description') +
           config.get('displayName') + config.get('name') + config.get('value') + config.getWithDefault('stackConfigProperty.displayName', '');
 
         if (config.get('overrides')) {
@@ -383,7 +383,8 @@ App.ServiceConfigsByCategoryView = Em.View.extend(App.UserPref, App.ConfigOverri
       category: propertyObj.categoryName,
       id: 'site property',
       serviceName: propertyObj.serviceName,
-      defaultValue: null,
+      savedValue: null,
+      recommendedValue: null,
       supportsFinal: App.config.shouldSupportFinal(propertyObj.serviceName, propertyObj.filename),
       filename: propertyObj.filename || '',
       isUserProperty: true,
@@ -633,18 +634,18 @@ App.ServiceConfigsByCategoryView = Em.View.extend(App.UserPref, App.ConfigOverri
   doRestoreDefaultValue: function (event) {
     var serviceConfigProperty = event.contexts[0];
     var value = serviceConfigProperty.get('value');
-    var dValue = serviceConfigProperty.get('defaultValue');
+    var savedValue = serviceConfigProperty.get('savedValue');
     var supportsFinal = serviceConfigProperty.get('supportsFinal');
-    var defaultIsFinal = serviceConfigProperty.get('defaultIsFinal');
+    var savedIsFinal = serviceConfigProperty.get('savedIsFinal');
 
-    if (dValue != null) {
+    if (savedValue != null) {
       if (serviceConfigProperty.get('displayType') === 'password') {
-        serviceConfigProperty.set('retypedPassword', dValue);
+        serviceConfigProperty.set('retypedPassword', savedValue);
       }
-      serviceConfigProperty.set('value', dValue);
+      serviceConfigProperty.set('value', savedValue);
     }
     if (supportsFinal) {
-      serviceConfigProperty.set('isFinal', defaultIsFinal);
+      serviceConfigProperty.set('isFinal', savedIsFinal);
     }
     this.configChangeObserver(serviceConfigProperty);
     Em.$('body>.tooltip').remove(); //some tooltips get frozen when their owner's DOM element is removed

+ 0 - 7
ambari-web/app/views/common/configs/widgets/checkbox_config_widget_view.js

@@ -59,13 +59,6 @@ App.CheckboxConfigWidgetView = App.ConfigWidgetView.extend({
   restoreValue: function () {
     this.$('input[type="checkbox"]:eq(0)').checkbox('click');
     this._super();
-  },
-
-  /**
-   * @method setRecommendedValue
-   */
-  setRecommendedValue: function () {
-    this.set('config.value', this.get('config.recommendedValue'));
   }
 
 });

+ 1 - 2
ambari-web/app/views/common/configs/widgets/combo_config_widget_view.js

@@ -115,8 +115,7 @@ App.ComboConfigWidgetView = App.ConfigWidgetView.extend({
    * @method restoreValue
    */
   restoreValue: function() {
-    this._super();
-    this.setConfigValue({ context: this.get('config.defaultValue') });
+    this.setConfigValue({ context: this.get('config.savedValue') });
   },
 
   /**

+ 23 - 10
ambari-web/app/views/common/configs/widgets/config_widget_view.js

@@ -207,8 +207,8 @@ App.ConfigWidgetView = Em.View.extend(App.SupportsDependentConfigs, App.WidgetPo
    * @type {boolean}
    */
   valueIsChanged: function () {
-    return this.get('config.value') != this.get('config.defaultValue');
-  }.property('config.value'),
+    return !Em.isNone(this.get('config.savedValue')) && this.get('config.value') != this.get('config.savedValue');
+  }.property('config.value', 'config.savedValue'),
 
   /**
    * Enable/disable widget state
@@ -224,13 +224,31 @@ App.ConfigWidgetView = Em.View.extend(App.SupportsDependentConfigs, App.WidgetPo
    */
   restoreValue: function () {
     var self = this;
-    this.set('config.value', this.get('config.defaultValue'));
+    this.set('config.value', this.get('config.savedValue'));
     this.sendRequestRorDependentConfigs(this.get('config')).done(function() {
       self.restoreDependentConfigs(self.get('config'));
     });
 
     if (this.get('config.supportsFinal')) {
-      this.get('config').set('isFinal', this.get('config.defaultIsFinal'));
+      this.get('config').set('isFinal', this.get('config.savedIsFinal'));
+    }
+    Em.$('body > .tooltip').remove();
+  },
+
+  /**
+   * set <code>recommendedValue<code> to config
+   * and send request to change dependent configs
+   * @method setRecommendedValue
+   */
+  setRecommendedValue: function() {
+    var self = this;
+    this.set('config.value', this.get('config.recommendedValue'));
+    this.sendRequestRorDependentConfigs(this.get('config')).done(function() {
+      self.restoreDependentConfigs(self.get('config'));
+    });
+
+    if (this.get('config.supportsFinal')) {
+      this.get('config').set('isFinal', this.get('config.recommendedIsFinal'));
     }
     Em.$('body > .tooltip').remove();
   },
@@ -367,11 +385,6 @@ App.ConfigWidgetView = Em.View.extend(App.SupportsDependentConfigs, App.WidgetPo
       return true;
     }
     return this.isValueCompatibleWithWidget();
-  }.property('config.value', 'config.showAsTextBox'),
-
-  /**
-   * @method setRecommendedValue
-   */
-  setRecommendedValue: Em.required(Function)
+  }.property('config.value', 'config.showAsTextBox')
 
 });

+ 1 - 0
ambari-web/app/views/common/configs/widgets/directory_config_widget_view.js

@@ -39,6 +39,7 @@ App.DirectoryConfigWidgetView = App.ConfigWidgetView.extend({
 
   didInsertElement: function() {
     this.initPopover();
+    this._super();
     this.set('config.displayType', this.get('config.stackConfigProperty.widget.type'));
   }
 

+ 1 - 1
ambari-web/app/views/common/configs/widgets/list_config_widget_view.js

@@ -243,7 +243,7 @@ App.ListConfigWidgetView = App.ConfigWidgetView.extend({
    * @method setRecommendedValue
    */
   setRecommendedValue: function () {
-    this.set('config.value', this.get('config.recommendedValue'));
+    this._super();
     this.calculateInitVal();
   },
 

+ 1 - 1
ambari-web/app/views/common/configs/widgets/plain_config_text_field.js

@@ -28,7 +28,7 @@ App.PlainConfigTextField = Ember.View.extend(App.SupportsDependentConfigs, {
   templateName: require('templates/common/configs/widgets/plain_config_text_field'),
   valueBinding: 'serviceConfig.value',
   classNames: ['widget-config-plain-text-field'],
-  placeholderBinding: 'serviceConfig.defaultValue',
+  placeholderBinding: 'serviceConfig.savedValue',
   unit: function() {
     return Em.getWithDefault(this, 'serviceConfig.stackConfigProperty.valueAttributes.unit', false);
   }.property('serviceConfig.stackConfigProperty.valueAttributes.unit'),

+ 16 - 8
ambari-web/app/views/common/configs/widgets/slider_config_widget_view.js

@@ -99,8 +99,8 @@ App.SliderConfigWidgetView = App.ConfigWidgetView.extend({
    */
   widgetDefaultValue: function () {
     var parseFunction = this.get('mirrorValueParseFunction');
-    return parseFunction(this.widgetValueByConfigAttributes(this.get('config.defaultValue')));
-  }.property('config.defaultValue'),
+    return parseFunction(this.widgetValueByConfigAttributes(this.get('config.savedValue')));
+  }.property('config.savedValue'),
 
   /**
    * Default value of config property transformed according widget format
@@ -240,8 +240,8 @@ App.SliderConfigWidgetView = App.ConfigWidgetView.extend({
         }
       }
       // avoid precision during restore value
-      if (parsed == parseFunction(this.widgetValueByConfigAttributes(this.get('config.defaultValue')))) {
-        this.set('config.value', this.get('config.defaultValue'));
+      if (parsed == parseFunction(this.widgetValueByConfigAttributes(this.get('config.savedValue')))) {
+        this.set('config.value', this.get('config.savedValue'));
       }
     } else {
       this.set('isMirrorValueValid', false);
@@ -304,7 +304,7 @@ App.SliderConfigWidgetView = App.ConfigWidgetView.extend({
       ticksLabels.push((items.length < 5 || index % 2 === 0 || items.length - 1 == index) ? tick + ' ' + self.get('unitLabel') : '');
     });
 
-    // default-value marker should be added only if defaultValue is in range [min, max]
+    // default marker should be added only if recommendedValue is in range [min, max]
     if (recommendedValue <= this.get('maxMirrorValue') && recommendedValue >= this.get('minMirrorValue') && recommendedValue != '') {
       // process additional tick for default value if it not defined in previous computation
       if (!ticks.contains(recommendedValue)) {
@@ -410,7 +410,7 @@ App.SliderConfigWidgetView = App.ConfigWidgetView.extend({
   },
 
   /**
-   * Restore <code>defaultValue</code> for config
+   * Restore <code>savedValue</code> for config
    * Restore <code>mirrorValue</code> too
    * @method restoreValue
    */
@@ -423,10 +423,18 @@ App.SliderConfigWidgetView = App.ConfigWidgetView.extend({
    * @method setRecommendedValue
    */
   setRecommendedValue: function () {
-    this.setValue(this.get('config.recommendedValue'));
-    this.get('slider').setValue(this.get('mirrorValue'));
+    this._super();
+    this.get('slider').setValue(this.get('widgetRecommendedValue'));
   },
 
+  /**
+   * Determines if config-value was changed
+   * @type {boolean}
+   */
+  valueIsChanged: function () {
+    return !Em.isNone(this.get('config.savedValue')) && this.get('parseFunction')(this.get('config.value')) != this.get('parseFunction')(this.get('config.savedValue'));
+  }.property('config.value', 'config.savedValue'),
+
   /**
    * Run changeBoundariesOnce only once
    * @method changeBoundaries

+ 5 - 5
ambari-web/app/views/common/configs/widgets/time_interval_spinner_view.js

@@ -45,10 +45,10 @@ App.TimeIntervalSpinnerView = App.ConfigWidgetView.extend({
   /**
    * Default property value in widget format.
    *
-   * @property defaultValue
+   * @property savedValue
    * @type {Object[]}
    */
-  defaultValue: null,
+  savedValue: null,
 
   /**
    * Maximum property value in widget format.
@@ -92,7 +92,7 @@ App.TimeIntervalSpinnerView = App.ConfigWidgetView.extend({
    * Content setter.
    * Affects to view attributes:
    *  @see propertyUnit
-   *  @see defaultValue
+   *  @see savedValue
    *  @see minValue
    *  @see maxValue
    *       content
@@ -167,7 +167,7 @@ App.TimeIntervalSpinnerView = App.ConfigWidgetView.extend({
    * @method checkModified
    */
   checkModified: function() {
-    this.set('valueIsChanged', this.configValueByWidget(this.get('content')) != parseInt(this.get('config.defaultValue')));
+    this.set('valueIsChanged', this.configValueByWidget(this.get('content')) != parseInt(this.get('config.savedValue')));
   },
 
   /**
@@ -228,7 +228,7 @@ App.TimeIntervalSpinnerView = App.ConfigWidgetView.extend({
    */
   restoreValue: function() {
     this._super();
-    this.set('content', this.generateWidgetValue(this.get('config.defaultValue')));
+    this.set('content', this.generateWidgetValue(this.get('config.savedValue')));
     this.parseIncrement();
   },
 

+ 1 - 0
ambari-web/app/views/common/configs/widgets/toggle_config_widget_view.js

@@ -163,6 +163,7 @@ App.ToggleConfigWidgetView = App.ConfigWidgetView.extend({
    * @method setRecommendedValue
    */
   setRecommendedValue: function () {
+    this._super();
     this.setValue(this.get('config.recommendedValue'));
   },
 

+ 8 - 8
ambari-web/app/views/common/controls_view.js

@@ -159,7 +159,7 @@ App.ServiceConfigTextField = Ember.TextField.extend(App.ServiceConfigPopoverSupp
 
   valueBinding: 'serviceConfig.value',
   classNameBindings: 'textFieldClassName',
-  placeholderBinding: 'serviceConfig.defaultValue',
+  placeholderBinding: 'serviceConfig.savedValue',
 
   keyPress: function (event) {
     if (event.keyCode == 13) {
@@ -203,7 +203,7 @@ App.ServiceConfigTextField = Ember.TextField.extend(App.ServiceConfigPopoverSupp
 App.ServiceConfigTextFieldWithUnit = Ember.View.extend(App.ServiceConfigPopoverSupport, App.SupportsDependentConfigs, {
   valueBinding: 'serviceConfig.value',
   classNames: ['input-append', 'with-unit'],
-  placeholderBinding: 'serviceConfig.defaultValue',
+  placeholderBinding: 'serviceConfig.savedValue',
 
   //Set editDone true for last edited config text field parameter
   focusOut: function () {
@@ -467,7 +467,7 @@ App.ServiceConfigRadioButtons = Ember.View.extend(App.ServiceConfigCalculateId,
         var hostNameDefault;
         var databaseNameDefault;
         var connectionUrlValue = connectionUrl.get('value');
-        var connectionUrlDefaultValue = connectionUrl.get('defaultValue');
+        var connectionUrlDefaultValue = connectionUrl.get('recommendedValue');
         var dbClassValue = dbClass.get('value');
         var serviceName = this.get('serviceConfig.serviceName');
         var isServiceInstalled = App.Service.find().someProperty('serviceName', serviceName);
@@ -478,8 +478,8 @@ App.ServiceConfigRadioButtons = Ember.View.extend(App.ServiceConfigCalculateId,
         var isNotExistingMySQLServer = this.get('serviceConfig.value') !== 'Existing MSSQL Server database with integrated authentication';
         var categoryConfigsAll = this.get('categoryConfigsAll');
         if (isServiceInstalled) {
-          hostNameDefault = this.get('hostNameProperty.defaultValue');
-          databaseNameDefault = this.get('databaseNameProperty.defaultValue');
+          hostNameDefault = this.get('hostNameProperty.recommendedValue');
+          databaseNameDefault = this.get('databaseNameProperty.recommendedValue');
         } else {
           hostNameDefault = hostName;
           databaseNameDefault = databaseName;
@@ -615,12 +615,12 @@ App.ServiceConfigRadioButtons = Ember.View.extend(App.ServiceConfigCalculateId,
             }
             this.get('categoryConfigsAll').findProperty('name', 'db_host').set('value', this.get('hostNameProperty.value'));
             sqlConnectorJAR.set('value',sqlConnectorJARValue);
-            sqlConnectorJAR.set('defaultValue',sqlConnectorJARValue);
+            sqlConnectorJAR.set('recommendedValue',sqlConnectorJARValue);
             sqlCommandInvoker.set('value', sqlCommand);
             break;
         }
         connectionUrl.set('value', connectionUrlValue);
-        connectionUrl.set('defaultValue', connectionUrlDefaultValue);
+        connectionUrl.set('recommendedValue', connectionUrlDefaultValue);
         dbClass.set('value', dbClassValue);
       }
     }
@@ -863,7 +863,7 @@ App.ServiceConfigRadioButton = Ember.Checkbox.extend({
 App.ServiceConfigComboBox = Ember.Select.extend(App.ServiceConfigPopoverSupport, App.ServiceConfigCalculateId, App.SupportsDependentConfigs, {
   contentBinding: 'serviceConfig.options',
   selectionBinding: 'serviceConfig.value',
-  placeholderBinding: 'serviceConfig.defaultValue',
+  placeholderBinding: 'serviceConfig.savedValue',
   classNames: [ 'span3' ]
 });
 

+ 0 - 54
ambari-web/app/views/common/modal_popups/prompt_popup.js

@@ -1,54 +0,0 @@
-/**
- * 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');
-
-/**
- * Show prompt popup
- *
- * @param {String} text - additional text constant. Will be placed on the top of the input field
- * @param {Function} primary - "OK" button click handler
- * @param {String} defaultValue - additional text constant. Will be default value for input field
- * @param {Function} secondary
- * @return {*}
- */
-App.showPromptPopup = function (text, primary, defaultValue, secondary) {
-  if (!primary) {
-    return false;
-  }
-  return App.ModalPopup.show({
-    header: Em.I18n.t('popup.prompt.commonHeader'),
-    bodyClass: Em.View.extend({
-      templateName: require('templates/common/modal_popups/prompt_popup'),
-      text: text
-    }),
-    inputValue: defaultValue || '',
-    isInvalid: false,
-    errorMessage: '',
-    onPrimary: function () {
-      this.hide();
-      primary(this.get('inputValue'));
-    },
-    onSecondary: function () {
-      this.hide();
-      if (secondary) {
-        secondary();
-      }
-    }
-  });
-};

+ 7 - 7
ambari-web/test/controllers/main/admin/highAvailability/resourceManager/step3_controller_test.js

@@ -267,22 +267,22 @@ describe('App.RMHighAvailabilityWizardStep3Controller', function () {
     it('setting new RM properties values', function () {
       controller.setDynamicConfigValues(configs, '2181', ':8088', ':8090');
       expect(configs.configs.findProperty('name', 'yarn.resourcemanager.hostname.rm1').get('value')).to.equal('h0');
-      expect(configs.configs.findProperty('name', 'yarn.resourcemanager.hostname.rm1').get('defaultValue')).to.equal('h0');
+      expect(configs.configs.findProperty('name', 'yarn.resourcemanager.hostname.rm1').get('recommendedValue')).to.equal('h0');
       expect(configs.configs.findProperty('name', 'yarn.resourcemanager.hostname.rm2').get('value')).to.equal('h1');
-      expect(configs.configs.findProperty('name', 'yarn.resourcemanager.hostname.rm2').get('defaultValue')).to.equal('h1');
+      expect(configs.configs.findProperty('name', 'yarn.resourcemanager.hostname.rm2').get('recommendedValue')).to.equal('h1');
 
       expect(configs.configs.findProperty('name', 'yarn.resourcemanager.webapp.address.rm1').get('value')).to.equal('h0:8088');
-      expect(configs.configs.findProperty('name', 'yarn.resourcemanager.webapp.address.rm1').get('defaultValue')).to.equal('h0:8088');
+      expect(configs.configs.findProperty('name', 'yarn.resourcemanager.webapp.address.rm1').get('recommendedValue')).to.equal('h0:8088');
       expect(configs.configs.findProperty('name', 'yarn.resourcemanager.webapp.address.rm2').get('value')).to.equal('h1:8088');
-      expect(configs.configs.findProperty('name', 'yarn.resourcemanager.webapp.address.rm2').get('defaultValue')).to.equal('h1:8088');
+      expect(configs.configs.findProperty('name', 'yarn.resourcemanager.webapp.address.rm2').get('recommendedValue')).to.equal('h1:8088');
 
       expect(configs.configs.findProperty('name', 'yarn.resourcemanager.webapp.https.address.rm1').get('value')).to.equal('h0:8090');
-      expect(configs.configs.findProperty('name', 'yarn.resourcemanager.webapp.https.address.rm1').get('defaultValue')).to.equal('h0:8090');
+      expect(configs.configs.findProperty('name', 'yarn.resourcemanager.webapp.https.address.rm1').get('recommendedValue')).to.equal('h0:8090');
       expect(configs.configs.findProperty('name', 'yarn.resourcemanager.webapp.https.address.rm2').get('value')).to.equal('h1:8090');
-      expect(configs.configs.findProperty('name', 'yarn.resourcemanager.webapp.https.address.rm2').get('defaultValue')).to.equal('h1:8090');
+      expect(configs.configs.findProperty('name', 'yarn.resourcemanager.webapp.https.address.rm2').get('recommendedValue')).to.equal('h1:8090');
 
       expect(configs.configs.findProperty('name', 'yarn.resourcemanager.zk-address').get('value')).to.equal('h2:2181,h3:2181');
-      expect(configs.configs.findProperty('name', 'yarn.resourcemanager.zk-address').get('defaultValue')).to.equal('h2:2181,h3:2181');
+      expect(configs.configs.findProperty('name', 'yarn.resourcemanager.zk-address').get('recommendedValue')).to.equal('h2:2181,h3:2181');
     });
 
   });

+ 2 - 2
ambari-web/test/controllers/main/admin/kerberos/step4_controller_test.js

@@ -180,8 +180,8 @@ describe('App.KerberosWizardStep4Controller', function() {
             getDBProperty: 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_principal', value: 'some_val1', recommendedValue: 'some_val1', filename: 'krb5-conf.xml' }),
+                Em.Object.create({ name: 'admin_password', value: 'some_password', recommendedValue: 'some_password', filename: 'krb5-conf.xml' })
               ]);
             }
           })

+ 0 - 132
ambari-web/test/controllers/main/service/info/config_test.js

@@ -606,138 +606,6 @@ describe("App.MainServiceInfoConfigsController", function () {
 
   });
 
-  describe("#addDynamicProperties", function() {
-
-    var tests = [
-      {
-        stepConfigs: [Em.Object.create({
-          serviceName: "HIVE",
-          configs: []
-        })],
-        content: Em.Object.create({
-          serviceName: "HIVE"
-        }),
-        m: "add dynamic property",
-        addDynamic: true
-      },
-      {
-        stepConfigs: [Em.Object.create({
-          serviceName: "HIVE",
-          configs: [
-            Em.Object.create({
-              name: "templeton.hive.properties"
-            })
-          ]
-        })],
-        content: Em.Object.create({
-          serviceName: "HIVE"
-        }),
-        m: "don't add dynamic property (already included)",
-        addDynamic: false
-      },
-      {
-        stepConfigs: [Em.Object.create({
-          serviceName: "HDFS",
-          configs: []
-        })],
-        content: Em.Object.create({
-          serviceName: "HDFS"
-        }),
-        m: "don't add dynamic property (wrong service)",
-        addDynamic: false
-      }
-    ];
-    var dynamicProperty = {
-      "name": "templeton.hive.properties",
-      "templateName": ["hive.metastore.uris"],
-      "foreignKey": null,
-      "value": "hive.metastore.local=false,hive.metastore.uris=<templateName[0]>,hive.metastore.sasl.enabled=yes,hive.metastore.execute.setugi=true,hive.metastore.warehouse.dir=/apps/hive/warehouse",
-      "filename": "webhcat-site.xml"
-    };
-
-
-
-    tests.forEach(function(t) {
-      it(t.m, function() {
-        mainServiceInfoConfigsController.set("content", t.content);
-        mainServiceInfoConfigsController.set("stepConfigs", t.stepConfigs);
-        var configs = [];
-        mainServiceInfoConfigsController.addDynamicProperties(configs);
-        if (t.addDynamic){
-          expect(configs.findProperty("name","templeton.hive.properties")).to.deep.eql(dynamicProperty);
-        }
-      });
-    });
-  });
-
-  describe("#loadUiSideConfigs", function () {
-
-    var t = {
-      configMapping: [
-        {
-          foreignKey: null,
-          templateName: "",
-          value: "default",
-          name: "name1",
-          filename: "filename1"
-        },
-        {
-          foreignKey: "notNull",
-          templateName: "",
-          value: "default2",
-          name: "name2",
-          filename: "filename2"
-        }
-      ],
-      configMappingf: [
-        {
-          foreignKey: null,
-          templateName: "",
-          value: "default",
-          name: "name1",
-          filename: "filename1"
-        }
-      ],
-      valueWithOverrides: {
-        "value": "default",
-        "overrides": {
-          "value1": "value1",
-          "value2": "value2"
-        }
-      },
-      uiConfigs: [
-        {
-          "id": "site property",
-          "name": "name1",
-          "value": "default",
-          "filename": "filename1",
-          "overrides": {
-            "value1": "value1",
-            "value2": "value2"
-          }
-        }
-      ]
-    };
-
-    beforeEach(function(){
-      sinon.stub(mainServiceInfoConfigsController, "addDynamicProperties", Em.K);
-      sinon.stub(mainServiceInfoConfigsController, "getGlobConfigValueWithOverrides", function () {
-        return t.valueWithOverrides
-      });
-    });
-
-    afterEach(function(){
-      mainServiceInfoConfigsController.addDynamicProperties.restore();
-      mainServiceInfoConfigsController.getGlobConfigValueWithOverrides.restore();
-    });
-
-    it("load ui config", function() {
-      expect(mainServiceInfoConfigsController.loadUiSideConfigs(t.configMapping)[0]).to.deep.equal(t.uiConfigs[0]);
-      expect(mainServiceInfoConfigsController.addDynamicProperties.calledWith(t.configMappingf)).to.equal(true);
-      expect(mainServiceInfoConfigsController.getGlobConfigValueWithOverrides.calledWith(t.configMapping[0].templateName, t.configMapping[0].value, t.configMapping[0].name)).to.equal(true);
-    });
-  });
-
   describe("#formatConfigValues", function () {
     var t = {
       configs: [

+ 32 - 32
ambari-web/test/controllers/wizard/step7_test.js

@@ -670,10 +670,10 @@ describe('App.InstallerStep7Controller', function () {
     it('should set property to true', function () {
       var allSelectedServiceNames = ['SLIDER', 'YARN'],
         configs = [
-          {name: 'hadoop.registry.rm.enabled', value: false, defaultValue: false}
+          {name: 'hadoop.registry.rm.enabled', value: false, recommendedValue: false}
         ],
         expected = [
-          {name: 'hadoop.registry.rm.enabled', value: true, defaultValue: true, forceUpdate: true}
+          {name: 'hadoop.registry.rm.enabled', value: true, recommendedValue: true}
         ];
       installerStep7Controller.reopen({allSelectedServiceNames: allSelectedServiceNames});
       installerStep7Controller.resolveYarnConfigs(configs);
@@ -683,10 +683,10 @@ describe('App.InstallerStep7Controller', function () {
     it('should set property to false', function () {
       var allSelectedServiceNames = ['YARN'],
         configs = [
-          {name: 'hadoop.registry.rm.enabled', value: true, defaultValue: true}
+          {name: 'hadoop.registry.rm.enabled', value: true, recommendedValue: true}
         ],
         expected = [
-          {name: 'hadoop.registry.rm.enabled', value: false, defaultValue: false, forceUpdate: true}
+          {name: 'hadoop.registry.rm.enabled', value: false, recommendedValue: false}
         ];
       installerStep7Controller.reopen({allSelectedServiceNames: allSelectedServiceNames});
       installerStep7Controller.resolveYarnConfigs(configs);
@@ -696,10 +696,10 @@ describe('App.InstallerStep7Controller', function () {
     it('should skip setting property', function () {
       var allSelectedServiceNames = ['YARN', 'SLIDER'],
         configs = [
-          {name: 'hadoop.registry.rm.enabled', value: true, defaultValue: true}
+          {name: 'hadoop.registry.rm.enabled', value: true, recommendedValue: true}
         ],
         expected = [
-          {name: 'hadoop.registry.rm.enabled', value: true, defaultValue: true}
+          {name: 'hadoop.registry.rm.enabled', value: true, recommendedValue: true}
         ];
       installerStep7Controller.reopen({allSelectedServiceNames: allSelectedServiceNames});
       installerStep7Controller.resolveYarnConfigs(configs);
@@ -727,14 +727,14 @@ describe('App.InstallerStep7Controller', function () {
     it('shouldn\'t do nothing if Ganglia and Storm are installed', function () {
       var installedServiceNames = ['GANGLIA', 'STORM'],
         configs = [
-          {name: 'nimbus.childopts', value: '.jar=host=host2', defaultValue: ''},
-          {name: 'supervisor.childopts', value: '.jar=host=host2', defaultValue: ''},
-          {name: 'worker.childopts', value: '.jar=host=host2', defaultValue: ''}
+          {name: 'nimbus.childopts', value: '.jar=host=host2', recommendedValue: ''},
+          {name: 'supervisor.childopts', value: '.jar=host=host2', recommendedValue: ''},
+          {name: 'worker.childopts', value: '.jar=host=host2', recommendedValue: ''}
         ],
         expected = [
-          {name: 'nimbus.childopts', value: '.jar=host=host2', defaultValue: ''},
-          {name: 'supervisor.childopts', value: '.jar=host=host2', defaultValue: ''},
-          {name: 'worker.childopts', value: '.jar=host=host2', defaultValue: ''}
+          {name: 'nimbus.childopts', value: '.jar=host=host2', recommendedValue: ''},
+          {name: 'supervisor.childopts', value: '.jar=host=host2', recommendedValue: ''},
+          {name: 'worker.childopts', value: '.jar=host=host2', recommendedValue: ''}
         ];
       installerStep7Controller.reopen({installedServiceNames: installedServiceNames});
       installerStep7Controller.resolveStormConfigs(configs);
@@ -744,14 +744,14 @@ describe('App.InstallerStep7Controller', function () {
     it('shouldn\'t do nothing if Ganglia is in allSelectedServiceNames', function () {
       var allSelectedServiceNames = ['GANGLIA'],
         configs = [
-          {name: 'nimbus.childopts', value: '.jar=host=host2', defaultValue: ''},
-          {name: 'supervisor.childopts', value: '.jar=host=host2', defaultValue: ''},
-          {name: 'worker.childopts', value: '.jar=host=host2', defaultValue: ''}
+          {name: 'nimbus.childopts', value: '.jar=host=host2', recommendedValue: ''},
+          {name: 'supervisor.childopts', value: '.jar=host=host2', recommendedValue: ''},
+          {name: 'worker.childopts', value: '.jar=host=host2', recommendedValue: ''}
         ],
         expected = [
-          {name: 'nimbus.childopts', value: '.jar=host=host1', defaultValue: '.jar=host=host1', forceUpdate: true},
-          {name: 'supervisor.childopts', value: '.jar=host=host1', defaultValue: '.jar=host=host1', forceUpdate: true},
-          {name: 'worker.childopts', value: '.jar=host=host1', defaultValue: '.jar=host=host1', forceUpdate: true}
+          {name: 'nimbus.childopts', value: '.jar=host=host1', recommendedValue: '.jar=host=host1'},
+          {name: 'supervisor.childopts', value: '.jar=host=host1', recommendedValue: '.jar=host=host1'},
+          {name: 'worker.childopts', value: '.jar=host=host1', recommendedValue: '.jar=host=host1'}
         ];
       installerStep7Controller.reopen({allSelectedServiceNames: allSelectedServiceNames});
       installerStep7Controller.resolveStormConfigs(configs);
@@ -763,14 +763,14 @@ describe('App.InstallerStep7Controller', function () {
     it('shouldn\'t do nothing if Ganglia is in installedServiceNames (2)', function () {
       var installedServiceNames = ['GANGLIA'],
         configs = [
-          {name: 'nimbus.childopts', value: '.jar=host=host2', defaultValue: ''},
-          {name: 'supervisor.childopts', value: '.jar=host=host2', defaultValue: ''},
-          {name: 'worker.childopts', value: '.jar=host=host2', defaultValue: ''}
+          {name: 'nimbus.childopts', value: '.jar=host=host2', recommendedValue: ''},
+          {name: 'supervisor.childopts', value: '.jar=host=host2', recommendedValue: ''},
+          {name: 'worker.childopts', value: '.jar=host=host2', recommendedValue: ''}
         ],
         expected = [
-          {name: 'nimbus.childopts', value: '.jar=host=host1', defaultValue: '.jar=host=host1', forceUpdate: true},
-          {name: 'supervisor.childopts', value: '.jar=host=host1', defaultValue: '.jar=host=host1', forceUpdate: true},
-          {name: 'worker.childopts', value: '.jar=host=host1', defaultValue: '.jar=host=host1', forceUpdate: true}
+          {name: 'nimbus.childopts', value: '.jar=host=host1', recommendedValue: '.jar=host=host1'},
+          {name: 'supervisor.childopts', value: '.jar=host=host1', recommendedValue: '.jar=host=host1'},
+          {name: 'worker.childopts', value: '.jar=host=host1', recommendedValue: '.jar=host=host1'}
         ];
       installerStep7Controller.reopen({installedServiceNames: installedServiceNames});
       installerStep7Controller.resolveStormConfigs(configs);
@@ -782,14 +782,14 @@ describe('App.InstallerStep7Controller', function () {
     it('should replace host name for *.childopts properties if Ganglia is in installedServiceNames for Add Service Wizard', function () {
       var installedServiceNames = ['GANGLIA'],
         configs = [
-          {name: 'nimbus.childopts', value: '.jar=host=host2', defaultValue: ''},
-          {name: 'supervisor.childopts', value: '.jar=host=host2', defaultValue: ''},
-          {name: 'worker.childopts', value: '.jar=host=host2', defaultValue: ''}
+          {name: 'nimbus.childopts', value: '.jar=host=host2', recommendedValue: ''},
+          {name: 'supervisor.childopts', value: '.jar=host=host2', recommendedValue: ''},
+          {name: 'worker.childopts', value: '.jar=host=host2', recommendedValue: ''}
         ],
         expected = [
-          {name: 'nimbus.childopts', value: '.jar=host=realhost1', defaultValue: '.jar=host=realhost1', forceUpdate: true},
-          {name: 'supervisor.childopts', value: '.jar=host=realhost1', defaultValue: '.jar=host=realhost1', forceUpdate: true},
-          {name: 'worker.childopts', value: '.jar=host=realhost1', defaultValue: '.jar=host=realhost1', forceUpdate: true}
+          {name: 'nimbus.childopts', value: '.jar=host=realhost1', recommendedValue: '.jar=host=realhost1'},
+          {name: 'supervisor.childopts', value: '.jar=host=realhost1', recommendedValue: '.jar=host=realhost1'},
+          {name: 'worker.childopts', value: '.jar=host=realhost1', recommendedValue: '.jar=host=realhost1'}
         ];
       installerStep7Controller.reopen({
         installedServiceNames: installedServiceNames,
@@ -1691,9 +1691,9 @@ describe('App.InstallerStep7Controller', function () {
       var properties = configs.filterProperty('name', 'hbase.client.scanner.caching');
       expect(properties).to.have.length(2);
       expect(properties.findProperty('filename', 'hbase-site.xml').value).to.equal('1500');
-      expect(properties.findProperty('filename', 'hbase-site.xml').defaultValue).to.equal('1500');
+      expect(properties.findProperty('filename', 'hbase-site.xml').savedValue).to.equal('1500');
       expect(properties.findProperty('filename', 'ams-hbase-site.xml').value).to.equal('2500');
-      expect(properties.findProperty('filename', 'ams-hbase-site.xml').defaultValue).to.equal('2500');
+      expect(properties.findProperty('filename', 'ams-hbase-site.xml').savedValue).to.equal('2500');
     });
 
   });

+ 1 - 133
ambari-web/test/controllers/wizard/step8_test.js

@@ -413,42 +413,6 @@ describe('App.WizardStep8Controller', function () {
     });
   });
 
-  describe('#getGlobConfigValueWithOverrides', function () {
-    it('should retun empty objects', function () {
-      expect(installerStep8Controller.getGlobConfigValueWithOverrides('','','')).to.eql({
-        "value": "",
-        "overrides": []
-      });
-    });
-    it('should retun overrides', function () {
-      var expression = '<cod index=[1]></cod index=[2]>';
-      installerStep8Controller.set('configs', Em.A([
-        Em.Object.create({
-          name:'name', overrides: Em.A([
-            Em.Object.create({
-              value: '4',
-              hosts: Em.A(['h1','h2'])
-            })
-          ])
-        })
-      ]));
-      var names = Em.A(['name0', 'name', 'name', 'ad']);
-      var result = {
-        "value": "undefinedundefined",
-        "overrides": [
-          {
-            "value": "44",
-            "hosts": [
-              "h1",
-              "h2"
-            ]
-          }
-        ]
-      };
-      expect(installerStep8Controller.getGlobConfigValueWithOverrides(names,expression,'')).to.eql(result);
-    });
-  });
-
   describe('#isConfigsChanged', function () {
     it('should return true if config changed', function () {
       var properties = Em.Object.create({
@@ -1692,25 +1656,6 @@ describe('App.WizardStep8Controller', function () {
     });
   });
 
-  describe('#addDynamicProperties', function() {
-    it('shouldn\'t add property', function() {
-      var serviceConfigProperties = [
-          {name: 'templeton.hive.properties'}
-        ],
-        configs = [];
-      installerStep8Controller.reopen({content: {serviceConfigProperties: serviceConfigProperties}});
-      installerStep8Controller.addDynamicProperties(configs);
-      expect(configs.length).to.equal(0);
-    });
-    it('should add property', function() {
-      var serviceConfigProperties = [],
-        configs = [];
-      installerStep8Controller.reopen({content: {serviceConfigProperties: serviceConfigProperties}});
-      installerStep8Controller.addDynamicProperties(configs);
-      expect(configs.length).to.equal(1);
-    });
-  });
-
   describe('#applyInstalledServicesConfigurationGroup', function() {
     beforeEach(function() {
       sinon.stub($, 'ajax', function () {
@@ -1750,45 +1695,14 @@ describe('App.WizardStep8Controller', function () {
 
   describe('#loadUiSideConfigs', function() {
     beforeEach(function() {
-      sinon.stub(installerStep8Controller, 'addDynamicProperties', Em.K);
-      sinon.stub(installerStep8Controller, 'getGlobConfigValueWithOverrides', function(t, v, n) {
-        return {
-          value: v,
-          overrides: []
-        }
-      });
       sinon.stub(App.config, 'setConfigValue', Em.K);
     });
     afterEach(function() {
-      installerStep8Controller.addDynamicProperties.restore();
-      installerStep8Controller.getGlobConfigValueWithOverrides.restore();
       App.config.setConfigValue.restore();
     });
 
-    it('all configs witohut foreignKey', function() {
+    it('configs with foreignKey', function() {
       var configMapping = [
-        {foreignKey: null, templateName: 't1', value: 'v1', name: 'c1', filename: 'f1'},
-        {foreignKey: null, templateName: 't2', value: 'v2', name: 'c2', filename: 'f2'},
-        {foreignKey: null, templateName: 't3', value: 'v3', name: 'c3', filename: 'f2'},
-        {foreignKey: null, templateName: 't4', value: 'v4', name: 'c4', filename: 'f1'}
-      ];
-      var uiConfigs = installerStep8Controller.loadUiSideConfigs(configMapping);
-      expect(uiConfigs.length).to.equal(configMapping.length);
-      expect(uiConfigs.everyProperty('id', 'site property')).to.be.true;
-      uiConfigs.forEach(function(c, index) {
-        expect(c.overrides).to.be.an.array;
-        expect(c.value).to.equal(configMapping[index].value);
-        expect(c.name).to.equal(configMapping[index].name);
-        expect(c.filename).to.equal(configMapping[index].filename);
-      });
-    });
-
-    it('some configs witohut foreignKey', function() {
-      var configMapping = [
-        {foreignKey: null, templateName: 't1', value: 'v1', name: 'c1', filename: 'f1'},
-        {foreignKey: null, templateName: 't2', value: 'v2', name: 'c2', filename: 'f2'},
-        {foreignKey: null, templateName: 't3', value: 'v3', name: 'c3', filename: 'f2'},
-        {foreignKey: null, templateName: 't4', value: 'v4', name: 'c4', filename: 'f1'},
         {foreignKey: 'fk1', templateName: 't5', value: 'v5', name: 'c5', filename: 'f1'},
         {foreignKey: 'fk2', templateName: 't6', value: 'v6', name: 'c6', filename: 'f1'},
         {foreignKey: 'fk3', templateName: 't7', value: 'v7', name: 'c7', filename: 'f2'},
@@ -2187,52 +2101,6 @@ describe('App.WizardStep8Controller', function () {
     });
   });
 
-  describe("#addDynamicProperties", function() {
-
-    var tests = [
-        {
-          content: Em.Object.create({
-            serviceConfigProperties: [
-              Em.Object.create({
-                configs: []
-              })
-            ]
-          }),
-          m: 'add dynamic property',
-          addDynamic: true
-        },
-        {
-          content: Em.Object.create({
-            serviceConfigProperties: [
-              Em.Object.create({
-                name: 'templeton.hive.properties'
-              })
-            ]
-          }),
-          m: 'don\'t add dynamic property (already included)',
-          addDynamic: false
-        }
-      ],
-      dynamicProperty = {
-        name: 'templeton.hive.properties',
-        templateName: ['hive.metastore.uris'],
-        foreignKey: null,
-        value: 'hive.metastore.local=false,hive.metastore.uris=<templateName[0]>,hive.metastore.sasl.enabled=yes,hive.metastore.execute.setugi=true,hive.metastore.warehouse.dir=/apps/hive/warehouse',
-        filename: 'webhcat-site.xml'
-      };
-
-    tests.forEach(function(t) {
-      it(t.m, function() {
-        installerStep8Controller.set('content', t.content);
-        var configs = [];
-        installerStep8Controller.addDynamicProperties(configs);
-        if (t.addDynamic){
-          expect(configs.findProperty('name', 'templeton.hive.properties')).to.deep.eql(dynamicProperty);
-        }
-      });
-    });
-  });
-
   describe('#isAllClusterDeleteRequestsCompleted', function () {
     it('should depend on completed cluster delete requests number', function () {
       installerStep8Controller.setProperties({

+ 1 - 1
ambari-web/test/controllers/wizard_test.js

@@ -186,7 +186,7 @@ describe('App.WizardController', function () {
             id: 'id',
             name: 'name',
             value: 'value',
-            defaultValue: 'defaultValue',
+            recommendedValue: 'recommendedValue',
             description: 'description',
             serviceName: 'serviceName',
             domain: 'domain',

+ 3 - 3
ambari-web/test/data/HDP2/site_properties_test.js

@@ -29,13 +29,13 @@ describe('hdp2SiteProperties', function () {
     });
   });
 
-  // No site properties should have value and defaultValue defined on client side.
+  // No site properties should have value and recommendedValue defined on client side.
   // These should be always retrieved from server.
 
     siteProperties.forEach(function(siteProperty){
-      it('Check value and defaultValue attribute of "' + siteProperty.name + '"' + '. It should not be defined ', function () {
+      it('Check value and recommendedValue attribute of "' + siteProperty.name + '"' + '. It should not be defined ', function () {
         expect(siteProperty.value).to.equal(undefined);
-        expect(siteProperty.defaultValue).to.equal(undefined);
+        expect(siteProperty.recommendedValue).to.equal(undefined);
     });
   });
 

+ 2 - 2
ambari-web/test/mappers/configs/config_versions_mapper_test.js

@@ -118,9 +118,9 @@ describe('App.configVersionsMapper', function () {
 
       //CONFIG_PROPERTY
       expect(App.ConfigProperty.find('dtnode_heapsize_hadoop-env_4').get('value')).to.eql('1026m');
-      expect(App.ConfigProperty.find('dtnode_heapsize_hadoop-env_4').get('defaultValue')).to.equal('1026m');
+      expect(App.ConfigProperty.find('dtnode_heapsize_hadoop-env_4').get('recommendedValue')).to.equal('1026m');
       expect(App.ConfigProperty.find('dtnode_heapsize_hadoop-env_4').get('isFinal')).to.be.false;
-      expect(App.ConfigProperty.find('dtnode_heapsize_hadoop-env_4').get('defaultIsFinal')).to.be.false;
+      expect(App.ConfigProperty.find('dtnode_heapsize_hadoop-env_4').get('recommendedIsFinal')).to.be.false;
     });
   });
 

+ 2 - 2
ambari-web/test/mappers/configs/stack_config_properties_mapper_test.js

@@ -174,8 +174,8 @@ describe('App.stackConfigPropertiesMapper', function () {
       expect(App.StackConfigProperty.find('p1_site1').get('name')).to.eql('p1');
       expect(App.StackConfigProperty.find('p1_site1').get('displayName')).to.eql('P1');
       expect(App.StackConfigProperty.find('p1_site1').get('description')).to.eql('desc1');
-      expect(App.StackConfigProperty.find('p1_site1').get('defaultValue')).to.eql('v1');
-      expect(App.StackConfigProperty.find('p1_site1').get('defaultIsFinal')).to.be.false;
+      expect(App.StackConfigProperty.find('p1_site1').get('recommendedValue')).to.eql('v1');
+      expect(App.StackConfigProperty.find('p1_site1').get('recommendedIsFinal')).to.be.false;
       expect(App.StackConfigProperty.find('p1_site1').get('serviceName')).to.eql('s1');
       expect(App.StackConfigProperty.find('p1_site1').get('stackName')).to.eql('HDP');
       expect(App.StackConfigProperty.find('p1_site1').get('stackVersion')).to.eql('2.2');

+ 8 - 8
ambari-web/test/mock_data_setup/configs_mock_data.js

@@ -226,7 +226,7 @@ module.exports = {
           "c6401.ambari.apache.org",
           "c6402.ambari.apache.org"
         ],
-        "defaultValue":"['c6401.ambari.apache.org','c6402.ambari.apache.org']",
+        "recommendedValue":"['c6401.ambari.apache.org','c6402.ambari.apache.org']",
         "filename":"storm-site.xml",
         "isUserProperty":false,
         "isOverridable":false,
@@ -243,7 +243,7 @@ module.exports = {
       {
         "name":"single_line_property",
         "value":"value",
-        "defaultValue":"value",
+        "recommendedValue":"value",
         "filename":"storm-site.xml",
         "isUserProperty":true,
         "isOverridable":true,
@@ -257,7 +257,7 @@ module.exports = {
       {
         "name":"multi_line_property",
         "value":"value \n value",
-        "defaultValue":"value \n value",
+        "recommendedValue":"value \n value",
         "filename":"storm-site.xml",
         "isUserProperty":true,
         "isOverridable":true,
@@ -271,7 +271,7 @@ module.exports = {
       {
         "name":"nonexistent_property",
         "value":"some value",
-        "defaultValue":"some value",
+        "recommendedValue":"some value",
         "filename":"storm-env.xml",
         "isUserProperty":false,
         "isOverridable":true,
@@ -285,7 +285,7 @@ module.exports = {
       {
         "name":"dfs.datanode.data.dir",
         "value":"/a,/b",
-        "defaultValue":"/a,/b",
+        "recommendedValue":"/a,/b",
         "filename":"hdfs-site.xml",
         "isUserProperty":false,
         "isOverridable":true,
@@ -305,7 +305,7 @@ module.exports = {
       {
         "name":"content",
         "value":"custom mock property",
-        "defaultValue":"custom mock property",
+        "recommendedValue":"custom mock property",
         "filename":"hdfs-site.xml",
         "isUserProperty":false,
         "isOverridable":true,
@@ -325,7 +325,7 @@ module.exports = {
       {
         "name":"content",
         "value":"hdfs log4j content",
-        "defaultValue":"hdfs log4j content",
+        "recommendedValue":"hdfs log4j content",
         "filename":"hdfs-log4j.xml",
         "isUserProperty":false,
         "isOverridable":true,
@@ -345,7 +345,7 @@ module.exports = {
       {
         "name":"storm_log_dir",
         "value":"/var/log/storm",
-        "defaultValue":"/var/log/storm",
+        "recommendedValue":"/var/log/storm",
         "filename":"storm-env.xml",
         "isUserProperty":false,
         "isOverridable":true,

+ 1 - 1
ambari-web/test/models/configs/config_property_test.js

@@ -43,7 +43,7 @@ describe('App.ConfigProperty', function () {
     });
   });
 
-  describe('#isNotDefaultValue', function () {
+  describe.skip('#isNotDefaultValue', function () {
     var tests = [
       { isEditable: false, value: 1, defaultValue: 2, supportsFinal: true, isFinal: true, defaultIsFinal: false, isNotDefaultValue: false },
       { isEditable: true, value: 1, defaultValue: 1, supportsFinal: false, isFinal: true, defaultIsFinal: true, isNotDefaultValue: false },

+ 4 - 4
ambari-web/test/models/configs/objects/service_config_property_test.js

@@ -185,7 +185,7 @@ var serviceConfigProperty,
       initial: {
         id: 'puppet var',
         value: '',
-        defaultValue: 'default'
+        savedValue: 'default'
       },
       result: {
         value: 'default'
@@ -197,17 +197,17 @@ var serviceConfigProperty,
       isEditable: false
     },
     {
-      defaultValue: null
+      savedValue: null
     },
     {
       value: 'value',
-      defaultValue: 'value'
+      savedValue: 'value'
     }
   ],
   notDefaultTrueData = {
     isEditable: true,
     value: 'value',
-    defaultValue: 'default'
+    savedValue: 'default'
   },
   types = ['masterHost', 'slaveHosts', 'masterHosts', 'slaveHost', 'radio button'],
   classCases = [

+ 20 - 20
ambari-web/test/utils/config_test.js

@@ -66,11 +66,11 @@ describe('App.config', function () {
       config = {
         displayType: 'int',
         value: '1024m',
-        defaultValue: '1024m'
+        savedValue: '1024m'
       };
       App.config.handleSpecialProperties(config);
       expect(config.value).to.equal('1024');
-      expect(config.defaultValue).to.equal('1024');
+      expect(config.savedValue).to.equal('1024');
     });
   });
 
@@ -80,13 +80,13 @@ describe('App.config', function () {
       {
         name: 'config1',
         value: 'value1',
-        defaultValue: 'value1',
+        recommendedValue: 'value1',
         filename: 'capacity-scheduler.xml'
       },
       {
         name: 'config2',
         value: 'value2',
-        defaultValue: 'value2',
+        recommendedValue: 'value2',
         filename: 'capacity-scheduler.xml'
       }
     ];
@@ -94,19 +94,19 @@ describe('App.config', function () {
       var result = App.config.fileConfigsIntoTextarea.call(App.config, configs, filename);
       expect(result.length).to.equal(1);
       expect(result[0].value).to.equal('config1=value1\nconfig2=value2\n');
-      expect(result[0].defaultValue).to.equal('config1=value1\nconfig2=value2\n');
+      expect(result[0].recommendedValue).to.equal('config1=value1\nconfig2=value2\n');
     });
     it('three config into textarea', function () {
       configs.push({
         name: 'config3',
         value: 'value3',
-        defaultValue: 'value3',
+        recommendedValue: 'value3',
         filename: 'capacity-scheduler.xml'
       });
       var result = App.config.fileConfigsIntoTextarea.call(App.config, configs, filename);
       expect(result.length).to.equal(1);
       expect(result[0].value).to.equal('config1=value1\nconfig2=value2\nconfig3=value3\n');
-      expect(result[0].defaultValue).to.equal('config1=value1\nconfig2=value2\nconfig3=value3\n');
+      expect(result[0].recommendedValue).to.equal('config1=value1\nconfig2=value2\nconfig3=value3\n');
     });
     it('one of three configs has different filename', function () {
       configs[1].filename = 'another filename';
@@ -114,7 +114,7 @@ describe('App.config', function () {
       //result contains two configs: one with different filename and one textarea config
       expect(result.length).to.equal(2);
       expect(result[1].value).to.equal('config1=value1\nconfig3=value3\n');
-      expect(result[1].defaultValue).to.equal('config1=value1\nconfig3=value3\n');
+      expect(result[1].recommendedValue).to.equal('config1=value1\nconfig3=value3\n');
     });
     it('none configs into empty textarea', function () {
       filename = 'capacity-scheduler.xml';
@@ -122,34 +122,34 @@ describe('App.config', function () {
       var result = App.config.fileConfigsIntoTextarea.call(App.config, configs, filename);
       expect(result.length).to.equal(1);
       expect(result[0].value).to.equal('');
-      expect(result[0].defaultValue).to.equal('');
+      expect(result[0].recommendedValue).to.equal('');
     });
     it("filename has configs that shouldn't be included in textarea", function () {
       var configs = [
         {
           name: 'config1',
           value: 'value1',
-          defaultValue: 'value1',
+          recommendedValue: 'value1',
           filename: filename
         },
         {
           name: 'config2',
           value: 'value2',
-          defaultValue: 'value2',
+          recommendedValue: 'value2',
           filename: filename
         }
       ];
       var cfg = {
         name: 'config3',
         value: 'value3',
-        defaultValue: 'value3',
+        recommendedValue: 'value3',
         filename: filename
       };
       configs.push(cfg);
       var result = App.config.fileConfigsIntoTextarea.call(App.config, configs, filename, [cfg]);
       expect(result.length).to.equal(2);
       expect(result[1].value).to.equal('config1=value1\nconfig2=value2\n');
-      expect(result[1].defaultValue).to.equal('config1=value1\nconfig2=value2\n');
+      expect(result[1].recommendedValue).to.equal('config1=value1\nconfig2=value2\n');
       expect(configs.findProperty('name', 'config3')).to.eql(cfg);
     });
   });
@@ -409,7 +409,7 @@ describe('App.config', function () {
     });
 
     it('bigtop should use New PostgreSQL Database as its default hive metastore database', function () {
-      expect(App.config.get('preDefinedSiteProperties').findProperty('defaultValue', 'New PostgreSQL Database')).to.be.ok;
+      expect(App.config.get('preDefinedSiteProperties').findProperty('recommendedValue', 'New PostgreSQL Database')).to.be.ok;
     });
 
     after(function() {
@@ -423,7 +423,7 @@ describe('App.config', function () {
     });
 
     it('HDP2 should use New MySQL Database as its default hive metastore database', function () {
-      expect(App.config.get('preDefinedSiteProperties').findProperty('defaultValue', 'New MySQL Database')).to.be.ok;
+      expect(App.config.get('preDefinedSiteProperties').findProperty('recommendedValue', 'New MySQL Database')).to.be.ok;
     });
 
     after(function() {
@@ -901,12 +901,12 @@ describe('App.config', function () {
             name: 'prop_name0',
             serviceName: 's0',
             value: 'v0',
-            defaultValue: 'dv0',
+            savedValue: 'dv0',
             filename: 'fn0.xml',
             overrides: null,
             isVisible: false,
             isFinal: true,
-            defaultIsFinal: false,
+            savedIsFinal: false,
             supportsFinal: true,
             category: 'c0'
           },
@@ -916,7 +916,7 @@ describe('App.config', function () {
             displayName: 'Prop Name0',
             serviceName: 's0',
             value: 'v0',
-            defaultValue: 'dv0',
+            savedValue: 'dv0',
             displayType: 'advanced',
             filename: 'fn0.xml',
             isUserProperty: false,
@@ -926,7 +926,7 @@ describe('App.config', function () {
             isRequired: false,
             isVisible: false,
             isFinal: true,
-            defaultIsFinal: false,
+            savedIsFinal: false,
             supportsFinal: true,
             showLabel: true,
             category: 'c0'
@@ -1129,7 +1129,7 @@ describe('App.config', function () {
             {
               name: 'falcon_user',
               value: '',
-              defaultValue: 'fu'
+              recommendedValue: 'fu'
             }
           ],
           m: 'in all, default value used',

+ 23 - 23
ambari-web/test/utils/configs/config_property_helper_test.js

@@ -85,11 +85,11 @@ describe('configPropertyHelper', function () {
     serviceConfigProperty = App.ServiceConfigProperty.create();
   });
 
-  describe('#setDefaultValue', function () {
-    it('should change the default value', function () {
-      serviceConfigProperty.set('defaultValue', 'value0');
-      configPropertyHelper.setDefaultValue(serviceConfigProperty, /\d/, '1');
-      expect(serviceConfigProperty.get('defaultValue')).to.equal('value1');
+  describe('#setRecommendedValue', function () {
+    it('should change the recommended value', function () {
+      serviceConfigProperty.set('recommendedValue', 'value0');
+      configPropertyHelper.setRecommendedValue(serviceConfigProperty, /\d/, '1');
+      expect(serviceConfigProperty.get('recommendedValue')).to.equal('value1');
     });
   });
 
@@ -194,13 +194,13 @@ describe('configPropertyHelper', function () {
         {
           filename: 'hbase-site.xml',
           value: 'host0,host1',
-          defaultValue: 'host0,host1',
+          recommendedValue: 'host0,host1',
           title: 'should set ZooKeeper Server hostnames'
         },
         {
           filename: 'ams-hbase-site.xml',
           value: 'localhost',
-          defaultValue: '',
+          recommendedValue: null,
           title: 'should ignore ZooKeeper Server hostnames'
         }
       ],
@@ -272,7 +272,7 @@ describe('configPropertyHelper', function () {
         dependencies: {
           'hive.metastore.uris': 'thrift://localhost:9083'
         },
-        defaultValue: 'thrift://localhost:9083',
+        recommendedValue: 'thrift://localhost:9083',
         value: 'thrift://h0:9083,thrift://h1:9083',
         title: 'comma separated list of Metastore hosts with thrift prefix and port'
       },
@@ -292,7 +292,7 @@ describe('configPropertyHelper', function () {
         dependencies: {
           'hive.metastore.uris': 'thrift://localhost:9083'
         },
-        defaultValue: 'hive.metastore.local=false,hive.metastore.uris=thrift://localhost:9933,hive.metastore.sasl.enabled=false',
+        recommendedValue: 'hive.metastore.local=false,hive.metastore.uris=thrift://localhost:9933,hive.metastore.sasl.enabled=false',
         value: 'hive.metastore.local=false,hive.metastore.uris=thrift://h0:9083\\,thrift://h1:9083,hive.metastore.sasl.enabled=false,hive.metastore.execute.setugi=true',
         title: 'should add relevant hive.metastore.uris value'
       },
@@ -312,7 +312,7 @@ describe('configPropertyHelper', function () {
         dependencies: {
           clientPort: '2182'
         },
-        defaultValue: 'localhost:2181',
+        recommendedValue: 'localhost:2181',
         value: 'h0:2182',
         title: 'should add ZK host and port dynamically'
       },
@@ -399,7 +399,7 @@ describe('configPropertyHelper', function () {
           }
         });
         expect(serviceConfigProperty.get('value')).to.equal(item.value);
-        expect(serviceConfigProperty.get('defaultValue')).to.equal(item.defaultValue);
+        expect(serviceConfigProperty.get('recommendedValue')).to.equal(item.recommendedValue);
       });
     });
 
@@ -435,32 +435,32 @@ describe('configPropertyHelper', function () {
     it(cases['hive.metastore.uris'].title, function () {
       serviceConfigProperty.setProperties({
         name: 'hive.metastore.uris',
-        defaultValue: cases['hive.metastore.uris'].defaultValue
+        recommendedValue: cases['hive.metastore.uris'].recommendedValue
       });
       configPropertyHelper.initialValue(serviceConfigProperty, cases['hive.metastore.uris'].localDB, cases['hive.metastore.uris'].dependencies);
       expect(serviceConfigProperty.get('value')).to.equal(cases['hive.metastore.uris'].value);
-      expect(serviceConfigProperty.get('defaultValue')).to.equal(cases['hive.metastore.uris'].value);
+      expect(serviceConfigProperty.get('recommendedValue')).to.equal(cases['hive.metastore.uris'].value);
     });
 
     it(cases['templeton.hive.properties'].title, function () {
       serviceConfigProperty.setProperties({
         name: 'templeton.hive.properties',
-        defaultValue: cases['templeton.hive.properties'].defaultValue,
-        value: cases['templeton.hive.properties'].defaultValue
+        recommendedValue: cases['templeton.hive.properties'].recommendedValue,
+        value: cases['templeton.hive.properties'].recommendedValue
       });
       configPropertyHelper.initialValue(serviceConfigProperty, cases['templeton.hive.properties'].localDB, cases['templeton.hive.properties'].dependencies);
       expect(serviceConfigProperty.get('value')).to.equal(cases['templeton.hive.properties'].value);
-      expect(serviceConfigProperty.get('defaultValue')).to.equal(cases['templeton.hive.properties'].value);
+      expect(serviceConfigProperty.get('recommendedValue')).to.equal(cases['templeton.hive.properties'].value);
     });
 
     it(cases['yarn.resourcemanager.zk-address'].title, function () {
       serviceConfigProperty.setProperties({
         name: 'yarn.resourcemanager.zk-address',
-        defaultValue: cases['yarn.resourcemanager.zk-address'].defaultValue
+        recommendedValue: cases['yarn.resourcemanager.zk-address'].recommendedValue
       });
       configPropertyHelper.initialValue(serviceConfigProperty, cases['yarn.resourcemanager.zk-address'].localDB, cases['yarn.resourcemanager.zk-address'].dependencies);
       expect(serviceConfigProperty.get('value')).to.equal(cases['yarn.resourcemanager.zk-address'].value);
-      expect(serviceConfigProperty.get('defaultValue')).to.equal(cases['yarn.resourcemanager.zk-address'].value);
+      expect(serviceConfigProperty.get('recommendedValue')).to.equal(cases['yarn.resourcemanager.zk-address'].value);
     });
 
     it(cases['oozieserver_host'].title, function () {
@@ -495,7 +495,7 @@ describe('configPropertyHelper', function () {
             component: 'HIVE_METASTORE'
           }
         ],
-        defaultValue: 'thrift://localhost:9083',
+        recommendedValue: 'thrift://localhost:9083',
         expected: 'thrift://h1:9083,thrift://h2:9083',
         title: 'typical case'
       },
@@ -506,7 +506,7 @@ describe('configPropertyHelper', function () {
             component: 'HIVE_SERVER'
           }
         ],
-        defaultValue: 'thrift://localhost:9083',
+        recommendedValue: 'thrift://localhost:9083',
         expected: '',
         title: 'no Metastore hosts in DB'
       },
@@ -525,7 +525,7 @@ describe('configPropertyHelper', function () {
             component: 'HIVE_METASTORE'
           }
         ],
-        defaultValue: '',
+        recommendedValue: '',
         expected: '',
         title: 'default value without port'
       },
@@ -551,7 +551,7 @@ describe('configPropertyHelper', function () {
 
     cases.forEach(function (item) {
       it(item.title, function () {
-        expect(configPropertyHelper.getHiveMetastoreUris(item.hosts, item.defaultValue)).to.equal(item.expected);
+        expect(configPropertyHelper.getHiveMetastoreUris(item.hosts, item.recommendedValue)).to.equal(item.expected);
       });
     });
 
@@ -862,7 +862,7 @@ describe('configPropertyHelper', function () {
         });
         configPropertyHelper.unionAllMountPoints(serviceConfigProperty, item.isOnlyFirstOneNeeded, localDB);
         expect(serviceConfigProperty.get('value')).to.equal(item.value);
-        expect(serviceConfigProperty.get('defaultValue')).to.equal(item.value);
+        expect(serviceConfigProperty.get('recommendedValue')).to.equal(item.value);
       });
     });
 

+ 4 - 4
ambari-web/test/views/common/configs/service_configs_by_category_view_test.js

@@ -191,7 +191,7 @@ describe('App.ServiceConfigsByCategoryView', function () {
           filter: 'd',
           serviceConfigs: [
             Em.Object.create({
-              defaultValue: 'dv',
+              savedValue: 'dv',
               category: 'c',
               isVisible: true
             })
@@ -444,7 +444,7 @@ describe('App.ServiceConfigsByCategoryView', function () {
           category: 'c0',
           id: 'site property',
           serviceName: 's0',
-          defaultValue: null,
+          savedValue: null,
           supportsFinal: true,
           filename: 'f0',
           isUserProperty: true,
@@ -473,7 +473,7 @@ describe('App.ServiceConfigsByCategoryView', function () {
           category: 'c1',
           id: 'site property',
           serviceName: 's1',
-          defaultValue: null,
+          savedValue: null,
           supportsFinal: false,
           filename: '',
           isUserProperty: true,
@@ -513,7 +513,7 @@ describe('App.ServiceConfigsByCategoryView', function () {
         view.createProperty(item.propertyObj);
         expect(view.get('serviceConfigs').filterProperty('name', item.propertyObj.name)).to.have.length(1);
         expect(view.get('serviceConfigs').findProperty('name', item.propertyObj.name).getProperties([
-          'name', 'displayName', 'value', 'displayType', 'isSecureConfig', 'category', 'id', 'serviceName', 'defaultValue',
+          'name', 'displayName', 'value', 'displayType', 'isSecureConfig', 'category', 'id', 'serviceName', 'savedValue',
           'supportsFinal', 'filename', 'isUserProperty', 'isNotSaved', 'isRequired', 'group', 'isOverridable'
         ])).to.eql(item.result);
       });

+ 2 - 2
ambari-web/test/views/common/configs/widgets/list_config_widget_view_test.js

@@ -29,7 +29,7 @@ describe('App.ListConfigWidgetView', function () {
         _validateOverrides: App.ServiceConfigProperty.prototype._validateOverrides,
         validate: App.ServiceConfigProperty.prototype.validate,
         name: 'a.b.c',
-        defaultValue: '2,1',
+        savedValue: '2,1',
         value: '2,1',
         filename: 'f1',
         isFinal: false,
@@ -152,7 +152,7 @@ describe('App.ListConfigWidgetView', function () {
       view.restoreDependentConfigs.restore();
       view.get('controller.removeCurrentFromDependentList').restore();
     });
-    it('should restore default value', function () {
+    it('should restore saved value', function () {
       view.toggleOption({context: view.get('options')[0]});
       view.toggleOption({context: view.get('options')[1]});
       view.toggleOption({context: view.get('options')[2]});

+ 3 - 3
ambari-web/test/views/common/configs/widgets/slider_config_widget_view_test.js

@@ -35,7 +35,7 @@ describe('App.SliderConfigWidgetView', function () {
         name: 'a.b.c',
         description: 'A B C',
         value: '486',
-        defaultValue: '486',
+        savedValue: '486',
         stackConfigProperty: Em.Object.create({
           valueAttributes: Em.Object.create({
             type: 'int',
@@ -65,7 +65,7 @@ describe('App.SliderConfigWidgetView', function () {
         name: 'a.b.c2',
         description: 'A B C 2',
         value: '72.2',
-        defaultValue: '72.2',
+        savedValue: '72.2',
         stackConfigProperty: Em.Object.create({
           valueAttributes: Em.Object.create({
             type: 'float',
@@ -94,7 +94,7 @@ describe('App.SliderConfigWidgetView', function () {
         name: 'a.b.c3',
         description: 'A B C 3',
         value: '0.22',
-        defaultValue: '0.22',
+        savedValue: '0.22',
         stackConfigProperty: Em.Object.create({
           valueAttributes: Em.Object.create({
             type: 'float',

+ 1 - 1
ambari-web/test/views/common/configs/widgets/toggle_config_widget_view_test.js

@@ -28,7 +28,7 @@ describe('App.ToggleConfigWidgetView', function () {
       config: Em.Object.create({
         name: 'a.b.c',
         value: 'active',
-        defaultValue: 'active',
+        savedValue: 'active',
         stackConfigProperty: Em.Object.create({
           valueAttributes: {
             "type": "value-list",

+ 5 - 5
ambari-web/test/views/common/controls_view_test.js

@@ -613,14 +613,14 @@ describe('App.ServiceConfigRadioButtons', function () {
           databaseName: item.databaseName,
           hostName: item.hostName,
           databaseNameProperty: Em.Object.create({
-            defaultValue: item.databaseNameDefault
+            recommendedValue: item.databaseNameDefault
           }),
           hostNameProperty: Em.Object.create({
-            defaultValue: item.hostNameDefault
+            recommendedValue: item.hostNameDefault
           })
         });
         expect(view.get('connectionUrl.value')).to.equal(item.connectionUrlValue);
-        expect(view.get('connectionUrl.defaultValue')).to.equal(item.connectionUrlDefaultValue);
+        expect(view.get('connectionUrl.recommendedValue')).to.equal(item.connectionUrlDefaultValue);
         expect(view.get('dbClass.value')).to.equal(item.dbClassValue);
         serviceAuthPropsMap[item.serviceName].forEach(function (propName) {
           expect(view.get('categoryConfigsAll').findProperty('name', propName).get('isVisible')).to.equal(item.isAuthVisibleAndRequired);
@@ -789,7 +789,7 @@ describe('App.BaseUrlTextField', function () {
     it('should be recalculated after value is changed', function () {
       view.setProperties({
         value: 'val',
-        defaultValue: 'val'
+        recommendedValue: 'val'
       });
       expect(view.get('valueWasChanged')).to.be.false;
       view.set('value', 'newVal');
@@ -803,7 +803,7 @@ describe('App.BaseUrlTextField', function () {
     it('should unset value', function () {
       view.setProperties({
         value: 'valNew',
-        defaultValue: 'val'
+        savedValue: 'val'
       });
       view.restoreValue();
       expect(view.get('value')).to.equal('val');

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio