Updated Branches:
  refs/heads/trunk 799ff9165 -> 3c092f84a

AMBARI-2770. NameNode HA Wizard: prerequisite checks. (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/3c092f84
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ambari/tree/3c092f84
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ambari/diff/3c092f84

Branch: refs/heads/trunk
Commit: 3c092f84ada8edf80d8cdccb4d7c141b6751e92e
Parents: 799ff91
Author: Yusaku Sako <[email protected]>
Authored: Tue Jul 30 13:32:57 2013 -0700
Committer: Yusaku Sako <[email protected]>
Committed: Tue Jul 30 13:32:57 2013 -0700

----------------------------------------------------------------------
 .../main/admin/highAvailability_controller.js   | 86 +++++++++++++++++++-
 ambari-web/app/messages.js                      |  3 +
 .../templates/main/admin/highAvailability.hbs   | 12 ++-
 ambari-web/app/utils/db.js                      |  2 +-
 .../views/main/admin/highAvailability_view.js   |  4 +
 5 files changed, 101 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/3c092f84/ambari-web/app/controllers/main/admin/highAvailability_controller.js
----------------------------------------------------------------------
diff --git 
a/ambari-web/app/controllers/main/admin/highAvailability_controller.js 
b/ambari-web/app/controllers/main/admin/highAvailability_controller.js
index 50ec0ca..f081a0a 100644
--- a/ambari-web/app/controllers/main/admin/highAvailability_controller.js
+++ b/ambari-web/app/controllers/main/admin/highAvailability_controller.js
@@ -19,9 +19,93 @@
 var App = require('app');
 
 App.MainAdminHighAvailabilityController = Em.Controller.extend({
-  name:'mainAdminHighAvailabilityController',
+  name: 'mainAdminHighAvailabilityController',
+
+  securityEnabled: false,
+
+  dataIsLoaded: false,
 
   enableHighAvailability: function () {
+    //Prerequisite Checks
+    if (App.Host.find().content.length < 3) {
+      this.showErrorPopup(Em.I18n.t('admin.highAvailability.error.hostsNum'));
+      return;
+    }
+    if (App.HostComponent.find().filterProperty('componentName', 
'ZOOKEEPER_SERVER').length < 3) {
+      
this.showErrorPopup(Em.I18n.t('admin.highAvailability.error.zooKeeperNum'));
+      return;
+    }
+    if (this.get('securityEnabled')) {
+      this.showErrorPopup(Em.I18n.t('admin.highAvailability.error.security'));
+      return;
+    }
     App.router.transitionTo('enableHighAvailability');
+  },
+
+  setSecurityStatus: function () {
+    if (App.testMode) {
+      this.set('securityEnabled', !App.testEnableSecurity);
+      this.set('dataIsLoaded', true);
+    } else {
+      //get Security Status From Server
+      App.ajax.send({
+        name: 'admin.security_status',
+        sender: this,
+        success: 'getSecurityStatusFromServerSuccessCallback',
+        error: 'errorCallback'
+      });
+    }
+  },
+
+  errorCallback: function () {
+    this.showErrorPopup(Em.I18n.t('admin.security.status.error'));
+  },
+
+  getSecurityStatusFromServerSuccessCallback: function (data) {
+    var configs = data.Clusters.desired_configs;
+    if ('global' in configs) {
+      this.getServiceConfigsFromServer(configs['global'].tag);
+    }
+    else {
+      this.showErrorPopup(Em.I18n.t('admin.security.status.error'));
+    }
+  },
+
+  getServiceConfigsFromServer: function (tag) {
+    App.ajax.send({
+      name: 'admin.service_config',
+      sender: this,
+      data: {
+        siteName: 'global',
+        tagName: tag
+      },
+      success: 'getServiceConfigsFromServerSuccessCallback',
+      error: 'errorCallback'
+    });
+  },
+
+  getServiceConfigsFromServerSuccessCallback: function (data) {
+    var configs = data.items.findProperty('tag', this.get('tag')).properties;
+    if (configs && (configs['security_enabled'] === 'true' || 
configs['security_enabled'] === true)) {
+      this.set('securityEnabled', true);
+      this.set('dataIsLoaded', true);
+    }
+    else {
+      this.set('securityEnabled', false);
+      this.set('dataIsLoaded', true);
+    }
+  },
+
+  showErrorPopup: function (message) {
+    App.ModalPopup.show({
+      header: Em.I18n.t('common.error'),
+      bodyClass: Ember.View.extend({
+        template: Ember.Handlebars.compile('<p>' + message + '</p>')
+      }),
+      onPrimary: function () {
+        this.hide();
+      },
+      secondary: false
+    });
   }
 });

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/3c092f84/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index 9f7471c..d1e8401 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -636,6 +636,9 @@ Em.I18n.translations = {
   'admin.highAvailability.button.enable':'Enable NameNode HA',
   'admin.highAvailability.disabled':'NameNode HA is disabled',
   'admin.highAvailability.enabled':'NameNode HA is enabled',
+  'admin.highAvailability.error.hostsNum':'You must have at least 3 hosts in 
your cluster to enable NameNode HA',
+  '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.step1.header':'Get Started',
   'admin.highAvailability.wizard.step2.header':'Select Hosts',

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/3c092f84/ambari-web/app/templates/main/admin/highAvailability.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/highAvailability.hbs 
b/ambari-web/app/templates/main/admin/highAvailability.hbs
index e9199c3..165daaa 100644
--- a/ambari-web/app/templates/main/admin/highAvailability.hbs
+++ b/ambari-web/app/templates/main/admin/highAvailability.hbs
@@ -22,9 +22,13 @@
       {{t admin.highAvailability.enabled}}
     </p>
   {{else}}
-    <p class="muted">
-      {{t admin.highAvailability.disabled}}
-      <a class="btn btn-padding btn-success" {{action enableHighAvailability 
target="controller"}}>{{t admin.highAvailability.button.enable}}</a>
-    </p>
+    {{#if controller.dataIsLoaded}}
+      <p class="muted">
+        {{t admin.highAvailability.disabled}}
+        <a class="btn btn-padding btn-success" {{action enableHighAvailability 
target="controller"}}>{{t admin.highAvailability.button.enable}}</a>
+      </p>
+    {{else}}
+      <div class="spinner"></div>
+    {{/if}}
   {{/if}}
 </div>

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/3c092f84/ambari-web/app/utils/db.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/db.js b/ambari-web/app/utils/db.js
index 6579bfb..bad2c35 100644
--- a/ambari-web/app/utils/db.js
+++ b/ambari-web/app/utils/db.js
@@ -64,7 +64,7 @@ App.db.cleanUp = function () {
     'StackUpgrade' : {},
     'ReassignMaster' : {},
     'AddSecurity': {},
-    'HighAvailability': {}
+    'HighAvailabilityWizard': {}
 
   };
   console.log("In cleanup./..");

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/3c092f84/ambari-web/app/views/main/admin/highAvailability_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/highAvailability_view.js 
b/ambari-web/app/views/main/admin/highAvailability_view.js
index 152b042..89e8cac 100644
--- a/ambari-web/app/views/main/admin/highAvailability_view.js
+++ b/ambari-web/app/views/main/admin/highAvailability_view.js
@@ -21,6 +21,10 @@ var App = require('app');
 App.MainAdminHighAvailabilityView = Em.View.extend({
   templateName: require('templates/main/admin/highAvailability'),
 
+  didInsertElement: function () {
+    this.get('controller').setSecurityStatus();
+  },
+
   isHighAvailabilityEnabled: false //todo: real check
 
 });

Reply via email to