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 });
