You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by rl...@apache.org on 2015/06/01 01:14:20 UTC

ambari git commit: AMBARI-11247. Add Service Wizard requests KDC information when cluster is configured for Manual Kerberos (rlevas)

Repository: ambari
Updated Branches:
  refs/heads/trunk c7ed673bb -> 643a72615


AMBARI-11247. Add Service Wizard requests KDC information when cluster is configured for Manual Kerberos (rlevas)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/643a7261
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/643a7261
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/643a7261

Branch: refs/heads/trunk
Commit: 643a7261530ca32fa251f0314cad17c005383c9c
Parents: c7ed673
Author: Robert Levas <rl...@hortonworks.com>
Authored: Sun May 31 19:14:14 2015 -0400
Committer: Robert Levas <rl...@hortonworks.com>
Committed: Sun May 31 19:14:14 2015 -0400

----------------------------------------------------------------------
 .../app/controllers/main/admin/kerberos.js      | 15 ++--
 .../main/admin/kerberos/step4_controller.js     |  7 ++
 .../app/controllers/wizard/step8_controller.js  | 24 +++---
 .../configs/stack_config_properties_mapper.js   |  1 +
 .../mixins/common/configs/enhanced_configs.js   | 14 ++--
 .../app/models/configs/stack_config_property.js |  3 +-
 ambari-web/app/routes/add_service_routes.js     |  6 +-
 ambari-web/app/styles/application.less          |  4 +
 ambari-web/app/templates/wizard/step8.hbs       |  1 +
 ambari-web/app/utils/ajax/ajax.js               |  2 +-
 .../admin/kerberos/step4_controller_test.js     | 12 ++-
 .../controllers/main/admin/kerberos_test.js     | 82 ++++++++++++++++++++
 .../test/controllers/wizard/step8_test.js       | 61 +++++++++------
 13 files changed, 179 insertions(+), 53 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/643a7261/ambari-web/app/controllers/main/admin/kerberos.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/kerberos.js b/ambari-web/app/controllers/main/admin/kerberos.js
