Bläddra i källkod

AMBARI-12141. Kerberos configs aren't restored when moving back from Review to the Configure Identities step (rzang)

Richard Zang 10 år sedan
förälder
incheckning
49b47c354f

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

@@ -81,7 +81,7 @@ App.KerberosWizardStep2Controller = App.WizardStep7Controller.extend({
    * @method loadStep
    */
   loadStep: function () {
-    console.log("TRACE: Loading step7: Configure Services");
+    console.log("TRACE: Loading step2: Configure Kerberos");
     if (!App.StackService.find().someProperty('serviceName', 'KERBEROS') || !this.get('isConfigsLoaded')) {
       return;
     }

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

@@ -21,6 +21,9 @@ require('controllers/wizard/step7_controller');
 
 App.KerberosWizardStep4Controller = App.WizardStep7Controller.extend(App.AddSecurityConfigs, App.ToggleIsRequiredMixin, {
   name: 'kerberosWizardStep4Controller',
+  isWithinAddService: function () {
+    return this.get('wizardController.name') == 'addServiceController';
+  }.property('wizardController.name'),
 
   adminPropertyNames: [{name: 'admin_principal', displayName: 'Admin principal'}, {name: 'admin_password', displayName: 'Admin password'}],
   
@@ -166,13 +169,18 @@ App.KerberosWizardStep4Controller = App.WizardStep7Controller.extend(App.AddSecu
    * @returns {App.ServiceConfigProperty[]}
    */
   prepareConfigProperties: function(configs) {
+    console.log("call prepare");
     var self = this;
     var storedServiceConfigs = this.get('wizardController').getDBProperty('serviceConfigProperties');
     var installedServiceNames = ['Cluster'].concat(App.Service.find().mapProperty('serviceName'));
     var adminProps = [];
     var configProperties = configs.slice(0);
     var siteProperties = App.config.get('preDefinedSiteProperties');
-    if (this.get('wizardController.name') == 'addServiceController') {
+    // override stored values
+    App.config.mergeStoredValue(configProperties, this.get('wizardController').loadCachedStepConfigValues(this));
+
+    // show admin properties in add service wizard
+    if (this.get('isWithinAddService')) {
       installedServiceNames = installedServiceNames.concat(this.get('selectedServiceNames'));
       this.get('adminPropertyNames').forEach(function(item) {
         var property = storedServiceConfigs.filterProperty('filename', 'krb5-conf.xml').findProperty('name', item.name);
@@ -188,8 +196,8 @@ App.KerberosWizardStep4Controller = App.WizardStep7Controller.extend(App.AddSecu
           adminProps.push(_prop);
         }
       });
-      configProperties = adminProps.concat(configProperties);
     }
+    configProperties = adminProps.concat(configProperties);
     configProperties = configProperties.filter(function(item) {
       return installedServiceNames.contains(item.get('serviceName'));
     });

+ 2 - 0
ambari-web/app/routes/add_kerberos_routes.js

@@ -210,6 +210,7 @@ module.exports = App.WizardRoute.extend({
     next: function (router) {
       var kerberosWizardController = router.get('kerberosWizardController');
       kerberosWizardController.setDBProperty('kerberosDescriptorConfigs', null);
+      kerberosWizardController.clearCachedStepConfigValues(router.get('kerberosWizardStep4Controller'));
       router.transitionTo('step4');
     }
   }),
@@ -244,6 +245,7 @@ module.exports = App.WizardRoute.extend({
       var kerberosWizardController = router.get('kerberosWizardController');
       var step5Controller = router.get('kerberosWizardStep5Controller');
       var kerberosDescriptor = kerberosWizardController.get('kerberosDescriptorConfigs');
+      kerberosWizardController.cacheStepConfigValues(router.get('kerberosWizardStep4Controller'));
       step5Controller.postKerberosDescriptor(kerberosDescriptor).always(function (data, result, request) {
         if (result === 'error' && data.status === 409) {
           step5Controller.putKerberosDescriptor(kerberosDescriptor);

+ 2 - 0
ambari-web/app/routes/add_service_routes.js

@@ -242,6 +242,7 @@ module.exports = App.WizardRoute.extend({
       addServiceController.saveServiceConfigProperties(wizardStep7Controller);
       addServiceController.saveServiceConfigGroups(wizardStep7Controller, true);
       if (App.get('isKerberosEnabled')) {
+        addServiceController.clearCachedStepConfigValues(router.get('kerberosWizardStep4Controller'));
         router.transitionTo('step5');
         return;
       }
@@ -288,6 +289,7 @@ module.exports = App.WizardRoute.extend({
         } else {
           router.get('kerberosWizardStep2Controller').createKerberosAdminSession(router.get('kerberosWizardStep4Controller.stepConfigs')[0].get('configs'));
         }
+        router.get('addServiceController').cacheStepConfigValues(router.get('kerberosWizardStep4Controller'));
       }
       router.transitionTo('step6');
     }

+ 17 - 0
ambari-web/app/utils/config.js

@@ -1412,6 +1412,23 @@ App.config = Em.Object.create({
     return newOverride;
   },
 
+
+  /**
+   * Merge values in "stored" to "base" if name matches, it's a value only merge.
+   * @param base {Array} Em.Object
+   * @param stored {Array} Object
+   */
+  mergeStoredValue: function(base, stored) {
+    if (stored) {
+      base.forEach(function (p) {
+        var sp = stored.findProperty("name", p.name);
+        if (sp) {
+          p.set("value", sp.value);
+        }
+      });
+    }
+  },
+
   /**
    * Update config property value based on its current value and list of zookeeper server hosts.
    * Used to prevent sort order issues.

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

@@ -58,6 +58,9 @@ describe('App.KerberosWizardStep4Controller', function() {
             return Em.A([
               Em.Object.create({ name: 'realm', value: 'realm_value' })
             ]);
+          },
+          loadCachedStepConfigValues: function() {
+            return null;
           }
         }
       });
@@ -185,6 +188,9 @@ describe('App.KerberosWizardStep4Controller', function() {
                 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' })
               ]);
+            },
+            loadCachedStepConfigValues : function() {
+              return null;
             }
           })
         });