You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by yu...@apache.org on 2013/08/07 20:13:30 UTC

git commit: AMBARI-2833. NameNode HA Wizard: progress page after "Initialize JournalNodes". (Aleksandr Kovalenko via yusaku)

Updated Branches:
  refs/heads/trunk be216e19f -> c3591ec0b


AMBARI-2833. NameNode HA Wizard: progress page after "Initialize JournalNodes". (Aleksandr Kovalenko via yusaku)


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

Branch: refs/heads/trunk
Commit: c3591ec0bc5e58c1dc6c24bd563a19c4938b0844
Parents: be216e1
Author: Yusaku Sako <yu...@hortonworks.com>
Authored: Wed Aug 7 11:13:14 2013 -0700
Committer: Yusaku Sako <yu...@hortonworks.com>
Committed: Wed Aug 7 11:13:14 2013 -0700

----------------------------------------------------------------------
 ambari-web/app/controllers.js                   |  1 +
 .../highAvailability/progress_controller.js     | 34 +++++++----
 .../admin/highAvailability/step5_controller.js  | 14 ++---
 .../admin/highAvailability/step7_controller.js  | 35 +++++++++++
 .../admin/highAvailability/wizard_controller.js |  3 +-
 ambari-web/app/messages.js                      |  7 ++-
 .../app/routes/high_availability_routes.js      | 26 +++++++-
 ambari-web/app/styles/application.less          |  2 +-
 ambari-web/app/templates.js                     |  1 +
 .../main/admin/highAvailability/progress.hbs    | 41 +++++++++++++
 .../main/admin/highAvailability/step5.hbs       | 25 +-------
 .../main/admin/highAvailability/step7.hbs       | 18 ++++++
 .../main/admin/highAvailability/wizard.hbs      |  3 +-
 ambari-web/app/utils/ajax.js                    |  4 +-
 ambari-web/app/views.js                         |  2 +
 .../admin/highAvailability/progress_view.js     | 62 ++++++++++++++++++++
 .../main/admin/highAvailability/step5_view.js   | 41 +------------
 .../main/admin/highAvailability/step7_view.js   | 25 ++++++++
 .../main/admin/highAvailability/wizard_view.js  |  5 ++
 19 files changed, 255 insertions(+), 94 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c3591ec0/ambari-web/app/controllers.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers.js b/ambari-web/app/controllers.js
index 7ef651e..67e212a 100644
--- a/ambari-web/app/controllers.js
+++ b/ambari-web/app/controllers.js
@@ -35,6 +35,7 @@ require('controllers/main/admin/highAvailability/step3_controller');
 require('controllers/main/admin/highAvailability/step4_controller');
 require('controllers/main/admin/highAvailability/step5_controller');
 require('controllers/main/admin/highAvailability/step6_controller');