index bb5db84..a4ca131 100644
--- a/ambari-web/app/controllers/main/admin/kerberos.js
+++ b/ambari-web/app/controllers/main/admin/kerberos.js
@@ -261,7 +261,9 @@ App.MainAdminKerberosController = App.KerberosWizardStep4Controller.extend({
         sender: this,
         success: 'getSecurityStatusSuccessCallback',
         error: 'errorCallback'
-      }).always(function() {
+      })
+      .always(this.getSecurityType.bind(this))
+      .always(function() {
         // check for kerberos descriptor artifact
         if (self.get('securityEnabled')) {
           self.loadClusterDescriptorConfigs().then(function() {
@@ -376,7 +378,7 @@ App.MainAdminKerberosController = App.KerberosWizardStep4Controller.extend({
 
   getSecurityType: function (callback) {
     if (this.get('securityEnabled')) {
-      App.ajax.send({
+      return App.ajax.send({
         name: 'admin.security.cluster_configs.kerberos',
         sender: this,
         data: {
@@ -384,15 +386,18 @@ App.MainAdminKerberosController = App.KerberosWizardStep4Controller.extend({
           additionalCallback: callback
         },
         success: 'getSecurityTypeSuccess'
-      })
+      });
     } else if (Em.typeOf(callback)=== 'function') {
       callback();
+    } else {
+      return $.Deferred().resolve().promise;
     }
   },
 
   getSecurityTypeSuccess: function (data, opt, params) {
-    this.set('kdc_type', data.items && Em.get(data.items[0], 'properties.kdc_type') ? Em.get(data.items[0], 'properties.kdc_type') : 'none' );
-
+    var kdcType = data.items && data.items[0] &&
+      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();
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/643a7261/ambari-web/app/controllers/main/admin/kerberos/step4_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/kerberos/step4_controller.js b/ambari-web/app/controllers/main/admin/kerberos/step4_controller.js
index a48baaf..74fc4ac 100644
--- a/ambari-web/app/controllers/main/admin/kerberos/step4_controller.js
+++ b/ambari-web/app/controllers/main/admin/kerberos/step4_controller.js
@@ -127,6 +127,7 @@ App.KerberosWizardStep4Controller = App.WizardStep7Controller.extend(App.AddSecu
    * Set property value observer.
    * Set realm property with value from previous configuration step.
    * Set appropriate category for all configs.
+   * Hide KDC related credentials properties if kerberos was manually enabled.
    *
    * @param {App.ServiceConfigProperty[]} configs
    * @returns {App.ServiceConfigProperty[]}
@@ -144,6 +145,12 @@ App.KerberosWizardStep4Controller = App.WizardStep7Controller.extend(App.AddSecu
         var property = storedServiceConfigs.filterProperty('filename', 'krb5-conf.xml').findProperty('name', item.name);
         if (!!property) {
           var _prop = App.ServiceConfigProperty.create($.extend({}, property, { name: item.name, value: '', recommendedValue: '', serviceName: 'Cluster', displayName: item.displayName}));
+          if (App.router.get('mainAdminKerberosController.isManualKerberos')) {
+            _prop.setProperties({
+              isRequired: false,
+              isVisible: false
+            });
+          }
           _prop.validate();
           adminProps.push(_prop);
         }

http://git-wip-us.apache.org/repos/asf/ambari/blob/643a7261/ambari-web/app/controllers/wizard/step8_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/wizard/step8_controller.js b/ambari-web/app/controllers/wizard/step8_controller.js
index e4090fc..bf3b91a 100644
--- a/ambari-web/app/controllers/wizard/step8_controller.js
+++ b/ambari-web/app/controllers/wizard/step8_controller.js
@@ -135,12 +135,6 @@ App.WizardStep8Controller = Em.Controller.extend(App.AddSecurityConfigs, App.wiz
     return App.router.get('mainAdminKerberosController.securityEnabled');
   }.property('App.router.mainAdminKerberosController.securityEnabled'),
 
-  getSecurityType: function () {
-    if (this.get('securityEnabled')) {
-      App.router.mainAdminKerberosController.getSecurityType();
-    }
-  },
-
   /**
    * Selected config group
    * @type {Object}
@@ -235,7 +229,6 @@ App.WizardStep8Controller = Em.Controller.extend(App.AddSecurityConfigs, App.wiz
     this.loadServices();
     this.set('isSubmitDisabled', false);
     this.set('isBackBtnDisabled', false);
-    this.getSecurityType();
   },
 
   /**
@@ -737,7 +730,7 @@ App.WizardStep8Controller = Em.Controller.extend(App.AddSecurityConfigs, App.wiz
    */
   submit: function () {
     if (!this.get('isSubmitDisabled')) {
-      if (this.get('content.controllerName') != 'installerController' && this.get('securityEnabled')) {
+      if (this.get('content.controllerName') != 'installerController' && this.get('securityEnabled') && !this.get('isManualKerberos')) {
         App.get('router.mainAdminKerberosController').getKDCSessionState(this.submitProceed.bind(this));
       } else {
         this.submitProceed();
@@ -953,9 +946,9 @@ App.WizardStep8Controller = Em.Controller.extend(App.AddSecurityConfigs, App.wiz
    * updates kerberosDescriptorConfigs
    * @method updateKerberosDescriptor
    */
-  updateKerberosDescriptor: function() {
+  updateKerberosDescriptor: function(instant) {
     var kerberosDescriptor = App.db.get('KerberosWizard', 'kerberosDescriptorConfigs');
-    this.addRequestToAjaxQueue({
+    var ajaxOpts = {
       name: 'admin.kerberos.cluster.artifact.update',
       data: {
         artifactName: 'kerberos_descriptor',
@@ -963,7 +956,13 @@ App.WizardStep8Controller = Em.Controller.extend(App.AddSecurityConfigs, App.wiz
           artifact_data: kerberosDescriptor
         }
       }
-    });
+    };
+    if (instant) {
+      ajaxOpts.sender = this;
+      App.ajax.send(ajaxOpts);
+    } else {
+      this.addRequestToAjaxQueue(ajaxOpts);
+    }
   },
   /**
    * Start deploy process
@@ -974,7 +973,8 @@ App.WizardStep8Controller = Em.Controller.extend(App.AddSecurityConfigs, App.wiz
     this.createSelectedServices();
     if (this.get('content.controllerName') !== 'addHostController') {
       if (this.get('content.controllerName') === 'addServiceController') {
-        if (this.get('securityEnabled')) {
+        // for manually enabled Kerberos descriptor was updated on transition to this step
+        if (this.get('securityEnabled') && !this.get('isManualKerberos')) {
           this.updateKerberosDescriptor();
         }
       }

http://git-wip-us.apache.org/repos/asf/ambari/blob/643a7261/ambari-web/app/mappers/configs/stack_config_properties_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/configs/stack_config_properties_mapper.js b/ambari-web/app/mappers/configs/stack_config_properties_mapper.js
index 1f269c3..752cebb 100644
--- a/ambari-web/app/mappers/configs/stack_config_properties_mapper.js
+++ b/ambari-web/app/mappers/configs/stack_config_properties_mapper.js
@@ -32,6 +32,7 @@ App.stackConfigPropertiesMapper = App.QuickDataMapper.create({
     stack_name: 'StackConfigurations.stack_name',
     stack_version: 'StackConfigurations.stack_version',
     property_depended_by: 'StackConfigurations.property_depended_by',
+    property_depends_on: 'StackConfigurations.property_depends_on',
     value_attributes: 'StackConfigurations.property_value_attributes',
     is_final: 'default_is_final',
     recommended_is_final: 'default_is_final',

http://git-wip-us.apache.org/repos/asf/ambari/blob/643a7261/ambari-web/app/mixins/common/configs/enhanced_configs.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/common/configs/enhanced_configs.js b/ambari-web/app/mixins/common/configs/enhanced_configs.js
index 5c9dde1..c25bb54 100644
--- a/ambari-web/app/mixins/common/configs/enhanced_configs.js
+++ b/ambari-web/app/mixins/common/configs/enhanced_configs.js
@@ -181,7 +181,8 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
   setDependentServices: function(serviceName) {
     App.StackConfigProperty.find().forEach(function(stackProperty) {
       if (stackProperty.get('serviceName') === serviceName && stackProperty.get('propertyDependedBy.length') > 0) {
-        this._setDependentServicesAndFileNames(stackProperty);
+        this._setDependentServicesAndFileNames(stackProperty, 'propertyDependedBy');
+        this._setDependentServicesAndFileNames(stackProperty, 'propertyDependsOn');
       }
     }, this);
   },
@@ -197,7 +198,7 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
       return this.get('stepConfigs').findProperty('serviceName', serviceName).get('selectedConfigGroup');
     } else {
       if (this.get('content.serviceName') === serviceName) {
-        return this.get('selectedConfigGroup')
+        return this.get('selectedConfigGroup');
       } else {
         if (this.get('selectedConfigGroup.isDefault')) {
           return this.get('dependentConfigGroups').filterProperty('service.serviceName', serviceName).findProperty('isDefault');
@@ -376,9 +377,10 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
    * @param {App.StackConfigProperty} stackProperty
    * @private
    */
-  _setDependentServicesAndFileNames: function(stackProperty) {
-    if (stackProperty.get('propertyDependedBy.length') > 0) {
-      stackProperty.get('propertyDependedBy').forEach(function(dependent) {
+  _setDependentServicesAndFileNames: function(stackProperty, key) {
+    key = key || 'propertyDependedBy';
+    if (stackProperty.get(key + '.length') > 0) {
+      stackProperty.get(key).forEach(function(dependent) {
         var tag = App.config.getConfigTagFromFileName(dependent.type);
         /** setting dependent fileNames (without '.xml') **/
         if (!this.get('dependentFileNames').contains(tag)) {
@@ -390,7 +392,7 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
           if (dependentProperty.get('serviceName') && !this.get('dependentServiceNames').contains(dependentProperty.get('serviceName')) && dependentProperty.get('serviceName') !== this.get('content.serviceName')) {
             this.get('dependentServiceNames').push(dependentProperty.get('serviceName'));
           }
-          this._setDependentServicesAndFileNames(dependentProperty);
+          this._setDependentServicesAndFileNames(dependentProperty, key);
         }
       }, this);
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/643a7261/ambari-web/app/models/configs/stack_config_property.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/configs/stack_config_property.js b/ambari-web/app/models/configs/stack_config_property.js
index 15dcfc2..4f63b4b 100644
--- a/ambari-web/app/models/configs/stack_config_property.js
+++ b/ambari-web/app/models/configs/stack_config_property.js
@@ -113,6 +113,8 @@ App.StackConfigProperty = DS.Model.extend({
    */
   propertyDependedBy: DS.attr('array', {defaultValue: []}),
 
+  propertyDependsOn: DS.attr('array', {defaultValue: []}),
+
   /**
    * info for displaying property
    * example:
@@ -180,4 +182,3 @@ App.StackConfigProperty = DS.Model.extend({
 
 
 App.StackConfigProperty.FIXTURES = [];
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/643a7261/ambari-web/app/routes/add_service_routes.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/routes/add_service_routes.js b/ambari-web/app/routes/add_service_routes.js
index 3db7879..dcc1dae 100644
--- a/ambari-web/app/routes/add_service_routes.js
+++ b/ambari-web/app/routes/add_service_routes.js
@@ -267,7 +267,11 @@ module.exports = App.WizardRoute.extend({
     },
     next: function (router) {
       if (router.get('mainAdminKerberosController.securityEnabled')) {
-        router.get('kerberosWizardStep2Controller').createKerberosAdminSession(router.get('kerberosWizardStep4Controller.stepConfigs')[0].get('configs'));
+        if (router.get('mainAdminKerberosController.isManualKerberos')) {
+          router.get('wizardStep8Controller').updateKerberosDescriptor(true);
+        } else {
+          router.get('kerberosWizardStep2Controller').createKerberosAdminSession(router.get('kerberosWizardStep4Controller.stepConfigs')[0].get('configs'));
+        }
       }
       router.transitionTo('step6');
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/643a7261/ambari-web/app/styles/application.less
----------------------------------------------------------------------
diff --git a/ambari-web/app/styles/application.less b/ambari-web/app/styles/application.less
index 710a363..4de2aae 100644
--- a/ambari-web/app/styles/application.less
+++ b/ambari-web/app/styles/application.less
@@ -5411,6 +5411,10 @@ input[type="radio"].align-checkbox, input[type="checkbox"].align-checkbox {
   margin-left: @space-l;
 }
 
+.mrm {
+  margin-right: @space-m;
+}
+
 #cleanerContainer {
   z-index: 2;
   position: absolute;

http://git-wip-us.apache.org/repos/asf/ambari/blob/643a7261/ambari-web/app/templates/wizard/step8.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/wizard/step8.hbs b/ambari-web/app/templates/wizard/step8.hbs
index ec4bac7..dc2357c 100644
--- a/ambari-web/app/templates/wizard/step8.hbs
+++ b/ambari-web/app/templates/wizard/step8.hbs
@@ -72,5 +72,6 @@
     <a class="btn btn-success pull-right"
        id="spinner" {{bindAttr disabled="controller.isSubmitDisabled"}} {{action submit target="controller"}}>{{t common.deploy}} &rarr;</a>
     <a class="btn btn-info pull-right" {{action printReview target="view"}}>{{t common.print}}</a>
+    <a {{bindAttr class=":btn :btn-primary :pull-right :mrm controller.isManualKerberos::hide"}} {{action downloadCSV target="controller"}}>{{t admin.kerberos.wizard.step5.downloadCSV}}</a>
   </div>
 </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/643a7261/ambari-web/app/utils/ajax/ajax.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/ajax/ajax.js b/ambari-web/app/utils/ajax/ajax.js
index 69ac15f..28422aa 100644
--- a/ambari-web/app/utils/ajax/ajax.js
+++ b/ambari-web/app/utils/ajax/ajax.js
@@ -1308,7 +1308,7 @@ var urls = {
     }
   },
   'admin.security.cluster_configs.kerberos': {
-    'real': '/clusters/{clusterName}/configurations?type=kerberos-env&fields=properties/*',
+    'real': '/clusters/{clusterName}/configurations/service_config_versions?service_name=KERBEROS&is_current=true',
     'mock': '',
     'format': function () {
       return {

http://git-wip-us.apache.org/repos/asf/ambari/blob/643a7261/ambari-web/test/controllers/main/admin/kerberos/step4_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/admin/kerberos/step4_controller_test.js b/ambari-web/test/controllers/main/admin/kerberos/step4_controller_test.js
index 780bc00..4a95297 100644
--- a/ambari-web/test/controllers/main/admin/kerberos/step4_controller_test.js
+++ b/ambari-web/test/controllers/main/admin/kerberos/step4_controller_test.js
@@ -70,12 +70,14 @@ describe('App.KerberosWizardStep4Controller', function() {
           displayType: 'multiLine'
         }
       ]);
+      sinon.stub(App.router, 'get').withArgs('mainAdminKerberosController.isManualKerberos').returns(false);
       this.result = controller.prepareConfigProperties(properties);
     });
 
     after(function() {
       App.Service.find.restore();
       App.config.get.restore();
+      App.router.get.restore();
     });
 
     var properties = Em.A([
@@ -172,7 +174,7 @@ describe('App.KerberosWizardStep4Controller', function() {
             serviceName: 'KERBEROS'
           })
         ]);
-        var controller = App.KerberosWizardStep4Controller.create({
+        this.controller = App.KerberosWizardStep4Controller.create({
           selectedServiceNames: ['FALCON', 'MAPREDUCE2'],
           installedServiceNames: ['HDFS', 'KERBEROS'],
           wizardController: Em.Object.create({
@@ -186,13 +188,17 @@ describe('App.KerberosWizardStep4Controller', function() {
             }
           })
         });
-        controller.setStepConfigs(properties);
-        this.result = controller.get('stepConfigs')[0].get('configs').concat(controller.get('stepConfigs')[1].get('configs'));
+        sinon.stub(App.router, 'get').withArgs('mainAdminKerberosController.isManualKerberos').returns(false);
+        this.controller.setStepConfigs(properties);
+        this.result = this.controller.get('stepConfigs')[0].get('configs').concat(this.controller.get('stepConfigs')[1].get('configs'));
       });
 
       after(function() {
+        this.controller.destroy();
+        this.controller = null;
         App.StackService.find.restore();
         App.Service.find.restore();
+        App.router.get.restore();
       });
 
       var properties = Em.A([

http://git-wip-us.apache.org/repos/asf/ambari/blob/643a7261/ambari-web/test/controllers/main/admin/kerberos_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/admin/kerberos_test.js b/ambari-web/test/controllers/main/admin/kerberos_test.js
index 30bddb7..b2f1825 100644
--- a/ambari-web/test/controllers/main/admin/kerberos_test.js
+++ b/ambari-web/test/controllers/main/admin/kerberos_test.js
@@ -178,4 +178,86 @@ describe('App.MainAdminKerberosController', function() {
       expect(App.ajax.send.args[0][0].data.withAutoRestart).to.be.false;
     });
   });
+
+  describe('#getSecurityTypeSuccess', function() {
+    var tests = [
+      {
+        data: { },
+        e: 'none'
+      },
+      {
+        data: {
+          items: []
+        },
+        e: 'none'
+      },
+      {
+        data: {
+          items: [
+            {
+              configurations: []
+            }
+          ]
+        },
+        e: 'none'
+      },
+      {
+        data: {
+          items: [
+            {
+              configurations: [
+                {
+                  type: 'krb-conf',
+                  properties: {
+                    'kdc_type': 'mit'
+                  }
+                }
+              ]
+            }
+          ]
+        },
+        e: 'none'
+      },
+      {
+        data: {
+          items: [
+            {
+              configurations: [
+                {
+                  type: 'kerberos-env',
+                  properties: {
+                    'kdc_type': 'mit'
+                  }
+                }
+              ]
+            }
+          ]
+        },
+        e: 'mit'
+      },
+      {
+        data: {
+          items: [
+            {
+              configurations: [
+                {
+                  type: 'kerberos-env',
+                  properties: {
+                    'kdc_type': 'none'
+                  }
+                }
+              ]
+            }
+          ]
+        },
+        e: 'none'
+      }
+    ].forEach(function(test) {
+      it('json is ' + JSON.stringify(test.data) + ' kdc type should be ' + test.e, function() {
+        controller.set('isManualKerberos', undefined);
+        controller.getSecurityTypeSuccess(test.data, {}, {});
+        expect(controller.get('kdc_type')).to.eql(test.e);
+      });
+    });
+  });
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/643a7261/ambari-web/test/controllers/wizard/step8_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/wizard/step8_test.js b/ambari-web/test/controllers/wizard/step8_test.js
index d65c145..209b8b8 100644
--- a/ambari-web/test/controllers/wizard/step8_test.js
+++ b/ambari-web/test/controllers/wizard/step8_test.js
@@ -271,7 +271,7 @@ describe('App.WizardStep8Controller', function () {
       installerStep8Controller.set('configs', Em.A([
         Em.Object.create({
           name: 'fs_glusterfs_default_name',
-          filename: 'core-site.xml', 
+          filename: 'core-site.xml',
           value: 'value',
           overrides: Em.A([
             Em.Object.create({
@@ -282,7 +282,7 @@ describe('App.WizardStep8Controller', function () {
         }),
         Em.Object.create({
           name: 'fs.defaultFS',
-          filename: 'core-site.xml', 
+          filename: 'core-site.xml',
           value: 'value',
           overrides: Em.A([
             Em.Object.create({
@@ -293,7 +293,7 @@ describe('App.WizardStep8Controller', function () {
         }),
         Em.Object.create({
           name: 'glusterfs_defaultFS_name',
-          filename: 'core-site.xml', 
+          filename: 'core-site.xml',
           value: 'value',
           overrides: Em.A([
             Em.Object.create({
@@ -483,7 +483,7 @@ describe('App.WizardStep8Controller', function () {
       var selectedServices = services.filterProperty('isSelected');
       var slaveComponentHosts = Em.A([
         Em.Object.create({
-          componentName: 'CLIENT', 
+          componentName: 'CLIENT',
           hostName: 'h1',
           hosts: Em.A([
             Em.Object.create({hostName: 'h1', isInstalled: true}),
@@ -538,12 +538,12 @@ describe('App.WizardStep8Controller', function () {
       installerStep8Controller.set('content', Em.Object.create({
         hosts: Em.Object.create({
           h1: Em.Object.create({
-            hostName: 'h1', 
+            hostName: 'h1',
             isInstalled: true,
             hostComponents: Em.A([Em.Object.create({HostRoles: Em.Object.create({component_name: "h1"})})])
           }),
           h2: Em.Object.create({
-            hostName: 'h2', 
+            hostName: 'h2',
             isInstalled: true,
             hostComponents: Em.A([Em.Object.create({HostRoles: Em.Object.create({component_name: "h2"})})])
           })
@@ -561,13 +561,13 @@ describe('App.WizardStep8Controller', function () {
         masterComponentHosts: Em.A([
           Em.Object.create({
             componentName: 'CLIENT',
-            component: 'HBASE_MASTER', 
+            component: 'HBASE_MASTER',
             hostName: 'h1'
           })
         ]),
         slaveComponentHosts: Em.A([
           Em.Object.create({
-            componentName: 'CLIENT', 
+            componentName: 'CLIENT',
             hostName: 'h1',
             hosts: Em.A([
               Em.Object.create({hostName: 'h1', isInstalled: true}),
@@ -575,12 +575,13 @@ describe('App.WizardStep8Controller', function () {
             ])
           }),
           Em.Object.create({
-            componentName: 'CLIENT1', 
+            componentName: 'CLIENT1',
             hostName: 'h1',
             hosts: Em.A([
               Em.Object.create({hostName: 'h1', isInstalled: true}),
               Em.Object.create({hostName: 'h2', isInstalled: false})
             ])
+
           })
         ]),
         clients: Em.A([
@@ -597,12 +598,12 @@ describe('App.WizardStep8Controller', function () {
         ]),
         hosts: Em.Object.create({
           h1: Em.Object.create({
-            hostName: 'h1', 
+            hostName: 'h1',
             isInstalled: true,
             hostComponents: Em.A([Em.Object.create({})])
           }),
           h2: Em.Object.create({
-            hostName: 'h2', 
+            hostName: 'h2',
             isInstalled: false,
             hostComponents: Em.A([Em.Object.create({})])
           })
@@ -622,13 +623,13 @@ describe('App.WizardStep8Controller', function () {
         masterComponentHosts: Em.A([
           Em.Object.create({
             componentName: 'CLIENT',
-            component: 'HBASE_MASTER', 
+            component: 'HBASE_MASTER',
             hostName: 'h1'
           })
         ]),
         slaveComponentHosts: Em.A([
           Em.Object.create({
-            componentName: 'CLIENT', 
+            componentName: 'CLIENT',
             hostName: 'h1',
             hosts: Em.A([
               Em.Object.create({hostName: 'h1', isInstalled: true}),
@@ -650,12 +651,12 @@ describe('App.WizardStep8Controller', function () {
         ]),
         hosts: Em.Object.create({
           h1: Em.Object.create({
-            hostName: 'h1', 
+            hostName: 'h1',
             isInstalled: true,
             hostComponents: Em.A([Em.Object.create({})])
           }),
           h2: Em.Object.create({
-            hostName: 'h2', 
+            hostName: 'h2',
             isInstalled: false,
             hostComponents: Em.A([Em.Object.create({})])
           })
@@ -699,7 +700,7 @@ describe('App.WizardStep8Controller', function () {
       installerStep8Controller.set('content', Em.Object.create({
         slaveComponentHosts:Em.A([
           Em.Object.create({
-            componentName: 'HBASE_MASTER', 
+            componentName: 'HBASE_MASTER',
             hostName: 'h1',
             hosts: [
               {hostName: 'h1'},
@@ -718,8 +719,8 @@ describe('App.WizardStep8Controller', function () {
         return Em.A([
           Em.Object.create({isSelected: false, hostName: 'h1'}),
           Em.Object.create({
-            isSelected: true, 
-            hostName: 'h2', 
+            isSelected: true,
+            hostName: 'h2',
             operatingSystems: Em.A([Em.Object.create({
               name:'windows',
               isSelected: true,
@@ -1408,19 +1409,31 @@ describe('App.WizardStep8Controller', function () {
     Em.A([
         {
           controllerName: 'addServiceController',
-          securityEnabled: true
+          securityEnabled: true,
+          isManualKerberos: true
         },
         {
           controllerName: 'addServiceController',
-          securityEnabled: false
+          securityEnabled: true,
+          isManualKerberos: false
+        },
+        {
+          controllerName: 'addServiceController',
+          securityEnabled: false,
+          isManualKerberos: false
         }
       ]).forEach(function (test) {
-        it(test.controllerName + ' ' + test.securityEnabled.toString(), function () {
-          installerStep8Controller.reopen({isSubmitDisabled: false, securityEnabled: test.securityEnabled, content: {controllerName: test.controllerName}});
+        it(test.controllerName + ' Kerberos enabled - ' + test.securityEnabled.toString() + ' manual kerberos - ' + test.isManualKerberos, function () {
+          installerStep8Controller.reopen({isSubmitDisabled: false, securityEnabled: test.securityEnabled, isManualKerberos: test.isManualKerberos, content: {controllerName: test.controllerName}});
           installerStep8Controller.submit();
           if (test.securityEnabled) {
-            expect(App.get('router.mainAdminKerberosController').getKDCSessionState.called).to.equal(true);
-            expect(installerStep8Controller.submitProceed.called).to.equal(false);
+            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);