Browse Source

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

aBabiichuk 10 years ago
parent
commit
07616603c4
61 changed files with 984 additions and 1558 deletions
  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) {
   setConfigInitialValue: function(config,value) {
     config.value = value;
     config.value = value;
-    config.defaultValue = value;
+    config.recommendedValue = value;
   },
   },
 
 
   renderServiceConfigs: function (_serviceConfig) {
   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;
         return item.get('hostName') + ':' + zkPort;
       }).join(',');
       }).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')
     configProperties.findProperty('name', 'yarn.resourcemanager.webapp.address.rm1')
       .set('value', currentRMHost + webAddressPort)
       .set('value', currentRMHost + webAddressPort)
-      .set('defaultValue', currentRMHost + webAddressPort);
+      .set('recommendedValue', currentRMHost + webAddressPort);
 
 
     configProperties.findProperty('name', 'yarn.resourcemanager.webapp.address.rm2')
     configProperties.findProperty('name', 'yarn.resourcemanager.webapp.address.rm2')
       .set('value', additionalRMHost + webAddressPort)
       .set('value', additionalRMHost + webAddressPort)
-      .set('defaultValue', additionalRMHost + webAddressPort);
+      .set('recommendedValue', additionalRMHost + webAddressPort);
 
 
     configProperties.findProperty('name', 'yarn.resourcemanager.webapp.https.address.rm1')
     configProperties.findProperty('name', 'yarn.resourcemanager.webapp.https.address.rm1')
       .set('value', currentRMHost + httpsWebAddressPort)
       .set('value', currentRMHost + httpsWebAddressPort)
