You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by at...@apache.org on 2016/06/16 07:40:33 UTC

ambari git commit: AMBARI-17259 Upgrade wizard does not respect CLUSTER.UPGRADE_DOWNGRADE_STACK authorization (atkach)

Repository: ambari
Updated Branches:
  refs/heads/trunk bae425344 -> a301994f5


AMBARI-17259 Upgrade wizard does not respect CLUSTER.UPGRADE_DOWNGRADE_STACK authorization (atkach)


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

Branch: refs/heads/trunk
Commit: a301994f5a3015411ff27b12e12369820e551321
Parents: bae4253
Author: Andrii Tkach <at...@apache.org>
Authored: Wed Jun 15 20:31:14 2016 +0300
Committer: Andrii Tkach <at...@apache.org>
Committed: Thu Jun 16 10:39:19 2016 +0300

----------------------------------------------------------------------
 ambari-web/app/app.js                           |   7 +-
 .../main/admin/stack_and_upgrade_controller.js  |   6 +-
 ambari-web/app/routes/stack_upgrade_routes.js   | 102 ++++++++++---------
 ambari-web/app/templates/application.hbs        |   6 +-
 .../admin/stack_and_upgrade_controller_test.js  |  21 +++-
 5 files changed, 87 insertions(+), 55 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/a301994f/ambari-web/app/app.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/app.js b/ambari-web/app/app.js
