Kaynağa Gözat

AMBARI-13831. After enabling kerberos with option 'Manage Kerberos principals and keytabs manually', adding new component buttons will not respond (akovalenko)

Aleksandr Kovalenko 10 yıl önce
ebeveyn
işleme
7e1cb684d9

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

@@ -391,16 +391,23 @@ App.MainAdminKerberosController = App.KerberosWizardStep4Controller.extend({
   },
 
   getKDCSessionState: function (callback, kdcCancelHandler) {
+    var self = this;
     if (this.get('securityEnabled') || App.get('isKerberosEnabled')) {
-      App.ajax.send({
-        name: 'kerberos.session.state',
-        sender: this,
-        data: {
-          callback: callback
-        },
-        success: 'checkState',
-        kdcCancelHandler: kdcCancelHandler
-      })
+      this.getSecurityType(function () {
+        if (!self.get('isManualKerberos')) {
+          App.ajax.send({
+            name: 'kerberos.session.state',
+            sender: self,
+            data: {
+              callback: callback
+            },
+            success: 'checkState',
+            kdcCancelHandler: kdcCancelHandler
+          })
+        } else {
+          callback();
+        }
+      });
     } else {
       callback();
     }
@@ -408,15 +415,22 @@ App.MainAdminKerberosController = App.KerberosWizardStep4Controller.extend({
 
   getSecurityType: function (callback) {
     if (this.get('securityEnabled') || App.get('isKerberosEnabled')) {
-      return App.ajax.send({
-        name: 'admin.security.cluster_configs.kerberos',
-        sender: this,
-        data: {
-          clusterName: App.get('clusterName'),
-          additionalCallback: callback
-        },
-        success: 'getSecurityTypeSuccess'
-      });
+      if (!this.get('kdc_type')) {
+        return App.ajax.send({
+          name: 'admin.security.cluster_configs.kerberos',
+          sender: this,
+          data: {
+            clusterName: App.get('clusterName'),
+            additionalCallback: callback
+          },
+          success: 'getSecurityTypeSuccess'
+        });
+      } else {
+        if (Em.typeOf(callback) === 'function') {
+          callback();
+        }
+        return $.Deferred().resolve().promise;
+      }
     } else if (Em.typeOf(callback) === 'function') {
       callback();
     } else {
@@ -426,7 +440,7 @@ App.MainAdminKerberosController = App.KerberosWizardStep4Controller.extend({
 
   getSecurityTypeSuccess: function (data, opt, params) {
     var kdcType = data.items && data.items[0] &&
-      Em.getWithDefault(Em.getWithDefault(data.items[0], 'configurations', {}).findProperty('type', 'kerberos-env') || {}, 'properties.kdc_type', 'none') || 'none';
+        Em.getWithDefault(Em.getWithDefault(data.items[0], 'configurations', []).findProperty('type', 'kerberos-env') || {}, 'properties.kdc_type', 'none') || 'none';
     this.set('kdc_type', kdcType);
     if (Em.typeOf(params.additionalCallback) === 'function') {
       params.additionalCallback();

+ 4 - 2
ambari-web/app/controllers/wizard/step8_controller.js

@@ -613,7 +613,7 @@ App.WizardStep8Controller = Em.Controller.extend(App.AddSecurityConfigs, App.wiz
   checkKDCSession: function() {
     var self = this;
     var wizardController = App.router.get(this.get('content.controllerName'));
-    if (this.get('content.controllerName') != 'installerController' && App.get('isKerberosEnabled') && !this.get('isManualKerberos')) {
+    if (this.get('content.controllerName') != 'installerController') {
       App.get('router.mainAdminKerberosController').getKDCSessionState(this.submitProceed.bind(this), function () {
         self.set('isSubmitDisabled', false);
         self.set('isBackBtnDisabled', false);
@@ -1577,7 +1577,9 @@ App.WizardStep8Controller = Em.Controller.extend(App.AddSecurityConfigs, App.wiz
     var configs = this.get('configs').filterProperty('filename', site + '.xml');
     var attributes = App.router.get('mainServiceInfoConfigsController').getConfigAttributes(configs);
     configs.forEach(function (_configProperty) {
-        var heapsizeExceptions = ['hadoop_heapsize', 'yarn_heapsize', 'nodemanager_heapsize', 'resourcemanager_heapsize', 'apptimelineserver_heapsize', 'jobhistory_heapsize', 'nfsgateway_heapsize', 'accumulo_master_heapsize', 'accumulo_tserver_heapsize', 'accumulo_monitor_heapsize', 'accumulo_gc_heapsize', 'accumulo_other_heapsize', 'hbase_master_heapsize', 'hbase_regionserver_heapsize', 'metrics_collector_heapsize'];
+      var heapsizeExceptions = ['hadoop_heapsize', 'yarn_heapsize', 'nodemanager_heapsize', 'resourcemanager_heapsize', 'apptimelineserver_heapsize',
+        'jobhistory_heapsize', 'nfsgateway_heapsize', 'accumulo_master_heapsize', 'accumulo_tserver_heapsize', 'accumulo_monitor_heapsize', 'accumulo_gc_heapsize',
+        'accumulo_other_heapsize', 'hbase_master_heapsize', 'hbase_regionserver_heapsize', 'metrics_collector_heapsize'];
         // do not pass any globals whose name ends with _host or _hosts
         if (_configProperty.isRequiredByAgent !== false) {
           // append "m" to JVM memory options except for heapsizeExtensions

+ 113 - 1
ambari-web/test/controllers/main/admin/kerberos_test.js

@@ -179,8 +179,120 @@ describe('App.MainAdminKerberosController', function() {
     });
   });
 
+  describe('#getKDCSessionState()', function () {
+
+    var mock = {callback: Em.K};
+
+    beforeEach(function () {
+      sinon.stub(App.ajax, 'send', Em.K);
+      sinon.spy(mock, 'callback');
+      sinon.stub(controller, 'getSecurityType', function (c) {
+        c();
+      });
+    });
+
+    afterEach(function () {
+      App.ajax.send.restore();
+      mock.callback.restore();
+      controller.getSecurityType.restore();
+    });
+
+    [
+      {
+        m: 'Skip request, as securityEnabled and isKerberosEnabled are false',
+        securityEnabled: false,
+        isKerberosEnabled: false,
+        kdc_type: 'not_none',
+        result: false
+      },
+      {
+        m: 'Skip request, as isManualKerberos is true',
+        securityEnabled: true,
+        isKerberosEnabled: true,
+        kdc_type: 'none',
+        result: false
+      },
+      {
+        m: 'Make request',
+        securityEnabled: true,
+        isKerberosEnabled: true,
+        kdc_type: 'not_none',
+        result: true
+      }
+    ].forEach(function (test) {
+          it(test.m, function () {
+            sinon.stub(App, 'get').returns(test.isKerberosEnabled);
+            controller.set('securityEnabled', test.securityEnabled);
+            controller.set('kdc_type', test.kdc_type);
+            controller.getKDCSessionState(mock.callback);
+            App.get.restore();
+            if (test.result) {
+              expect(mock.callback.calledOnce).to.be.false;
+              expect(App.ajax.send.calledOnce).to.be.true;
+            } else {
+              expect(mock.callback.calledOnce).to.be.true;
+              expect(App.ajax.send.calledOnce).to.be.false;
+            }
+          });
+        });
+  });
+
+  describe('#getSecurityType()', function () {
+
+    var mock = {callback: Em.K};
+
+    beforeEach(function () {
+      sinon.stub(App.ajax, 'send', Em.K);
+      sinon.spy(mock, 'callback');
+    });
+
+    afterEach(function () {
+      App.ajax.send.restore();
+      mock.callback.restore();
+    });
+
+    [
+      {
+        m: 'Skip request, as securityEnabled and isKerberosEnabled are false',
+        securityEnabled: false,
+        isKerberosEnabled: false,
+        kdc_type: '',
+        result: false
+      },
+      {
+        m: 'Skip request, as kdc_type exists',
+        securityEnabled: true,
+        isKerberosEnabled: true,
+        kdc_type: 'none',
+        result: false
+      },
+      {
+        m: 'Make request',
+        securityEnabled: true,
+        isKerberosEnabled: true,
+        kdc_type: '',
+        result: true
+      }
+    ].forEach(function (test) {
+          it(test.m, function () {
+            sinon.stub(App, 'get').returns(test.isKerberosEnabled);
+            controller.set('securityEnabled', test.securityEnabled);
+            controller.set('kdc_type', test.kdc_type);
+            controller.getSecurityType(mock.callback);
+            App.get.restore();
+            if (test.result) {
+              expect(mock.callback.calledOnce).to.be.false;
+              expect(App.ajax.send.calledOnce).to.be.true;
+            } else {
+              expect(mock.callback.calledOnce).to.be.true;
+              expect(App.ajax.send.calledOnce).to.be.false;
+            }
+          });
+        });
+  });
+
   describe('#getSecurityTypeSuccess', function() {
-    var tests = [
+    [
       {
         data: { },
         e: 'none'

+ 7 - 34
ambari-web/test/controllers/wizard/step8_test.js

@@ -1101,41 +1101,14 @@ describe('App.WizardStep8Controller', function () {
       App.set('isKerberosEnabled', false);
       App.get('router.mainAdminKerberosController').getKDCSessionState.restore();
     });
-    Em.A([
-        {
-          controllerName: 'addServiceController',
-          securityEnabled: true,
-          isManualKerberos: true
-        },
-        {
-          controllerName: 'addServiceController',
-          securityEnabled: true,
-          isManualKerberos: false
-        },
-        {
-          controllerName: 'addServiceController',
-          securityEnabled: false,
-          isManualKerberos: false
-        }
-      ]).forEach(function (test) {
-        it(test.controllerName + ' Kerberos enabled - ' + test.securityEnabled.toString() + ' manual kerberos - ' + test.isManualKerberos, function () {
-          App.set('isKerberosEnabled', test.securityEnabled);
-          installerStep8Controller.reopen({isSubmitDisabled: false, isManualKerberos: test.isManualKerberos, content: {controllerName: test.controllerName}});
-          installerStep8Controller.submit();
-          if (test.securityEnabled) {
-            if (test.isManualKerberos) {
-              expect(App.get('router.mainAdminKerberosController').getKDCSessionState.called).to.equal(false);
-              expect(installerStep8Controller.submitProceed.called).to.equal(true);
-            } else {
-              expect(App.get('router.mainAdminKerberosController').getKDCSessionState.called).to.equal(true);
-              expect(installerStep8Controller.submitProceed.called).to.equal(false);
-            }
-          } else {
-            expect(App.get('router.mainAdminKerberosController').getKDCSessionState.called).to.equal(false);
-            expect(installerStep8Controller.submitProceed.called).to.equal(true);
-          }
-        });
+    it('AddServiceController Kerberos enabled', function () {
+      installerStep8Controller.reopen({
+        isSubmitDisabled: false,
+        content: {controllerName: 'addServiceController'}
       });
+      installerStep8Controller.submit();
+      expect(App.get('router.mainAdminKerberosController').getKDCSessionState.called).to.equal(true);
+    });
     it('shouldn\'t do nothing if isSubmitDisabled is true', function() {
       installerStep8Controller.reopen({isSubmitDisabled: true});
       installerStep8Controller.submit();