Jelajahi Sumber

AMBARI-14155. Blueprints: Kerberos deployments cause Kerberos UI to hang

Alex Antonenko 9 tahun lalu
induk
melakukan
1de9934216

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

@@ -280,25 +280,10 @@ App.MainAdminKerberosController = App.KerberosWizardStep4Controller.extend({
         success: 'getSecurityStatusSuccessCallback',
         success: 'getSecurityStatusSuccessCallback',
         error: 'errorCallback'
         error: 'errorCallback'
       })
       })
-        .always(this.getSecurityType.bind(this))
-        .always(function () {
-          // check for kerberos descriptor artifact
-          if (self.get('securityEnabled')) {
-            self.loadClusterDescriptorConfigs().then(function () {
-              dfd.resolve();
-            }, function () {
-              // if kerberos descriptor doesn't exist in cluster artifacts get the default descriptor
-              self.loadStackDescriptorConfigs().then(function () {
-                self.set('defaultKerberosLoaded', true);
-                dfd.resolve();
-              }, function () {
-                self.set('securityEnabled', false);
-                dfd.resolve();
-              });
-            });
-          } else {
+        .always(function() {
+          self.getSecurityType(function() {
             dfd.resolve();
             dfd.resolve();
-          }
+          });
         });
         });
     }
     }
     return dfd.promise();
     return dfd.promise();
@@ -421,6 +406,12 @@ App.MainAdminKerberosController = App.KerberosWizardStep4Controller.extend({
     }
     }
   },
   },
 
 
+  /**
+   * Determines security type.
+   *
+   * @param {function} [callback] callback function to execute
+   * @returns {$.Deferred|null}
+   */
   getSecurityType: function (callback) {
   getSecurityType: function (callback) {
     if (this.get('securityEnabled') || App.get('isKerberosEnabled')) {
     if (this.get('securityEnabled') || App.get('isKerberosEnabled')) {
       if (!this.get('kdc_type')) {
       if (!this.get('kdc_type')) {

+ 17 - 2
ambari-web/app/mixins/wizard/addSecurityConfigs.js

@@ -58,11 +58,26 @@ App.AddSecurityConfigs = Em.Mixin.create({
 
 
   /**
   /**
    * Generate stack descriptor configs.
    * Generate stack descriptor configs.
+   *  - Load kerberos artifacts from stack endpoint
+   *  - Load kerberos artifacts from cluster resource and merge them with stack descriptor.
+   * When cluster descriptor is absent then stack artifacts used.
    *
    *
    * @returns {$.Deferred}
    * @returns {$.Deferred}
    */
    */
   getDescriptorConfigs: function () {
   getDescriptorConfigs: function () {
-    return this.loadDescriptorConfigs().pipe(this.createServicesStackDescriptorConfigs.bind(this));
+    var dfd = $.Deferred();
+    var self = this;
+    this.loadStackDescriptorConfigs().then(function(data) {
+      var stackArtifacts = data;
+      self.loadClusterDescriptorConfigs().then(function(clusterArtifacts) {
+        dfd.resolve(self.createServicesStackDescriptorConfigs($.extend(true, {}, stackArtifacts, clusterArtifacts)));
+      }, function() {
+        dfd.resolve(self.createServicesStackDescriptorConfigs(stackArtifacts));
+      });
+    }, function() {
+      dfd.reject();
+    });
+    return dfd.promise();
   },
   },
 
 
   /**
   /**
@@ -330,7 +345,7 @@ App.AddSecurityConfigs = Em.Mixin.create({
         }, this);
         }, this);
       } else if (Object.keys(configurations).contains(config.name) && config.filename === 'stackConfigs') {
       } else if (Object.keys(configurations).contains(config.name) && config.filename === 'stackConfigs') {
         configurations[config.name] = config.value;
         configurations[config.name] = config.value;
-        isConfigUpdated = true
+        isConfigUpdated = true;
       }
       }
     }
     }
     return isConfigUpdated;
     return isConfigUpdated;