-      .set('defaultValue', currentRMHost + httpsWebAddressPort);
+      .set('recommendedValue', currentRMHost + httpsWebAddressPort);
 
 
     configProperties.findProperty('name', 'yarn.resourcemanager.webapp.https.address.rm2')
     configProperties.findProperty('name', 'yarn.resourcemanager.webapp.https.address.rm2')
       .set('value', additionalRMHost + httpsWebAddressPort)
       .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')) {
       if (property.get('observesValueFrom')) {
         var observedValue = allConfigs.findProperty('name', property.get('observesValueFrom')).get('value');
         var observedValue = allConfigs.findProperty('name', property.get('observesValueFrom')).get('value');
         property.set('value', observedValue);
         property.set('value', observedValue);
-        property.set('defaultValue', observedValue);
+        property.set('recommendedValue', observedValue);
       }
       }
       if (property.get('serviceName') == 'Cluster') {
       if (property.get('serviceName') == 'Cluster') {
         property.set('category', 'Global');
         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) {
       this.get('adminPropertyNames').forEach(function(item) {
         var property = storedServiceConfigs.filterProperty('filename', 'krb5-conf.xml').findProperty('name', item.name);
         var property = storedServiceConfigs.filterProperty('filename', 'krb5-conf.xml').findProperty('name', item.name);
         if (!!property) {
         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();
           _prop.validate();
           adminProps.push(_prop);
           adminProps.push(_prop);
         }
         }
@@ -156,7 +156,7 @@ App.KerberosWizardStep4Controller = App.WizardStep7Controller.extend(App.AddSecu
     if (this.get('wizardController.name') != 'addServiceController') {
     if (this.get('wizardController.name') != 'addServiceController') {
       var realmValue = storedServiceConfigs.findProperty('name', 'realm').value;
       var realmValue = storedServiceConfigs.findProperty('name', 'realm').value;
       configProperties.findProperty('name', 'realm').set('value', realmValue);
       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);
     configProperties.setEach('isSecureConfig', false);
@@ -167,7 +167,7 @@ App.KerberosWizardStep4Controller = App.WizardStep7Controller.extend(App.AddSecu
       if (property.get('observesValueFrom')) {
       if (property.get('observesValueFrom')) {
         var observedValue = allConfigs.findProperty('name', property.get('observesValueFrom')).get('value');
         var observedValue = allConfigs.findProperty('name', property.get('observesValueFrom')).get('value');
         property.set('value', observedValue);
         property.set('value', observedValue);
-        property.set('defaultValue', observedValue);
+        property.set('recommendedValue', observedValue);
       }
       }
       if (property.get('serviceName') == 'Cluster') {
       if (property.get('serviceName') == 'Cluster') {
         property.set('category', 'Global');
         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('\\,') + ",");
         var configValue =  config.value.replace(/thrift.+[0-9]{2,},/i, hiveMSHostNames.join('\\,') + ",");
         config.set('value', configValue);
         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')) {
       if (config.get('observesValueFrom') == configProperty.get('name')) {
         Em.run.once(self, function() {
         Em.run.once(self, function() {
           config.set('value', configProperty.get('value'));
           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'),
           name: advanced.get('name'),
           displayName: advanced.get('displayName'),
           displayName: advanced.get('displayName'),
           value: advanced.get('value'),
           value: advanced.get('value'),
-          defaultValue: advanced.get('defaultValue'),
+          savedValue: null,
           filename: advanced.get('fileName'),
           filename: advanced.get('fileName'),
           isUserProperty: false,
           isUserProperty: false,
           isNotSaved: true,
           isNotSaved: true,
           recommendedValue: advanced.get('value'),
           recommendedValue: advanced.get('value'),
           isFinal: advanced.get('isFinal'),
           isFinal: advanced.get('isFinal'),
-          defaultIsFinal: advanced.get('defaultIsFinal'),
+          recommendedIsFinal: advanced.get('recommendedIsFinal'),
           serviceName: advanced.get('serviceName'),
           serviceName: advanced.get('serviceName'),
           supportsFinal: advanced.get('supportsFinal'),
           supportsFinal: advanced.get('supportsFinal'),
           category: 'Advanced ' + App.config.getConfigTagFromFileName(advanced.get('fileName')),
           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) {
   createNewSCP: function (override, _serviceConfigProperty, serviceConfigProperty, defaultGroupSelected) {
     var newSCP = App.ServiceConfigProperty.create(_serviceConfigProperty, {
     var newSCP = App.ServiceConfigProperty.create(_serviceConfigProperty, {
       value: Em.get(override, 'value'),
       value: Em.get(override, 'value'),
-      defaultValue: Em.get(override, 'value'),
+      savedValue: Em.get(override, 'value'),
+      recommendedValue: serviceConfigProperty.get('recommendedValue'),
       isFinal: Em.get(override, 'isFinal'),
       isFinal: Em.get(override, 'isFinal'),
+      savedIsFinal: Em.get(override, 'isFinal'),
+      recommendedIsFinal: serviceConfigProperty.get('recommendedIsFinal'),
       group: Em.get(override, 'group'),
       group: Em.get(override, 'group'),
       supportsFinal: serviceConfigProperty.get('supportsFinal'),
       supportsFinal: serviceConfigProperty.get('supportsFinal'),
       isOriginalSCP: false,
       isOriginalSCP: false,
@@ -1210,7 +1213,7 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
     var serviceConfigs = this.get('serviceConfigs').findProperty('serviceName', serviceName).get('configs');
     var serviceConfigs = this.get('serviceConfigs').findProperty('serviceName', serviceName).get('configs');
     var hostConfig = serviceConfigs.findProperty('name', hostProperty);
     var hostConfig = serviceConfigs.findProperty('name', hostProperty);
     if (hostConfig) {
     if (hostConfig) {
-      hostConfig.defaultValue = this.getMasterComponentHostValue(componentName, multiple);
+      hostConfig.recommendedValue = this.getMasterComponentHostValue(componentName, multiple);
       configs.push(hostConfig);
       configs.push(hostConfig);
     }
     }
   },
   },
@@ -1347,7 +1350,8 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
       // create new override with new value
       // create new override with new value
       var newSCP = App.ServiceConfigProperty.create(serviceConfigProperty, {
       var newSCP = App.ServiceConfigProperty.create(serviceConfigProperty, {
         value: value || '',
         value: value || '',
-        defaultValue: serviceConfigProperty.get('defaultValue'),
+        recommendedValue: serviceConfigProperty.get('recommendedValue'),
+        recommendedIsFinal: serviceConfigProperty.get('recommendedIsFinal'),
         isOriginalSCP: false,
         isOriginalSCP: false,
         parentSCP: serviceConfigProperty,
         parentSCP: serviceConfigProperty,
         isEditable: true,
         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'),
           name: _configProperties.get('name'),
           displayName: _configProperties.get('displayName'),
           displayName: _configProperties.get('displayName'),
           value: _configProperties.get('value'),
           value: _configProperties.get('value'),
-          defaultValue: _configProperties.get('defaultValue'),
+          savedValue: _configProperties.get('savedValue'),
+          recommendedValue: _configProperties.get('recommendedValue'),
           description: _configProperties.get('description'),
           description: _configProperties.get('description'),
           serviceName: _configProperties.get('serviceName'),
           serviceName: _configProperties.get('serviceName'),
           domain: _configProperties.get('domain'),
           domain: _configProperties.get('domain'),
           isVisible: _configProperties.get('isVisible'),
           isVisible: _configProperties.get('isVisible'),
           isFinal: _configProperties.get('isFinal'),
           isFinal: _configProperties.get('isFinal'),
-          defaultIsFinal: _configProperties.get('isFinal'),
+          recommendedIsFinal: _configProperties.get('isFinal'),
           supportsFinal: _configProperties.get('supportsFinal'),
           supportsFinal: _configProperties.get('supportsFinal'),
           filename: _configProperties.get('filename'),
           filename: _configProperties.get('filename'),
           displayType: _configProperties.get('displayType'),
           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'))) {
       if (stepController.get('installedServiceNames') && stepController.get('installedServiceNames').contains(_content.get('serviceName'))) {
         // get only modified configs
         // get only modified configs
         var configs = _content.get('configs').filter(function (config) {
         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'];
             var notAllowed = ['masterHost', 'masterHosts', 'slaveHosts', 'slaveHost'];
             return !notAllowed.contains(config.get('displayType')) && !!config.filename;
             return !notAllowed.contains(config.get('displayType')) && !!config.filename;
           }
           }
@@ -925,12 +926,6 @@ App.WizardController = Em.Controller.extend(App.LocalStorage, App.ThemesMappingM
         if (configs.length) {
         if (configs.length) {
           fileNamesToUpdate = fileNamesToUpdate.concat(configs.mapProperty('filename').uniq());
           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);
     this.setDBProperty('serviceConfigProperties', serviceConfigProperties);
     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)) {
         if (!Em.isNone(config.value)) {
           var replaceStr = config.value.match(/.jar=host[^,]+/)[0];
           var replaceStr = config.value.match(/.jar=host[^,]+/)[0];
           var replaceWith = replaceStr.slice(0, replaceStr.lastIndexOf('=') - replaceStr.length + 1) + gangliaServerHost;
           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);
       }, this);
     }
     }
   },
   },
@@ -578,9 +577,8 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E
     if (cfgToChange) {
     if (cfgToChange) {
       var res = this.get('allSelectedServiceNames').contains('SLIDER');
       var res = this.get('allSelectedServiceNames').contains('SLIDER');
       if (Em.get(cfgToChange, 'value') !== res) {
       if (Em.get(cfgToChange, 'value') !== res) {
-        Em.set(cfgToChange, 'defaultValue', res);
+        Em.set(cfgToChange, 'recommendedValue', res);
         Em.set(cfgToChange, 'value', 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) {
   applyServicesConfigs: function (configs, storedConfigs) {
     if (this.get('allSelectedServiceNames').contains('YARN')) {
     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"];
     var dependedServices = ["STORM", "YARN"];
     dependedServices.forEach(function (serviceName) {
     dependedServices.forEach(function (serviceName) {
@@ -635,14 +633,13 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E
     }, this);
     }, this);
     //STEP 6: Distribute configs by service and wrap each one in App.ServiceConfigProperty (configs -> serviceConfigs)
     //STEP 6: Distribute configs by service and wrap each one in App.ServiceConfigProperty (configs -> serviceConfigs)
     var self = this;
     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 () {
     this.loadServerSideConfigsRecommendations().always(function () {
       self.set('isRecommendedLoaded', true);
       self.set('isRecommendedLoaded', true);
       // format descriptor configs
       // 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 serviceConfigProperties = (self.get('content.serviceConfigProperties') || []).mapProperty('name');
       var recommendedToDelete = self.get('_dependentConfigValues').filterProperty('toDelete');
       var recommendedToDelete = self.get('_dependentConfigValues').filterProperty('toDelete');
       recommendedToDelete.forEach(function (c) {
       recommendedToDelete.forEach(function (c) {
@@ -653,7 +650,6 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E
       });
       });
 
 
       self.updateDependentConfigs();
       self.updateDependentConfigs();
-      self.clearDependentConfigs();
       self.checkHostOverrideInstaller();
       self.checkHostOverrideInstaller();
       self.activateSpecialConfigs();
       self.activateSpecialConfigs();
       self.selectProperService();
       self.selectProperService();
@@ -740,7 +736,7 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E
       masterComponentHosts: this.get('wizardController.content.masterComponentHosts'),
       masterComponentHosts: this.get('wizardController.content.masterComponentHosts'),
       slaveComponentHosts: this.get('wizardController.content.slaveComponentHosts')
       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') {
     if (this.get('wizardController.name') === 'addServiceController') {
       serviceConfigs.setEach('showConfig', true);
       serviceConfigs.setEach('showConfig', true);
       serviceConfigs.setEach('selected', false);
       serviceConfigs.setEach('selected', false);
@@ -769,7 +765,7 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E
 
 
           hRootDir.setProperties({
           hRootDir.setProperties({
             'value':  valueToChange,
             '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) {
   setInstalledServiceConfigs: function (serviceConfigTags, configs, configsByTags, installedServiceNames) {
     var configsMap = {};
     var configsMap = {};
-    var configTypeMap = {};
     var configMixin = App.get('config');
     var configMixin = App.get('config');
+    var nonServiceTab = require('data/service_configs');
     var self = this;
     var self = this;
 
 
     configsByTags.forEach(function (configSite) {
     configsByTags.forEach(function (configSite) {
       configsMap[configSite.type] = configSite.properties || {};
       configsMap[configSite.type] = configSite.properties || {};
     });
     });
     configs.forEach(function (_config) {
     configs.forEach(function (_config) {
-      var nonServiceTab = require('data/service_configs');
       var type = _config.filename ? App.config.getConfigTagFromFileName(_config.filename) : null;
       var type = _config.filename ? App.config.getConfigTagFromFileName(_config.filename) : null;
       var mappedConfigValue = type && configsMap[type] ? configsMap[type][_config.name] : 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)))) {
       if (!Em.isNone(mappedConfigValue) && ((installedServiceNames && installedServiceNames.contains(_config.serviceName) || nonServiceTab.someProperty('serviceName', _config.serviceName)))) {
         // prevent overriding already edited properties
         // prevent overriding already edited properties
-        if (_config.defaultValue != mappedConfigValue) {
+        if (_config.savedValue != mappedConfigValue) {
           _config.value = mappedConfigValue;
           _config.value = mappedConfigValue;
         }
         }
-        _config.defaultValue = mappedConfigValue;
+        _config.savedValue = mappedConfigValue;
         _config.hasInitialValue = true;
         _config.hasInitialValue = true;
         App.config.handleSpecialProperties(_config);
         App.config.handleSpecialProperties(_config);
         delete configsMap[type][_config.name];
         delete configsMap[type][_config.name];
@@ -890,7 +885,7 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E
           name: propertyName,
           name: propertyName,
           serviceName: configMixin.getServiceNameByConfigType(filename),
           serviceName: configMixin.getServiceNameByConfigType(filename),
           value: configsMap[filename][propertyName],
           value: configsMap[filename][propertyName],
-          defaultValue: configsMap[filename][propertyName],
+          savedValue: configsMap[filename][propertyName],
           filename: configMixin.get('filenameExceptions').contains(filename) ? filename : filename + '.xml',
           filename: configMixin.get('filenameExceptions').contains(filename) ? filename : filename + '.xml',
           category: 'Advanced',
           category: 'Advanced',
           hasInitialValue: true,
           hasInitialValue: true,
@@ -932,7 +927,7 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E
       var propertyName = propertyPrefix + '_existing_' + dbPrefix + '_host';
       var propertyName = propertyPrefix + '_existing_' + dbPrefix + '_host';
       var existingDBConfig = configs.findProperty('name', propertyName);
       var existingDBConfig = configs.findProperty('name', propertyName);
       if (!existingDBConfig.value)
       if (!existingDBConfig.value)
-        existingDBConfig.value = existingDBConfig.defaultValue = configs.findProperty('name', dbHostName).value;
+        existingDBConfig.value = existingDBConfig.savedValue = configs.findProperty('name', dbHostName).value;
     }, this);
     }, 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) {
   loadUiSideConfigs: function (configMapping) {
     var uiConfig = [];
     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'));
     var dependentConfig = $.extend(true, [], configMapping.filterProperty('foreignKey'));
     dependentConfig.forEach(function (_config) {
     dependentConfig.forEach(function (_config) {
       App.config.setConfigValue(uiConfig, this.get('content.serviceConfigProperties'), _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;
     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
    * Format <code>content.hosts</code> from Object to Array
    * @returns {Array}
    * @returns {Array}
@@ -443,95 +413,6 @@ App.WizardStep8Controller = Em.Controller.extend(App.AddSecurityConfigs, App.wiz
     return hosts;
     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
    * Load all info about cluster to <code>clusterInfo</code> variable
    * @method loadClusterInfo
    * @method loadClusterInfo

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

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

@@ -54,7 +54,7 @@ hdp23properties.push({
     "name": "DB_FLAVOR",
     "name": "DB_FLAVOR",
     "displayName": "DB FLAVOR",
     "displayName": "DB FLAVOR",
     "value": "",
     "value": "",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isReconfigurable": true,
     "isReconfigurable": true,
     "options": [
     "options": [
       {
       {
@@ -89,7 +89,7 @@ hdp23properties.push({
     "id": "puppet var",
     "id": "puppet var",
     "displayName": "Database Type",
     "displayName": "Database Type",
     "value": "",
     "value": "",
-    "defaultValue": "MySQL",
+    "recommendedValue": "MySQL",
     "description": "Using a MySQL database for Ranger",
     "description": "Using a MySQL database for Ranger",
     "displayType": "masterHost",
     "displayType": "masterHost",
     "isOverridable": false,
     "isOverridable": false,
@@ -105,7 +105,7 @@ hdp23properties.push({
     "id": "puppet var",
     "id": "puppet var",
     "displayName": "Database Type",
     "displayName": "Database Type",
     "value": "",
     "value": "",
-    "defaultValue": "ORACLE",
+    "recommendedValue": "ORACLE",
     "description": "Using an Oracle database for Ranger",
     "description": "Using an Oracle database for Ranger",
     "displayType": "masterHost",
     "displayType": "masterHost",
     "isOverridable": false,
     "isOverridable": false,
@@ -121,7 +121,7 @@ hdp23properties.push({
     "id": "puppet var",
     "id": "puppet var",
     "displayName": "Database Type",
     "displayName": "Database Type",
     "value": "",
     "value": "",
-    "defaultValue": "Postgres",
+    "recommendedValue": "Postgres",
     "description": "Using a Postgres database for Ranger",
     "description": "Using a Postgres database for Ranger",
     "displayType": "masterHost",
     "displayType": "masterHost",
     "isOverridable": false,
     "isOverridable": false,
@@ -137,7 +137,7 @@ hdp23properties.push({
     "id": "puppet var",
     "id": "puppet var",
     "displayName": "Database Type",
     "displayName": "Database Type",
     "value": "",
     "value": "",
-    "defaultValue": "MSSQL",
+    "recommendedValue": "MSSQL",
     "description": "Using a MS SQL database for Ranger",
     "description": "Using a MS SQL database for Ranger",
     "displayType": "masterHost",
     "displayType": "masterHost",
     "isOverridable": false,
     "isOverridable": false,
@@ -153,7 +153,7 @@ hdp23properties.push({
     "id": "puppet var",
     "id": "puppet var",
     "displayName": "Ranger Server host",
     "displayName": "Ranger Server host",
     "value": "",
     "value": "",
-    "defaultValue": "",
+    "recommendedValue": "",
     "description": "The host that has been assigned to run Ranger Server",
     "description": "The host that has been assigned to run Ranger Server",
     "displayType": "masterHost",
     "displayType": "masterHost",
     "isOverridable": false,
     "isOverridable": false,
@@ -169,7 +169,7 @@ hdp23properties.push({
     "id": "site property",
     "id": "site property",
     "name": "xasecure.audit.hdfs.config.encoding",
     "name": "xasecure.audit.hdfs.config.encoding",
     "displayName": "xasecure.audit.hdfs.config.encoding",
     "displayName": "xasecure.audit.hdfs.config.encoding",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isRequired": false,
     "isRequired": false,
     "filename": "ranger-hdfs-audit.xml",
     "filename": "ranger-hdfs-audit.xml",
     "category": "Advanced ranger-hdfs-audit",
     "category": "Advanced ranger-hdfs-audit",
@@ -206,7 +206,7 @@ hdp23properties.push({
     "id": "site property",
     "id": "site property",
     "name": "xasecure.audit.hdfs.config.encoding",
     "name": "xasecure.audit.hdfs.config.encoding",
     "displayName": "xasecure.audit.hdfs.config.encoding",
     "displayName": "xasecure.audit.hdfs.config.encoding",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isRequired": false,
     "isRequired": false,
     "filename": "ranger-hive-audit.xml",
     "filename": "ranger-hive-audit.xml",
     "category": "Advanced ranger-hive-audit",
     "category": "Advanced ranger-hive-audit",
@@ -216,7 +216,7 @@ hdp23properties.push({
     "id": "site property",
     "id": "site property",
     "name": "xasecure.audit.hdfs.config.encoding",
     "name": "xasecure.audit.hdfs.config.encoding",
     "displayName": "xasecure.audit.hdfs.config.encoding",
     "displayName": "xasecure.audit.hdfs.config.encoding",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isRequired": false,
     "isRequired": false,
     "filename": "ranger-knox-audit.xml",
     "filename": "ranger-knox-audit.xml",
     "category": "Advanced ranger-knox-audit",
     "category": "Advanced ranger-knox-audit",
@@ -226,7 +226,7 @@ hdp23properties.push({
     "id": "site property",
     "id": "site property",
     "name": "xasecure.audit.hdfs.config.encoding",
     "name": "xasecure.audit.hdfs.config.encoding",
     "displayName": "xasecure.audit.hdfs.config.encoding",
     "displayName": "xasecure.audit.hdfs.config.encoding",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isRequired": false,
     "isRequired": false,
     "filename": "ranger-storm-audit.xml",
     "filename": "ranger-storm-audit.xml",
     "category": "Advanced ranger-storm-audit",
     "category": "Advanced ranger-storm-audit",
@@ -236,7 +236,7 @@ hdp23properties.push({
     "id": "site property",
     "id": "site property",
     "name": "xasecure.audit.hdfs.config.encoding",
     "name": "xasecure.audit.hdfs.config.encoding",
     "displayName": "xasecure.audit.hdfs.config.encoding",
     "displayName": "xasecure.audit.hdfs.config.encoding",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isRequired": false,
     "isRequired": false,
     "filename": "ranger-yarn-audit.xml",
     "filename": "ranger-yarn-audit.xml",
     "category": "Advanced ranger-yarn-audit",
     "category": "Advanced ranger-yarn-audit",
@@ -284,7 +284,7 @@ hdp23properties.push({
     "id": "site property",
     "id": "site property",
     "name": "xasecure.audit.hdfs.config.encoding",
     "name": "xasecure.audit.hdfs.config.encoding",
     "displayName": "xasecure.audit.hdfs.config.encoding",
     "displayName": "xasecure.audit.hdfs.config.encoding",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isRequired": false,
     "isRequired": false,
     "filename": "ranger-hbase-audit.xml",
     "filename": "ranger-hbase-audit.xml",
     "category": "Advanced ranger-hbase-audit",
     "category": "Advanced ranger-hbase-audit",
@@ -403,7 +403,7 @@ hdp23properties.push({
     "id": "puppet var",
     "id": "puppet var",
     "displayName": "MYSQL database Host",
     "displayName": "MYSQL database Host",
     "description": "Specify the host on which the existing database is hosted",
     "description": "Specify the host on which the existing database is hosted",
-    "defaultValue": "",
+    "recommendedValue": "",
     "value": "",
     "value": "",
     "displayType": "host",
     "displayType": "host",
     "isOverridable": false,
     "isOverridable": false,
@@ -419,7 +419,7 @@ hdp23properties.push({
     "id": "puppet var",
     "id": "puppet var",
     "displayName": "Oracle database Host",
     "displayName": "Oracle database Host",
     "description": "Specify the host on which the existing database is hosted",
     "description": "Specify the host on which the existing database is hosted",
-    "defaultValue": "",
+    "recommendedValue": "",
     "value": "",
     "value": "",
     "displayType": "host",
     "displayType": "host",
     "isOverridable": false,
     "isOverridable": false,
@@ -435,7 +435,7 @@ hdp23properties.push({
     "id": "puppet var",
     "id": "puppet var",
     "displayName": "Database Host",
     "displayName": "Database Host",
     "description": "Specify the host on which the existing database is hosted",
     "description": "Specify the host on which the existing database is hosted",
-    "defaultValue": "",
+    "recommendedValue": "",
     "value": "",
     "value": "",
     "displayType": "host",
     "displayType": "host",
     "isOverridable": false,
     "isOverridable": false,
@@ -451,7 +451,7 @@ hdp23properties.push({
     "id": "puppet var",
     "id": "puppet var",
     "displayName": "Database Host",
     "displayName": "Database Host",
     "description": "Specify the host on which the existing database is hosted",
     "description": "Specify the host on which the existing database is hosted",
-    "defaultValue": "",
+    "recommendedValue": "",
     "value": "",
     "value": "",
     "displayType": "host",
     "displayType": "host",
     "isOverridable": false,
     "isOverridable": false,
@@ -466,7 +466,7 @@ hdp23properties.push({
     "name": "SQL_COMMAND_INVOKER",
     "name": "SQL_COMMAND_INVOKER",
     "id": "site property",
     "id": "site property",
     "displayName": "SQL Command Invoker",
     "displayName": "SQL Command Invoker",
-    "defaultValue": "mysql",
+    "recommendedValue": "mysql",
     "isObserved": true,
     "isObserved": true,
     "isReconfigurable": true,
     "isReconfigurable": true,
     "displayType": "",
     "displayType": "",
@@ -481,7 +481,7 @@ hdp23properties.push({
     "name": "ranger_jdbc_connection_url",
     "name": "ranger_jdbc_connection_url",
     "id": "site property",
     "id": "site property",
     "displayName": "JDBC connect string for a Ranger database",
     "displayName": "JDBC connect string for a Ranger database",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isReconfigurable": true,
     "isReconfigurable": true,
     "displayType": "",
     "displayType": "",
     "isOverridable": false,
     "isOverridable": false,
@@ -496,7 +496,7 @@ hdp23properties.push({
     "name": "ranger_jdbc_driver",
     "name": "ranger_jdbc_driver",
     "id": "site property",
     "id": "site property",
     "displayName": "Driver class name for a JDBC Ranger database",
     "displayName": "Driver class name for a JDBC Ranger database",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isReconfigurable": true,
     "isReconfigurable": true,
     "isObserved": true,
     "isObserved": true,
     "displayType": "",
     "displayType": "",
@@ -511,7 +511,7 @@ hdp23properties.push({
     "name": "db_root_user",
     "name": "db_root_user",
     "id": "site property",
     "id": "site property",
     "displayName": "Ranger DB root user",
     "displayName": "Ranger DB root user",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isReconfigurable": true,
     "isReconfigurable": true,
     "isObserved": true,
     "isObserved": true,
     "displayType": "",
     "displayType": "",
@@ -526,7 +526,7 @@ hdp23properties.push({
     "name": "db_root_password",
     "name": "db_root_password",
     "id": "site property",
     "id": "site property",
     "displayName": "Ranger DB root password",
     "displayName": "Ranger DB root password",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isReconfigurable": true,
     "isReconfigurable": true,
     "isObserved": true,
     "isObserved": true,
     "displayType": "password",
     "displayType": "password",
@@ -541,7 +541,7 @@ hdp23properties.push({
     "name": "db_name",
     "name": "db_name",
     "id": "site property",
     "id": "site property",
     "displayName": "Ranger DB name",
     "displayName": "Ranger DB name",
-    "defaultValue": "",
+    "recommendedValue": "",
     "isReconfigurable": true,
     "isReconfigurable": true,
     "isObserved": true,
     "isObserved": true,
     "displayType": "",
     "displayType": "",
@@ -565,7 +565,7 @@ hdp23properties.push({
     "id": "puppet var",
     "id": "puppet var",
     "name": "ranger.external.url",
     "name": "ranger.external.url",
     "displayName": "External URL",
     "displayName": "External URL",
-    "defaultValue": "http://localhost:6080",
+    "recommendedValue": "http://localhost:6080",
     "isReconfigurable": true,
     "isReconfigurable": true,
     "displayType": "",
     "displayType": "",
     "isOverridable": false,
     "isOverridable": false,
@@ -578,7 +578,7 @@ hdp23properties.push({
     "id": "puppet var",
     "id": "puppet var",
     "name": "ranger.service.http.enabled",
     "name": "ranger.service.http.enabled",
     "displayName": "HTTP enabled",
     "displayName": "HTTP enabled",
-    "defaultValue": true,
+    "recommendedValue": true,
     "isReconfigurable": true,
     "isReconfigurable": true,
     "displayType": "checkbox",
     "displayType": "checkbox",
     "isOverridable": false,
     "isOverridable": false,
@@ -591,7 +591,7 @@ hdp23properties.push({
     "id": "site property",
     "id": "site property",
     "name": "ranger.authentication.method",
     "name": "ranger.authentication.method",
     "displayName": "Authentication method",
     "displayName": "Authentication method",
-    "defaultValue": "NONE",
+    "recommendedValue": "NONE",
     "options": [
     "options": [
       {
       {
         displayName: 'LDAP',
         displayName: 'LDAP',
@@ -622,7 +622,7 @@ hdp23properties.push({
     "id": "site property",
     "id": "site property",
     "name": "ranger.unixauth.remote.login.enabled",
     "name": "ranger.unixauth.remote.login.enabled",
     "displayName": "Allow remote Login",
     "displayName": "Allow remote Login",
-    "defaultValue": true,
+    "recommendedValue": true,
     "isReconfigurable": true,
     "isReconfigurable": true,
     "displayType": "checkbox",
     "displayType": "checkbox",
     "isOverridable": false,
     "isOverridable": false,
@@ -635,7 +635,7 @@ hdp23properties.push({
     "id": "site property",
     "id": "site property",
     "name": "ranger.unixauth.service.hostname",
     "name": "ranger.unixauth.service.hostname",
     "displayName": "ranger.unixauth.service.hostname",
     "displayName": "ranger.unixauth.service.hostname",
-    "defaultValue": 'localhost',
+    "recommendedValue": 'localhost',
     "isReconfigurable": true,
     "isReconfigurable": true,
     "isOverridable": false,
     "isOverridable": false,
     "isVisible": true,
     "isVisible": true,
@@ -647,7 +647,7 @@ hdp23properties.push({
     "id": "site property",
     "id": "site property",
     "name": "ranger.unixauth.service.port",
     "name": "ranger.unixauth.service.port",
     "displayName": "ranger.unixauth.service.port",
     "displayName": "ranger.unixauth.service.port",
-    "defaultValue": '5151',
+    "recommendedValue": '5151',
     "isReconfigurable": true,
     "isReconfigurable": true,
     "displayType": "int",
     "displayType": "int",
     "isOverridable": false,
     "isOverridable": false,
@@ -716,7 +716,7 @@ hdp23properties.push({
   {
   {
     "id": "site property",
     "id": "site property",
     "name": "xasecure.hbase.update.xapolicies.on.grant.revoke",
     "name": "xasecure.hbase.update.xapolicies.on.grant.revoke",
-    "defaultValue": true,
+    "recommendedValue": true,
     "displayName": "Should HBase GRANT/REVOKE update XA policies?",
     "displayName": "Should HBase GRANT/REVOKE update XA policies?",
     "displayType": "checkbox",
     "displayType": "checkbox",
     "filename": "ranger-hbase-security.xml",
     "filename": "ranger-hbase-security.xml",
@@ -727,7 +727,7 @@ hdp23properties.push({
   {
   {
     "id": "site property",
     "id": "site property",
     "name": "xasecure.hive.update.xapolicies.on.grant.revoke",
     "name": "xasecure.hive.update.xapolicies.on.grant.revoke",
-    "defaultValue": true,
+    "recommendedValue": true,
     "displayName": "Should Hive GRANT/REVOKE update XA policies?",
     "displayName": "Should Hive GRANT/REVOKE update XA policies?",
     "displayType": "checkbox",
     "displayType": "checkbox",
     "filename": "ranger-hive-security.xml",
     "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",
         "displayName": "dfs.journalnode.edits.dir",
         "description": "The Directory where the JournalNode will store its local state.",
         "description": "The Directory where the JournalNode will store its local state.",
         "isReconfigurable": true,
         "isReconfigurable": true,
-        "defaultValue": "/hadoop/hdfs/journal",
+        "recommendedValue": "/hadoop/hdfs/journal",
         "value": "/hadoop/hdfs/journal",
         "value": "/hadoop/hdfs/journal",
         "defaultDirectory": "/hadoop/hdfs/journal",
         "defaultDirectory": "/hadoop/hdfs/journal",
         "displayType": "directory",
         "displayType": "directory",
@@ -47,7 +47,7 @@ module.exports =
         "name": "fs.defaultFS",
         "name": "fs.defaultFS",
         "displayName": "fs.defaultFS",
         "displayName": "fs.defaultFS",
         "description": "The default path prefix used by the Hadoop FS client when none is given.",
         "description": "The default path prefix used by the Hadoop FS client when none is given.",
-        "defaultValue": "hdfs://haCluster",
+        "recommendedValue": "hdfs://haCluster",
         "isReconfigurable": false,
         "isReconfigurable": false,
         "value": "hdfs://haCluster",
         "value": "hdfs://haCluster",
         "category": "HDFS",
         "category": "HDFS",
@@ -60,7 +60,7 @@ module.exports =
         "displayName": "ha.zookeeper.quorum",
         "displayName": "ha.zookeeper.quorum",
         "isReconfigurable": false,
         "isReconfigurable": false,
         "description": "This lists the host-port pairs running the ZooKeeper service.",
         "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",
         "value": "zk1.example.com:2181,zk2.example.com:2181,zk3.example.com:2181",
         "category": "HDFS",
         "category": "HDFS",
         "filename": "core-site",
         "filename": "core-site",
@@ -72,7 +72,7 @@ module.exports =
         "displayName": "dfs.nameservices",
         "displayName": "dfs.nameservices",
         "description": "Comma-separated list of nameservices.",
         "description": "Comma-separated list of nameservices.",
         "isReconfigurable": false,
         "isReconfigurable": false,
-        "defaultValue": "haCluster",
+        "recommendedValue": "haCluster",
         "value": "haCluster",
         "value": "haCluster",
         "category": "HDFS",
         "category": "HDFS",
         "filename": "hdfs-site",
         "filename": "hdfs-site",
@@ -84,7 +84,7 @@ module.exports =
         "displayName": "dfs.ha.namenodes.${dfs.nameservices}",
         "displayName": "dfs.ha.namenodes.${dfs.nameservices}",
         "description": "The prefix for a given nameservice, contains a comma-separated list of namenodes for a given nameservice.",
         "description": "The prefix for a given nameservice, contains a comma-separated list of namenodes for a given nameservice.",
         "isReconfigurable": false,
         "isReconfigurable": false,
-        "defaultValue": "nn1,nn2",
+        "recommendedValue": "nn1,nn2",
         "value": "nn1,nn2",
         "value": "nn1,nn2",
         "category": "HDFS",
         "category": "HDFS",
         "filename": "hdfs-site",
         "filename": "hdfs-site",
@@ -96,7 +96,7 @@ module.exports =
         "displayName": "dfs.namenode.rpc-address.${dfs.nameservices}.nn1",
         "displayName": "dfs.namenode.rpc-address.${dfs.nameservices}.nn1",
         "description": "RPC address that handles all clients requests for nn1.",
         "description": "RPC address that handles all clients requests for nn1.",
         "isReconfigurable": false,
         "isReconfigurable": false,
-        "defaultValue": "0.0.0.0:8020",
+        "recommendedValue": "0.0.0.0:8020",
         "value": "0.0.0.0:8020",
         "value": "0.0.0.0:8020",
         "category": "HDFS",
         "category": "HDFS",
         "filename": "hdfs-site",
         "filename": "hdfs-site",
@@ -108,7 +108,7 @@ module.exports =
         "displayName": "dfs.namenode.rpc-address.${dfs.nameservices}.nn2",
         "displayName": "dfs.namenode.rpc-address.${dfs.nameservices}.nn2",
         "description": "RPC address that handles all clients requests for nn2.",
         "description": "RPC address that handles all clients requests for nn2.",
         "isReconfigurable": false,
         "isReconfigurable": false,
-        "defaultValue": "0.0.0.0:8020",
+        "recommendedValue": "0.0.0.0:8020",
         "value": "0.0.0.0:8020",
         "value": "0.0.0.0:8020",
         "category": "HDFS",
         "category": "HDFS",
         "filename": "hdfs-site",
         "filename": "hdfs-site",
@@ -120,7 +120,7 @@ module.exports =
         "displayName": "dfs.namenode.http-address.${dfs.nameservices}.nn1",
         "displayName": "dfs.namenode.http-address.${dfs.nameservices}.nn1",
         "description": "The fully-qualified HTTP address for nn1 NameNode.",
         "description": "The fully-qualified HTTP address for nn1 NameNode.",
         "isReconfigurable": false,
         "isReconfigurable": false,
-        "defaultValue": "0.0.0.0:50070",
+        "recommendedValue": "0.0.0.0:50070",
         "value": "0.0.0.0:50070",
         "value": "0.0.0.0:50070",
         "category": "HDFS",
         "category": "HDFS",
         "filename": "hdfs-site",
         "filename": "hdfs-site",
@@ -132,7 +132,7 @@ module.exports =
         "displayName": "dfs.namenode.http-address.${dfs.nameservices}.nn2",
         "displayName": "dfs.namenode.http-address.${dfs.nameservices}.nn2",
         "description": "The fully-qualified HTTP address for nn2 NameNode.",
         "description": "The fully-qualified HTTP address for nn2 NameNode.",
         "isReconfigurable": false,
         "isReconfigurable": false,
-        "defaultValue": "0.0.0.0:50070",
+        "recommendedValue": "0.0.0.0:50070",
         "value": "0.0.0.0:50070",
         "value": "0.0.0.0:50070",
         "category": "HDFS",
         "category": "HDFS",
         "filename": "hdfs-site",
         "filename": "hdfs-site",
@@ -144,7 +144,7 @@ module.exports =
         "displayName": "dfs.namenode.https-address.${dfs.nameservices}.nn1",
         "displayName": "dfs.namenode.https-address.${dfs.nameservices}.nn1",
         "description": "The fully-qualified HTTP address for nn1 NameNode.",
         "description": "The fully-qualified HTTP address for nn1 NameNode.",
         "isReconfigurable": false,
         "isReconfigurable": false,
-        "defaultValue": "0.0.0.0:50470",
+        "recommendedValue": "0.0.0.0:50470",
         "value": "0.0.0.0:50470",
         "value": "0.0.0.0:50470",
         "category": "HDFS",
         "category": "HDFS",
         "filename": "hdfs-site",
         "filename": "hdfs-site",
@@ -156,7 +156,7 @@ module.exports =
         "displayName": "dfs.namenode.https-address.${dfs.nameservices}.nn2",
         "displayName": "dfs.namenode.https-address.${dfs.nameservices}.nn2",
         "description": "The fully-qualified HTTP address for nn2 NameNode.",
         "description": "The fully-qualified HTTP address for nn2 NameNode.",
         "isReconfigurable": false,
         "isReconfigurable": false,
-        "defaultValue": "0.0.0.0:50470",
+        "recommendedValue": "0.0.0.0:50470",
         "value": "0.0.0.0:50470",
         "value": "0.0.0.0:50470",
         "category": "HDFS",
         "category": "HDFS",
         "filename": "hdfs-site",
         "filename": "hdfs-site",
@@ -167,7 +167,7 @@ module.exports =
         "name": "dfs.client.failover.proxy.provider.${dfs.nameservices}",
         "name": "dfs.client.failover.proxy.provider.${dfs.nameservices}",
         "displayName": "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.",
         "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,
         "isReconfigurable": false,
         "value": "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider",
         "value": "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider",
         "category": "HDFS",
         "category": "HDFS",
@@ -180,7 +180,7 @@ module.exports =
         "displayName": "dfs.namenode.shared.edits.dir",
         "displayName": "dfs.namenode.shared.edits.dir",
         "description": " The URI which identifies the group of JNs where the NameNodes will write/read edits.",
         "description": " The URI which identifies the group of JNs where the NameNodes will write/read edits.",
         "isReconfigurable": false,
         "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",
         "value": "qjournal://node1.example.com:8485;node2.example.com:8485;node3.example.com:8485/mycluster",
         "category": "HDFS",
         "category": "HDFS",
         "filename": "hdfs-site",
         "filename": "hdfs-site",
@@ -192,7 +192,7 @@ module.exports =
         "displayName": "dfs.ha.fencing.methods",
         "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.",
         "description": "A list of scripts or Java classes which will be used to fence the Active NameNode during a failover.",
         "isReconfigurable": false,
         "isReconfigurable": false,
-        "defaultValue": "shell(/bin/true)",
+        "recommendedValue": "shell(/bin/true)",
         "value": "shell(/bin/true)",
         "value": "shell(/bin/true)",
         "category": "HDFS",
         "category": "HDFS",
         "filename": "hdfs-site",
         "filename": "hdfs-site",
@@ -204,7 +204,7 @@ module.exports =
         "displayName": "dfs.ha.automatic-failover.enabled",
         "displayName": "dfs.ha.automatic-failover.enabled",
         "description": "Enable Automatic failover.",
         "description": "Enable Automatic failover.",
         "isReconfigurable": false,
         "isReconfigurable": false,
-        "defaultValue": true,
+        "recommendedValue": true,
         "value": true,
         "value": true,
         "displayType": "checkbox",
         "displayType": "checkbox",
         "category": "HDFS",
         "category": "HDFS",
@@ -217,7 +217,7 @@ module.exports =
         "displayName": "dfs.namenode.safemode.threshold-pct",
         "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 ",
         "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,
         "isReconfigurable": false,
-        "defaultValue": "0.99f",
+        "recommendedValue": "0.99f",
         "value": "0.99f",
         "value": "0.99f",
         "category": "HDFS",
         "category": "HDFS",
         "filename": "hdfs-site",
         "filename": "hdfs-site",
@@ -229,7 +229,7 @@ module.exports =
         "displayName": "hbase.rootdir",
         "displayName": "hbase.rootdir",
         "description": "The directory shared by region servers and into which HBase persists.",
         "description": "The directory shared by region servers and into which HBase persists.",
         "isReconfigurable": false,
         "isReconfigurable": false,
-        "defaultValue": "/hadoop/hdfs/journal",
+        "recommendedValue": "/hadoop/hdfs/journal",
         "value": "/hadoop/hdfs/journal",
         "value": "/hadoop/hdfs/journal",
         "category": "HBASE",
         "category": "HBASE",
         "filename": "hbase-site",
         "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",
         "name": "yarn.resourcemanager.ha.enabled",
         "displayName": "yarn.resourcemanager.ha.enabled",
         "displayName": "yarn.resourcemanager.ha.enabled",
         "isReconfigurable": false,
         "isReconfigurable": false,
-        "defaultValue": true,
+        "recommendedValue": true,
         "value": true,
         "value": true,
         "displayType": "checkbox",
         "displayType": "checkbox",
         "category": "YARN",
         "category": "YARN",
@@ -44,7 +44,7 @@ module.exports =
         "name": "yarn.resourcemanager.ha.rm-ids",
         "name": "yarn.resourcemanager.ha.rm-ids",
         "displayName": "yarn.resourcemanager.ha.rm-ids",
         "displayName": "yarn.resourcemanager.ha.rm-ids",
         "isReconfigurable": false,
         "isReconfigurable": false,
-        "defaultValue": "rm1,rm2",
+        "recommendedValue": "rm1,rm2",
         "value": "rm1,rm2",
         "value": "rm1,rm2",
         "category": "YARN",
         "category": "YARN",
         "filename": "yarn-site",
         "filename": "yarn-site",
@@ -55,7 +55,7 @@ module.exports =
         "name": "yarn.resourcemanager.hostname.rm1",
         "name": "yarn.resourcemanager.hostname.rm1",
         "displayName": "yarn.resourcemanager.hostname.rm1",
         "displayName": "yarn.resourcemanager.hostname.rm1",
         "isReconfigurable": false,
         "isReconfigurable": false,
-        "defaultValue": "",
+        "recommendedValue": "",
         "value": "",
         "value": "",
         "category": "YARN",
         "category": "YARN",
         "filename": "yarn-site",
         "filename": "yarn-site",
@@ -67,7 +67,7 @@ module.exports =
         "name": "yarn.resourcemanager.webapp.address.rm1",
         "name": "yarn.resourcemanager.webapp.address.rm1",
         "displayName": "yarn.resourcemanager.webapp.address.rm1",
         "displayName": "yarn.resourcemanager.webapp.address.rm1",
         "isReconfigurable": false,
         "isReconfigurable": false,
-        "defaultValue": "",
+        "recommendedValue": "",
         "value": "",
         "value": "",
         "category": "YARN",
         "category": "YARN",
         "filename": "yarn-site",
         "filename": "yarn-site",
@@ -78,7 +78,7 @@ module.exports =
         "name": "yarn.resourcemanager.webapp.address.rm2",
         "name": "yarn.resourcemanager.webapp.address.rm2",
         "displayName": "yarn.resourcemanager.webapp.address.rm2",
         "displayName": "yarn.resourcemanager.webapp.address.rm2",
         "isReconfigurable": false,
         "isReconfigurable": false,
-        "defaultValue": "",
+        "recommendedValue": "",
         "value": "",
         "value": "",
         "category": "YARN",
         "category": "YARN",
         "filename": "yarn-site",
         "filename": "yarn-site",
@@ -89,7 +89,7 @@ module.exports =
         "name": "yarn.resourcemanager.webapp.https.address.rm1",
         "name": "yarn.resourcemanager.webapp.https.address.rm1",
         "displayName": "yarn.resourcemanager.webapp.https.address.rm1",
         "displayName": "yarn.resourcemanager.webapp.https.address.rm1",
         "isReconfigurable": false,
         "isReconfigurable": false,
-        "defaultValue": "",
+        "recommendedValue": "",
         "value": "",
         "value": "",
         "category": "YARN",
         "category": "YARN",
         "filename": "yarn-site",
         "filename": "yarn-site",
@@ -100,7 +100,7 @@ module.exports =
         "name": "yarn.resourcemanager.webapp.https.address.rm2",
         "name": "yarn.resourcemanager.webapp.https.address.rm2",
         "displayName": "yarn.resourcemanager.webapp.https.address.rm2",
         "displayName": "yarn.resourcemanager.webapp.https.address.rm2",
         "isReconfigurable": false,
         "isReconfigurable": false,
-        "defaultValue": "",
+        "recommendedValue": "",
         "value": "",
         "value": "",
         "category": "YARN",
         "category": "YARN",
         "filename": "yarn-site",
         "filename": "yarn-site",
@@ -112,7 +112,7 @@ module.exports =
         "name": "yarn.resourcemanager.hostname.rm2",
         "name": "yarn.resourcemanager.hostname.rm2",
         "displayName": "yarn.resourcemanager.hostname.rm2",
         "displayName": "yarn.resourcemanager.hostname.rm2",
         "isReconfigurable": false,
         "isReconfigurable": false,
-        "defaultValue": "",
+        "recommendedValue": "",
         "value": "",
         "value": "",
         "category": "YARN",
         "category": "YARN",
         "filename": "yarn-site",
         "filename": "yarn-site",
@@ -123,7 +123,7 @@ module.exports =
         "name": "yarn.resourcemanager.recovery.enabled",
         "name": "yarn.resourcemanager.recovery.enabled",
         "displayName": "yarn.resourcemanager.recovery.enabled",
         "displayName": "yarn.resourcemanager.recovery.enabled",
         "isReconfigurable": false,
         "isReconfigurable": false,
-        "defaultValue": true,
+        "recommendedValue": true,
         "value": true,
         "value": true,
         "displayType": "checkbox",
         "displayType": "checkbox",
         "category": "YARN",
         "category": "YARN",
@@ -135,7 +135,7 @@ module.exports =
         "name": "yarn.resourcemanager.store.class",
         "name": "yarn.resourcemanager.store.class",
         "displayName": "yarn.resourcemanager.store.class",
         "displayName": "yarn.resourcemanager.store.class",
         "isReconfigurable": false,
         "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",
         "value": "org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore",
         "category": "YARN",
         "category": "YARN",
         "filename": "yarn-site",
         "filename": "yarn-site",
@@ -146,7 +146,7 @@ module.exports =
         "name": "yarn.resourcemanager.zk-address",
         "name": "yarn.resourcemanager.zk-address",
         "displayName": "yarn.resourcemanager.zk-address",
         "displayName": "yarn.resourcemanager.zk-address",
         "isReconfigurable": false,
         "isReconfigurable": false,
-        "defaultValue": "",
+        "recommendedValue": "",
         "value": "",
         "value": "",
         "category": "YARN",
         "category": "YARN",
         "filename": "yarn-site",
         "filename": "yarn-site",
@@ -157,7 +157,7 @@ module.exports =
         "name": "yarn.resourcemanager.cluster-id",
         "name": "yarn.resourcemanager.cluster-id",
         "displayName": "yarn.resourcemanager.cluster-id",
         "displayName": "yarn.resourcemanager.cluster-id",
         "isReconfigurable": false,
         "isReconfigurable": false,
-        "defaultValue": "yarn-cluster",
+        "recommendedValue": "yarn-cluster",
         "value": "yarn-cluster",
         "value": "yarn-cluster",
         "category": "YARN",
         "category": "YARN",
         "filename": "yarn-site",
         "filename": "yarn-site",
@@ -168,7 +168,7 @@ module.exports =
         "name": "yarn.resourcemanager.ha.automatic-failover.zk-base-path",
         "name": "yarn.resourcemanager.ha.automatic-failover.zk-base-path",
         "displayName": "yarn.resourcemanager.ha.automatic-failover.zk-base-path",
         "displayName": "yarn.resourcemanager.ha.automatic-failover.zk-base-path",
         "isReconfigurable": false,
         "isReconfigurable": false,
-        "defaultValue": "/yarn-leader-election",
+        "recommendedValue": "/yarn-leader-election",
         "value": "/yarn-leader-election",
         "value": "/yarn-leader-election",
         "category": "YARN",
         "category": "YARN",
         "filename": "yarn-site",
         "filename": "yarn-site",

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

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

File diff suppressed because it is too large
+ 113 - 111
ambari-web/app/data/HDP2/site_properties.js


File diff suppressed because it is too large
+ 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,
                 config_version_id: parsedItem.id,
                 stack_config_property_id: key  + '_' + type
                 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);
               properties.push(property);
               requestedProperties.push(property.id);
               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',
     file_name: 'StackConfigurations.type',
     description: 'StackConfigurations.property_description',
     description: 'StackConfigurations.property_description',
     value: 'StackConfigurations.property_value',
     value: 'StackConfigurations.property_value',
-    default_value: 'StackConfigurations.property_value',
+    recommended_value: 'StackConfigurations.property_value',
     type: 'StackConfigurations.property_type',
     type: 'StackConfigurations.property_type',
     service_name: 'StackConfigurations.service_name',
     service_name: 'StackConfigurations.service_name',
     stack_name: 'StackConfigurations.stack_name',
     stack_name: 'StackConfigurations.stack_name',
@@ -34,7 +34,7 @@ App.stackConfigPropertiesMapper = App.QuickDataMapper.create({
     property_depended_by: 'StackConfigurations.property_depended_by',
     property_depended_by: 'StackConfigurations.property_depended_by',
     value_attributes: 'StackConfigurations.property_value_attributes',
     value_attributes: 'StackConfigurations.property_value_attributes',
     is_final: 'default_is_final',
     is_final: 'default_is_final',
-    default_is_final: 'default_is_final',
+    recommended_is_final: 'default_is_final',
     supports_final: 'supports_final',
     supports_final: 'supports_final',
     widget: 'widget',
     widget: 'widget',
     /**** ui properties ***/
     /**** ui properties ***/
@@ -52,7 +52,7 @@ App.stackConfigPropertiesMapper = App.QuickDataMapper.create({
         stackItem.configurations.forEach(function(config) {
         stackItem.configurations.forEach(function(config) {
           var configType = App.config.getConfigTagFromFileName(config.StackConfigurations.type);
           var configType = App.config.getConfigTagFromFileName(config.StackConfigurations.type);
           config.id = config.StackConfigurations.property_name + '_' + configType;
           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";
           config.supports_final = !!configTypeInfo[configType] && configTypeInfo[configType].supports.final === "true";
           // Map from /dependencies to property_depended_by
           // Map from /dependencies to property_depended_by
           config.StackConfigurations.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.preview': 'Preview',
   'common.scope': 'Scope',
   'common.scope': 'Scope',
   'common.clone': 'Clone',
   'common.clone': 'Clone',
+  'common.removed': 'Removed',
 
 
   'models.alert_instance.tiggered.verbose': "Occured on {0} <br> Checked on {1}",
   'models.alert_instance.tiggered.verbose': "Occured on {0} <br> Checked on {1}",
   'models.alert_definition.triggered.verbose': "Occured on {0}",
   '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
    * @method saveSiteConfigs
    */
    */
   saveSiteConfigs: function (configs) {
   saveSiteConfigs: function (configs) {
-    //storedConfigs contains custom configs as well
     configs = this.setHiveHostName(configs);
     configs = this.setHiveHostName(configs);
     configs = this.setOozieHostName(configs);
     configs = this.setOozieHostName(configs);
     this.formatConfigValues(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;
     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 *****************************/
   /*********************************** 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}
    * @type {boolean}
    */
    */
   hasChangedDependencies: function() {
   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'),
   }.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
    * message fro alert box for dependent configs
    * @type {string}
    * @type {string}
@@ -121,7 +140,11 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
   },
   },
 
 
   onConfigGroupChangeForEnhanced: function() {
   onConfigGroupChangeForEnhanced: function() {
-    this.clearDependentConfigs();
+    if (this.get('name') === 'mainServiceInfoConfigsController') {
+      this.clearDependentConfigs();
+    } else {
+      this.set('groupsToSave', {});
+    }
     this.get('dependentServiceNames').forEach(function(serviceName) {
     this.get('dependentServiceNames').forEach(function(serviceName) {
       var defaultGroup = this.get('dependentConfigGroups').filterProperty('service.serviceName', serviceName).findProperty('isDefault');
       var defaultGroup = this.get('dependentConfigGroups').filterProperty('service.serviceName', serviceName).findProperty('isDefault');
       this.get('groupsToSave')[serviceName] = defaultGroup.get('name');
       this.get('groupsToSave')[serviceName] = defaultGroup.get('name');
@@ -389,7 +412,7 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
       var serviceName = service.get('serviceName');
       var serviceName = service.get('serviceName');
       var stepConfig = this.get('stepConfigs').findProperty('serviceName', serviceName);
       var stepConfig = this.get('stepConfigs').findProperty('serviceName', serviceName);
       if (stepConfig) {
       if (stepConfig) {
-
+        var initialValue;
         var configProperties = stepConfig ? stepConfig.get('configs').filterProperty('filename', App.config.getOriginalFileName(key)) : [];
         var configProperties = stepConfig ? stepConfig.get('configs').filterProperty('filename', App.config.getOriginalFileName(key)) : [];
 
 
         var group = this.getGroupForService(serviceName);
         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 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 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 recommendedValue = configObject[key].properties[propertyName];
 
 
           var isNewProperty = (!notDefaultGroup && Em.isNone(cp)) || (notDefaultGroup && group && Em.isNone(override));
           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) {
             if (dependentProperty) {
-              Em.set(dependentProperty, 'value', defaultValue);
+              Em.set(dependentProperty, 'value', initialValue);
               Em.set(dependentProperty, 'recommendedValue', recommendedValue);
               Em.set(dependentProperty, 'recommendedValue', recommendedValue);
               Em.set(dependentProperty, 'toDelete', false);
               Em.set(dependentProperty, 'toDelete', false);
               Em.set(dependentProperty, 'toAdd', isNewProperty);
               Em.set(dependentProperty, 'toAdd', isNewProperty);
@@ -423,7 +460,7 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
                 fileName: key,
                 fileName: key,
                 propertyName: propertyName,
                 propertyName: propertyName,
                 configGroup: group ? group.get('name') : service.get('displayName') + " Default",
                 configGroup: group ? group.get('name') : service.get('displayName') + " Default",
-                value: defaultValue,
+                value: initialValue,
                 parentConfigs: parentPropertiesNames,
                 parentConfigs: parentPropertiesNames,
                 serviceName: serviceName,
                 serviceName: serviceName,
                 allowChangeGroup: serviceName != this.get('content.serviceName') && !this.get('selectedConfigGroup.isDefault'),
                 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
            * 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 recommended value same as default we shouldn't show it in popup **/
             if (notDefaultGroup) {
             if (notDefaultGroup) {
               if (override) {
               if (override) {
                 if (override.get('isNotSaved')) {
                 if (override.get('isNotSaved')) {
                   cp.get('overrides').removeObject(override);
                   cp.get('overrides').removeObject(override);
                 } else {
                 } else {
-                  override.set('value', defaultValue);
+                  override.set('value', initialValue);
                 }
                 }
                 if (dependentProperty) {
                 if (dependentProperty) {
                   this.get('_dependentConfigValues').removeObject(dependentProperty);
                   this.get('_dependentConfigValues').removeObject(dependentProperty);
                 }
                 }
               }
               }
             } else {
             } else {
-              cp.set('value', defaultValue);
+              cp.set('value', initialValue);
               if (dependentProperty) {
               if (dependentProperty) {
                 this.get('_dependentConfigValues').removeObject(dependentProperty);
                 this.get('_dependentConfigValues').removeObject(dependentProperty);
               }
               }
@@ -508,7 +545,7 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
                 self.get('_dependentConfigValues').pushObject({
                 self.get('_dependentConfigValues').pushObject({
                   saveRecommended: true,
                   saveRecommended: true,
                   saveRecommendedDefault: true,
                   saveRecommendedDefault: true,
-                  propertyValue: cp && cp.get('defaultValue'),
+                  propertyValue: cp && (cp.get('useInitialValue') ? cp.get('initialValue') : cp.get('savedValue')),
                   toDelete: true,
                   toDelete: true,
                   toAdd: false,
                   toAdd: false,
                   isDeleted: true,
                   isDeleted: true,
@@ -568,13 +605,13 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
             name: Em.get(propertyToAdd, 'propertyName'),
             name: Em.get(propertyToAdd, 'propertyName'),
             displayName: Em.get(propertyToAdd, 'propertyName'),
             displayName: Em.get(propertyToAdd, 'propertyName'),
             value: Em.get(propertyToAdd, 'recommendedValue'),
             value: Em.get(propertyToAdd, 'recommendedValue'),
-            defaultValue: Em.get(propertyToAdd, 'recommendedValue'),
+            recommendedValue: Em.get(propertyToAdd, 'recommendedValue'),
+            savedValue: null,
             category: 'Advanced ' + Em.get(propertyToAdd, 'fileName'),
             category: 'Advanced ' + Em.get(propertyToAdd, 'fileName'),
             serviceName: stepConfigs.get('serviceName'),
             serviceName: stepConfigs.get('serviceName'),
             filename: App.config.getOriginalFileName(Em.get(propertyToAdd, 'fileName')),
             filename: App.config.getOriginalFileName(Em.get(propertyToAdd, 'fileName')),
             isNotSaved: !Em.get(propertyToAdd, 'isDeleted'),
             isNotSaved: !Em.get(propertyToAdd, 'isDeleted'),
-            isRequired: true,
-            forceUpdate: true
+            isRequired: true
           });
           });
           stepConfigs.get('configs').pushObject(addedProperty);
           stepConfigs.get('configs').pushObject(addedProperty);
           addedProperty.validate();
           addedProperty.validate();
@@ -652,16 +689,23 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
         if (propertyToUpdate) {
         if (propertyToUpdate) {
           var valueToSave = propertyToUpdate.saveRecommended ? propertyToUpdate.recommendedValue : propertyToUpdate.value;
           var valueToSave = propertyToUpdate.saveRecommended ? propertyToUpdate.recommendedValue : propertyToUpdate.value;
           if (!selectedGroup || selectedGroup.get('isDefault')) {
           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 {
           } else {
             if (stepConfigs.get('serviceName') !== this.get('content.serviceName')) {
             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'));
             var overriddenConfig = cp.get('overrides') && cp.get('overrides').findProperty('group.name', selectedGroup.get('name'));
             if (overriddenConfig) {
             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}
    * @property {string}
    */
    */
   fileName: DS.attr('string'),
   fileName: DS.attr('string'),
+
   /**
   /**
    * value of property
    * value of property
-   * by default is same as <code>defaultValue<code>
+   * by default is same as <code>savedValue<code>
    * @property {string}
    * @property {string}
    */
    */
   value: DS.attr('string'),
   value: DS.attr('string'),
 
 
   /**
   /**
-   * default value of property
+   * saved value of property
    * @property {string}
    * @property {string}
    */
    */
-  defaultValue: DS.attr('string'),
+  savedValue: DS.attr('string'),
 
 
   /**
   /**
    * recommended value of property
    * recommended value of property
@@ -62,11 +63,17 @@ App.ConfigProperty = DS.Model.extend({
    */
    */
   isFinal: DS.attr('boolean', {defaultValue: false}),
   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}
    * @property {boolean}
    */
    */
-  defaultIsFinal: DS.attr('boolean', {defaultValue: false}),
+  recommendedIsFinal: DS.attr('boolean', {defaultValue: false}),
 
 
   /**
   /**
    * link to config version
    * link to config version
@@ -224,9 +231,9 @@ App.ConfigProperty = DS.Model.extend({
    */
    */
   isNotDefaultValue: function () {
   isNotDefaultValue: function () {
     return this.get('isEditable')
     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>
    * 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') ||
     return requiredByAgent.someProperty('isNotSaved') ||
            requiredByAgent.someProperty('isNotDefaultValue') ||
            requiredByAgent.someProperty('isNotDefaultValue') ||
            requiredByAgent.someProperty('isOverrideChanged') ||
            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')
   }.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'
   id: '', //either 'puppet var' or 'site property'
   name: '',
   name: '',
   displayName: '',
   displayName: '',
+
+  /**
+   * value that is shown on IU
+   * and is changing by user
+   * @type {String|null}
+   */
   value: '',
   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: '',
   retypedPassword: '',
-  defaultValue: '',
   defaultDirectory: '',
   defaultDirectory: '',
   description: '',
   description: '',
   displayType: 'string', // string, digits, number, directories, custom
   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
   isReconfigurable: true, // by default a config property is reconfigurable
   isEditable: true, // by default a config property is editable
   isEditable: true, // by default a config property is editable
   isNotEditable: Ember.computed.not('isEditable'),
   isNotEditable: Ember.computed.not('isEditable'),
-  isFinal: false,
   hideFinalIcon: function () {
   hideFinalIcon: function () {
     return (!this.get('isFinal'))&& this.get('isNotEditable');
     return (!this.get('isFinal'))&& this.get('isNotEditable');
   }.property('isFinal', 'isNotEditable'),
   }.property('isFinal', 'isNotEditable'),
-  defaultIsFinal: false,
-  supportsFinal: false,
   isVisible: true,
   isVisible: true,
   isMock: false, // mock config created created only to displaying
   isMock: false, // mock config created created only to displaying
   isRequiredByAgent: true, // Setting it to true implies property will be stored in configuration
   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
   rowStyleClass: null, // CSS-Class to be applied on the row showing this config
   showAsTextBox: false,
   showAsTextBox: false,
 
 
-  forceUpdate: false,
-  /**
-   * value that is returned from server as recommended
-   * @type {String}
-   */
-  recommendedValue: null,
-
   /**
   /**
    * @type {boolean}
    * @type {boolean}
    */
    */
   recommendedValueExists: function () {
   recommendedValueExists: function () {
-    return !Em.isNone(this.get('recommendedValue'));
+    return !Em.isNone(this.get('recommendedValue')) && this.get('isRequiredByAgent') && !this.get('cantBeUndone');
   }.property('recommendedValue'),
   }.property('recommendedValue'),
 
 
   /**
   /**
@@ -148,9 +190,13 @@ App.ServiceConfigProperty = Em.Object.extend({
       this.set('retypedPassword', this.get('value'));
       this.set('retypedPassword', this.get('value'));
     }
     }
     if ((this.get('id') === 'puppet var') && 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 () {
   isNotDefaultValue: function () {
     var value = this.get('value');
     var value = this.get('value');
-    var defaultValue = this.get('defaultValue');
+    var savedValue = this.get('savedValue');
     var supportsFinal = this.get('supportsFinal');
     var supportsFinal = this.get('supportsFinal');
     var isFinal = this.get('isFinal');
     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
     // ignore precision difference for configs with type of `float` which value may ends with 0
     // e.g. between 0.4 and 0.40
     // e.g. between 0.4 and 0.40
     if (this.get('stackConfigProperty') && this.get('stackConfigProperty.valueAttributes.type') == 'float') {
     if (this.get('stackConfigProperty') && this.get('stackConfigProperty.valueAttributes.type') == 'float') {
-      defaultValue = '' + parseFloat(defaultValue);
+      savedValue = !Em.isNone(savedValue) ? '' + parseFloat(savedValue) : null;
       value = '' + parseFloat(value);
       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
    * 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
    * after cluster created is taken from cluster properties value
    * @property {string}
    * @property {string}
    */
    */
-  defaultValue: DS.attr('string'),
+  recommendedValue: DS.attr('string'),
 
 
   /**
   /**
    * defines if property support usage <code>isFinal<code> flag
    * defines if property support usage <code>isFinal<code> flag
@@ -71,10 +71,10 @@ App.StackConfigProperty = DS.Model.extend({
   supportsFinal: DS.attr('boolean', {defaultValue: true}),
   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}
    * @property {boolean}
    */
    */
-  defaultIsFinal: DS.attr('boolean', {defaultValue: false}),
+  recommendedIsFinal: DS.attr('boolean', {defaultValue: false}),
 
 
   /**
   /**
    * type of property
    * type of property
@@ -172,7 +172,7 @@ App.StackConfigProperty = DS.Model.extend({
   value: DS.attr('string'),
   value: DS.attr('string'),
 
 
   /**
   /**
-   * config property isFinal value same as defaultIsFinal
+   * config property isFinal value same as recommendedIsFinal
    * @property {boolean}
    * @property {boolean}
    */
    */
   isFinal: DS.attr('boolean', {defaultValue: false})
   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>
         <td>{{config.fileName}}</td>
         <td>{{config.fileName}}</td>
         <td>{{config.value}}</td>
         <td>{{config.value}}</td>
-        <td>{{config.recommendedValue}}</td>
+        <td>
+          {{#if config.isDeleted}}
+            {{t common.removed}}
+          {{else}}
+            {{config.recommendedValue}}
+          {{/if}}
+        </td>
       </tr>
       </tr>
     {{/each}}
     {{/each}}
     </tbody>
     </tbody>

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

@@ -151,7 +151,6 @@ App.config = Em.Object.create({
                 "name": "content",
                 "name": "content",
                 "displayName": type.endsWith('-env') ? type + ' template' : "content",
                 "displayName": type.endsWith('-env') ? type + ' template' : "content",
                 "value": "",
                 "value": "",
-                "defaultValue": "",
                 "description": type + " properties",
                 "description": type + " properties",
                 "displayType": "content",
                 "displayType": "content",
                 "isOverridable": true,
                 "isOverridable": true,
@@ -231,7 +230,7 @@ App.config = Em.Object.create({
   handleSpecialProperties: function (config) {
   handleSpecialProperties: function (config) {
     if (Em.get(config, 'displayType') === 'int' && /\d+m$/.test(Em.get(config, 'value') )) {
     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, '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({
         var serviceConfigObj = App.ServiceConfig.create({
           name: index,
           name: index,
           value: value,
           value: value,
-          defaultValue: value,
+          savedValue: value,
+          recommendedValue: advancedConfig ? Em.get(advancedConfig, 'recommencedValue') : null,
           filename: filename,
           filename: filename,
           isUserProperty: !advancedConfig,
           isUserProperty: !advancedConfig,
           isVisible: !!service,
           isVisible: !!service,
@@ -319,7 +319,8 @@ App.config = Em.Object.create({
           isReconfigurable: true,
           isReconfigurable: true,
           isRequired: isAdvanced,
           isRequired: isAdvanced,
           isFinal: finalAttributes[index] === "true",
           isFinal: finalAttributes[index] === "true",
-          defaultIsFinal: finalAttributes[index] === "true",
+          savedIsFinal: finalAttributes[index] === "true",
+          recommendedIsFinal: advancedConfig ? Em.get(advancedConfig, 'recommendedIsFinal') : null,
           showLabel: true,
           showLabel: true,
           serviceName: serviceName,
           serviceName: serviceName,
           belongsToService: [],
           belongsToService: [],
@@ -405,13 +406,13 @@ App.config = Em.Object.create({
     if (serviceConfigObj.get('displayType') == 'directories' && (serviceConfigObj.get('category') == 'DataNode' || serviceConfigObj.get('category') == 'NameNode')) {
     if (serviceConfigObj.get('displayType') == 'directories' && (serviceConfigObj.get('category') == 'DataNode' || serviceConfigObj.get('category') == 'NameNode')) {
       var dirs = serviceConfigObj.get('value').split(',').sort();
       var dirs = serviceConfigObj.get('value').split(',').sort();
       serviceConfigObj.set('value', dirs.join(','));
       serviceConfigObj.set('value', dirs.join(','));
-      serviceConfigObj.set('defaultValue', dirs.join(','));
+      serviceConfigObj.set('savedValue', dirs.join(','));
     }
     }
 
 
     if (serviceConfigObj.get('displayType') == 'directory' && serviceConfigObj.get('category') == 'SNameNode') {
     if (serviceConfigObj.get('displayType') == 'directory' && serviceConfigObj.get('category') == 'SNameNode') {
       var dirs = serviceConfigObj.get('value').split(',').sort();
       var dirs = serviceConfigObj.get('value').split(',').sort();
       serviceConfigObj.set('value', dirs[0]);
       serviceConfigObj.set('value', dirs[0]);
-      serviceConfigObj.set('defaultValue', dirs[0]);
+      serviceConfigObj.set('savedValue', dirs[0]);
     }
     }
 
 
     if (serviceConfigObj.get('displayType') == 'masterHosts') {
     if (serviceConfigObj.get('displayType') == 'masterHosts') {
@@ -515,7 +516,8 @@ App.config = Em.Object.create({
         if (preDefined && stored) {
         if (preDefined && stored) {
           configData = preDefined;
           configData = preDefined;
           configData.value = stored.value;
           configData.value = stored.value;
-          configData.defaultValue = stored.defaultValue;
+          configData.savedValue = stored.savedValue;
+          configData.recommendedValue = stored.recommendedValue;
           configData.overrides = stored.overrides;
           configData.overrides = stored.overrides;
           configData.displayName = stored.displayName;
           configData.displayName = stored.displayName;
           configData.name = stored.name;
           configData.name = stored.name;
@@ -565,7 +567,8 @@ App.config = Em.Object.create({
           var storedCfg = storedCfgs.findProperty('filename', cfg.filename);
           var storedCfg = storedCfgs.findProperty('filename', cfg.filename);
           if (storedCfg) {
           if (storedCfg) {
             configData.value = storedCfg.value;
             configData.value = storedCfg.value;
-            configData.defaultValue = storedCfg.defaultValue;
+            configData.recommendedValue = storedCfg.recommendedValue;
+            configData.savedValue = storedCfg.savedValue;
             configData.overrides = storedCfg.overrides;
             configData.overrides = storedCfg.overrides;
             configData.filename = storedCfg.filename;
             configData.filename = storedCfg.filename;
             configData.description = storedCfg.description;
             configData.description = storedCfg.description;
@@ -599,7 +602,7 @@ App.config = Em.Object.create({
     } else {
     } else {
       configData.value = advanced ? advanced.value : configData.value;
       configData.value = advanced ? advanced.value : configData.value;
     }
     }
-    configData.defaultValue = configData.value;
+    configData.recommendedValue = configData.value;
     configData.filename = advanced ? advanced.filename : configData.filename;
     configData.filename = advanced ? advanced.filename : configData.filename;
     configData.displayName = advanced && advanced.displayName ? advanced.displayName : configData.displayName;
     configData.displayName = advanced && advanced.displayName ? advanced.displayName : configData.displayName;
     configData.name = advanced && advanced.name ? advanced.name : configData.name;
     configData.name = advanced && advanced.name ? advanced.name : configData.name;
@@ -645,7 +648,7 @@ App.config = Em.Object.create({
             _config.id = "site property";
             _config.id = "site property";
             _config.category = configCategory;
             _config.category = configCategory;
             _config.displayName = _config.displayName || _config.name;
             _config.displayName = _config.displayName || _config.name;
-            _config.defaultValue = _config.value;
+            _config.recommendedValue = _config.value;
             // make all advanced configs optional and populated by default
             // make all advanced configs optional and populated by default
             /*
             /*
              * if (/\${.*}/.test(_config.value) || (service.serviceName !==
              * if (/\${.*}/.test(_config.value) || (service.serviceName !==
@@ -685,10 +688,9 @@ App.config = Em.Object.create({
    * @param allSelectedServiceNames
    * @param allSelectedServiceNames
    * @param installedServiceNames
    * @param installedServiceNames
    * @param localDB
    * @param localDB
-   * @param recommended
    * @return {Array}
    * @return {Array}
    */
    */
-  renderConfigs: function (configs, storedConfigs, allSelectedServiceNames, installedServiceNames, localDB, recommended) {
+  renderConfigs: function (configs, storedConfigs, allSelectedServiceNames, installedServiceNames, localDB) {
     var renderedServiceConfigs = [];
     var renderedServiceConfigs = [];
     var services = [];
     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 hiveMetastoreUrisConfig = configs.filterProperty('filename', 'hive-site.xml').findProperty('name', 'hive.metastore.uris');
           var clientPortConfig = configs.filterProperty('filename', 'zoo.cfg.xml').findProperty('name', 'clientPort');
           var clientPortConfig = configs.filterProperty('filename', 'zoo.cfg.xml').findProperty('name', 'clientPort');
           var dependencies = {
           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);
           configPropertyHelper.initialValue(serviceConfigProperty, localDB, dependencies);
         }
         }
         if (storedConfigs && storedConfigs.filterProperty('name', _config.name).length && !!_config.filename) {
         if (storedConfigs && storedConfigs.filterProperty('name', _config.name).length && !!_config.filename) {
           var storedConfig = storedConfigs.filterProperty('name', _config.name).findProperty('filename', _config.filename);
           var storedConfig = storedConfigs.filterProperty('name', _config.name).findProperty('filename', _config.filename);
           if (storedConfig) {
           if (storedConfig) {
-            serviceConfigProperty.set('defaultValue', storedConfig.defaultValue);
+            serviceConfigProperty.set('recommendedValue', storedConfig.recommendedValue);
             serviceConfigProperty.set('value', storedConfig.value);
             serviceConfigProperty.set('value', storedConfig.value);
           }
           }
         }
         }
@@ -731,28 +733,6 @@ App.config = Em.Object.create({
       }, this);
       }, this);
       var serviceConfig = this.createServiceConfig(service.get('serviceName'));
       var serviceConfig = this.createServiceConfig(service.get('serviceName'));
       serviceConfig.set('showConfig', service.get('showConfig'));
       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);
       serviceConfig.set('configs', configsByService);
       renderedServiceConfigs.push(serviceConfig);
       renderedServiceConfigs.push(serviceConfig);
     }, this);
     }, this);
@@ -770,9 +750,9 @@ App.config = Em.Object.create({
       break;
       break;
     }
     }
     try {
     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('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) {
     } catch (err) {
       // Nothing to worry about here, most likely trying indexOf on a non-string
       // 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,
       description: item.property_description,
       isVisible: item.isVisible,
       isVisible: item.isVisible,
       isFinal: item.final === "true",
       isFinal: item.final === "true",
-      defaultIsFinal: item.final === "true",
+      recommendedIsFinal: item.final === "true",
       filename: item.filename || fileName
       filename: item.filename || fileName
     };
     };
 
 
@@ -1145,7 +1125,7 @@ App.config = Em.Object.create({
     var propertyObject = {
     var propertyObject = {
       name: propertyName,
       name: propertyName,
       displayName: propertyName,
       displayName: propertyName,
-      defaultValue: propertyValue,
+      savedValue: propertyValue,
       value: propertyValue,
       value: propertyValue,
       displayType: stringUtils.isSingleLine(propertyValue) ? 'advanced' : 'multiLine',
       displayType: stringUtils.isSingleLine(propertyValue) ? 'advanced' : 'multiLine',
       isSecureConfig: false,
       isSecureConfig: false,
@@ -1219,7 +1199,7 @@ App.config = Em.Object.create({
         if (Em.isNone(cFromMapped)) {
         if (Em.isNone(cFromMapped)) {
           var cFromAll = allConfigs.findProperty('name', cfk);
           var cFromAll = allConfigs.findProperty('name', cfk);
           if (!Em.isNone(cFromAll)) {
           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);
             config.value = config.value.replace(_fkValue, globalValue);
           }
           }
         }
         }
@@ -1244,7 +1224,7 @@ App.config = Em.Object.create({
             config.noMatchSoSkipThisConfig = true;
             config.noMatchSoSkipThisConfig = true;
           }
           }
           else {
           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);
             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),
           this.getOriginalConfigAttribute(stored, 'displayName', advancedConfigs) : App.format.normalizeName(stored.name),
         serviceName: stored.serviceName,
         serviceName: stored.serviceName,
         value: stored.value,
         value: stored.value,
-        defaultValue: stored.defaultValue,
+        savedValue: stored.savedValue,
+        recommendedValue: stored.recommendedValue,
         displayType: skipAttributeChanges.displayType.contains(stored.name) ?
         displayType: skipAttributeChanges.displayType.contains(stored.name) ?
           this.getOriginalConfigAttribute(stored, 'displayType', advancedConfigs) :
           this.getOriginalConfigAttribute(stored, 'displayType', advancedConfigs) :
           (stringUtils.isSingleLine(stored.value) ? 'advanced' : 'multiLine'),
           (stringUtils.isSingleLine(stored.value) ? 'advanced' : 'multiLine'),
@@ -1317,7 +1298,7 @@ App.config = Em.Object.create({
         isRequired: false,
         isRequired: false,
         isVisible: stored.isVisible,
         isVisible: stored.isVisible,
         isFinal: stored.isFinal,
         isFinal: stored.isFinal,
-        defaultIsFinal: stored.defaultIsFinal,
+        savedIsFinal: stored.savedIsFinal,
         supportsFinal: stored.supportsFinal,
         supportsFinal: stored.supportsFinal,
         showLabel: stored.showLabel !== false,
         showLabel: stored.showLabel !== false,
         category: stored.category
         category: stored.category
@@ -1341,7 +1322,6 @@ App.config = Em.Object.create({
       "name": "capacity-scheduler",
       "name": "capacity-scheduler",
       "displayName": "Capacity Scheduler",
       "displayName": "Capacity Scheduler",
       "value": "",
       "value": "",
-      "defaultValue": "",
       "description": "Capacity Scheduler properties",
       "description": "Capacity Scheduler properties",
       "displayType": "custom",
       "displayType": "custom",
       "isOverridable": true,
       "isOverridable": true,
@@ -1366,22 +1346,30 @@ App.config = Em.Object.create({
    */
    */
   fileConfigsIntoTextarea: function (configs, filename, configsToSkip) {
   fileConfigsIntoTextarea: function (configs, filename, configsToSkip) {
     var fileConfigs = configs.filterProperty('filename', filename);
     var fileConfigs = configs.filterProperty('filename', filename);
-    var value = '';
-    var defaultValue = '';
+    var value = '', savedValue = '', recommendedValue = '';
     var template = this.get('complexConfigsTemplate').findProperty('filename', filename);
     var template = this.get('complexConfigsTemplate').findProperty('filename', filename);
     var complexConfig = $.extend({}, template);
     var complexConfig = $.extend({}, template);
     if (complexConfig) {
     if (complexConfig) {
       fileConfigs.forEach(function (_config) {
       fileConfigs.forEach(function (_config) {
         if (!(configsToSkip && configsToSkip.someProperty('name', _config.name))) {
         if (!(configsToSkip && configsToSkip.someProperty('name', _config.name))) {
           value += _config.name + '=' + _config.value + '\n';
           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);
       }, this);
       var isFinal = fileConfigs.someProperty('isFinal', true);
       var isFinal = fileConfigs.someProperty('isFinal', true);
+      var savedIsFinal = fileConfigs.someProperty('savedIsFinal', true);
+      var recommendedIsFinal = fileConfigs.someProperty('recommendedIsFinal', true);
       complexConfig.value = value;
       complexConfig.value = value;
-      complexConfig.defaultValue = defaultValue;
+      complexConfig.savedValue = savedValue;
+      complexConfig.recommendedValue = recommendedValue;
       complexConfig.isFinal = isFinal;
       complexConfig.isFinal = isFinal;
-      complexConfig.defaultIsFinal = isFinal;
+      complexConfig.savedIsFinal = savedIsFinal;
+      complexConfig.recommendedIsFinal = recommendedIsFinal;
       configs = configs.filter(function (_config) {
       configs = configs.filter(function (_config) {
         return _config.filename !== filename || (configsToSkip && configsToSkip.someProperty('name', _config.name));
         return _config.filename !== filename || (configsToSkip && configsToSkip.someProperty('name', _config.name));
       });
       });
@@ -1413,7 +1401,7 @@ App.config = Em.Object.create({
             id: configsTextarea.get('id'),
             id: configsTextarea.get('id'),
             name: name,
             name: name,
             value: value,
             value: value,
-            defaultValue: value,
+            savedValue: value,
             serviceName: configsTextarea.get('serviceName'),
             serviceName: configsTextarea.get('serviceName'),
             filename: filename,
             filename: filename,
             isFinal: configsTextarea.get('isFinal'),
             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.https.address':
       case 'dfs.namenode.https-address':
       case 'dfs.namenode.https-address':
         var nnHost =  masterComponentHostsInDB.findProperty('component', 'NAMENODE').hostName;
         var nnHost =  masterComponentHostsInDB.findProperty('component', 'NAMENODE').hostName;
-        this.setDefaultValue(configProperty, hostWithPort,nnHost);
+        this.setRecommendedValue(configProperty, hostWithPort,nnHost);
         break;
         break;
       case 'fs.default.name':
       case 'fs.default.name':
       case 'fs.defaultFS':
       case 'fs.defaultFS':
       case 'hbase.rootdir':
       case 'hbase.rootdir':
       case 'instance.volumes':
       case 'instance.volumes':
         var nnHost = masterComponentHostsInDB.filterProperty('component', 'NAMENODE').mapProperty('hostName');
         var nnHost = masterComponentHostsInDB.filterProperty('component', 'NAMENODE').mapProperty('hostName');
-        this.setDefaultValue(configProperty, hostWithPrefix,'://' + nnHost);
+        this.setRecommendedValue(configProperty, hostWithPrefix,'://' + nnHost);
         break;
         break;
       case 'snamenode_host':
       case 'snamenode_host':
         // Secondary NameNode does not exist when NameNode HA is enabled
         // Secondary NameNode does not exist when NameNode HA is enabled
@@ -56,7 +56,7 @@ module.exports = {
       case 'dfs.namenode.secondary.http-address':
       case 'dfs.namenode.secondary.http-address':
         var snnHost = masterComponentHostsInDB.findProperty('component', 'SECONDARY_NAMENODE');
         var snnHost = masterComponentHostsInDB.findProperty('component', 'SECONDARY_NAMENODE');
         if (snnHost) {
         if (snnHost) {
-          this.setDefaultValue(configProperty, hostWithPort,snnHost.hostName);
+          this.setRecommendedValue(configProperty, hostWithPort,snnHost.hostName);
         }
         }
         break;
         break;
       case 'datanode_hosts':
       case 'datanode_hosts':
@@ -73,12 +73,12 @@ module.exports = {
         break;
         break;
       case 'yarn.log.server.url':
       case 'yarn.log.server.url':
         var hsHost = masterComponentHostsInDB.filterProperty('component', 'HISTORYSERVER').mapProperty('hostName');
         var hsHost = masterComponentHostsInDB.filterProperty('component', 'HISTORYSERVER').mapProperty('hostName');
-        this.setDefaultValue(configProperty, hostWithPrefix,'://' + hsHost);
+        this.setRecommendedValue(configProperty, hostWithPrefix,'://' + hsHost);
         break;
         break;
       case 'mapreduce.jobhistory.webapp.address':
       case 'mapreduce.jobhistory.webapp.address':
       case 'mapreduce.jobhistory.address':
       case 'mapreduce.jobhistory.address':
         var hsHost = masterComponentHostsInDB.filterProperty('component', 'HISTORYSERVER').mapProperty('hostName');
         var hsHost = masterComponentHostsInDB.filterProperty('component', 'HISTORYSERVER').mapProperty('hostName');
-        this.setDefaultValue(configProperty, hostWithPort,hsHost);
+        this.setRecommendedValue(configProperty, hostWithPort,hsHost);
         break;
         break;
       case 'rm_host':
       case 'rm_host':
         configProperty.set('value', masterComponentHostsInDB.findProperty('component', 'RESOURCEMANAGER').hostName);
         configProperty.set('value', masterComponentHostsInDB.findProperty('component', 'RESOURCEMANAGER').hostName);
@@ -92,8 +92,8 @@ module.exports = {
         break;
         break;
       case 'yarn.resourcemanager.hostname':
       case 'yarn.resourcemanager.hostname':
         var rmHost = masterComponentHostsInDB.findProperty('component', '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;
         break;
       case 'yarn.resourcemanager.resource-tracker.address':
       case 'yarn.resourcemanager.resource-tracker.address':
       case 'yarn.resourcemanager.webapp.https.address':
       case 'yarn.resourcemanager.webapp.https.address':
@@ -102,14 +102,14 @@ module.exports = {
       case 'yarn.resourcemanager.address':
       case 'yarn.resourcemanager.address':
       case 'yarn.resourcemanager.admin.address':
       case 'yarn.resourcemanager.admin.address':
         var rmHost = masterComponentHostsInDB.findProperty('component', 'RESOURCEMANAGER').hostName;
         var rmHost = masterComponentHostsInDB.findProperty('component', 'RESOURCEMANAGER').hostName;
-        this.setDefaultValue(configProperty, hostWithPort,rmHost);
+        this.setRecommendedValue(configProperty, hostWithPort,rmHost);
         break;
         break;
       case 'yarn.timeline-service.webapp.address':
       case 'yarn.timeline-service.webapp.address':
       case 'yarn.timeline-service.webapp.https.address':
       case 'yarn.timeline-service.webapp.https.address':
       case 'yarn.timeline-service.address':
       case 'yarn.timeline-service.address':
         var atsHost =  masterComponentHostsInDB.findProperty('component', 'APP_TIMELINE_SERVER');
         var atsHost =  masterComponentHostsInDB.findProperty('component', 'APP_TIMELINE_SERVER');
         if (atsHost && atsHost.hostName) {
         if (atsHost && atsHost.hostName) {
-          this.setDefaultValue(configProperty, hostWithPort,atsHost.hostName);
+          this.setRecommendedValue(configProperty, hostWithPort,atsHost.hostName);
         }
         }
         break;
         break;
       case 'nm_hosts':
       case 'nm_hosts':
@@ -121,11 +121,11 @@ module.exports = {
       case 'mapred.job.tracker':
       case 'mapred.job.tracker':
       case 'mapred.job.tracker.http.address':
       case 'mapred.job.tracker.http.address':
         var jtHost = masterComponentHostsInDB.findProperty('component', 'JOBTRACKER').hostName;
         var jtHost = masterComponentHostsInDB.findProperty('component', 'JOBTRACKER').hostName;
-        this.setDefaultValue(configProperty, hostWithPort,jtHost);
+        this.setRecommendedValue(configProperty, hostWithPort,jtHost);
         break;
         break;
       case 'mapreduce.history.server.http.address':
       case 'mapreduce.history.server.http.address':
         var jtHost = masterComponentHostsInDB.findProperty('component', 'HISTORYSERVER').hostName;
         var jtHost = masterComponentHostsInDB.findProperty('component', 'HISTORYSERVER').hostName;
-        this.setDefaultValue(configProperty, hostWithPort,jtHost);
+        this.setRecommendedValue(configProperty, hostWithPort,jtHost);
         break;
         break;
       case 'tasktracker_hosts':
       case 'tasktracker_hosts':
         configProperty.set('value', slaveComponentHostsInDB.findProperty('componentName', 'TASKTRACKER').hosts.mapProperty('hostName'));
         configProperty.set('value', slaveComponentHostsInDB.findProperty('componentName', 'TASKTRACKER').hosts.mapProperty('hostName'));
@@ -164,7 +164,7 @@ module.exports = {
         break;
         break;
       case 'oozie.base.url':
       case 'oozie.base.url':
         var oozieHost = masterComponentHostsInDB.findProperty('component', 'OOZIE_SERVER').hostName;
         var oozieHost = masterComponentHostsInDB.findProperty('component', 'OOZIE_SERVER').hostName;
-        this.setDefaultValue(configProperty, hostWithPrefix,'://' + oozieHost);
+        this.setRecommendedValue(configProperty, hostWithPrefix,'://' + oozieHost);
         break;
         break;
       case 'webhcatserver_host':
       case 'webhcatserver_host':
         configProperty.set('value', masterComponentHostsInDB.findProperty('component', 'WEBHCAT_SERVER').hostName);
         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_host':
       case 'hive_existing_mssql_server_2_host':
       case 'hive_existing_mssql_server_2_host':
         var hiveServerHost = masterComponentHostsInDB.findProperty('component', 'HIVE_SERVER').hostName;
         var hiveServerHost = masterComponentHostsInDB.findProperty('component', 'HIVE_SERVER').hostName;
-        configProperty.set('value', hiveServerHost).set('defaultValue', hiveServerHost);
+        configProperty.set('value', hiveServerHost).set('recommendedValue', hiveServerHost);
         break;
         break;
       case 'hive.metastore.uris':
       case 'hive.metastore.uris':
         var hiveMSUris = this.getHiveMetastoreUris(masterComponentHostsInDB, dependencies['hive.metastore.uris']);
         var hiveMSUris = this.getHiveMetastoreUris(masterComponentHostsInDB, dependencies['hive.metastore.uris']);
         if (hiveMSUris) {
         if (hiveMSUris) {
-          this.setDefaultValue(configProperty, "(.*)", hiveMSUris);
+          this.setRecommendedValue(configProperty, "(.*)", hiveMSUris);
         }
         }
         break;
         break;
       case 'oozie_existing_mysql_host':
       case 'oozie_existing_mysql_host':
@@ -195,7 +195,7 @@ module.exports = {
       case 'oozie_existing_mssql_server_host':
       case 'oozie_existing_mssql_server_host':
       case 'oozie_existing_mssql_server_2_host':
       case 'oozie_existing_mssql_server_2_host':
         var oozieServerHost = masterComponentHostsInDB.findProperty('component', 'OOZIE_SERVER').hostName;
         var oozieServerHost = masterComponentHostsInDB.findProperty('component', 'OOZIE_SERVER').hostName;
-        configProperty.set('value', oozieServerHost).set('defaultValue', oozieServerHost);
+        configProperty.set('value', oozieServerHost).set('recommendedValue', oozieServerHost);
         break;
         break;
       case 'storm.zookeeper.servers':
       case 'storm.zookeeper.servers':
       case 'zookeeperserver_hosts':
       case 'zookeeperserver_hosts':
@@ -243,14 +243,14 @@ module.exports = {
       case 'hbase.zookeeper.quorum':
       case 'hbase.zookeeper.quorum':
         if (configProperty.get('filename') == 'hbase-site.xml') {
         if (configProperty.get('filename') == 'hbase-site.xml') {
           var zkHosts = masterComponentHostsInDB.filterProperty('component', 'ZOOKEEPER_SERVER').mapProperty('hostName');
           var zkHosts = masterComponentHostsInDB.filterProperty('component', 'ZOOKEEPER_SERVER').mapProperty('hostName');
-          this.setDefaultValue(configProperty, "(\\w*)", zkHosts);
+          this.setRecommendedValue(configProperty, "(\\w*)", zkHosts);
         }
         }
         break;
         break;
       case 'yarn.resourcemanager.zk-address':
       case 'yarn.resourcemanager.zk-address':
         var value = masterComponentHostsInDB.findProperty('component', 'ZOOKEEPER_SERVER').hostName + ':' + dependencies.clientPort;
         var value = masterComponentHostsInDB.findProperty('component', 'ZOOKEEPER_SERVER').hostName + ':' + dependencies.clientPort;
         configProperty.setProperties({
         configProperty.setProperties({
           value: value,
           value: value,
-          defaultValue: value
+          recommendedValue: value
         });
         });
         break;
         break;
       case 'zookeeper.connect':
       case 'zookeeper.connect':
@@ -262,21 +262,21 @@ module.exports = {
         var zkHosts = masterComponentHostsInDB.filterProperty('component', 'ZOOKEEPER_SERVER').mapProperty('hostName');
         var zkHosts = masterComponentHostsInDB.filterProperty('component', 'ZOOKEEPER_SERVER').mapProperty('hostName');
         var zkHostPort = zkHosts;
         var zkHostPort = zkHosts;
         var regex = "\\w*:(\\d+)";   //regex to fetch the port
         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) return;
         if (portValue[1]) {
         if (portValue[1]) {
           for ( var i = 0; i < zkHosts.length; i++ ) {
           for ( var i = 0; i < zkHosts.length; i++ ) {
             zkHostPort[i] = zkHosts[i] + ":" + portValue[1];
             zkHostPort[i] = zkHosts[i] + ":" + portValue[1];
           }
           }
         }
         }
-        this.setDefaultValue(configProperty, "(.*)", zkHostPort);
+        this.setRecommendedValue(configProperty, "(.*)", zkHostPort);
         break;
         break;
       case 'templeton.hive.properties':
       case 'templeton.hive.properties':
         var hiveMSUris = this.getHiveMetastoreUris(masterComponentHostsInDB, dependencies['hive.metastore.uris']).replace(',', '\\,');
         var hiveMSUris = this.getHiveMetastoreUris(masterComponentHostsInDB, dependencies['hive.metastore.uris']).replace(',', '\\,');
         if (/\/\/localhost:/g.test(configProperty.get('value'))) {
         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;
         break;
       case 'dfs.name.dir':
       case 'dfs.name.dir':
       case 'dfs.namenode.name.dir':
       case 'dfs.namenode.name.dir':
@@ -306,7 +306,7 @@ module.exports = {
         break;
         break;
       case '*.broker.url':
       case '*.broker.url':
         var falconServerHost = masterComponentHostsInDB.findProperty('component', 'FALCON_SERVER').hostName;
         var falconServerHost = masterComponentHostsInDB.findProperty('component', 'FALCON_SERVER').hostName;
-        this.setDefaultValue(configProperty, 'localhost', falconServerHost);
+        this.setRecommendedValue(configProperty, 'localhost', falconServerHost);
         break;
         break;
       case 'RANGER_HOST':
       case 'RANGER_HOST':
         var rangerAdminHost = masterComponentHostsInDB.findProperty('component', 'RANGER_ADMIN');
         var rangerAdminHost = masterComponentHostsInDB.findProperty('component', 'RANGER_ADMIN');
@@ -331,7 +331,7 @@ module.exports = {
         var masterComponent = masterComponentHostsInDB.findProperty('component', 'RANGER_ADMIN'),
         var masterComponent = masterComponentHostsInDB.findProperty('component', 'RANGER_ADMIN'),
           rangerServerHost = masterComponent ? masterComponentHostsInDB.findProperty('component', 'RANGER_ADMIN').hostName : '';
           rangerServerHost = masterComponent ? masterComponentHostsInDB.findProperty('component', 'RANGER_ADMIN').hostName : '';
         if (rangerServerHost) {
         if (rangerServerHost) {
-          configProperty.set('value', rangerServerHost).set('defaultValue', rangerServerHost);
+          configProperty.set('value', rangerServerHost).set('recommendedValue', rangerServerHost);
         }
         }
         break;
         break;
     }
     }
@@ -340,14 +340,14 @@ module.exports = {
   /**
   /**
    * Get hive.metastore.uris initial value
    * Get hive.metastore.uris initial value
    * @param hosts
    * @param hosts
-   * @param defaultValue
+   * @param recommendedValue
    * @returns {string}
    * @returns {string}
    */
    */
-  getHiveMetastoreUris: function (hosts, defaultValue) {
+  getHiveMetastoreUris: function (hosts, recommendedValue) {
     var hiveMSHosts = hosts.filterProperty('component', 'HIVE_METASTORE').mapProperty('hostName'),
     var hiveMSHosts = hosts.filterProperty('component', 'HIVE_METASTORE').mapProperty('hostName'),
       hiveMSUris = hiveMSHosts,
       hiveMSUris = hiveMSHosts,
       regex = "\\w*:(\\d+)",
       regex = "\\w*:(\\d+)",
-      portValue = defaultValue && defaultValue.match(new RegExp(regex));
+      portValue = recommendedValue && recommendedValue.match(new RegExp(regex));
 
 
     if (!portValue) return '';
     if (!portValue) return '';
     if (portValue[1]) {
     if (portValue[1]) {
@@ -363,12 +363,12 @@ module.exports = {
    * @param replaceWith : String
    * @param replaceWith : String
    * @param configProperty
    * @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);
     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) {
   unionAllMountPoints: function (configProperty, isOnlyFirstOneNeeded, localDB) {
@@ -543,7 +543,7 @@ module.exports = {
           mPoint += eachDrive.mountpoint + configProperty.get('defaultDirectory') + "\n";
           mPoint += eachDrive.mountpoint + configProperty.get('defaultDirectory') + "\n";
         }
         }
         configProperty.set('value', mPoint);
         configProperty.set('value', mPoint);
-        configProperty.set('defaultValue', mPoint);
+        configProperty.set('recommendedValue', mPoint);
       }, this);
       }, this);
     } else {
     } else {
       var mPoint = allMountPoints[0].mountpoint;
       var mPoint = allMountPoints[0].mountpoint;
@@ -570,7 +570,7 @@ module.exports = {
         mPoint = mPoint + configProperty.get('defaultDirectory');
         mPoint = mPoint + configProperty.get('defaultDirectory');
       }
       }
       configProperty.set('value', mPoint);
       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_feedback_popup');
 require('views/common/modal_popups/confirmation_popup');
 require('views/common/modal_popups/confirmation_popup');
 require('views/common/modal_popups/hosts_table_list_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/cluster_check_popup');
 require('views/common/modal_popups/invalid_KDC_popup');
 require('views/common/modal_popups/invalid_KDC_popup');
 require('views/common/modal_popups/dependent_configs_list_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),
           var affected = self.get("newAffectedProperties").objectAt(0),
             changedProperty = self.get("controller.stepConfigs").findProperty("serviceName", affected.sourceServiceName)
             changedProperty = self.get("controller.stepConfigs").findProperty("serviceName", affected.sourceServiceName)
               .get("configs").findProperty("name", affected.changedPropertyName);
               .get("configs").findProperty("name", affected.changedPropertyName);
-          changedProperty.set('value', changedProperty.get('defaultValue'));
+          changedProperty.set('value', changedProperty.get('savedValue'));
           self.get("controller").set("miscModalVisible", false);
           self.get("controller").set("miscModalVisible", false);
           this.hide();
           this.hide();
         },
         },
@@ -252,7 +252,7 @@ App.ServiceConfigsByCategoryView = Em.View.extend(App.UserPref, App.ConfigOverri
           return false;
           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', '');
           config.get('displayName') + config.get('name') + config.get('value') + config.getWithDefault('stackConfigProperty.displayName', '');
 
 
         if (config.get('overrides')) {
         if (config.get('overrides')) {
@@ -383,7 +383,8 @@ App.ServiceConfigsByCategoryView = Em.View.extend(App.UserPref, App.ConfigOverri
       category: propertyObj.categoryName,
       category: propertyObj.categoryName,
       id: 'site property',
       id: 'site property',
       serviceName: propertyObj.serviceName,
       serviceName: propertyObj.serviceName,
-      defaultValue: null,
+      savedValue: null,
+      recommendedValue: null,
       supportsFinal: App.config.shouldSupportFinal(propertyObj.serviceName, propertyObj.filename),
       supportsFinal: App.config.shouldSupportFinal(propertyObj.serviceName, propertyObj.filename),
       filename: propertyObj.filename || '',
       filename: propertyObj.filename || '',
       isUserProperty: true,
       isUserProperty: true,
@@ -633,18 +634,18 @@ App.ServiceConfigsByCategoryView = Em.View.extend(App.UserPref, App.ConfigOverri
   doRestoreDefaultValue: function (event) {
   doRestoreDefaultValue: function (event) {
     var serviceConfigProperty = event.contexts[0];
     var serviceConfigProperty = event.contexts[0];
     var value = serviceConfigProperty.get('value');
     var value = serviceConfigProperty.get('value');
-    var dValue = serviceConfigProperty.get('defaultValue');
+    var savedValue = serviceConfigProperty.get('savedValue');
     var supportsFinal = serviceConfigProperty.get('supportsFinal');
     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') {
       if (serviceConfigProperty.get('displayType') === 'password') {
-        serviceConfigProperty.set('retypedPassword', dValue);
+        serviceConfigProperty.set('retypedPassword', savedValue);
       }
       }
-      serviceConfigProperty.set('value', dValue);
+      serviceConfigProperty.set('value', savedValue);
     }
     }
     if (supportsFinal) {
     if (supportsFinal) {
-      serviceConfigProperty.set('isFinal', defaultIsFinal);
+      serviceConfigProperty.set('isFinal', savedIsFinal);
     }
     }
     this.configChangeObserver(serviceConfigProperty);
     this.configChangeObserver(serviceConfigProperty);
     Em.$('body>.tooltip').remove(); //some tooltips get frozen when their owner's DOM element is removed
     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 () {
   restoreValue: function () {
     this.$('input[type="checkbox"]:eq(0)').checkbox('click');
     this.$('input[type="checkbox"]:eq(0)').checkbox('click');
     this._super();
     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
    * @method restoreValue
    */
    */
   restoreValue: function() {
   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}
    * @type {boolean}
    */
    */
   valueIsChanged: function () {
   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
    * Enable/disable widget state
@@ -224,13 +224,31 @@ App.ConfigWidgetView = Em.View.extend(App.SupportsDependentConfigs, App.WidgetPo
    */
    */
   restoreValue: function () {
   restoreValue: function () {
     var self = this;
     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() {
     this.sendRequestRorDependentConfigs(this.get('config')).done(function() {
       self.restoreDependentConfigs(self.get('config'));
       self.restoreDependentConfigs(self.get('config'));
     });
     });
 
 
     if (this.get('config.supportsFinal')) {
     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();
     Em.$('body > .tooltip').remove();
   },
   },
@@ -367,11 +385,6 @@ App.ConfigWidgetView = Em.View.extend(App.SupportsDependentConfigs, App.WidgetPo
       return true;
       return true;
     }
     }
     return this.isValueCompatibleWithWidget();
     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() {
   didInsertElement: function() {
     this.initPopover();
     this.initPopover();
+    this._super();
     this.set('config.displayType', this.get('config.stackConfigProperty.widget.type'));
     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
    * @method setRecommendedValue
    */
    */
   setRecommendedValue: function () {
   setRecommendedValue: function () {
-    this.set('config.value', this.get('config.recommendedValue'));
+    this._super();
     this.calculateInitVal();
     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'),
   templateName: require('templates/common/configs/widgets/plain_config_text_field'),
   valueBinding: 'serviceConfig.value',
   valueBinding: 'serviceConfig.value',
   classNames: ['widget-config-plain-text-field'],
   classNames: ['widget-config-plain-text-field'],
-  placeholderBinding: 'serviceConfig.defaultValue',
+  placeholderBinding: 'serviceConfig.savedValue',
   unit: function() {
   unit: function() {
     return Em.getWithDefault(this, 'serviceConfig.stackConfigProperty.valueAttributes.unit', false);
     return Em.getWithDefault(this, 'serviceConfig.stackConfigProperty.valueAttributes.unit', false);
   }.property('serviceConfig.stackConfigProperty.valueAttributes.unit'),
   }.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 () {
   widgetDefaultValue: function () {
     var parseFunction = this.get('mirrorValueParseFunction');
     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
    * Default value of config property transformed according widget format
@@ -240,8 +240,8 @@ App.SliderConfigWidgetView = App.ConfigWidgetView.extend({
         }
         }
       }
       }
       // avoid precision during restore value
       // 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 {
     } else {
       this.set('isMirrorValueValid', false);
       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') : '');
       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 != '') {
     if (recommendedValue <= this.get('maxMirrorValue') && recommendedValue >= this.get('minMirrorValue') && recommendedValue != '') {
       // process additional tick for default value if it not defined in previous computation
       // process additional tick for default value if it not defined in previous computation
       if (!ticks.contains(recommendedValue)) {
       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
    * Restore <code>mirrorValue</code> too
    * @method restoreValue
    * @method restoreValue
    */
    */
@@ -423,10 +423,18 @@ App.SliderConfigWidgetView = App.ConfigWidgetView.extend({
    * @method setRecommendedValue
    * @method setRecommendedValue
    */
    */
   setRecommendedValue: function () {
   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
    * Run changeBoundariesOnce only once
    * @method changeBoundaries
    * @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.
    * Default property value in widget format.
    *
    *
-   * @property defaultValue
+   * @property savedValue
    * @type {Object[]}
    * @type {Object[]}
    */
    */
-  defaultValue: null,
+  savedValue: null,
 
 
   /**
   /**
    * Maximum property value in widget format.
    * Maximum property value in widget format.
@@ -92,7 +92,7 @@ App.TimeIntervalSpinnerView = App.ConfigWidgetView.extend({
    * Content setter.
    * Content setter.
    * Affects to view attributes:
    * Affects to view attributes:
    *  @see propertyUnit
    *  @see propertyUnit
-   *  @see defaultValue
+   *  @see savedValue
    *  @see minValue
    *  @see minValue
    *  @see maxValue
    *  @see maxValue
    *       content
    *       content
@@ -167,7 +167,7 @@ App.TimeIntervalSpinnerView = App.ConfigWidgetView.extend({
    * @method checkModified
    * @method checkModified
    */
    */
   checkModified: function() {
   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() {
   restoreValue: function() {
     this._super();
     this._super();
-    this.set('content', this.generateWidgetValue(this.get('config.defaultValue')));
+    this.set('content', this.generateWidgetValue(this.get('config.savedValue')));
     this.parseIncrement();
     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
    * @method setRecommendedValue
    */
    */
   setRecommendedValue: function () {
   setRecommendedValue: function () {
+    this._super();
     this.setValue(this.get('config.recommendedValue'));
     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',
   valueBinding: 'serviceConfig.value',
   classNameBindings: 'textFieldClassName',
   classNameBindings: 'textFieldClassName',
-  placeholderBinding: 'serviceConfig.defaultValue',
+  placeholderBinding: 'serviceConfig.savedValue',
 
 
   keyPress: function (event) {
   keyPress: function (event) {
     if (event.keyCode == 13) {
     if (event.keyCode == 13) {
@@ -203,7 +203,7 @@ App.ServiceConfigTextField = Ember.TextField.extend(App.ServiceConfigPopoverSupp
 App.ServiceConfigTextFieldWithUnit = Ember.View.extend(App.ServiceConfigPopoverSupport, App.SupportsDependentConfigs, {
 App.ServiceConfigTextFieldWithUnit = Ember.View.extend(App.ServiceConfigPopoverSupport, App.SupportsDependentConfigs, {
   valueBinding: 'serviceConfig.value',
   valueBinding: 'serviceConfig.value',
   classNames: ['input-append', 'with-unit'],
   classNames: ['input-append', 'with-unit'],
-  placeholderBinding: 'serviceConfig.defaultValue',
+  placeholderBinding: 'serviceConfig.savedValue',
 
 
   //Set editDone true for last edited config text field parameter
   //Set editDone true for last edited config text field parameter
   focusOut: function () {
   focusOut: function () {
@@ -467,7 +467,7 @@ App.ServiceConfigRadioButtons = Ember.View.extend(App.ServiceConfigCalculateId,
         var hostNameDefault;
         var hostNameDefault;
         var databaseNameDefault;
         var databaseNameDefault;
         var connectionUrlValue = connectionUrl.get('value');
         var connectionUrlValue = connectionUrl.get('value');
-        var connectionUrlDefaultValue = connectionUrl.get('defaultValue');
+        var connectionUrlDefaultValue = connectionUrl.get('recommendedValue');
         var dbClassValue = dbClass.get('value');
         var dbClassValue = dbClass.get('value');
         var serviceName = this.get('serviceConfig.serviceName');
         var serviceName = this.get('serviceConfig.serviceName');
         var isServiceInstalled = App.Service.find().someProperty('serviceName', 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 isNotExistingMySQLServer = this.get('serviceConfig.value') !== 'Existing MSSQL Server database with integrated authentication';
         var categoryConfigsAll = this.get('categoryConfigsAll');
         var categoryConfigsAll = this.get('categoryConfigsAll');
         if (isServiceInstalled) {
         if (isServiceInstalled) {
-          hostNameDefault = this.get('hostNameProperty.defaultValue');
-          databaseNameDefault = this.get('databaseNameProperty.defaultValue');
+          hostNameDefault = this.get('hostNameProperty.recommendedValue');
+          databaseNameDefault = this.get('databaseNameProperty.recommendedValue');
         } else {
         } else {
           hostNameDefault = hostName;
           hostNameDefault = hostName;
           databaseNameDefault = databaseName;
           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'));
             this.get('categoryConfigsAll').findProperty('name', 'db_host').set('value', this.get('hostNameProperty.value'));
             sqlConnectorJAR.set('value',sqlConnectorJARValue);
             sqlConnectorJAR.set('value',sqlConnectorJARValue);
-            sqlConnectorJAR.set('defaultValue',sqlConnectorJARValue);
+            sqlConnectorJAR.set('recommendedValue',sqlConnectorJARValue);
             sqlCommandInvoker.set('value', sqlCommand);
             sqlCommandInvoker.set('value', sqlCommand);
             break;
             break;
         }
         }
         connectionUrl.set('value', connectionUrlValue);
         connectionUrl.set('value', connectionUrlValue);
-        connectionUrl.set('defaultValue', connectionUrlDefaultValue);
+        connectionUrl.set('recommendedValue', connectionUrlDefaultValue);
         dbClass.set('value', dbClassValue);
         dbClass.set('value', dbClassValue);
       }
       }
     }
     }
@@ -863,7 +863,7 @@ App.ServiceConfigRadioButton = Ember.Checkbox.extend({
 App.ServiceConfigComboBox = Ember.Select.extend(App.ServiceConfigPopoverSupport, App.ServiceConfigCalculateId, App.SupportsDependentConfigs, {
 App.ServiceConfigComboBox = Ember.Select.extend(App.ServiceConfigPopoverSupport, App.ServiceConfigCalculateId, App.SupportsDependentConfigs, {
   contentBinding: 'serviceConfig.options',
   contentBinding: 'serviceConfig.options',
   selectionBinding: 'serviceConfig.value',
   selectionBinding: 'serviceConfig.value',
-  placeholderBinding: 'serviceConfig.defaultValue',
+  placeholderBinding: 'serviceConfig.savedValue',
   classNames: [ 'span3' ]
   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 () {
     it('setting new RM properties values', function () {
       controller.setDynamicConfigValues(configs, '2181', ':8088', ':8090');
       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('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('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('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('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('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('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('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() {
             getDBProperty: function() {
               return Em.A([
               return Em.A([
                 Em.Object.create({ name: 'realm', value: 'realm_value' }),
                 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 () {
   describe("#formatConfigValues", function () {
     var t = {
     var t = {
       configs: [
       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 () {
     it('should set property to true', function () {
       var allSelectedServiceNames = ['SLIDER', 'YARN'],
       var allSelectedServiceNames = ['SLIDER', 'YARN'],
         configs = [
         configs = [
-          {name: 'hadoop.registry.rm.enabled', value: false, defaultValue: false}
+          {name: 'hadoop.registry.rm.enabled', value: false, recommendedValue: false}
         ],
         ],
         expected = [
         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.reopen({allSelectedServiceNames: allSelectedServiceNames});
       installerStep7Controller.resolveYarnConfigs(configs);
       installerStep7Controller.resolveYarnConfigs(configs);
@@ -683,10 +683,10 @@ describe('App.InstallerStep7Controller', function () {
     it('should set property to false', function () {
     it('should set property to false', function () {
       var allSelectedServiceNames = ['YARN'],
       var allSelectedServiceNames = ['YARN'],
         configs = [
         configs = [
-          {name: 'hadoop.registry.rm.enabled', value: true, defaultValue: true}
+          {name: 'hadoop.registry.rm.enabled', value: true, recommendedValue: true}
         ],
         ],
         expected = [
         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.reopen({allSelectedServiceNames: allSelectedServiceNames});
       installerStep7Controller.resolveYarnConfigs(configs);
       installerStep7Controller.resolveYarnConfigs(configs);
@@ -696,10 +696,10 @@ describe('App.InstallerStep7Controller', function () {
     it('should skip setting property', function () {
     it('should skip setting property', function () {
       var allSelectedServiceNames = ['YARN', 'SLIDER'],
       var allSelectedServiceNames = ['YARN', 'SLIDER'],
         configs = [
         configs = [
-          {name: 'hadoop.registry.rm.enabled', value: true, defaultValue: true}
+          {name: 'hadoop.registry.rm.enabled', value: true, recommendedValue: true}
         ],
         ],
         expected = [
         expected = [
-          {name: 'hadoop.registry.rm.enabled', value: true, defaultValue: true}
+          {name: 'hadoop.registry.rm.enabled', value: true, recommendedValue: true}
         ];
         ];
       installerStep7Controller.reopen({allSelectedServiceNames: allSelectedServiceNames});
       installerStep7Controller.reopen({allSelectedServiceNames: allSelectedServiceNames});
       installerStep7Controller.resolveYarnConfigs(configs);
       installerStep7Controller.resolveYarnConfigs(configs);
@@ -727,14 +727,14 @@ describe('App.InstallerStep7Controller', function () {
     it('shouldn\'t do nothing if Ganglia and Storm are installed', function () {
     it('shouldn\'t do nothing if Ganglia and Storm are installed', function () {
       var installedServiceNames = ['GANGLIA', 'STORM'],
       var installedServiceNames = ['GANGLIA', 'STORM'],
         configs = [
         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 = [
         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.reopen({installedServiceNames: installedServiceNames});
       installerStep7Controller.resolveStormConfigs(configs);
       installerStep7Controller.resolveStormConfigs(configs);
@@ -744,14 +744,14 @@ describe('App.InstallerStep7Controller', function () {
     it('shouldn\'t do nothing if Ganglia is in allSelectedServiceNames', function () {
     it('shouldn\'t do nothing if Ganglia is in allSelectedServiceNames', function () {
       var allSelectedServiceNames = ['GANGLIA'],
       var allSelectedServiceNames = ['GANGLIA'],
         configs = [
         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 = [
         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.reopen({allSelectedServiceNames: allSelectedServiceNames});
       installerStep7Controller.resolveStormConfigs(configs);
       installerStep7Controller.resolveStormConfigs(configs);
@@ -763,14 +763,14 @@ describe('App.InstallerStep7Controller', function () {
     it('shouldn\'t do nothing if Ganglia is in installedServiceNames (2)', function () {
     it('shouldn\'t do nothing if Ganglia is in installedServiceNames (2)', function () {
       var installedServiceNames = ['GANGLIA'],
       var installedServiceNames = ['GANGLIA'],
         configs = [
         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 = [
         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.reopen({installedServiceNames: installedServiceNames});
       installerStep7Controller.resolveStormConfigs(configs);
       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 () {
     it('should replace host name for *.childopts properties if Ganglia is in installedServiceNames for Add Service Wizard', function () {
       var installedServiceNames = ['GANGLIA'],
       var installedServiceNames = ['GANGLIA'],
         configs = [
         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 = [
         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({
       installerStep7Controller.reopen({
         installedServiceNames: installedServiceNames,
         installedServiceNames: installedServiceNames,
@@ -1691,9 +1691,9 @@ describe('App.InstallerStep7Controller', function () {
       var properties = configs.filterProperty('name', 'hbase.client.scanner.caching');
       var properties = configs.filterProperty('name', 'hbase.client.scanner.caching');
       expect(properties).to.have.length(2);
       expect(properties).to.have.length(2);
       expect(properties.findProperty('filename', 'hbase-site.xml').value).to.equal('1500');
       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').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 () {
   describe('#isConfigsChanged', function () {
     it('should return true if config changed', function () {
     it('should return true if config changed', function () {
       var properties = Em.Object.create({
       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() {
   describe('#applyInstalledServicesConfigurationGroup', function() {
     beforeEach(function() {
     beforeEach(function() {
       sinon.stub($, 'ajax', function () {
       sinon.stub($, 'ajax', function () {
@@ -1750,45 +1695,14 @@ describe('App.WizardStep8Controller', function () {
 
 
   describe('#loadUiSideConfigs', function() {
   describe('#loadUiSideConfigs', function() {
     beforeEach(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);
       sinon.stub(App.config, 'setConfigValue', Em.K);
     });
     });
     afterEach(function() {
     afterEach(function() {
-      installerStep8Controller.addDynamicProperties.restore();
-      installerStep8Controller.getGlobConfigValueWithOverrides.restore();
       App.config.setConfigValue.restore();
       App.config.setConfigValue.restore();
     });
     });
 
 
-    it('all configs witohut foreignKey', function() {
+    it('configs with foreignKey', function() {
       var configMapping = [
       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: 'fk1', templateName: 't5', value: 'v5', name: 'c5', filename: 'f1'},
         {foreignKey: 'fk2', templateName: 't6', value: 'v6', name: 'c6', filename: 'f1'},
         {foreignKey: 'fk2', templateName: 't6', value: 'v6', name: 'c6', filename: 'f1'},
         {foreignKey: 'fk3', templateName: 't7', value: 'v7', name: 'c7', filename: 'f2'},
         {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 () {
   describe('#isAllClusterDeleteRequestsCompleted', function () {
     it('should depend on completed cluster delete requests number', function () {
     it('should depend on completed cluster delete requests number', function () {
       installerStep8Controller.setProperties({
       installerStep8Controller.setProperties({

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

@@ -186,7 +186,7 @@ describe('App.WizardController', function () {
             id: 'id',
             id: 'id',
             name: 'name',
             name: 'name',
             value: 'value',
             value: 'value',
-            defaultValue: 'defaultValue',
+            recommendedValue: 'recommendedValue',
             description: 'description',
             description: 'description',
             serviceName: 'serviceName',
             serviceName: 'serviceName',
             domain: 'domain',
             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.
   // These should be always retrieved from server.
 
 
     siteProperties.forEach(function(siteProperty){
     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.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
       //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('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('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('name')).to.eql('p1');
       expect(App.StackConfigProperty.find('p1_site1').get('displayName')).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('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('serviceName')).to.eql('s1');
       expect(App.StackConfigProperty.find('p1_site1').get('stackName')).to.eql('HDP');
       expect(App.StackConfigProperty.find('p1_site1').get('stackName')).to.eql('HDP');
       expect(App.StackConfigProperty.find('p1_site1').get('stackVersion')).to.eql('2.2');
       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",
           "c6401.ambari.apache.org",
           "c6402.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",
         "filename":"storm-site.xml",
         "isUserProperty":false,
         "isUserProperty":false,
         "isOverridable":false,
         "isOverridable":false,
@@ -243,7 +243,7 @@ module.exports = {
       {
       {
         "name":"single_line_property",
         "name":"single_line_property",
         "value":"value",
         "value":"value",
-        "defaultValue":"value",
+        "recommendedValue":"value",
         "filename":"storm-site.xml",
         "filename":"storm-site.xml",
         "isUserProperty":true,
         "isUserProperty":true,
         "isOverridable":true,
         "isOverridable":true,
@@ -257,7 +257,7 @@ module.exports = {
       {
       {
         "name":"multi_line_property",
         "name":"multi_line_property",
         "value":"value \n value",
         "value":"value \n value",
-        "defaultValue":"value \n value",
+        "recommendedValue":"value \n value",
         "filename":"storm-site.xml",
         "filename":"storm-site.xml",
         "isUserProperty":true,
         "isUserProperty":true,
         "isOverridable":true,
         "isOverridable":true,
@@ -271,7 +271,7 @@ module.exports = {
       {
       {
         "name":"nonexistent_property",
         "name":"nonexistent_property",
         "value":"some value",
         "value":"some value",
-        "defaultValue":"some value",
+        "recommendedValue":"some value",
         "filename":"storm-env.xml",
         "filename":"storm-env.xml",
         "isUserProperty":false,
         "isUserProperty":false,
         "isOverridable":true,
         "isOverridable":true,
@@ -285,7 +285,7 @@ module.exports = {
       {
       {
         "name":"dfs.datanode.data.dir",
         "name":"dfs.datanode.data.dir",
         "value":"/a,/b",
         "value":"/a,/b",
-        "defaultValue":"/a,/b",
+        "recommendedValue":"/a,/b",
         "filename":"hdfs-site.xml",
         "filename":"hdfs-site.xml",
         "isUserProperty":false,
         "isUserProperty":false,
         "isOverridable":true,
         "isOverridable":true,
@@ -305,7 +305,7 @@ module.exports = {
       {
       {
         "name":"content",
         "name":"content",
         "value":"custom mock property",
         "value":"custom mock property",
-        "defaultValue":"custom mock property",
+        "recommendedValue":"custom mock property",
         "filename":"hdfs-site.xml",
         "filename":"hdfs-site.xml",
         "isUserProperty":false,
         "isUserProperty":false,
         "isOverridable":true,
         "isOverridable":true,
@@ -325,7 +325,7 @@ module.exports = {
       {
       {
         "name":"content",
         "name":"content",
         "value":"hdfs log4j content",
         "value":"hdfs log4j content",
-        "defaultValue":"hdfs log4j content",
+        "recommendedValue":"hdfs log4j content",
         "filename":"hdfs-log4j.xml",
         "filename":"hdfs-log4j.xml",
         "isUserProperty":false,
         "isUserProperty":false,
         "isOverridable":true,
         "isOverridable":true,
@@ -345,7 +345,7 @@ module.exports = {
       {
       {
         "name":"storm_log_dir",
         "name":"storm_log_dir",
         "value":"/var/log/storm",
         "value":"/var/log/storm",
-        "defaultValue":"/var/log/storm",
+        "recommendedValue":"/var/log/storm",
         "filename":"storm-env.xml",
         "filename":"storm-env.xml",
         "isUserProperty":false,
         "isUserProperty":false,
         "isOverridable":true,
         "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 = [
     var tests = [
       { isEditable: false, value: 1, defaultValue: 2, supportsFinal: true, isFinal: true, defaultIsFinal: false, isNotDefaultValue: false },
       { 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 },
       { 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: {
       initial: {
         id: 'puppet var',
         id: 'puppet var',
         value: '',
         value: '',
-        defaultValue: 'default'
+        savedValue: 'default'
       },
       },
       result: {
       result: {
         value: 'default'
         value: 'default'
@@ -197,17 +197,17 @@ var serviceConfigProperty,
       isEditable: false
       isEditable: false
     },
     },
     {
     {
-      defaultValue: null
+      savedValue: null
     },
     },
     {
     {
       value: 'value',
       value: 'value',
-      defaultValue: 'value'
+      savedValue: 'value'
     }
     }
   ],
   ],
   notDefaultTrueData = {
   notDefaultTrueData = {
     isEditable: true,
     isEditable: true,
     value: 'value',
     value: 'value',
-    defaultValue: 'default'
+    savedValue: 'default'
   },
   },
   types = ['masterHost', 'slaveHosts', 'masterHosts', 'slaveHost', 'radio button'],
   types = ['masterHost', 'slaveHosts', 'masterHosts', 'slaveHost', 'radio button'],
   classCases = [
   classCases = [

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

@@ -66,11 +66,11 @@ describe('App.config', function () {
       config = {
       config = {
         displayType: 'int',
         displayType: 'int',
         value: '1024m',
         value: '1024m',
-        defaultValue: '1024m'
+        savedValue: '1024m'
       };
       };
       App.config.handleSpecialProperties(config);
       App.config.handleSpecialProperties(config);
       expect(config.value).to.equal('1024');
       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',
         name: 'config1',
         value: 'value1',
         value: 'value1',
-        defaultValue: 'value1',
+        recommendedValue: 'value1',
         filename: 'capacity-scheduler.xml'
         filename: 'capacity-scheduler.xml'
       },
       },
       {
       {
         name: 'config2',
         name: 'config2',
         value: 'value2',
         value: 'value2',
-        defaultValue: 'value2',
+        recommendedValue: 'value2',
         filename: 'capacity-scheduler.xml'
         filename: 'capacity-scheduler.xml'
       }
       }
     ];
     ];
@@ -94,19 +94,19 @@ describe('App.config', function () {
       var result = App.config.fileConfigsIntoTextarea.call(App.config, configs, filename);
       var result = App.config.fileConfigsIntoTextarea.call(App.config, configs, filename);
       expect(result.length).to.equal(1);
       expect(result.length).to.equal(1);
       expect(result[0].value).to.equal('config1=value1\nconfig2=value2\n');
       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 () {
     it('three config into textarea', function () {
       configs.push({
       configs.push({
         name: 'config3',
         name: 'config3',
         value: 'value3',
         value: 'value3',
-        defaultValue: 'value3',
+        recommendedValue: 'value3',
         filename: 'capacity-scheduler.xml'
         filename: 'capacity-scheduler.xml'
       });
       });
       var result = App.config.fileConfigsIntoTextarea.call(App.config, configs, filename);
       var result = App.config.fileConfigsIntoTextarea.call(App.config, configs, filename);
       expect(result.length).to.equal(1);
       expect(result.length).to.equal(1);
       expect(result[0].value).to.equal('config1=value1\nconfig2=value2\nconfig3=value3\n');
       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 () {
     it('one of three configs has different filename', function () {
       configs[1].filename = 'another filename';
       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
       //result contains two configs: one with different filename and one textarea config
       expect(result.length).to.equal(2);
       expect(result.length).to.equal(2);
       expect(result[1].value).to.equal('config1=value1\nconfig3=value3\n');
       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 () {
     it('none configs into empty textarea', function () {
       filename = 'capacity-scheduler.xml';
       filename = 'capacity-scheduler.xml';
@@ -122,34 +122,34 @@ describe('App.config', function () {
       var result = App.config.fileConfigsIntoTextarea.call(App.config, configs, filename);
       var result = App.config.fileConfigsIntoTextarea.call(App.config, configs, filename);
       expect(result.length).to.equal(1);
       expect(result.length).to.equal(1);
       expect(result[0].value).to.equal('');
       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 () {
     it("filename has configs that shouldn't be included in textarea", function () {
       var configs = [
       var configs = [
         {
         {
           name: 'config1',
           name: 'config1',
           value: 'value1',
           value: 'value1',
-          defaultValue: 'value1',
+          recommendedValue: 'value1',
           filename: filename
           filename: filename
         },
         },
         {
         {
           name: 'config2',
           name: 'config2',
           value: 'value2',
           value: 'value2',
-          defaultValue: 'value2',
+          recommendedValue: 'value2',
           filename: filename
           filename: filename
         }
         }
       ];
       ];
       var cfg = {
       var cfg = {
         name: 'config3',
         name: 'config3',
         value: 'value3',
         value: 'value3',
-        defaultValue: 'value3',
+        recommendedValue: 'value3',
         filename: filename
         filename: filename
       };
       };
       configs.push(cfg);
       configs.push(cfg);
       var result = App.config.fileConfigsIntoTextarea.call(App.config, configs, filename, [cfg]);
       var result = App.config.fileConfigsIntoTextarea.call(App.config, configs, filename, [cfg]);
       expect(result.length).to.equal(2);
       expect(result.length).to.equal(2);
       expect(result[1].value).to.equal('config1=value1\nconfig2=value2\n');
       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);
       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 () {
     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() {
     after(function() {
@@ -423,7 +423,7 @@ describe('App.config', function () {
     });
     });
 
 
     it('HDP2 should use New MySQL Database as its default hive metastore database', 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() {
     after(function() {
@@ -901,12 +901,12 @@ describe('App.config', function () {
             name: 'prop_name0',
             name: 'prop_name0',
             serviceName: 's0',
             serviceName: 's0',
             value: 'v0',
             value: 'v0',
-            defaultValue: 'dv0',
+            savedValue: 'dv0',
             filename: 'fn0.xml',
             filename: 'fn0.xml',
             overrides: null,
             overrides: null,
             isVisible: false,
             isVisible: false,
             isFinal: true,
             isFinal: true,
-            defaultIsFinal: false,
+            savedIsFinal: false,
             supportsFinal: true,
             supportsFinal: true,
             category: 'c0'
             category: 'c0'
           },
           },
@@ -916,7 +916,7 @@ describe('App.config', function () {
             displayName: 'Prop Name0',
             displayName: 'Prop Name0',
             serviceName: 's0',
             serviceName: 's0',
             value: 'v0',
             value: 'v0',
-            defaultValue: 'dv0',
+            savedValue: 'dv0',
             displayType: 'advanced',
             displayType: 'advanced',
             filename: 'fn0.xml',
             filename: 'fn0.xml',
             isUserProperty: false,
             isUserProperty: false,
@@ -926,7 +926,7 @@ describe('App.config', function () {
             isRequired: false,
             isRequired: false,
             isVisible: false,
             isVisible: false,
             isFinal: true,
             isFinal: true,
-            defaultIsFinal: false,
+            savedIsFinal: false,
             supportsFinal: true,
             supportsFinal: true,
             showLabel: true,
             showLabel: true,
             category: 'c0'
             category: 'c0'
@@ -1129,7 +1129,7 @@ describe('App.config', function () {
             {
             {
               name: 'falcon_user',
               name: 'falcon_user',
               value: '',
               value: '',
-              defaultValue: 'fu'
+              recommendedValue: 'fu'
             }
             }
           ],
           ],
           m: 'in all, default value used',
           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();
     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',
           filename: 'hbase-site.xml',
           value: 'host0,host1',
           value: 'host0,host1',
-          defaultValue: 'host0,host1',
+          recommendedValue: 'host0,host1',
           title: 'should set ZooKeeper Server hostnames'
           title: 'should set ZooKeeper Server hostnames'
         },
         },
         {
         {
           filename: 'ams-hbase-site.xml',
           filename: 'ams-hbase-site.xml',
           value: 'localhost',
           value: 'localhost',
-          defaultValue: '',
+          recommendedValue: null,
           title: 'should ignore ZooKeeper Server hostnames'
           title: 'should ignore ZooKeeper Server hostnames'
         }
         }
       ],
       ],
@@ -272,7 +272,7 @@ describe('configPropertyHelper', function () {
         dependencies: {
         dependencies: {
           'hive.metastore.uris': 'thrift://localhost:9083'
           'hive.metastore.uris': 'thrift://localhost:9083'
         },
         },
-        defaultValue: 'thrift://localhost:9083',
+        recommendedValue: 'thrift://localhost:9083',
         value: 'thrift://h0:9083,thrift://h1:9083',
         value: 'thrift://h0:9083,thrift://h1:9083',
         title: 'comma separated list of Metastore hosts with thrift prefix and port'
         title: 'comma separated list of Metastore hosts with thrift prefix and port'
       },
       },
@@ -292,7 +292,7 @@ describe('configPropertyHelper', function () {
         dependencies: {
         dependencies: {
           'hive.metastore.uris': 'thrift://localhost:9083'
           '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',
         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'
         title: 'should add relevant hive.metastore.uris value'
       },
       },
@@ -312,7 +312,7 @@ describe('configPropertyHelper', function () {
         dependencies: {
         dependencies: {
           clientPort: '2182'
           clientPort: '2182'
         },
         },
-        defaultValue: 'localhost:2181',
+        recommendedValue: 'localhost:2181',
         value: 'h0:2182',
         value: 'h0:2182',
         title: 'should add ZK host and port dynamically'
         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('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 () {
     it(cases['hive.metastore.uris'].title, function () {
       serviceConfigProperty.setProperties({
       serviceConfigProperty.setProperties({
         name: 'hive.metastore.uris',
         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);
       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('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 () {
     it(cases['templeton.hive.properties'].title, function () {
       serviceConfigProperty.setProperties({
       serviceConfigProperty.setProperties({
         name: 'templeton.hive.properties',
         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);
       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('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 () {
     it(cases['yarn.resourcemanager.zk-address'].title, function () {
       serviceConfigProperty.setProperties({
       serviceConfigProperty.setProperties({
         name: 'yarn.resourcemanager.zk-address',
         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);
       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('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 () {
     it(cases['oozieserver_host'].title, function () {
@@ -495,7 +495,7 @@ describe('configPropertyHelper', function () {
             component: 'HIVE_METASTORE'
             component: 'HIVE_METASTORE'
           }
           }
         ],
         ],
-        defaultValue: 'thrift://localhost:9083',
+        recommendedValue: 'thrift://localhost:9083',
         expected: 'thrift://h1:9083,thrift://h2:9083',
         expected: 'thrift://h1:9083,thrift://h2:9083',
         title: 'typical case'
         title: 'typical case'
       },
       },
@@ -506,7 +506,7 @@ describe('configPropertyHelper', function () {
             component: 'HIVE_SERVER'
             component: 'HIVE_SERVER'
           }
           }
         ],
         ],
-        defaultValue: 'thrift://localhost:9083',
+        recommendedValue: 'thrift://localhost:9083',
         expected: '',
         expected: '',
         title: 'no Metastore hosts in DB'
         title: 'no Metastore hosts in DB'
       },
       },
@@ -525,7 +525,7 @@ describe('configPropertyHelper', function () {
             component: 'HIVE_METASTORE'
             component: 'HIVE_METASTORE'
           }
           }
         ],
         ],
-        defaultValue: '',
+        recommendedValue: '',
         expected: '',
         expected: '',
         title: 'default value without port'
         title: 'default value without port'
       },
       },
@@ -551,7 +551,7 @@ describe('configPropertyHelper', function () {
 
 
     cases.forEach(function (item) {
     cases.forEach(function (item) {
       it(item.title, function () {
       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);
         configPropertyHelper.unionAllMountPoints(serviceConfigProperty, item.isOnlyFirstOneNeeded, localDB);
         expect(serviceConfigProperty.get('value')).to.equal(item.value);
         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',
           filter: 'd',
           serviceConfigs: [
           serviceConfigs: [
             Em.Object.create({
             Em.Object.create({
-              defaultValue: 'dv',
+              savedValue: 'dv',
               category: 'c',
               category: 'c',
               isVisible: true
               isVisible: true
             })
             })
@@ -444,7 +444,7 @@ describe('App.ServiceConfigsByCategoryView', function () {
           category: 'c0',
           category: 'c0',
           id: 'site property',
           id: 'site property',
           serviceName: 's0',
           serviceName: 's0',
-          defaultValue: null,
+          savedValue: null,
           supportsFinal: true,
           supportsFinal: true,
           filename: 'f0',
           filename: 'f0',
           isUserProperty: true,
           isUserProperty: true,
@@ -473,7 +473,7 @@ describe('App.ServiceConfigsByCategoryView', function () {
           category: 'c1',
           category: 'c1',
           id: 'site property',
           id: 'site property',
           serviceName: 's1',
           serviceName: 's1',
-          defaultValue: null,
+          savedValue: null,
           supportsFinal: false,
           supportsFinal: false,
           filename: '',
           filename: '',
           isUserProperty: true,
           isUserProperty: true,
@@ -513,7 +513,7 @@ describe('App.ServiceConfigsByCategoryView', function () {
         view.createProperty(item.propertyObj);
         view.createProperty(item.propertyObj);
         expect(view.get('serviceConfigs').filterProperty('name', item.propertyObj.name)).to.have.length(1);
         expect(view.get('serviceConfigs').filterProperty('name', item.propertyObj.name)).to.have.length(1);
         expect(view.get('serviceConfigs').findProperty('name', item.propertyObj.name).getProperties([
         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'
           'supportsFinal', 'filename', 'isUserProperty', 'isNotSaved', 'isRequired', 'group', 'isOverridable'
         ])).to.eql(item.result);
         ])).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,
         _validateOverrides: App.ServiceConfigProperty.prototype._validateOverrides,
         validate: App.ServiceConfigProperty.prototype.validate,
         validate: App.ServiceConfigProperty.prototype.validate,
         name: 'a.b.c',
         name: 'a.b.c',
-        defaultValue: '2,1',
+        savedValue: '2,1',
         value: '2,1',
         value: '2,1',
         filename: 'f1',
         filename: 'f1',
         isFinal: false,
         isFinal: false,
@@ -152,7 +152,7 @@ describe('App.ListConfigWidgetView', function () {
       view.restoreDependentConfigs.restore();
       view.restoreDependentConfigs.restore();
       view.get('controller.removeCurrentFromDependentList').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')[0]});
       view.toggleOption({context: view.get('options')[1]});
       view.toggleOption({context: view.get('options')[1]});
       view.toggleOption({context: view.get('options')[2]});
       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',
         name: 'a.b.c',
         description: 'A B C',
         description: 'A B C',
         value: '486',
         value: '486',
-        defaultValue: '486',
+        savedValue: '486',
         stackConfigProperty: Em.Object.create({
         stackConfigProperty: Em.Object.create({
           valueAttributes: Em.Object.create({
           valueAttributes: Em.Object.create({
             type: 'int',
             type: 'int',
@@ -65,7 +65,7 @@ describe('App.SliderConfigWidgetView', function () {
         name: 'a.b.c2',
         name: 'a.b.c2',
         description: 'A B C 2',
         description: 'A B C 2',
         value: '72.2',
         value: '72.2',
-        defaultValue: '72.2',
+        savedValue: '72.2',
         stackConfigProperty: Em.Object.create({
         stackConfigProperty: Em.Object.create({
           valueAttributes: Em.Object.create({
           valueAttributes: Em.Object.create({
             type: 'float',
             type: 'float',
@@ -94,7 +94,7 @@ describe('App.SliderConfigWidgetView', function () {
         name: 'a.b.c3',
         name: 'a.b.c3',
         description: 'A B C 3',
         description: 'A B C 3',
         value: '0.22',
         value: '0.22',
-        defaultValue: '0.22',
+        savedValue: '0.22',
         stackConfigProperty: Em.Object.create({
         stackConfigProperty: Em.Object.create({
           valueAttributes: Em.Object.create({
           valueAttributes: Em.Object.create({
             type: 'float',
             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({
       config: Em.Object.create({
         name: 'a.b.c',
         name: 'a.b.c',
         value: 'active',
         value: 'active',
-        defaultValue: 'active',
+        savedValue: 'active',
         stackConfigProperty: Em.Object.create({
         stackConfigProperty: Em.Object.create({
           valueAttributes: {
           valueAttributes: {
             "type": "value-list",
             "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,
           databaseName: item.databaseName,
           hostName: item.hostName,
           hostName: item.hostName,
           databaseNameProperty: Em.Object.create({
           databaseNameProperty: Em.Object.create({
-            defaultValue: item.databaseNameDefault
+            recommendedValue: item.databaseNameDefault
           }),
           }),
           hostNameProperty: Em.Object.create({
           hostNameProperty: Em.Object.create({
-            defaultValue: item.hostNameDefault
+            recommendedValue: item.hostNameDefault
           })
           })
         });
         });
         expect(view.get('connectionUrl.value')).to.equal(item.connectionUrlValue);
         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);
         expect(view.get('dbClass.value')).to.equal(item.dbClassValue);
         serviceAuthPropsMap[item.serviceName].forEach(function (propName) {
         serviceAuthPropsMap[item.serviceName].forEach(function (propName) {
           expect(view.get('categoryConfigsAll').findProperty('name', propName).get('isVisible')).to.equal(item.isAuthVisibleAndRequired);
           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 () {
     it('should be recalculated after value is changed', function () {
       view.setProperties({
       view.setProperties({
         value: 'val',
         value: 'val',
-        defaultValue: 'val'
+        recommendedValue: 'val'
       });
       });
       expect(view.get('valueWasChanged')).to.be.false;
       expect(view.get('valueWasChanged')).to.be.false;
       view.set('value', 'newVal');
       view.set('value', 'newVal');
@@ -803,7 +803,7 @@ describe('App.BaseUrlTextField', function () {
     it('should unset value', function () {
     it('should unset value', function () {
       view.setProperties({
       view.setProperties({
         value: 'valNew',
         value: 'valNew',
-        defaultValue: 'val'
+        savedValue: 'val'
       });
       });
       view.restoreValue();
       view.restoreValue();
       expect(view.get('value')).to.equal('val');
       expect(view.get('value')).to.equal('val');

Some files were not shown because too many files changed in this diff