Переглянути джерело

AMBARI-10768. Ranger Admin HA Wizard: Configure Components step. (akovalenko)

Aleksandr Kovalenko 10 роки тому
батько
коміт
e9430b16f5
31 змінених файлів з 262 додано та 481 видалено
  1. 1 1
      ambari-server/src/main/resources/common-services/RANGER/0.4.0/metainfo.xml
  2. 2 19
      ambari-web/app/controllers/main/admin/highAvailability/nameNode/step5_controller.js
  3. 0 2
      ambari-web/app/controllers/main/admin/highAvailability/nameNode/step7_controller.js
  4. 2 15
      ambari-web/app/controllers/main/admin/highAvailability/nameNode/step9_controller.js
  5. 7 12
      ambari-web/app/controllers/main/admin/highAvailability/progress_controller.js
  6. 66 2
      ambari-web/app/controllers/main/admin/highAvailability/rangerAdmin/step4_controller.js
  7. 10 0
      ambari-web/app/controllers/main/admin/highAvailability/rangerAdmin/wizard_controller.js
  8. 3 29
      ambari-web/app/controllers/main/admin/highAvailability/resourceManager/step4_controller.js
  9. 0 30
      ambari-web/app/controllers/main/admin/highAvailability/resourceManager/wizard_controller.js
  10. 3 30
      ambari-web/app/controllers/main/admin/kerberos/disable_controller.js
  11. 0 15
      ambari-web/app/controllers/main/admin/kerberos/step5_controller.js
  12. 3 15
      ambari-web/app/controllers/main/admin/kerberos/step7_controller.js
  13. 0 32
      ambari-web/app/controllers/main/admin/kerberos/wizard_controller.js
  14. 10 73
      ambari-web/app/controllers/main/service/reassign/step4_controller.js
  15. 3 17
      ambari-web/app/controllers/main/service/reassign/step6_controller.js
  16. 0 1
      ambari-web/app/controllers/main/service/reassign/step7_controller.js
  17. 30 0
      ambari-web/app/controllers/wizard.js
  18. 7 3
      ambari-web/app/messages.js
  19. 68 1
      ambari-web/app/mixins/wizard/wizardProgressPageController.js
  20. 6 0
      ambari-web/app/mixins/wizard/wizardProgressPageView.js
  21. 8 8
      ambari-web/app/routes/ra_high_availability_routes.js
  22. 1 1
      ambari-web/app/templates/common/progress.hbs
  23. 0 64
      ambari-web/app/templates/main/admin/highAvailability/progress.hbs
  24. 1 4
      ambari-web/app/templates/main/admin/highAvailability/rangerAdmin/step4.hbs
  25. 11 3
      ambari-web/app/views/main/admin/highAvailability/rangerAdmin/step4_view.js
  26. 3 1
      ambari-web/app/views/main/admin/highAvailability/resourceManager/step4_view.js
  27. 3 1
      ambari-web/app/views/main/service/reassign/step4_view.js
  28. 3 1
      ambari-web/app/views/main/service/reassign/step6_view.js
  29. 3 1
      ambari-web/app/views/main/service/reassign/step7_view.js
  30. 6 10
      ambari-web/test/controllers/main/admin/highAvailability/progress_controller_test.js
  31. 2 90
      ambari-web/test/controllers/main/service/reassign/step4_controller_test.js

+ 1 - 1
ambari-server/src/main/resources/common-services/RANGER/0.4.0/metainfo.xml

@@ -32,7 +32,7 @@
           <name>RANGER_ADMIN</name>
           <displayName>Ranger Admin</displayName>
           <category>MASTER</category>
-          <cardinality>1</cardinality>
+          <cardinality>1-3</cardinality>
           <versionAdvertised>true</versionAdvertised>
           <commandScript>
             <script>scripts/ranger_admin.py</script>

+ 2 - 19
ambari-web/app/controllers/main/admin/highAvailability/nameNode/step5_controller.js

@@ -22,28 +22,11 @@ App.HighAvailabilityWizardStep5Controller = App.HighAvailabilityProgressPageCont
 
   name:"highAvailabilityWizardStep5Controller",
 
-  isHA: true,
-
-  commands: ['stopAllServices', 'installNameNode', 'installJournalNodes', 'reconfigureHDFS', 'startJournalNodes', 'disableSNameNode'],
+  commands: ['stopServices', 'installNameNode', 'installJournalNodes', 'reconfigureHDFS', 'startJournalNodes', 'disableSNameNode'],
 
   hdfsSiteTag : "",
   coreSiteTag : "",
 