index 6432be3..79493a1 100644
--- a/ambari-web/app/app.js
+++ b/ambari-web/app/app.js
@@ -120,12 +120,13 @@ module.exports = Em.Application.create({
    * @param {object} options
    * @returns {boolean}
    */
-  isAuthorized: function(authRoles, options) {
+  isAuthorized: function (authRoles, options) {
     options = $.extend({ignoreWizard: false}, options);
     var result = false;
     authRoles = $.map(authRoles.split(","), $.trim);
 
-    if (!this.get('upgradeSuspended') &&
+    // When Upgrade running(not suspended) only operations related to upgrade should be allowed
+    if ((!this.get('upgradeSuspended') && !authRoles.contains('CLUSTER.UPGRADE_DOWNGRADE_STACK')) &&
         !App.get('supports.opsDuringRollingUpgrade') &&
         !['INIT', 'COMPLETED'].contains(this.get('upgradeState')) ||
         !App.auth){
@@ -136,7 +137,7 @@ module.exports = Em.Application.create({
       return false;
     }
 
-    authRoles.forEach(function(auth) {
+    authRoles.forEach(function (auth) {
       result = result || App.auth.contains(auth);
     });
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/a301994f/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js b/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
index 01a9978..e083f65 100644
--- a/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
+++ b/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
@@ -1604,8 +1604,10 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
    * @return {App.ModalPopup}
    */
   openUpgradeDialog: function () {
-    App.propertyDidChange('upgradeSuspended');
-    App.router.transitionTo('admin.stackUpgrade');
+    if (App.isAuthorized('CLUSTER.UPGRADE_DOWNGRADE_STACK')) {
+      App.propertyDidChange('upgradeSuspended');
+      App.router.transitionTo('admin.stackUpgrade');
+    }
   },
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/a301994f/ambari-web/app/routes/stack_upgrade_routes.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/routes/stack_upgrade_routes.js b/ambari-web/app/routes/stack_upgrade_routes.js
index abe5a6b..be92f28 100644
--- a/ambari-web/app/routes/stack_upgrade_routes.js
+++ b/ambari-web/app/routes/stack_upgrade_routes.js
@@ -22,59 +22,65 @@ module.exports = App.WizardRoute.extend({
   route: 'stack/upgrade',
 
   enter: function (router) {
-    router.get('mainController').dataLoading().done(function () {
-      Ember.run.next(function () {
-        //if upgrade id is absent then upgrade is completed
-        if (Em.isNone(App.db.get('MainAdminStackAndUpgrade', 'upgradeId'))) {
-          router.transitionTo('main.admin.stackAndUpgrade.versions');
-          return null;
-        }
+    if (App.isAuthorized('CLUSTER.UPGRADE_DOWNGRADE_STACK')) {
+      router.get('mainController').dataLoading().done(function () {
+        Ember.run.next(function () {
+          //if upgrade id is absent then upgrade is completed
+          if (Em.isNone(App.db.get('MainAdminStackAndUpgrade', 'upgradeId'))) {
+            router.transitionTo('main.admin.stackAndUpgrade.versions');
+            return null;
+          }
 
-        App.router.get('updateController').set('isWorking', false);
+          App.router.get('updateController').set('isWorking', false);
 
-        return App.ModalPopup.show({
-          classNames: ['full-width-modal'],
-          header: function () {
-            var controller = App.router.get('mainAdminStackAndUpgradeController');
-            if (controller.get('isDowngrade')) {
-              return Em.I18n.t('admin.stackUpgrade.dialog.downgrade.header').format(controller.get('upgradeVersion'));
-            } else {
-              return Em.I18n.t('admin.stackUpgrade.dialog.header').format(controller.get('upgradeTypeDisplayName'), controller.get('upgradeVersion'));
-            }
-          }.property('App.router.mainAdminStackAndUpgradeController.upgradeVersion', 'App.router.mainAdminStackAndUpgradeController.isDowngrade'),
-          bodyClass: App.upgradeWizardView,
-          primary: Em.I18n.t('common.dismiss'),
-          secondary: null,
-          didInsertElement: function () {
-            this._super();
-            this.fitHeight();
-            this.fitInnerHeight();
-          },
+          return App.ModalPopup.show({
+            classNames: ['full-width-modal'],
+            header: function () {
+              var controller = App.router.get('mainAdminStackAndUpgradeController');
+              if (controller.get('isDowngrade')) {
+                return Em.I18n.t('admin.stackUpgrade.dialog.downgrade.header').format(controller.get('upgradeVersion'));
+              } else {
+                return Em.I18n.t('admin.stackUpgrade.dialog.header').format(controller.get('upgradeTypeDisplayName'), controller.get('upgradeVersion'));
+              }
+            }.property('App.router.mainAdminStackAndUpgradeController.upgradeVersion', 'App.router.mainAdminStackAndUpgradeController.isDowngrade'),
+            bodyClass: App.upgradeWizardView,
+            primary: Em.I18n.t('common.dismiss'),
+            secondary: null,
+            didInsertElement: function () {
+              this._super();
+              this.fitHeight();
+              this.fitInnerHeight();
+            },
 
-          /**
-           * fit height of scrollable block inside of modal body
-           */
-          fitInnerHeight: function () {
-            var block = this.$().find('#modal > .modal-body');
-            var scrollable = this.$().find('#modal .scrollable-block');
+            /**
+             * fit height of scrollable block inside of modal body
+             */
+            fitInnerHeight: function () {
+              var block = this.$().find('#modal > .modal-body');
+              var scrollable = this.$().find('#modal .scrollable-block');
 
-            scrollable.css('max-height', Number(block.css('max-height').slice(0, -2)) - block.height());
-            block.css('max-height', 'none');
-          },
-          onPrimary: function () {
-            this.closeWizard();
-          },
-          onClose: function () {
-            this.closeWizard();
-          },
-          closeWizard: function () {
-            App.router.get('updateController').set('isWorking', true);
-            App.router.transitionTo('main.admin.stackAndUpgrade.versions');
-            this.hide();
-            location.reload();
-          }
+              scrollable.css('max-height', Number(block.css('max-height').slice(0, -2)) - block.height());
+              block.css('max-height', 'none');
+            },
+            onPrimary: function () {
+              this.closeWizard();
+            },
+            onClose: function () {
+              this.closeWizard();
+            },
+            closeWizard: function () {
+              App.router.get('updateController').set('isWorking', true);
+              App.router.transitionTo('main.admin.stackAndUpgrade.versions');
+              this.hide();
+              location.reload();
+            }
+          });
         });
       });
-    });
+    } else {
+      Em.run.next(function () {
+        App.router.transitionTo('main.views');
+      });
+    }
   }
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/a301994f/ambari-web/app/templates/application.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/application.hbs b/ambari-web/app/templates/application.hbs
index 93f0681..ce78c89 100644
--- a/ambari-web/app/templates/application.hbs
+++ b/ambari-web/app/templates/application.hbs
@@ -114,7 +114,11 @@
                     </span>
                   </span>
                 {{/if}}
-                <a class="brand cluster-name" href="#">
+                  {{#isAuthorized "CLUSTER.UPGRADE_DOWNGRADE_STACK"}}
+                    <a class="brand cluster-name" href="#">
+                  {{else}}
+                    <a class="brand cluster-name">
+                  {{/isAuthorized}}
                   {{#if App.upgradeInProgress}}
                     {{#if App.router.mainAdminStackAndUpgradeController.isDowngrade}}
                       <span

http://git-wip-us.apache.org/repos/asf/ambari/blob/a301994f/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js b/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
index 3817ace..c78c35b 100644
--- a/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
+++ b/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
@@ -329,20 +329,39 @@ describe('App.MainAdminStackAndUpgradeController', function() {
     beforeEach(function () {
       sinon.stub(App.router, 'transitionTo', Em.K);
       sinon.spy(mock, 'observer');
+      this.mockAuthorized = sinon.stub(App, 'isAuthorized');
       Em.addObserver(App, 'upgradeSuspended', mock, 'observer');
-      controller.openUpgradeDialog();
     });
     afterEach(function () {
       App.router.transitionTo.restore();
       mock.observer.restore();
+      this.mockAuthorized.restore();
       Em.removeObserver(App, 'upgradeSuspended', mock, 'observer');
     });
+
     it('should open dialog', function () {
+      this.mockAuthorized.returns(true);
+      controller.openUpgradeDialog();
       expect(App.router.transitionTo.calledWith('admin.stackUpgrade')).to.be.true;
     });
+
     it('upgradeSuspended should receive actual value', function () {
+      this.mockAuthorized.returns(true);
+      controller.openUpgradeDialog();
       expect(mock.observer.calledOnce).to.be.true;
     });
+
+    it('should not open dialog', function () {
+      this.mockAuthorized.returns(false);
+      controller.openUpgradeDialog();
+      expect(App.router.transitionTo.called).to.be.false;
+    });
+
+    it('upgradeSuspended should not receive value', function () {
+      this.mockAuthorized.returns(false);
+      controller.openUpgradeDialog();
+      expect(mock.observer.called).to.be.false;
+    });
   });
 
   describe("#runPreUpgradeCheck()", function() {