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() {