+require('controllers/main/admin/highAvailability/step7_controller');
 require('controllers/main/admin/cluster');
 require('controllers/main/admin/stack_upgrade_controller');
 require('controllers/main/admin/user');

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c3591ec0/ambari-web/app/controllers/main/admin/highAvailability/progress_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/highAvailability/progress_controller.js b/ambari-web/app/controllers/main/admin/highAvailability/progress_controller.js
index 72a4b32..928ee1f 100644
--- a/ambari-web/app/controllers/main/admin/highAvailability/progress_controller.js
+++ b/ambari-web/app/controllers/main/admin/highAvailability/progress_controller.js
@@ -40,9 +40,10 @@ App.HighAvailabilityProgressPageController = Em.Controller.extend({
     this.get('tasks').clear();
     this.get('logs').clear();
     var commands = this.get('commands');
+    var currentStep = App.router.get('highAvailabilityWizardController.currentStep');
     for (var i = 0; i < commands.length; i++) {
       this.get('tasks').pushObject(Ember.Object.create({
-        title: Em.I18n.t('admin.highAvailability.wizard.step5.task' + i + '.title'),
+        title: Em.I18n.t('admin.highAvailability.wizard.step' + currentStep + '.task' + i + '.title'),
         status: 'PENDING',
         id: i,
         command: commands[i]
@@ -104,14 +105,19 @@ App.HighAvailabilityProgressPageController = Em.Controller.extend({
           componentName: componentName,
           taskNum: hostName.length
         },
-        success: 'installComponent',
+        success: 'onCreateComponent',
         error: 'onTaskError'
       });
     }
   },
 
-  installComponent: function (data, params) {
-    var hostName = params.data.hostName;
+  onCreateComponent: function () {
+    var hostName = arguments[2].data.hostName;
+    var componentName = arguments[2].data.componentName;
+    this.installComponent(componentName, hostName);
+  },
+
+  installComponent: function (componentName, hostName) {
     if (!(hostName instanceof Array)) {
       hostName = [hostName];
     }
@@ -121,9 +127,9 @@ App.HighAvailabilityProgressPageController = Em.Controller.extend({
         sender: this,
         data: {
           hostName: hostName[i],
-          componentName: params.data.componentName,
-          displayName: App.format.role(params.data.componentName),
-          taskNum: params.data.taskNum || hostName.length
+          componentName: componentName,
+          displayName: App.format.role(componentName),
+          taskNum: hostName.length
         },
         success: 'startPolling',
         error: 'onTaskError'
@@ -142,7 +148,8 @@ App.HighAvailabilityProgressPageController = Em.Controller.extend({
         data: {
           hostName: hostName[i],
           componentName: componentName,
-          displayName: App.format.role(componentName)
+          displayName: App.format.role(componentName),
+          taskNum: hostName.length
         },
         success: 'startPolling',
         error: 'onTaskError'
@@ -150,15 +157,15 @@ App.HighAvailabilityProgressPageController = Em.Controller.extend({
     }
   },
 
-  startPolling: function (data, params) {
+  startPolling: function (data) {
     if (data) {
       this.get('currentRequestIds').push(data.Requests.id);
-      var tasksCount = params.data.taskNum || 1;
+      var tasksCount = arguments[2].data ? arguments[2].data.taskNum : 1;
       if (tasksCount === this.get('currentRequestIds').length) {
         this.doPolling();
       }
     } else {
-      this.onTaskError();
+      this.onTaskCompleted();
     }
   },
 
@@ -180,7 +187,10 @@ App.HighAvailabilityProgressPageController = Em.Controller.extend({
   parseLogs: function (logs) {
     this.get('logs').push(logs.tasks);
     if (this.get('currentRequestIds').length === this.get('logs').length) {
-      var tasks = this.get('logs');
+      var tasks = [];
+      this.get('logs').forEach(function (logs) {
+        tasks.pushObjects(logs);
+      }, this);
       var self = this;
       var currentTaskId = this.get('currentTaskId');
       if (!tasks.someProperty('Tasks.status', 'PENDING') && !tasks.someProperty('Tasks.status', 'QUEUED') && !tasks.someProperty('Tasks.status', 'IN_PROGRESS')) {

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c3591ec0/ambari-web/app/controllers/main/admin/highAvailability/step5_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/highAvailability/step5_controller.js b/ambari-web/app/controllers/main/admin/highAvailability/step5_controller.js
index 305c45d..ffb4fe1 100644
--- a/ambari-web/app/controllers/main/admin/highAvailability/step5_controller.js
+++ b/ambari-web/app/controllers/main/admin/highAvailability/step5_controller.js
@@ -20,7 +20,7 @@ var App = require('app');
 
 App.HighAvailabilityWizardStep5Controller = App.HighAvailabilityProgressPageController.extend({
 
-  commands: ['stopAllServices', 'installNameNode', 'installJournalNode', 'startJournalNode', 'disableSNameNode', 'reconfigureHDFS'],
+  commands: ['stopAllServices', 'installNameNode', 'installJournalNodes', 'startJournalNodes', 'disableSNameNode', 'reconfigureHDFS'],
 
   stopAllServices: function () {
     App.ajax.send({
@@ -36,12 +36,12 @@ App.HighAvailabilityWizardStep5Controller = App.HighAvailabilityProgressPageCont
     this.createComponent('NAMENODE', hostName);
   },
 
-  installJournalNode: function () {
+  installJournalNodes: function () {
     var hostNames = this.get('content.masterComponentHosts').filterProperty('component', 'JOURNALNODE').mapProperty('hostName');
     this.createComponent('JOURNALNODE', hostNames);
   },
 
-  startJournalNode: function () {
+  startJournalNodes: function () {
     var hostNames = this.get('content.masterComponentHosts').filterProperty('component', 'JOURNALNODE').mapProperty('hostName');
     this.startComponent('JOURNALNODE', hostNames);
   },
@@ -62,13 +62,7 @@ App.HighAvailabilityWizardStep5Controller = App.HighAvailabilityProgressPageCont
 
   reconfigureHDFS: function () {
     var hostNames = this.get('content.masterComponentHosts').filterProperty('component', 'NAMENODE').mapProperty('hostName');
-    var params = {
-      data: {
-        hostName: hostNames,
-        componentName: 'HDFS_CLIENT'
-      }
-    };
-    this.installComponent(null, params);
+    this.installComponent('HDFS_CLIENT', hostNames);
   }
 });
 

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c3591ec0/ambari-web/app/controllers/main/admin/highAvailability/step7_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/highAvailability/step7_controller.js b/ambari-web/app/controllers/main/admin/highAvailability/step7_controller.js
new file mode 100644
index 0000000..914bb98
--- /dev/null
+++ b/ambari-web/app/controllers/main/admin/highAvailability/step7_controller.js
@@ -0,0 +1,35 @@
+/**
+ * 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.
+ */
+
+var App = require('app');
+
+App.HighAvailabilityWizardStep7Controller = App.HighAvailabilityProgressPageController.extend({
+
+  commands: ['startZooKeeperServers', 'startNameNode'],
+
+  startZooKeeperServers: function () {
+    var hostNames = this.get('content.masterComponentHosts').filterProperty('component', 'ZOOKEEPER').mapProperty('hostName');
+    this.startComponent('ZOOKEEPER_SERVER', hostNames);
+  },
+
+  startNameNode: function () {
+    var hostName = this.get('content.masterComponentHosts').findProperty('isCurNameNode').mapProperty('hostName');
+    this.startComponent('NAMENODE', hostName);
+  }
+});
+

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c3591ec0/ambari-web/app/controllers/main/admin/highAvailability/wizard_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/highAvailability/wizard_controller.js b/ambari-web/app/controllers/main/admin/highAvailability/wizard_controller.js
index 7c5e5e6..c2a9c2d 100644
--- a/ambari-web/app/controllers/main/admin/highAvailability/wizard_controller.js
+++ b/ambari-web/app/controllers/main/admin/highAvailability/wizard_controller.js
@@ -23,7 +23,7 @@ App.HighAvailabilityWizardController = App.WizardController.extend({
 
   name: 'highAvailabilityWizardController',
 
-  totalSteps: 6,
+  totalSteps: 7,
 
   /**
    * Used for hiding back button in wizard
@@ -165,6 +165,7 @@ App.HighAvailabilityWizardController = App.WizardController.extend({
   loadAllPriorSteps: function () {
     var step = this.get('currentStep');
     switch (step) {
+      case '7':
       case '6':
       case '5':
       case '4':

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c3591ec0/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index 363b810..266adf6 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -641,16 +641,16 @@ Em.I18n.translations = {
   'admin.highAvailability.error.zooKeeperNum':'You must have at least 3 ZooKeeper Servers in your cluster to enable NameNode HA.',
   'admin.highAvailability.error.security':'You cannot enable NameNode HA via this wizard as your cluster is already secured.  First, disable security by going to Admin > Security, and then run this Enable NameNode HA wizard again.  After NameNode HA is enabled, you can go back to Admin > Security to secure the cluster.',
   'admin.highAvailability.wizard.header':'Enable NameNode HA Wizard',
+  'admin.highAvailability.wizard.progressPage.notice':'Please wait while NameNode HA is being deployed.',
+  'admin.highAvailability.wizard.progressPage.header':'Deploy',
   'admin.highAvailability.wizard.step1.header':'Get Started',
   'admin.highAvailability.wizard.step2.header':'Select Hosts',
   'admin.highAvailability.wizard.step3.header':'Review',
   'admin.highAvailability.wizard.step4.header':'Create Checkpoint',
   'admin.highAvailability.wizard.step4.bodyHeader':'Manual Steps Required: Create Checkpoint on NameNode',
   'admin.highAvailability.wizard.step6.bodyHeader':'Manual Steps Required: Initialize JournalNodes',
-  'admin.highAvailability.wizard.step5.header':'Deploy',
   'admin.highAvailability.wizard.step6.header':'Initialize JournalNodes',
 
-  'admin.highAvailability.wizard.step5.notice':'Please wait while NameNode HA is being deployed.',
   'admin.highAvailability.wizard.step5.task0.title':'Stop all services',
   'admin.highAvailability.wizard.step5.task1.title':'Install Additional NameNode',
   'admin.highAvailability.wizard.step5.task2.title':'Install JournalNodes',
@@ -658,6 +658,9 @@ Em.I18n.translations = {
   'admin.highAvailability.wizard.step5.task4.title':'Disable Secondary NameNode',
   'admin.highAvailability.wizard.step5.task5.title':'Reconfigure HDFS',
 
+  'admin.highAvailability.wizard.step7.task0.title':'Start ZooKeeper Servers',
+  'admin.highAvailability.wizard.step7.task1.title':'Start NameNode',
+
   'admin.highAvailability.wizard.step3.nn1':'Current NameNode is on {0}.',
   'admin.highAvailability.wizard.step3.nn2':'Additional NameNode will be installed on {0}.',
   'admin.highAvailability.wizard.step3.sn':'Existing Secondary NameNode on {0} will be disabled.',

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c3591ec0/ambari-web/app/routes/high_availability_routes.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/routes/high_availability_routes.js b/ambari-web/app/routes/high_availability_routes.js
index bcb4ddf..30e6e13 100644
--- a/ambari-web/app/routes/high_availability_routes.js
+++ b/ambari-web/app/routes/high_availability_routes.js
@@ -150,7 +150,27 @@ module.exports = Em.Route.extend({
     back: function (router) {
       router.transitionTo('step5');
     },
-    next: function (router) {}
+    next: function (router) {
+      router.transitionTo('step7');
+    }
+  }),
+
+  step7: Em.Route.extend({
+    route: '/step7',
+    connectOutlets: function (router) {
+      var controller = router.get('highAvailabilityWizardController');
+      controller.setCurrentStep('7');
+      controller.setLowerStepsDisable(7);
+      controller.dataLoading().done(function () {
+        controller.loadAllPriorSteps();
+        controller.connectOutlet('highAvailabilityWizardStep7',  controller.get('content'));
+      })
+    },
+    back: function (router) {
+      router.transitionTo('step6');
+    },
+    next: function (router) {
+    }
   }),
 
   gotoStep1: Em.Router.transitionTo('step1'),
@@ -163,5 +183,7 @@ module.exports = Em.Route.extend({
 
   gotoStep5: Em.Router.transitionTo('step5'),
 
-  gotoStep6: Em.Router.transitionTo('step6')
+  gotoStep6: Em.Router.transitionTo('step6'),
+
+  gotoStep7: Em.Router.transitionTo('step7')
 });

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c3591ec0/ambari-web/app/styles/application.less
----------------------------------------------------------------------
diff --git a/ambari-web/app/styles/application.less b/ambari-web/app/styles/application.less
index 59775f8..538df74 100644
--- a/ambari-web/app/styles/application.less
+++ b/ambari-web/app/styles/application.less
@@ -446,7 +446,7 @@ h1 {
       }
     }
   }
-  #step14, #ha-step4 {
+  #step14, #ha-progress-page {
     .item {
       line-height: 30px;
       i {

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c3591ec0/ambari-web/app/templates.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates.js b/ambari-web/app/templates.js
index e59edb4..e906809 100644
--- a/ambari-web/app/templates.js
+++ b/ambari-web/app/templates.js
@@ -26,3 +26,4 @@ require('templates/main/service/info/summary/zookeeper');
 require('templates/main/service/info/summary/mapreduce2');
 require('templates/main/service/info/summary/hive');
 require('templates/main/service/info/summary/hue');
+require('templates/main/admin/highAvailability/progress');

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c3591ec0/ambari-web/app/templates/main/admin/highAvailability/progress.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/highAvailability/progress.hbs b/ambari-web/app/templates/main/admin/highAvailability/progress.hbs
new file mode 100644
index 0000000..5858c58
--- /dev/null
+++ b/ambari-web/app/templates/main/admin/highAvailability/progress.hbs
@@ -0,0 +1,41 @@
+{{!
+* 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>{{t admin.highAvailability.wizard.progressPage.header}}</h2>
+
+  <div class="alert alert-info">{{view.notice}}</div>
+  {{#each task in controller.tasks}}
+  {{#view view.taskView contentBinding="task"}}
+  <div class="item">
+    <i {{bindAttr class="view.icon view.iconColor"}}></i>
+    <a href="javascript:void(0)">{{task.title}}</a>
+  </div>
+  <div {{bindAttr class="view.showProgressBar::hide :row :span12" }}>
+    <div class="progress-bar span4">
+      <div class="progress-striped active progress-info progress">
+        <div class="bar" {{bindAttr style="view.barWidth"}}></div>
+      </div>
+    </div>
+    <div class="span1">{{task.progress}}&#37;</div>
+  </div>
+  {{/view}}
+  {{/each}}
+  <div class="btn-area">
+    <a {{bindAttr class=":btn controller.isSubmitDisabled:disabled :btn-success :pull-right"}} {{action done target="controller"}}>{{t common.done}}</a>
+  </div>
+</div>

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c3591ec0/ambari-web/app/templates/main/admin/highAvailability/step5.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/highAvailability/step5.hbs b/ambari-web/app/templates/main/admin/highAvailability/step5.hbs
index 5d7028d..defea53 100644
--- a/ambari-web/app/templates/main/admin/highAvailability/step5.hbs
+++ b/ambari-web/app/templates/main/admin/highAvailability/step5.hbs
@@ -15,27 +15,4 @@
 * See the License for the specific language governing permissions and
 * limitations under the License.
 }}
-<div id="ha-step4">
-  <h2>{{t admin.highAvailability.wizard.step5.header}}</h2>
-
-  <div class="alert alert-info">{{t admin.highAvailability.wizard.step5.notice}}</div>
-  {{#each task in controller.tasks}}
-  {{#view view.taskView contentBinding="task"}}
-  <div class="item">
-    <i {{bindAttr class="view.icon view.iconColor"}}></i>
-    <a href="javascript:void(0)">{{task.title}}</a>
-  </div>
-  <div {{bindAttr class="view.showProgressBar::hide :row :span12" }}>
-    <div class="progress-bar span4">
-      <div class="progress-striped active progress-info progress">
-        <div class="bar" {{bindAttr style="view.barWidth"}}></div>
-      </div>
-    </div>
-    <div class="span1">{{task.progress}}&#37;</div>
-  </div>
-  {{/view}}
-  {{/each}}
-  <div class="btn-area">
-    <a {{bindAttr class=":btn controller.isSubmitDisabled:disabled :btn-success :pull-right"}} {{action done target="controller"}}>{{t common.done}}</a>
-  </div>
-</div>
+{{template "templates/main/admin/highAvailability/progress"}}

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c3591ec0/ambari-web/app/templates/main/admin/highAvailability/step7.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/highAvailability/step7.hbs b/ambari-web/app/templates/main/admin/highAvailability/step7.hbs
new file mode 100644
index 0000000..defea53
--- /dev/null
+++ b/ambari-web/app/templates/main/admin/highAvailability/step7.hbs
@@ -0,0 +1,18 @@
+{{!
+* 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.
+}}
+{{template "templates/main/admin/highAvailability/progress"}}

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c3591ec0/ambari-web/app/templates/main/admin/highAvailability/wizard.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/highAvailability/wizard.hbs b/ambari-web/app/templates/main/admin/highAvailability/wizard.hbs
index 2420613..b4612e0 100644
--- a/ambari-web/app/templates/main/admin/highAvailability/wizard.hbs
+++ b/ambari-web/app/templates/main/admin/highAvailability/wizard.hbs
@@ -29,8 +29,9 @@
               <li {{bindAttr class="isStep2:active view.isStep2Disabled:disabled"}}><a href="javascript:void(null);"  {{action gotoStep2 target="controller"}}>{{t admin.highAvailability.wizard.step2.header}}</a></li>
               <li {{bindAttr class="isStep3:active view.isStep3Disabled:disabled"}}><a href="javascript:void(null);"  {{action gotoStep3 target="controller"}}>{{t admin.highAvailability.wizard.step3.header}}</a></li>
               <li {{bindAttr class="isStep4:active view.isStep4Disabled:disabled"}}><a href="javascript:void(null);"  {{action gotoStep4 target="controller"}}>{{t admin.highAvailability.wizard.step4.header}}</a></li>
-              <li {{bindAttr class="isStep5:active view.isStep5Disabled:disabled"}}><a href="javascript:void(null);"  {{action gotoStep5 target="controller"}}>{{t admin.highAvailability.wizard.step5.header}}</a></li>
+              <li {{bindAttr class="isStep5:active view.isStep5Disabled:disabled"}}><a href="javascript:void(null);"  {{action gotoStep5 target="controller"}}>{{t admin.highAvailability.wizard.progressPage.header}}</a></li>
               <li {{bindAttr class="isStep6:active view.isStep6Disabled:disabled"}}><a href="javascript:void(null);"  {{action gotoStep6 target="controller"}}>{{t admin.highAvailability.wizard.step6.header}}</a></li>
+              <li {{bindAttr class="isStep7:active view.isStep7Disabled:disabled"}}><a href="javascript:void(null);"  {{action gotoStep7 target="controller"}}>{{t admin.highAvailability.wizard.progressPage.header}}</a></li>
             </ul>
           </div>
         </div>

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c3591ec0/ambari-web/app/utils/ajax.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/ajax.js b/ambari-web/app/utils/ajax.js
index f6d2f37..8c7bd80 100644
--- a/ambari-web/app/utils/ajax.js
+++ b/ambari-web/app/utils/ajax.js
@@ -569,7 +569,7 @@ var urls = {
     'format': function (data, opt) {
       return {
         type: 'PUT',
-        data: {
+        data:  JSON.stringify({
           "RequestInfo": {
             "context": "Stop all services"
           },
@@ -578,7 +578,7 @@ var urls = {
               "state": "INSTALLED"
             }
           }
-        }
+        })
       }
     }
   },

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c3591ec0/ambari-web/app/views.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views.js b/ambari-web/app/views.js
index e5192d5..cb804c3 100644
--- a/ambari-web/app/views.js
+++ b/ambari-web/app/views.js
@@ -55,12 +55,14 @@ require('views/main/host/metrics/processes');
 require('views/main/admin');
 require('views/main/admin/highAvailability_view');
 require('views/main/admin/highAvailability/wizard_view');
+require('views/main/admin/highAvailability/progress_view');
 require('views/main/admin/highAvailability/step1_view');
 require('views/main/admin/highAvailability/step2_view');
 require('views/main/admin/highAvailability/step3_view');
 require('views/main/admin/highAvailability/step4_view');
 require('views/main/admin/highAvailability/step5_view');
 require('views/main/admin/highAvailability/step6_view');
+require('views/main/admin/highAvailability/step7_view');
 require('views/main/admin/cluster');
 require('views/main/admin/misc_view');
 require('views/main/admin/stack_upgrade');

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c3591ec0/ambari-web/app/views/main/admin/highAvailability/progress_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/highAvailability/progress_view.js b/ambari-web/app/views/main/admin/highAvailability/progress_view.js
new file mode 100644
index 0000000..55d157b
--- /dev/null
+++ b/ambari-web/app/views/main/admin/highAvailability/progress_view.js
@@ -0,0 +1,62 @@
+/**
+ * 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.
+ */
+
+
+var App = require('app');
+
+App.HighAvailabilityProgressPageView = Em.View.extend({
+
+  didInsertElement: function () {
+    this.get('controller').loadStep();
+  },
+
+  notice: Em.I18n.t('admin.highAvailability.wizard.progressPage.notice'),
+
+  taskView: Em.View.extend({
+    icon: '',
+    iconColor: '',
+
+    didInsertElement: function () {
+      this.onStatus();
+    },
+
+    barWidth: function () {
+      return 'width: ' + this.get('content.progress') + '%;';
+    }.property('content.progress'),
+
+    onStatus: function () {
+      if (this.get('content.status') === 'IN_PROGRESS') {
+        this.set('icon', 'icon-cog');
+        this.set('iconColor', 'text-info');
+      } else if (this.get('content.status') === 'FAILED') {
+        this.set('icon', 'icon-exclamation-sign');
+        this.set('iconColor', 'text-error');
+      } else if (this.get('content.status') === 'COMPLETED') {
+        this.set('icon', 'icon-ok');
+        this.set('iconColor', 'text-success');
+      } else {
+        this.set('icon', 'icon-cog');
+        this.set('iconColor', '');
+      }
+    }.observes('content.status'),
+
+    showProgressBar: function () {
+      return this.get('content.status') === "IN_PROGRESS";
+    }.property('content.status')
+  })
+});

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c3591ec0/ambari-web/app/views/main/admin/highAvailability/step5_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/highAvailability/step5_view.js b/ambari-web/app/views/main/admin/highAvailability/step5_view.js
index ba5efc5..1eeb9f0 100644
--- a/ambari-web/app/views/main/admin/highAvailability/step5_view.js
+++ b/ambari-web/app/views/main/admin/highAvailability/step5_view.js
@@ -19,44 +19,7 @@
 
 var App = require('app');
 
-App.HighAvailabilityWizardStep5View = Em.View.extend({
+App.HighAvailabilityWizardStep5View = App.HighAvailabilityProgressPageView.extend({
 
-  templateName: require('templates/main/admin/highAvailability/step5'),
-
-  didInsertElement: function () {
-    this.get('controller').loadStep();
-  },
-
-  taskView: Em.View.extend({
-    icon: '',
-    iconColor: '',
-
-    didInsertElement: function () {
-      this.onStatus();
-    },
-
-    barWidth: function () {
-      return 'width: ' + this.get('content.progress') + '%;';
-    }.property('content.progress'),
-
-    onStatus: function () {
-      if (this.get('content.status') === 'IN_PROGRESS') {
-        this.set('icon', 'icon-cog');
-        this.set('iconColor', 'text-info');
-      } else if (this.get('content.status') === 'FAILED') {
-        this.set('icon', 'icon-exclamation-sign');
-        this.set('iconColor', 'text-error');
-      } else if (this.get('content.status') === 'COMPLETED') {
-        this.set('icon', 'icon-ok');
-        this.set('iconColor', 'text-success');
-      } else {
-        this.set('icon', 'icon-cog');
-        this.set('iconColor', '');
-      }
-    }.observes('content.status'),
-
-    showProgressBar: function () {
-      return this.get('content.status') === "IN_PROGRESS";
-    }.property('content.status')
-  })
+  templateName: require('templates/main/admin/highAvailability/step5')
 });

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c3591ec0/ambari-web/app/views/main/admin/highAvailability/step7_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/highAvailability/step7_view.js b/ambari-web/app/views/main/admin/highAvailability/step7_view.js
new file mode 100644
index 0000000..c203a0f
--- /dev/null
+++ b/ambari-web/app/views/main/admin/highAvailability/step7_view.js
@@ -0,0 +1,25 @@
+/**
+ * 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.
+ */
+
+
+var App = require('app');
+
+App.HighAvailabilityWizardStep7View = App.HighAvailabilityProgressPageView.extend({
+
+  templateName: require('templates/main/admin/highAvailability/step7')
+});

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/c3591ec0/ambari-web/app/views/main/admin/highAvailability/wizard_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/highAvailability/wizard_view.js b/ambari-web/app/views/main/admin/highAvailability/wizard_view.js
index c88d2f6..cc9f6a8 100644
--- a/ambari-web/app/views/main/admin/highAvailability/wizard_view.js
+++ b/ambari-web/app/views/main/admin/highAvailability/wizard_view.js
@@ -47,6 +47,11 @@ App.HighAvailabilityWizardView = Em.View.extend({
     return this.isStepDisabled(6);
   }.property('controller.isStepDisabled.@each.value').cacheable(),
 
+  isStep7Disabled: function () {
+    return this.isStepDisabled(7);
+  }.property('controller.isStepDisabled.@each.value').cacheable(),
+
+
   isStepDisabled: function (index) {
     return this.get('controller.isStepDisabled').findProperty('step', index).get('value');
   }