-  stopAllServices: function () {
-    App.ajax.send({
-      name: 'common.services.update',
-      data: {
-        context: "Stop all services",
-        "ServiceInfo": {
-          "state": "INSTALLED"
-        }
-      },
-      sender: this,
-      success: 'startPolling',
-      error: 'onTaskError'
-    });
-  },
-
   installNameNode: function () {
     var hostName = this.get('content.masterComponentHosts').filterProperty('component', 'NAMENODE').findProperty('isInstalled', false).hostName;
     this.createComponent('NAMENODE', hostName, "HDFS");
@@ -98,7 +81,7 @@ App.HighAvailabilityWizardStep5Controller = App.HighAvailabilityProgressPageCont
    */
   updateConfigProperties: function(data) {
     var siteNames = ['hdfs-site','core-site'];
-    var configData = this.reconfigureSites(siteNames, data);
+    var configData = this.reconfigureSites(siteNames, data, Em.I18n.t('admin.highAvailability.step4.save.configuration.note').format(App.format.role('NAMENODE')));
     App.ajax.send({
       name: 'common.service.configurations',
       sender: this,

+ 0 - 2
ambari-web/app/controllers/main/admin/highAvailability/nameNode/step7_controller.js

@@ -22,8 +22,6 @@ App.HighAvailabilityWizardStep7Controller = App.HighAvailabilityProgressPageCont
 
   name:"highAvailabilityWizardStep7Controller",
 
-  isHA: true,
-
   commands: ['startZooKeeperServers', 'startNameNode'],
 
   startZooKeeperServers: function () {

+ 2 - 15
ambari-web/app/controllers/main/admin/highAvailability/nameNode/step9_controller.js

@@ -22,8 +22,6 @@ App.HighAvailabilityWizardStep9Controller = App.HighAvailabilityProgressPageCont
 
   name:"highAvailabilityWizardStep9Controller",
 
-  isHA: true,
-
   commands: ['startSecondNameNode', 'installZKFC', 'startZKFC', 'reconfigureHBase', 'deleteSNameNode', 'startAllServices'],
 
   hbaseSiteTag: "",
@@ -61,7 +59,7 @@ App.HighAvailabilityWizardStep9Controller = App.HighAvailabilityProgressPageCont
 
   reconfigureHBase: function () {
     var data = this.get('content.serviceConfigProperties');
-    var configData = this.reconfigureSites(['hbase-site'],data);
+    var configData = this.reconfigureSites(['hbase-site'], data, Em.I18n.t('admin.highAvailability.step4.save.configuration.note').format(App.format.role('NAMENODE')));
     App.ajax.send({
       name: 'common.service.configurations',
       sender: this,
@@ -84,18 +82,7 @@ App.HighAvailabilityWizardStep9Controller = App.HighAvailabilityProgressPageCont
   },
 
   startAllServices: function () {
-    App.ajax.send({
-      name: 'common.services.update',
-      data: {
-        context: "Start all services",
-        "ServiceInfo": {
-          "state": "STARTED"
-        }
-      },
-      sender: this,
-      success: 'startPolling',
-      error: 'onTaskError'
-    });
+    this.startServices(false);
   },
 
   deleteSNameNode: function () {

+ 7 - 12
ambari-web/app/controllers/main/admin/highAvailability/progress_controller.js

@@ -72,27 +72,22 @@ App.HighAvailabilityProgressPageController = App.HighAvailabilityWizardControlle
   },
 
   /**
-   *
+   * Prepare object to send to the server to save configs
+   * Split all configs by site names and tag and note
    * @param siteNames Array
+   * @param data Object
+   * @param note String
    */
-  reconfigureSites: function(siteNames, data) {
+  reconfigureSites: function(siteNames, data, note) {
     var tagName = App.get('testMode') ? 'version1' : 'version' + (new Date).getTime();
-    var componentName;
-    switch (this.get('content.controllerName')) {
-      case 'rMHighAvailabilityWizardController':
-        componentName =  'RESOURCEMANAGER';
-        break;
-      default:
-        componentName =  'NAMENODE';
-    }
     return siteNames.map(function(_siteName) {
       var config = data.items.findProperty('type', _siteName);
       var configToSave = {
         type: _siteName,
         tag: tagName,
         properties: config && config.properties,
-        service_config_version_note: Em.I18n.t('admin.highAvailability.step4.save.configuration.note').format(App.format.role(componentName))
-      }
+        service_config_version_note: note || ''
+      };
       if (config && config.properties_attributes) {
         configToSave.properties_attributes = config.properties_attributes;
       }

+ 66 - 2
ambari-web/app/controllers/main/admin/highAvailability/rangerAdmin/step4_controller.js

@@ -18,7 +18,71 @@
 
 var App = require('app');
 
-App.RAHighAvailabilityWizardStep4Controller = Em.Controller.extend({
-  name: "rAHighAvailabilityWizardStep4Controller"
+App.RAHighAvailabilityWizardStep4Controller = App.HighAvailabilityProgressPageController.extend({
+
+  name: "rAHighAvailabilityWizardStep4Controller",
+
+  clusterDeployState: 'RA_HIGH_AVAILABILITY_DEPLOY',
+
+  commands: ['stopRequiredServices', 'installRangerAdmin', 'reconfigureRanger', 'startAllServices'],
+
+  tasksMessagesPrefix: 'admin.ra_highAvailability.wizard.step',
+
+  stopRequiredServices: function () {
+    this.stopServices(['HDFS']);
+  },
+
+  installRangerAdmin: function () {
+    var hostNames = this.get('content.raHosts.additionalRA');
+    this.createComponent('RANGER_ADMIN', hostNames, "RANGER");
+  },
+
+  reconfigureRanger: function () {
+    this.loadConfigsTags();
+  },
+
+  loadConfigsTags: function () {
+    App.ajax.send({
+      name: 'config.tags',
+      sender: this,
+      success: 'onLoadConfigsTags',
+      error: 'onTaskError'
+    });
+  },
+
+  onLoadConfigsTags: function (data) {
+    App.ajax.send({
+      name: 'reassign.load_configs',
+      sender: this,
+      data: {
+        urlParams: '(type=admin-properties&tag=' + data.Clusters.desired_configs['admin-properties'].tag + ')'
+      },
+      success: 'onLoadConfigs',
+      error: 'onTaskError'
+    });
+  },
+
+  onLoadConfigs: function (data) {
+    data.items.findProperty('type', 'admin-properties').properties['policymgr_external_url'] = this.get('content.loadBalancerURL');
+    var configData = this.reconfigureSites(['admin-properties'], data, Em.I18n.t('admin.highAvailability.step4.save.configuration.note').format(App.format.role('RANGER_ADMIN')));
+
+    App.ajax.send({
+      name: 'common.service.configurations',
+      sender: this,
+      data: {
+        desired_config: configData
+      },
+      success: 'onSaveConfigs',
+      error: 'onTaskError'
+    });
+  },
+
+  onSaveConfigs: function () {
+    this.onTaskCompleted();
+  },
+
+  startAllServices: function () {
+    this.startServices(true);
+  }
 });
 

+ 10 - 0
ambari-web/app/controllers/main/admin/highAvailability/rangerAdmin/wizard_controller.js

@@ -86,6 +86,16 @@ App.RAHighAvailabilityWizardController = App.WizardController.extend({
           this.load('raHosts');
         }
       }
+    ],
+    '4': [
+      {
+        type: 'sync',
+        callback: function () {
+          this.loadTasksStatuses();
+          this.loadTasksRequestIds();
+          this.loadRequestIds();
+        }
+      }
     ]
   },
 

+ 3 - 29
ambari-web/app/controllers/main/admin/highAvailability/resourceManager/step4_controller.js

@@ -24,8 +24,6 @@ App.RMHighAvailabilityWizardStep4Controller = App.HighAvailabilityProgressPageCo
 
   name: "rMHighAvailabilityWizardStep4Controller",
 
-  isRMHA: true,
-
   clusterDeployState: 'RM_HIGH_AVAILABILITY_DEPLOY',
 
   commands: ['stopRequiredServices', 'installResourceManager', 'reconfigureYARN', 'startAllServices'],
@@ -33,19 +31,7 @@ App.RMHighAvailabilityWizardStep4Controller = App.HighAvailabilityProgressPageCo
   tasksMessagesPrefix: 'admin.rm_highAvailability.wizard.step',
 
   stopRequiredServices: function () {
-    var list = App.Service.find().mapProperty("serviceName").without("HDFS").join(',');
-    App.ajax.send({
-      name: 'common.services.update',
-      sender: this,
-      data: {
-        "context": "Stop without HDFS",
-        "ServiceInfo": {
-          "state": "INSTALLED"
-        },
-        urlParams: "ServiceInfo/service_name.in(" + list + ")"},
-      success: 'startPolling',
-      error: 'onTaskError'
-    });
+    this.stopServices(['HDFS']);
   },
 
   installResourceManager: function () {
@@ -84,7 +70,7 @@ App.RMHighAvailabilityWizardStep4Controller = App.HighAvailabilityProgressPageCo
       data.items[0].properties[property.name] = property.value;
     });
 
-    var configData = this.reconfigureSites(['yarn-site'],data);
+    var configData = this.reconfigureSites(['yarn-site'], data, Em.I18n.t('admin.highAvailability.step4.save.configuration.note').format(App.format.role('RESOURCEMANAGER')));
 
     App.ajax.send({
       name: 'common.service.configurations',
@@ -102,19 +88,7 @@ App.RMHighAvailabilityWizardStep4Controller = App.HighAvailabilityProgressPageCo
   },
 
   startAllServices: function () {
-    App.ajax.send({
-      name: 'common.services.update',
-      sender: this,
-      data: {
-        "context": "Start all services",
-        "ServiceInfo": {
-          "state": "STARTED"
-        },
-        urlParams: "params/run_smoke_test=true"
-      },
-      success: 'startPolling',
-      error: 'onTaskError'
-    });
+    this.startServices(true);
   }
 });
 

+ 0 - 30
ambari-web/app/controllers/main/admin/highAvailability/resourceManager/wizard_controller.js

@@ -83,36 +83,6 @@ App.RMHighAvailabilityWizardController = App.WizardController.extend({
     this.set('content.configs', configs);
   },
 
-  saveTasksStatuses: function (tasksStatuses) {
-    this.set('content.tasksStatuses', tasksStatuses);
-    this.setDBProperty('tasksStatuses', tasksStatuses);
-  },
-
-  loadTasksStatuses: function() {
-    var tasksStatuses = this.getDBProperty('tasksStatuses');
-    this.set('content.tasksStatuses', tasksStatuses);
-  },
-
-  saveTasksRequestIds: function (tasksRequestIds) {
-    this.set('content.tasksRequestIds', tasksRequestIds);
-    this.setDBProperty('tasksRequestIds', tasksRequestIds);
-  },
-
-  loadTasksRequestIds: function() {
-    var tasksRequestIds = this.getDBProperty('tasksRequestIds');
-    this.set('content.tasksRequestIds', tasksRequestIds);
-  },
-
-  saveRequestIds: function (requestIds) {
-    this.set('content.requestIds', requestIds);
-    this.setDBProperty('requestIds', requestIds);
-  },
-
-  loadRequestIds: function() {
-    var requestIds = this.getDBProperty('requestIds');
-    this.set('content.requestIds', requestIds);
-  },
-
   /**
    * Load data for all steps until <code>current step</code>
    */

+ 3 - 30
ambari-web/app/controllers/main/admin/kerberos/disable_controller.js

@@ -24,7 +24,7 @@ App.KerberosDisableController = App.KerberosProgressPageController.extend(App.Wi
 
   name: 'kerberosDisableController',
   clusterDeployState: 'DEFAULT',
-  commands: ['stopServices', 'unkerberize', 'deleteKerberos', 'startServices'],
+  commands: ['stopServices', 'unkerberize', 'deleteKerberos', 'startAllServices'],
 
   tasksMessagesPrefix: 'admin.kerberos.disable.step',
 
@@ -36,21 +36,6 @@ App.KerberosDisableController = App.KerberosProgressPageController.extend(App.Wi
     this._super();
   },
 
-  stopServices: function () {
-    App.ajax.send({
-      name: 'common.services.update',
-      sender: this,
-      data: {
-        context: "Stop services",
-        "ServiceInfo": {
-          "state": "INSTALLED"
-        }
-      },
-      success: 'startPolling',
-      error: 'onTaskError'
-    });
-  },
-
   unkerberize: function () {
     return App.ajax.send({
       name: 'admin.unkerberize.cluster',
@@ -72,20 +57,8 @@ App.KerberosDisableController = App.KerberosProgressPageController.extend(App.Wi
     });
   },
 
-  startServices: function () {
-    App.ajax.send({
-      name: 'common.services.update',
-      sender: this,
-      data: {
-        "context": "Start services",
-        "ServiceInfo": {
-          "state": "STARTED"
-        },
-        urlParams: "params/run_smoke_test=true"
-      },
-      success: 'startPolling',
-      error: 'onTaskError'
-    });
+  startAllServices: function () {
+    this.startServices(true);
   }
 
 });

+ 0 - 15
ambari-web/app/controllers/main/admin/kerberos/step5_controller.js

@@ -21,21 +21,6 @@ App.KerberosWizardStep5Controller = App.KerberosProgressPageController.extend({
   clusterDeployState: 'KERBEROS_DEPLOY',
   commands: ['stopServices'],
 
-  stopServices: function () {
-    App.ajax.send({
-      name: 'common.services.update',
-      data: {
-        context: "Stop services",
-        "ServiceInfo": {
-          "state": "INSTALLED"
-        }
-      },
-      sender: this,
-      success: 'startPolling',
-      error: 'onTaskError'
-    });
-  },
-
   loadStep: function() {
     this.checkComponentsRemoval();
     this._super();

+ 3 - 15
ambari-web/app/controllers/main/admin/kerberos/step7_controller.js

@@ -19,22 +19,10 @@
 App.KerberosWizardStep7Controller = App.KerberosProgressPageController.extend({
   name: 'kerberosWizardStep7Controller',
   clusterDeployState: 'KERBEROS_DEPLOY',
-  commands: ['startServices'],
+  commands: ['startAllServices'],
 
-  startServices: function () {
-    App.ajax.send({
-      name: 'common.services.update',
-      sender: this,
-      data: {
-        "context": "Start services",
-        "ServiceInfo": {
-          "state": "STARTED"
-        },
-        urlParams: "params/run_smoke_test=true"
-      },
-      success: 'startPolling',
-      error: 'onTaskError'
-    });
+  startAllServices: function () {
+    this.startServices(true);
   },
 
   isSubmitDisabled: function () {

+ 0 - 32
ambari-web/app/controllers/main/admin/kerberos/wizard_controller.js

@@ -130,12 +130,6 @@ App.KerberosWizardController = App.WizardController.extend({
     this.save('cluster');
   },
 
-
-  saveTasksStatuses: function (statuses) {
-    this.setDBProperty('tasksStatuses',statuses);
-    this.set('content.tasksStatuses', statuses);
-  },
-
   saveConfigTag: function (tag) {
     App.db.setKerberosWizardConfigTag(tag);
     this.set('content.' + [tag.name], tag.value);
@@ -146,11 +140,6 @@ App.KerberosWizardController = App.WizardController.extend({
     this.set('content.kerberosOption', stepController.get('selectedItem'));
   },
 
-  loadTasksStatuses: function () {
-    var statuses = this.getDBProperty('tasksStatuses');
-    this.set('content.tasksStatuses', statuses);
-  },
-
   /**
    * Load serviceConfigProperties to model
    */
@@ -180,31 +169,10 @@ App.KerberosWizardController = App.WizardController.extend({
     this.kerberosDescriptorConfigs =  kerberosDescriptorConfigs;
   },
 
-
-  saveRequestIds: function (requestIds) {
-    this.setDBProperty('requestIds',requestIds);
-    this.set('content.requestIds', requestIds);
-  },
-
   loadKerberosOption: function () {
     this.set('content.kerberosOption', this.getDBProperty('kerberosOption'));
   },
 
-  loadRequestIds: function () {
-    var requestIds = this.getDBProperty('requestIds');
-    this.set('content.requestIds', requestIds);
-  },
-
-  saveTasksRequestIds: function (requestIds) {
-    this.setDBProperty('tasksRequestIds',requestIds);
-    this.set('content.tasksRequestIds', requestIds);
-  },
-
-  loadTasksRequestIds: function () {
-    var requestIds = this.getDBProperty('tasksRequestIds');
-    this.set('content.tasksRequestIds', requestIds);
-  },
-
   saveKerberosDescriptorConfigs: function (kerberosDescriptorConfigs) {
     this.setDBProperty('kerberosDescriptorConfigs',kerberosDescriptorConfigs);
     this.kerberosDescriptorConfigs =  kerberosDescriptorConfigs;

+ 10 - 73
ambari-web/app/controllers/main/service/reassign/step4_controller.js

@@ -20,12 +20,10 @@ var App = require('app');
 
 App.ReassignMasterWizardStep4Controller = App.HighAvailabilityProgressPageController.extend({
 
-  isReassign: true,
-
-  commands: ['stopServices', 'cleanMySqlServer', 'createHostComponents', 'putHostComponentsInMaintenanceMode', 'reconfigure', 'installHostComponents', 'startZooKeeperServers', 'startNameNode', 'deleteHostComponents', 'configureMySqlServer',
-  'startMySqlServer', 'startNewMySqlServer' , 'startServices'],
+  commands: ['stopRequiredServices', 'cleanMySqlServer', 'createHostComponents', 'putHostComponentsInMaintenanceMode', 'reconfigure', 'installHostComponents', 'startZooKeeperServers', 'startNameNode', 'deleteHostComponents', 'configureMySqlServer',
+  'startMySqlServer', 'startNewMySqlServer' , 'startRequiredServices'],
   // custom commands for Components with DB Configuration and Check
-  commandsForDB: ['createHostComponents', 'installHostComponents', 'configureMySqlServer', 'startMySqlServer', 'testDBConnection', 'stopServices', 'cleanMySqlServer', 'putHostComponentsInMaintenanceMode', 'reconfigure', 'deleteHostComponents', 'configureMySqlServer', 'startServices'],
+  commandsForDB: ['createHostComponents', 'installHostComponents', 'configureMySqlServer', 'startMySqlServer', 'testDBConnection', 'stopRequiredServices', 'cleanMySqlServer', 'putHostComponentsInMaintenanceMode', 'reconfigure', 'deleteHostComponents', 'configureMySqlServer', 'startRequiredServices'],
 
   clusterDeployState: 'REASSIGN_MASTER_INSTALLING',
 
@@ -329,9 +327,9 @@ App.ReassignMasterWizardStep4Controller = App.HighAvailabilityProgressPageContro
     if (this.get('content.hasManualSteps')) {
       if (this.get('content.reassign.component_name') === 'NAMENODE' && App.get('isHaEnabled')) {
         // Only for reassign NameNode with HA enabled
-        this.removeTasks(['deleteHostComponents', 'startServices']);
+        this.removeTasks(['deleteHostComponents', 'startRequiredServices']);
       } else {
-        this.removeTasks(['startZooKeeperServers', 'startNameNode', 'deleteHostComponents', 'startServices']);
+        this.removeTasks(['startZooKeeperServers', 'startNameNode', 'deleteHostComponents', 'startRequiredServices']);
       }
     } else {
       this.removeTasks(['startZooKeeperServers', 'startNameNode']);
@@ -405,40 +403,11 @@ App.ReassignMasterWizardStep4Controller = App.HighAvailabilityProgressPageContro
     }
   },
 
-  /**
-   * compute data for call to stop services
-   * @return {Object}
-   */
-  getStopServicesData: function () {
-    var data = {
-      "ServiceInfo": {
-        "state": "INSTALLED"
-      }
-    };
-    var unrelatedServices = this.get('unrelatedServicesMap')[this.get('content.reassign.component_name')];
-    if (unrelatedServices) {
-      var list = App.Service.find().mapProperty("serviceName").filter(function (s) {
-        return !unrelatedServices.contains(s)
-      }).join(',');
-      data.context = "Stop required services";
-      data.urlParams = "ServiceInfo/service_name.in(" + list + ")";
-    } else {
-      data.context = "Stop all services";
-    }
-    return data;
-  },
-
   /**
    * make server call to stop services
    */
-  stopServices: function () {
-    App.ajax.send({
-      name: 'common.services.update',
-      sender: this,
-      data: this.getStopServicesData(),
-      success: 'startPolling',
-      error: 'onTaskError'
-    });
+  stopRequiredServices: function () {
+    this.stopServices(this.get('unrelatedServicesMap')[this.get('content.reassign.component_name')]);
   },
 
   createHostComponents: function () {
@@ -787,45 +756,13 @@ App.ReassignMasterWizardStep4Controller = App.HighAvailabilityProgressPageContro
   /**
    * make server call to start services
    */
-  startServices: function () {
-    App.ajax.send({
-      name: 'common.services.update',
-      sender: this,
-      data: this.getStartServicesData(),
-      success: 'startPolling',
-      error: 'onTaskError'
-    });
-  },
-
-  /**
-   * compute data for call to start services
-   * @return {Object}
-   */
-  getStartServicesData: function () {
+  startRequiredServices: function () {
     var unrelatedServices = this.get('unrelatedServicesMap')[this.get('content.reassign.component_name')];
-    var data = {};
-
     if (unrelatedServices) {
-      var list = App.Service.find().mapProperty("serviceName").filter(function (s) {
-        return !unrelatedServices.contains(s)
-      }).join(',');
-      data = {
-        "context": "Start required services",
-        "ServiceInfo": {
-          "state": "STARTED"
-        },
-        "urlParams": "ServiceInfo/service_name.in(" + list + ")"
-      };
+      this.startServices(false, unrelatedServices);
     } else {
-      data = {
-        "context": "Start all services",
-        "ServiceInfo": {
-          "state": "STARTED"
-        },
-        "urlParams": "params/run_smoke_test=true"
-      };
+      this.startServices(true);
     }
-    return data;
   },
 
   /**

+ 3 - 17
ambari-web/app/controllers/main/service/reassign/step6_controller.js

@@ -20,9 +20,7 @@ var App = require('app');
 
 App.ReassignMasterWizardStep6Controller = App.HighAvailabilityProgressPageController.extend(App.WizardEnableDone, {
 
-  isReassign: true,
-
-  commands: ['stopMysqlService', 'putHostComponentsInMaintenanceMode', 'deleteHostComponents', 'startServices'],
+  commands: ['stopMysqlService', 'putHostComponentsInMaintenanceMode', 'deleteHostComponents', 'startAllServices'],
 
   clusterDeployState: 'REASSIGN_MASTER_INSTALLING',
 
@@ -109,20 +107,8 @@ App.ReassignMasterWizardStep6Controller = App.HighAvailabilityProgressPageContro
     }
   },
 
-  startServices: function () {
-    App.ajax.send({
-      name: 'common.services.update',
-      sender: this,
-      data: {
-        "context": "Start all services",
-        "ServiceInfo": {
-          "state": "STARTED"
-        },
-        urlParams: "params/run_smoke_test=true"
-      },
-      success: 'startPolling',
-      error: 'onTaskError'
-    });
+  startAllServices: function () {
+    this.startServices(true);
   },
 
   deleteHostComponents: function () {

+ 0 - 1
ambari-web/app/controllers/main/service/reassign/step7_controller.js

@@ -20,7 +20,6 @@ var App = require('app');
 
 App.ReassignMasterWizardStep7Controller = App.ReassignMasterWizardStep4Controller.extend({
   name: 'reassignMasterWizardStep7Controller',
-  isReassign: true,
   commands: ['putHostComponentsInMaintenanceMode', 'deleteHostComponents', 'cleanMySqlServer', 'configureMySqlServer', 'startServices'],
   clusterDeployState: 'REASSIGN_MASTER_INSTALLING',
   multiTaskCounter: 0,

+ 30 - 0
ambari-web/app/controllers/wizard.js

@@ -1252,5 +1252,35 @@ App.WizardController = Em.Controller.extend(App.LocalStorage, App.ThemesMappingM
       this.set('stackConfigsLoaded', true);
     }
     return dfd.promise();
+  },
+
+  saveTasksStatuses: function (tasksStatuses) {
+    this.set('content.tasksStatuses', tasksStatuses);
+    this.setDBProperty('tasksStatuses', tasksStatuses);
+  },
+
+  loadTasksStatuses: function() {
+    var tasksStatuses = this.getDBProperty('tasksStatuses');
+    this.set('content.tasksStatuses', tasksStatuses);
+  },
+
+  saveTasksRequestIds: function (tasksRequestIds) {
+    this.set('content.tasksRequestIds', tasksRequestIds);
+    this.setDBProperty('tasksRequestIds', tasksRequestIds);
+  },
+
+  loadTasksRequestIds: function() {
+    var tasksRequestIds = this.getDBProperty('tasksRequestIds');
+    this.set('content.tasksRequestIds', tasksRequestIds);
+  },
+
+  saveRequestIds: function (requestIds) {
+    this.set('content.requestIds', requestIds);
+    this.setDBProperty('requestIds', requestIds);
+  },
+
+  loadRequestIds: function() {
+    var requestIds = this.getDBProperty('requestIds');
+    this.set('content.requestIds', requestIds);
   }
 });

+ 7 - 3
ambari-web/app/messages.js

@@ -1238,6 +1238,10 @@ Em.I18n.translations = {
   'admin.rm_highAvailability.wizard.step3.configs_changes': '<b>Review Configuration Changes.</b></br>' +
   '<i>policymgr_external_url</i> in admin-properties.xml will be changed by the Wizard to enable Ranger Admin HA',
   'admin.ra_highAvailability.wizard.step4.header': 'Install, Start and Test',
+  'admin.ra_highAvailability.wizard.step4.task0.title': 'Stop Required Services',
+  'admin.ra_highAvailability.wizard.step4.task1.title': 'Install Additional Ranger Admin',
+  'admin.ra_highAvailability.wizard.step4.task2.title': 'Reconfigure Ranger',
+  'admin.ra_highAvailability.wizard.step4.task3.title': 'Start All Services',
   'admin.ra_highAvailability.closePopup':'Enable Ranger Admin HA Wizard is in progress. You must allow the wizard to complete for Ambari to be in usable state. ' +
   'If you choose to quit, you must follow manual instructions to complete or revert enabling Ranger Admin HA as documented in the Ambari User Guide. Are you sure you want to exit the wizard?',
 
@@ -1792,7 +1796,7 @@ Em.I18n.translations = {
   'services.reassign.step3.component':'Component name:',
   'services.reassign.step4.header':'Configure Component',
 
-  'services.reassign.step4.tasks.stopServices.title':'Stop Required Services',
+  'services.reassign.step4.tasks.stopRequiredServices.title':'Stop Required Services',
   'services.reassign.step4.tasks.createHostComponents.title':'Create {0}',
   'services.reassign.step4.tasks.putHostComponentsInMaintenanceMode.title':'Disable {0}',
   'services.reassign.step4.tasks.reconfigure.title':'Reconfigure {0}',
@@ -1801,7 +1805,7 @@ Em.I18n.translations = {
   'services.reassign.step4.tasks.startZooKeeperServers.title':'Start ZooKeeper Servers',
   'services.reassign.step4.tasks.startNameNode.title':'Start NameNode',
   'services.reassign.step4.tasks.deleteHostComponents.title':'Delete disabled {0}',
-  'services.reassign.step4.tasks.startServices.title':'Start Required Services',
+  'services.reassign.step4.tasks.startRequiredServices.title':'Start Required Services',
   'services.reassign.step4.tasks.cleanMySqlServer.title':'Clean MYSQL Server',
   'services.reassign.step4.tasks.testHiveMysqlConnection.title':'Test MYSQL Connection',
   'services.reassign.step4.tasks.configureMySqlServer.title':'Configure MYSQL Server',
@@ -1911,7 +1915,7 @@ Em.I18n.translations = {
   'services.reassign.step6.header': 'Start and Test services',
   'services.reassign.step6.tasks.putHostComponentsInMaintenanceMode.title':'Disable {0}',
   'services.reassign.step6.tasks.deleteHostComponents.title': 'Delete disabled {0}',
-  'services.reassign.step6.tasks.startServices.title': 'Start All Services',
+  'services.reassign.step6.tasks.startAllServices.title': 'Start All Services',
   'services.reassign.step6.tasks.stopMysqlService.title': 'Stop Mysql Server',
   'services.reassign.step6.status.success': 'Successfully moved <b>{0}</b> from <b>{1}</b> host to <b>{2}</b> host.',
   'services.reassign.step6.status.failed': 'Failed to move <b>{0}</b> from <b>{1}</b> host to <b>{2}</b> host.',

+ 68 - 1
ambari-web/app/mixins/wizard/wizardProgressPageController.js

@@ -387,7 +387,74 @@ App.wizardProgressPageControllerMixin = Em.Mixin.create({
     });
   },
 
-  
+  /**
+   * make server call to stop all services, except <code>excludedServices</code>
+   * @param excludedServices
+   * @returns {$.ajax}
+   */
+  stopServices: function (excludedServices) {
+    var data = {
+      'ServiceInfo': {
+        'state': 'INSTALLED'
+      }
+    };
+
+    if (excludedServices && excludedServices.length) {
+      var servicesList =  App.Service.find().mapProperty("serviceName").filter(function (s) {
+        return !excludedServices.contains(s)
+      }).join(',');
+      data.context = "Stop required services";
+      data.urlParams = "ServiceInfo/service_name.in(" + servicesList + ")";
+    } else {
+      data.context = "Stop all services";
+    }
+
+    return App.ajax.send({
+      name: 'common.services.update',
+      sender: this,
+      data: data,
+      success: 'startPolling',
+      error: 'onTaskError'
+    });
+  },
+
+  /**
+   * make server call to start all services, except <code>excludedServices</code>
+   * and run smoke tests if <code>runSmokeTest</code> is true
+   * @param runSmokeTest
+   * @param excludedServices
+   * @returns {$.ajax}
+   */
+  startServices: function (runSmokeTest, excludedServices) {
+    var data = {
+      'ServiceInfo': {
+        'state': 'STARTED'
+      }
+    };
+
+    if (excludedServices && excludedServices.length) {
+      var servicesList = App.Service.find().mapProperty("serviceName").filter(function (s) {
+        return !excludedServices.contains(s)
+      }).join(',');
+      data.context = "Start required services";
+      data.urlParams = "ServiceInfo/service_name.in(" + servicesList + ")";
+    } else {
+      data.context = "Start all services";
+    }
+
+    if (runSmokeTest) {
+      data.urlParams = data.urlParams ? data.urlParams + '&params/run_smoke_test=true' : 'params/run_smoke_test=true';
+    }
+
+    return App.ajax.send({
+      name: 'common.services.update',
+      sender: this,
+      data: data,
+      success: 'startPolling',
+      error: 'onTaskError'
+    });
+  },
+
   /**
    * Create component on single or multiple hosts.
    *

+ 6 - 0
ambari-web/app/mixins/wizard/wizardProgressPageView.js

@@ -67,6 +67,12 @@ App.wizardProgressPageViewMixin = Em.Mixin.create({
 
   noticeClass: 'alert alert-info',
 
+  /**
+   * Class to define task label width
+   * @type {String}
+   */
+  labelWidth: 'span4',
+
   onStatusChange: function () {
     var status = this.get('controller.status');
     if (status === 'COMPLETED') {

+ 8 - 8
ambari-web/app/routes/ra_high_availability_routes.js

@@ -106,7 +106,7 @@ module.exports = App.WizardRoute.extend({
         controller.loadAllPriorSteps().done(function(){
           controller.connectOutlet('rAHighAvailabilityWizardStep1', controller.get('content'));
         });
-      })
+      });
     },
     next: function (router) {
       router.get('rAHighAvailabilityWizardController').save('loadBalancerURL');
@@ -123,7 +123,7 @@ module.exports = App.WizardRoute.extend({
         controller.loadAllPriorSteps().done(function(){
           controller.connectOutlet('rAHighAvailabilityWizardStep2', controller.get('content'));
         });
-      })
+      });
     },
     next: function (router) {
       var wizardController = router.get('rAHighAvailabilityWizardController');
@@ -151,7 +151,7 @@ module.exports = App.WizardRoute.extend({
         controller.setCurrentStep('3');
         controller.loadAllPriorSteps().done(function () {
           controller.connectOutlet('rAHighAvailabilityWizardStep3', controller.get('content'));
-        })
+        });
       });
     },
     next: function (router) {
@@ -168,8 +168,11 @@ module.exports = App.WizardRoute.extend({
       var controller = router.get('rAHighAvailabilityWizardController');
       controller.dataLoading().done(function () {
         controller.setCurrentStep('4');
-        controller.connectOutlet('rAHighAvailabilityWizardStep4', controller.get('content'));
-      })
+        controller.setLowerStepsDisable(4);
+        controller.loadAllPriorSteps().done(function () {
+          controller.connectOutlet('rAHighAvailabilityWizardStep4', controller.get('content'));
+        });
+      });
     },
     next: function (router) {
       router.get('updateController').set('isWorking', true);
@@ -186,9 +189,6 @@ module.exports = App.WizardRoute.extend({
           //location.reload();
         }
       });
-    },
-    back: function (router) {
-      router.transitionTo('step3');
     }
   })
 });

+ 1 - 1
ambari-web/app/templates/common/progress.hbs

@@ -29,7 +29,7 @@
     {{#each task in controller.tasks}}
       {{#view view.taskView contentBinding="task"}}
         <div class="item">
-          <div {{bindAttr class=":pull-left view.linkClass isKerberosWizard:span4 controller.isHA:span4 controller.isRMHA:span5 controller.isRollback:span3 controller.isReassign:span5"}}>
+          <div {{bindAttr class=":pull-left view.linkClass view.parentView.labelWidth"}}>
             <i {{bindAttr class="view.icon view.iconColor"}}></i>
             <a {{action "showHostProgressPopup" task target="controller"}} >{{task.title}}</a>
           </div>

+ 0 - 64
ambari-web/app/templates/main/admin/highAvailability/progress.hbs

@@ -1,64 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-<div id="ha-progress-page">
-  <h2>{{view.headerTitle}}</h2>
-
-  <div {{bindAttr class="view.noticeClass"}}>{{{view.notice}}}</div>
-  {{#each task in controller.tasks}}
-  {{#view view.taskView contentBinding="task"}}
-    <div class="item">
-      <div {{bindAttr class=":pull-left view.linkClass controller.isHA:span4 controller.isRMHA:span5 controller.isRollback:span3 controller.isReassign:span5"}}>
-        <i {{bindAttr class="view.icon view.iconColor"}}></i>
-        <a {{action "showHostProgressPopup" task target="controller"}} >{{task.title}}</a>
-      </div>
-      <div {{bindAttr class="view.showProgressBar::hide :row :span5 :pull-left" }}>
-        <div {{bindAttr class=":progress-bar controller.isRollback::span8 controller.isRollback:span3"}}>
-          <div class="progress-striped active progress-info progress">
-            <div class="bar" {{bindAttr style="view.barWidth"}}></div>
-          </div>
-        </div>
-        <div {{bindAttr class=":span1 view.hidePercent:noDisplay"}}>{{task.progress}}&#37;</div>
-      </div>
-      <div>
-      {{#if task.showRetry}}
-        <a {{action retryTask target="controller"}} class="btn btn-primary retry"
-           rel="tooltip" data-trigger="click" {{bindAttr title="view.showDBTooltip:testDBRetryTooltip"}}>
-          <i class="icon-repeat icon-white"></i>
-          {{t common.retry}}
-        </a>
-      {{/if}}
-      {{#if task.showRollback}}
-        <a {{action rollback target="controller"}} class="btn btn-primary retry">
-          <i class="icon-repeat icon-white"></i>
-          {{t common.rollBack}}
-        </a>
-      {{/if}}
-      {{#if task.showSkip}}
-        <a {{action skipTask target="controller"}} class="btn btn-primary retry">
-          <i class="icon-step-forward icon-white"></i>
-          {{t common.skip}}
-        </a>
-      {{/if}}
-      </div>
-    </div>
-  {{/view}}
-  {{/each}}
-  <div class="btn-area">
-    <button class="btn btn-success pull-right" {{bindAttr disabled="controller.isSubmitDisabled"}} {{action done target="controller"}}>{{view.submitButtonText}}</button>
-  </div>
-</div>

+ 1 - 4
ambari-web/app/templates/main/admin/highAvailability/rangerAdmin/step4.hbs

@@ -15,7 +15,4 @@
 * See the License for the specific language governing permissions and
 * limitations under the License.
 }}
-<div class="btn-area">
-  <a class="btn" {{action back}}>&larr; {{t common.back}}</a>
-  <a class="btn btn-success pull-right" {{action next}}>{{t common.next}} &rarr;</a>
-</div>
+{{template "templates/common/progress"}}

+ 11 - 3
ambari-web/app/views/main/admin/highAvailability/rangerAdmin/step4_view.js

@@ -19,8 +19,16 @@
 
 var App = require('app');
 
-App.RAHighAvailabilityWizardStep4View = Em.View.extend({
+App.RAHighAvailabilityWizardStep4View = App.HighAvailabilityProgressPageView.extend({
 
-  templateName: require('templates/main/admin/highAvailability/rangerAdmin/step4')
+  templateName: require('templates/main/admin/highAvailability/rangerAdmin/step4'),
 
-});
+  headerTitle: Em.I18n.t('admin.ra_highAvailability.wizard.step4.header'),
+
+  noticeInProgress: Em.I18n.t('admin.rm_highAvailability.wizard.step4.notice.inProgress'),
+
+  noticeCompleted: Em.I18n.t('admin.rm_highAvailability.wizard.step4.notice.completed'),
+
+  submitButtonText: Em.I18n.t('common.complete')
+
+});

+ 3 - 1
ambari-web/app/views/main/admin/highAvailability/resourceManager/step4_view.js

@@ -29,6 +29,8 @@ App.RMHighAvailabilityWizardStep4View = App.HighAvailabilityProgressPageView.ext
 
   noticeCompleted: Em.I18n.t('admin.rm_highAvailability.wizard.step4.notice.completed'),
 
-  submitButtonText: Em.I18n.t('common.complete')
+  submitButtonText: Em.I18n.t('common.complete'),
+
+  labelWidth: 'span5'
 
 });

+ 3 - 1
ambari-web/app/views/main/service/reassign/step4_view.js

@@ -47,5 +47,7 @@ App.ReassignMasterWizardStep4View = App.HighAvailabilityProgressPageView.extend(
     }
   }.property('controller.content.hasManualSteps'),
 
-  templateName: require('templates/main/service/reassign/step4')
+  templateName: require('templates/main/service/reassign/step4'),
+
+  labelWidth: 'span5'
 });

+ 3 - 1
ambari-web/app/views/main/service/reassign/step6_view.js

@@ -37,5 +37,7 @@ App.ReassignMasterWizardStep6View = App.HighAvailabilityProgressPageView.extend(
 
   submitButtonText: Em.I18n.t('common.complete'),
 
-  templateName: require('templates/main/service/reassign/step6')
+  templateName: require('templates/main/service/reassign/step6'),
+
+  labelWidth: 'span5'
 });

+ 3 - 1
ambari-web/app/views/main/service/reassign/step7_view.js

@@ -39,5 +39,7 @@ App.ReassignMasterWizardStep7View = App.HighAvailabilityProgressPageView.extend(
     return Em.I18n.t('common.complete') + ' &rarr;';
   }.property(),
 
-  templateName: require('templates/main/service/reassign/step7')
+  templateName: require('templates/main/service/reassign/step7'),
+
+  labelWidth: 'span5'
 });

+ 6 - 10
ambari-web/test/controllers/main/admin/highAvailability/progress_controller_test.js

@@ -30,9 +30,6 @@ describe('App.HighAvailabilityProgressPageController', function () {
   describe('#reconfigureSites()', function () {
     var tests = [
       {
-        content: {
-          controllerName: "rMHighAvailabilityWizardController"
-        },
         siteNames: ["site1", "site2"],
         data: {
           items: [
@@ -63,6 +60,7 @@ describe('App.HighAvailabilityProgressPageController', function () {
             }
           ]
         },
+        note: 'note1',
         result: [
           {
             type: "site1",
@@ -71,7 +69,7 @@ describe('App.HighAvailabilityProgressPageController', function () {
               site1_property1: "site1_property1_value",
               site1_property2: "site1_property2_value"
             },
-            service_config_version_note: Em.I18n.t('admin.highAvailability.step4.save.configuration.note').format("ResourceManager"),
+            service_config_version_note: 'note1',
             properties_attributes: {
               final: {
                 site1_property1: "true"
@@ -85,14 +83,11 @@ describe('App.HighAvailabilityProgressPageController', function () {
               site2_property1: "site2_property1_value",
               site2_property2: "site2_property2_value"
             },
-            service_config_version_note: Em.I18n.t('admin.highAvailability.step4.save.configuration.note').format("ResourceManager")
+            service_config_version_note: 'note1'
           }
         ]
       },
       {
-        content: {
-          controllerName: "anyOther"
-        },
         siteNames: ["site1"],
         data: {
           items: [
@@ -110,6 +105,7 @@ describe('App.HighAvailabilityProgressPageController', function () {
             }
           ]
         },
+        note: 'note2',
         result: [
           {
             type: "site1",
@@ -118,7 +114,7 @@ describe('App.HighAvailabilityProgressPageController', function () {
               site1_property1: "site1_property1_value",
               site1_property2: "site1_property2_value"
             },
-            service_config_version_note: Em.I18n.t('admin.highAvailability.step4.save.configuration.note').format("NameNode"),
+            service_config_version_note: 'note2',
             properties_attributes: {
               final: {
                 site1_property1: "true"
@@ -136,7 +132,7 @@ describe('App.HighAvailabilityProgressPageController', function () {
     it("reconfigures configs after HA", function() {
       tests.forEach(function(t) {
         controller.set('content', t.content);
-        expect(controller.reconfigureSites(t.siteNames, t.data)).to.eql(t.result);
+        expect(controller.reconfigureSites(t.siteNames, t.data, t.note)).to.eql(t.result);
       });
     });
   });

+ 2 - 90
ambari-web/test/controllers/main/service/reassign/step4_controller_test.js

@@ -130,7 +130,7 @@ describe('App.ReassignMasterWizardStep4Controller', function () {
       });
 
       controller.set('tasks', [
-        {id: 1, command: 'stopServices'},
+        {id: 1, command: 'stopRequiredServices'},
         {id: 2, command: 'cleanMySqlServer'},
         {id: 3, command: 'createHostComponents'},
         {id: 4, command: 'putHostComponentsInMaintenanceMode'},
@@ -141,7 +141,7 @@ describe('App.ReassignMasterWizardStep4Controller', function () {
         {id: 9, command: 'deleteHostComponents'},
         {id: 10, command: 'configureMySqlServer'},
         {id: 11, command: 'startMySqlServer'},
-        {id: 12, command: 'startServices'}
+        {id: 12, command: 'startRequiredServices'}
       ]);
     });
 
@@ -317,49 +317,10 @@ describe('App.ReassignMasterWizardStep4Controller', function () {
     });
   });
 
-  describe('#getStopServicesData()', function () {
-    it('restarting YARN component', function () {
-      controller.set('content.reassign.component_name', 'RESOURCEMANAGER');
-      sinon.stub(App.Service, 'find', function () {
-        return [
-          {
-            serviceName: 'HDFS'
-          },
-          {
-            serviceName: 'SERVICE1'
-          }
-        ];
-      });
-
-      expect(controller.getStopServicesData()).to.eql({
-        "ServiceInfo": {
-          "state": "INSTALLED"
-        },
-        "context": "Stop required services",
-        "urlParams": "ServiceInfo/service_name.in(SERVICE1)"
-      });
-      App.Service.find.restore();
-    });
-    it('restarting non-YARN component', function () {
-      controller.set('content.reassign.component_name', 'NAMENODE');
-      expect(controller.getStopServicesData()).to.eql({
-        "ServiceInfo": {
-          "state": "INSTALLED"
-        },
-        "context": "Stop all services"
-      });
-    });
-  });
-
   describe('#stopServices()', function () {
     it('', function () {
-      sinon.stub(controller, 'getStopServicesData', Em.K);
-
       controller.stopServices();
       expect(App.ajax.send.calledOnce).to.be.true;
-      expect(controller.getStopServicesData.calledOnce).to.be.true;
-
-      controller.getStopServicesData.restore();
     });
   });
 
@@ -1008,61 +969,12 @@ describe('App.ReassignMasterWizardStep4Controller', function () {
   });
 
   describe('#startServices()', function () {
-    beforeEach(function () {
-      sinon.stub(controller, 'getStartServicesData', Em.K);
-    });
-    afterEach(function () {
-      controller.getStartServicesData.restore();
-    });
-
     it('', function () {
       controller.startServices();
-      expect(controller.getStartServicesData.calledOnce).to.be.true;
       expect(App.ajax.send.calledOnce).to.be.true;
     });
   });
 
-  describe('#getStartServicesData()', function () {
-    beforeEach(function () {
-      sinon.stub(App.Service, 'find', function () {
-        return [
-          {serviceName: 'SERVICE1'},
-          {serviceName: 'SERVICE2'}
-        ]
-      })
-    });
-    afterEach(function () {
-      App.Service.find.restore();
-    });
-
-    it('No unrelated services', function () {
-      controller.set('unrelatedServicesMap', {
-        'COMP1': ['SERVICE1']
-      });
-      controller.set('content.reassign.component_name', 'COMP2');
-      expect(controller.getStartServicesData()).to.eql({
-        "context": "Start all services",
-        "ServiceInfo": {
-          "state": "STARTED"
-        },
-        "urlParams": "params/run_smoke_test=true"
-      });
-    });
-    it('Present unrelated services', function () {
-      controller.set('unrelatedServicesMap', {
-        'COMP1': ['SERVICE1']
-      });
-      controller.set('content.reassign.component_name', 'COMP1');
-      expect(controller.getStartServicesData()).to.eql({
-        "context": "Start required services",
-        "ServiceInfo": {
-          "state": "STARTED"
-        },
-        "urlParams": "ServiceInfo/service_name.in(SERVICE2)"
-      });
-    });
-  });
-
   describe('#deleteHostComponents()', function () {
 
     it('No host components', function () {