Ver código fonte

AMBARI-15920 Save creds checkbox is enabled, even though ambari is not config'd to save. (atkach)

Andrii Tkach 9 anos atrás
pai
commit
ba34903992

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

@@ -93,9 +93,12 @@ App.KerberosWizardStep2Controller = App.WizardStep7Controller.extend(App.KDCCred
 
     this.filterConfigs(this.get('configs'));
     if (!this.get('wizardController.skipClientInstall')) {
-      this.initilizeKDCStoreProperties(this.get('configs'));
+      this.initializeKDCStoreProperties(this.get('configs'));
     }
     this.applyServicesConfigs(this.get('configs'));
+    if (!this.get('wizardController.skipClientInstall')) {
+      this.updateKDCStoreProperties(this.get('stepConfigs').findProperty('serviceName', 'KERBEROS').get('configs'));
+    }
   },
 
   /**

+ 38 - 11
ambari-web/app/mixins/common/kdc_credentials_controller_mixin.js

@@ -103,31 +103,58 @@ App.KDCCredentialsControllerMixin = Em.Mixin.create({
     return credentialsUtils.updateCredentials(App.get('clusterName'), this.get('credentialAlias'), resource);
   },
 
+  /**
+   * initialize additional properties regarding KDC credential storage
+   * @method initializeKDCStoreProperties
+   * @param {App.ServiceConfigProperty[]} configs list of configs
+   */
+  initializeKDCStoreProperties: function(configs) {
+    this.generateKDCStoreProperties().forEach(function(configObject) {
+      var configProperty = configs.findProperty('name', configObject.name);
+      if (!Em.isNone(configProperty)) {
+        Em.setProperties(configProperty, configObject);
+      } else {
+        configs.pushObject(configObject);
+      }
+    });
+  },
+
   /**
    * Generate additional properties regarding KDC credential storage
-   *
+   * @method updateKDCStoreProperties
    * @param {App.ServiceConfigProperty[]} configs list of configs
    */
-  initilizeKDCStoreProperties: function(configs) {
-    var self = this;
+  updateKDCStoreProperties: function(configs) {
+    this.generateKDCStoreProperties().forEach(function(configObject) {
+      var configProperty = configs.findProperty('name', configObject.name);
+      if (!Em.isNone(configProperty)) {
+        Em.setProperties(configProperty, configObject);
+      }
+    });
+  },
+
+  /**
+   * generate additional properties regarding KDC credential storage
+   * @method generateKDCStoreProperties
+   * @returns {Array} properties
+   */
+  generateKDCStoreProperties: function() {
+    var properties = [];
+
     this.get('credentialsStoreConfigs').forEach(function(item) {
       var configObject = App.config.createDefaultConfig(item.name, 'krb5-conf.xml', false);
       $.extend(configObject, item);
       if (item.name === 'persist_credentials') {
-        if (self.get('isStorePersisted')) {
+        if (this.get('isStorePersisted')) {
           configObject.hintMessage = Em.I18n.t('admin.kerberos.credentials.store.hint.supported');
         } else {
           configObject.hintMessage = Em.I18n.t('admin.kerberos.credentials.store.hint.not.supported');
           configObject.isEditable = false;
         }
       }
-      var configProperty = configs.findProperty('name', configObject.name);
-      if (!Em.isNone(configProperty)) {
-        Em.setProperties(configProperty, configObject);
-      } else {
-        configs.pushObject(configObject);
-      }
-    });
+      properties.push(configObject);
+    }, this);
+    return properties;
   },
 
   /**

+ 1 - 3
ambari-web/app/views/common/configs/services_config.js

@@ -23,9 +23,7 @@ App.ServicesConfigView = Em.View.extend({
   templateName: require('templates/common/configs/services_config'),
 
   didInsertElement: function () {
-    Em.run.next(this, function() {
-      this.get('controller') && this.get('controller').loadStep();
-    });
+    this.get('controller').loadStep();
   }
 
 });

+ 4 - 6
ambari-web/app/views/main/admin/kerberos/step2_view.js

@@ -20,12 +20,10 @@ var App = require('app');
 
 require('views/wizard/step7_view');
 
+/**
+ * controller.loadStep() called from internal view App.ServicesConfigView
+ */
 App.KerberosWizardStep2View = App.WizardStep7View.extend({
 
-  templateName: require('templates/main/admin/kerberos/step2'),
-
-  didInsertElement: function() {
-    var controller =  this.get('controller');
-    controller.loadStep();
-  }
+  templateName: require('templates/main/admin/kerberos/step2')
 });

+ 59 - 2
ambari-web/test/mixins/common/kdc_credentials_controller_mixin_test.js

@@ -33,7 +33,7 @@ describe('App.KDCCredentialsControllerMixin', function() {
     mixedObject.destroy();
   });
 
-  describe('#initilizeKDCStoreProperties', function() {
+  describe('#initializeKDCStoreProperties', function() {
     [
       {
         isStorePersisted: true,
@@ -63,7 +63,7 @@ describe('App.KDCCredentialsControllerMixin', function() {
               return test.isStorePersisted;
             }.property()
           });
-          mixedObject.initilizeKDCStoreProperties(configs);
+          mixedObject.initializeKDCStoreProperties(configs);
           config = configs.findProperty('name', 'persist_credentials');
         });
 
@@ -76,6 +76,63 @@ describe('App.KDCCredentialsControllerMixin', function() {
     });
   });
 
+  describe('#updateKDCStoreProperties', function() {
+    [
+      {
+        isStorePersisted: true,
+        e: {
+          isEditable: true,
+          hintMessage: Em.I18n.t('admin.kerberos.credentials.store.hint.supported')
+        },
+        message: 'Persistent store available, config should be editable, and appropriate hint shown',
+        configs: [
+          Em.Object.create({
+            name: 'persist_credentials',
+            isEditable: false,
+            hintMessage: ''
+          })
+        ]
+      },
+      {
+        isStorePersisted: false,
+        e: {
+          isEditable: false,
+          hintMessage: Em.I18n.t('admin.kerberos.credentials.store.hint.not.supported')
+        },
+        message: 'Only temporary store available, config should be disabled, and appropriate hint shown',
+        configs: [
+          Em.Object.create({
+            name: 'persist_credentials',
+            isEditable: true,
+            hintMessage: ''
+          })
+        ]
+      }
+    ].forEach(function(test) {
+        describe(test.message, function() {
+
+          var config;
+
+          beforeEach(function () {
+            var configs = test.configs;
+            mixedObject.reopen({
+              isStorePersisted: function() {
+                return test.isStorePersisted;
+              }.property()
+            });
+            mixedObject.updateKDCStoreProperties(configs);
+            config = configs.findProperty('name', 'persist_credentials');
+          });
+
+          Object.keys(test.e).forEach(function(key) {
+            it(key, function () {
+              assert.equal(Em.get(config, key), test.e[key], 'validate attribute: ' + key);
+            });
+          });
+        });
+      });
+  });
+
   describe('#createKDCCredentials', function() {
 
     function createConfig (name, value) {