You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by jg...@apache.org on 2018/05/16 16:38:01 UTC
[ambari] 01/02: Removed "Stack and Versions" view and a lot of
related code that is no longer needed.
This is an automated email from the ASF dual-hosted git repository.
jgolieb pushed a commit to branch branch-feature-AMBARI-14714
in repository https://gitbox.apache.org/repos/asf/ambari.git
commit 4587fc6cd38a215335063c7a473e810a47f42c32
Author: Jason Golieb <jg...@hortonworks.com>
AuthorDate: Tue May 15 14:36:05 2018 -0700
Removed "Stack and Versions" view and a lot of related code that is no longer needed.
---
ambari-web/app/app.js | 112 +-
ambari-web/app/controllers.js | 1 -
ambari-web/app/controllers/application.js | 34 -
.../app/controllers/global/cluster_controller.js | 55 -
.../app/controllers/global/update_controller.js | 1 -
.../highAvailability/progress_popup_controller.js | 3 -
.../main/admin/stack_and_upgrade_controller.js | 2226 ------------
ambari-web/app/data/controller_route.js | 4 -
ambari-web/app/mappers.js | 3 +-
.../app/mappers/socket/upgrade_state_mapper.js | 42 -
ambari-web/app/router.js | 12 +-
ambari-web/app/routes/main.js | 70 -
ambari-web/app/routes/stack_upgrade_routes.js | 95 -
ambari-web/app/templates/application.hbs | 26 -
.../app/templates/main/admin/stack_and_upgrade.hbs | 22 -
.../main/admin/stack_upgrade/services.hbs | 123 -
.../admin/stack_upgrade/stack_upgrade_wizard.hbs | 340 --
.../stack_upgrade/upgrade_configs_merge_table.hbs | 2 +-
.../upgrade_configs_recommend_table.hbs | 2 +-
.../admin/stack_upgrade/upgrade_version_box.hbs | 116 -
.../admin/stack_upgrade/upgrade_version_column.hbs | 121 -
.../main/admin/stack_upgrade/versions.hbs | 71 -
.../app/templates/main/host/stack_versions.hbs | 10 +-
ambari-web/app/utils/ajax/ajax.js | 41 -
ambari-web/app/views.js | 7 -
.../common/modal_popups/cluster_check_popup.js | 38 +-
ambari-web/app/views/main/admin.js | 7 -
.../app/views/main/admin/stack_and_upgrade_view.js | 24 -
.../views/main/admin/stack_upgrade/menu_view.js | 70 -
.../main/admin/stack_upgrade/services_view.js | 146 -
.../stack_upgrade/upgrade_version_box_view.js | 635 ----
.../stack_upgrade/upgrade_version_column_view.js | 120 -
.../admin/stack_upgrade/upgrade_wizard_view.js | 520 ---
.../main/admin/stack_upgrade/versions_view.js | 254 --
.../app/views/main/host/stack_versions_view.js | 7 -
ambari-web/app/views/main/menu.js | 8 -
ambari-web/test/app_test.js | 176 -
.../controllers/global/cluster_controller_test.js | 152 -
.../controllers/global/update_controller_test.js | 1 -
.../progress_popup_controller_test.js | 6 -
.../admin/stack_and_upgrade_controller_test.js | 3606 --------------------
.../mappers/socket/upgrade_state_mapper_test.js | 80 -
.../main/admin/stack_upgrade/menu_view_test.js | 59 -
.../main/admin/stack_upgrade/services_view_test.js | 91 -
.../stack_upgrade/upgrade_version_box_view_test.js | 1552 ---------
.../upgrade_version_column_view_test.js | 193 --
.../stack_upgrade/upgrade_wizard_view_test.js | 956 ------
.../main/admin/stack_upgrade/version_view_test.js | 604 ----
48 files changed, 59 insertions(+), 12785 deletions(-)
diff --git a/ambari-web/app/app.js b/ambari-web/app/app.js
index 0dc9ca9..9614e28 100644
--- a/ambari-web/app/app.js
+++ b/ambari-web/app/app.js
@@ -45,7 +45,7 @@ module.exports = Em.Application.create({
isClusterUser: false,
isPermissionDataLoaded: false,
auth: undefined,
- isOnlyViewUser: function() {
+ isOnlyViewUser: function () {
return App.auth && (App.auth.length == 0 || (App.isAuthorized('VIEW.USE') && App.auth.length == 1));
}.property('auth'),
@@ -62,102 +62,20 @@ module.exports = Em.Application.create({
isKerberosEnabled: false,
/**
- * state of stack upgrade process
- * states:
- * - NOT_REQUIRED
- * - PENDING
- * - IN_PROGRESS
- * - HOLDING
- * - COMPLETED
- * - ABORTED
- * - HOLDING_FAILED
- * - HOLDING_TIMEDOUT
- * @type {String}
- */
- upgradeState: 'NOT_REQUIRED',
-
- /**
- * Check if upgrade is in INIT state
- * 'INIT' is set on upgrade start and when it's finished
- * @type {boolean}
- */
- upgradeInit: Em.computed.equal('upgradeState', 'NOT_REQUIRED'),
-
- /**
- * flag is true when upgrade process is running
- * @returns {boolean}
- */
- upgradeInProgress: Em.computed.equal('upgradeState', 'IN_PROGRESS'),
-
- /**
- * Checks if update process is completed
- * @type {boolean}
- */
- upgradeCompleted: Em.computed.equal('upgradeState', 'COMPLETED'),
-
- /**
- * flag is true when upgrade process is waiting for user action
- * to proceed, retry, perform manual steps etc.
- * @returns {boolean}
- */
- upgradeHolding: function() {
- return this.get('upgradeState').contains("HOLDING") || this.get('upgradeAborted');
- }.property('upgradeState', 'upgradeAborted'),
-
- /**
- * flag is true when upgrade process is aborted
- * SHOULD behave similar to HOLDING_FAILED state
- * @returns {boolean}
- */
- upgradeAborted: function () {
- return this.get('upgradeState') === "ABORTED" && !App.router.get('mainAdminStackAndUpgradeController.isSuspended');
- }.property('upgradeState', 'router.mainAdminStackAndUpgradeController.isSuspended'),
-
- /**
- * flag is true when upgrade process is suspended
- * @returns {boolean}
- */
- upgradeSuspended: function () {
- return this.get('upgradeState') === "ABORTED" && App.router.get('mainAdminStackAndUpgradeController.isSuspended');
- }.property('upgradeState', 'router.mainAdminStackAndUpgradeController.isSuspended'),
-
- /**
- * RU is running
- * @type {boolean}
- */
- upgradeIsRunning: Em.computed.or('upgradeInProgress', 'upgradeHolding'),
-
- /**
- * flag is true when upgrade process is running or suspended
- * or wizard used by another user
- * @returns {boolean}
- */
- wizardIsNotFinished: function () {
- return this.get('upgradeIsRunning') ||
- this.get('upgradeSuspended') ||
- App.router.get('wizardWatcherController.isNonWizardUser');
- }.property('upgradeIsRunning', 'upgradeAborted', 'router.wizardWatcherController.isNonWizardUser', 'upgradeSuspended'),
-
- /**
* @param {string} authRoles
* @returns {boolean}
*/
havePermissions: function (authRoles) {
var result = false;
- authRoles = $.map(authRoles.split(","), $.trim);
-
- // 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') &&
- !['NOT_REQUIRED', 'COMPLETED'].contains(this.get('upgradeState')) ||
- !App.auth){
- return false;
- }
- authRoles.forEach(function (auth) {
- result = result || App.auth.contains(auth);
- });
+ if (App.auth) {
+ authRoles = $.map(authRoles.split(","), $.trim);
+ authRoles.forEach(function (auth) {
+ result = result || App.auth.contains(auth);
+ });
+ }
+
return result;
},
/**
@@ -174,7 +92,7 @@ module.exports = Em.Application.create({
*/
stackVersionURL: function () {
return '/stacks/{0}/versions/{1}'.format(this.get('currentStackName') || 'HDP', this.get('currentStackVersionNumber'));
- }.property('currentStackName','currentStackVersionNumber'),
+ }.property('currentStackName', 'currentStackVersionNumber'),
falconServerURL: function () {
var falconService = this.Service.find().findProperty('serviceName', 'FALCON');
@@ -188,7 +106,7 @@ module.exports = Em.Application.create({
* Because this value is retrieved from the cardinality of the component, it is safe to keep in app.js
* since its value will not change during the lifetime of the application.
*/
- doesATSSupportKerberos: function() {
+ doesATSSupportKerberos: function () {
var YARNService = App.StackServiceComponent.find().filterProperty('serviceName', 'YARN');
if (YARNService.length) {
var ATS = App.StackServiceComponent.find().findProperty('componentName', 'APP_TIMELINE_SERVER');
@@ -201,7 +119,7 @@ module.exports = Em.Application.create({
clusterName: null,
clockDistance: null, // server clock - client clock
currentStackVersion: '',
- currentStackName: function() {
+ currentStackName: function () {
return Em.get((this.get('currentStackVersion') || this.get('defaultStackVersion')).match(/(.+)-\d.+/), '1');
}.property('currentStackVersion', 'defaultStackVersion'),
@@ -260,7 +178,7 @@ module.exports = Em.Application.create({
*/
isRMHaEnabled: function () {
var result = false;
- var rmStackComponent = App.StackServiceComponent.find().findProperty('componentName','RESOURCEMANAGER');
+ var rmStackComponent = App.StackServiceComponent.find().findProperty('componentName', 'RESOURCEMANAGER');
if (rmStackComponent && rmStackComponent.get('isMultipleAllowed')) {
result = this.HostComponent.find().filterProperty('componentName', 'RESOURCEMANAGER').length > 1;
}
@@ -275,7 +193,7 @@ module.exports = Em.Application.create({
*/
isRAHaEnabled: function () {
var result = false;
- var raStackComponent = App.StackServiceComponent.find().findProperty('componentName','RANGER_ADMIN');
+ var raStackComponent = App.StackServiceComponent.find().findProperty('componentName', 'RANGER_ADMIN');
if (raStackComponent && raStackComponent.get('isMultipleAllowed')) {
result = App.HostComponent.find().filterProperty('componentName', 'RANGER_ADMIN').length > 1;
}
@@ -326,11 +244,11 @@ module.exports = Em.Application.create({
return App.StackService.find().filterProperty('isServiceMetricsService').mapProperty('serviceName');
}.property('App.router.clusterController.isLoaded'),
- supportsServiceCheck: function() {
+ supportsServiceCheck: function () {
return App.StackService.find().filterProperty('serviceCheckSupported').mapProperty('serviceName');
}.property('App.router.clusterController.isLoaded'),
- supportsDeleteViaUI: function() {
+ supportsDeleteViaUI: function () {
return App.StackService.find().filterProperty('supportDeleteViaUi').mapProperty('serviceName');
}.property('App.router.clusterController.isLoaded')
}),
diff --git a/ambari-web/app/controllers.js b/ambari-web/app/controllers.js
index 7f1b494..7e5b046 100644
--- a/ambari-web/app/controllers.js
+++ b/ambari-web/app/controllers.js
@@ -89,7 +89,6 @@ require('controllers/main/admin/highAvailability/journalNode/step5_controller');
require('controllers/main/admin/highAvailability/journalNode/step6_controller');
require('controllers/main/admin/highAvailability/journalNode/step7_controller');
require('controllers/main/admin/highAvailability/journalNode/step8_controller');
-require('controllers/main/admin/stack_and_upgrade_controller');
require('controllers/main/admin/stack_upgrade_history_controller');
require('controllers/main/admin/serviceGroups_controller');
require('controllers/main/admin/serviceAccounts_controller');
diff --git a/ambari-web/app/controllers/application.js b/ambari-web/app/controllers/application.js
index d813d89..b36e529 100644
--- a/ambari-web/app/controllers/application.js
+++ b/ambari-web/app/controllers/application.js
@@ -74,40 +74,6 @@ App.ApplicationController = Em.Controller.extend(App.Persist, {
*/
showUpgradeLabel: Em.computed.or('App.upgradeInProgress', 'App.upgradeHolding', 'App.upgradeSuspended'),
- /**
- * @return {{msg: string, cls: string, icon: string}}
- */
- upgradeMap: function () {
- var upgradeInProgress = App.get('upgradeInProgress');
- var upgradeHolding = App.get('upgradeHolding');
- var upgradeSuspended = App.get('upgradeSuspended');
- var isDowngrade = App.router.get('mainAdminStackAndUpgradeController.isDowngrade');
- var typeSuffix = isDowngrade ? 'downgrade' : 'upgrade';
- var hasUpgradePrivilege = App.isAuthorized('CLUSTER.UPGRADE_DOWNGRADE_STACK');
- if (upgradeInProgress) {
- return {
- cls: hasUpgradePrivilege? 'upgrade-in-progress' : 'upgrade-in-progress not-allowed-cursor',
- icon: 'glyphicon-cog',
- msg: Em.I18n.t('admin.stackVersions.version.' + typeSuffix + '.running')
- }
- }
- if (upgradeHolding) {
- return {
- cls: hasUpgradePrivilege? 'upgrade-holding' : 'upgrade-holding not-allowed-cursor',
- icon: 'glyphicon-pause',
- msg: Em.I18n.t('admin.stackVersions.version.' + typeSuffix + '.pause')
- }
- }
- if (upgradeSuspended) {
- return {
- cls: hasUpgradePrivilege? 'upgrade-aborted' : 'upgrade-aborted not-allowed-cursor',
- icon: 'glyphicon-pause',
- msg: Em.I18n.t('admin.stackVersions.version.' + typeSuffix + '.suspended')
- }
- }
- return {};
- }.property('App.upgradeInProgress', 'App.upgradeHolding', 'App.upgradeSuspended', 'App.router.mainAdminStackAndUpgradeController.isDowngrade'),
-
startKeepAlivePoller: function() {
if (!this.get('isPollerRunning')) {
this.set('isPollerRunning',true);
diff --git a/ambari-web/app/controllers/global/cluster_controller.js b/ambari-web/app/controllers/global/cluster_controller.js
index e0122f2..0763ab7 100644
--- a/ambari-web/app/controllers/global/cluster_controller.js
+++ b/ambari-web/app/controllers/global/cluster_controller.js
@@ -182,7 +182,6 @@ App.ClusterController = Em.Controller.extend(App.ReloadPopupMixin, {
hostsController.updateStatusCounters();
this.loadClusterInfo();
- this.restoreUpgradeState();
App.router.get('wizardWatcherController').getUser();
this.loadClusterDataToModel();
@@ -309,60 +308,6 @@ App.ClusterController = Em.Controller.extend(App.ReloadPopupMixin, {
});
},
- /**
- * restore upgrade status from server
- * and make call to get latest status from server
- * Also loading all upgrades to App.StackUpgradeHistory model
- */
- restoreUpgradeState: function () {
- var self = this;
- return this.getAllUpgrades().done(function (data) {
- var upgradeController = App.router.get('mainAdminStackAndUpgradeController');
- var allUpgrades = data.items.sortProperty('Upgrade.request_id');
- var lastUpgradeData = allUpgrades.pop();
- if (lastUpgradeData){
- var status = lastUpgradeData.Upgrade.request_status;
- var lastUpgradeNotFinished = (self.isSuspendedState(status) || self.isRunningState(status));
- if (lastUpgradeNotFinished){
- /**
- * No need to display history if there is only one running or suspended upgrade.
- * Because UI still needs to provide user the option to resume the upgrade via the Upgrade Wizard UI.
- * If there is more than one upgrade. Show/Hive the tab based on the status.
- */
- var hasFinishedUpgrades = allUpgrades.some(function (item) {
- var status = item.Upgrade.request_status;
- if (!self.isRunningState(status)){
- return true;
- }
- }, self);
- App.set('upgradeHistoryAvailable', hasFinishedUpgrades);
- } else {
- //There is at least one finished upgrade. Display it.
- App.set('upgradeHistoryAvailable', true);
- }
- } else {
- //There is no upgrades at all.
- App.set('upgradeHistoryAvailable', false);
- }
-
- //completed upgrade shouldn't be restored
- if (lastUpgradeData) {
- if (lastUpgradeData.Upgrade.request_status !== "COMPLETED") {
- upgradeController.restoreLastUpgrade(lastUpgradeData);
- }
- } else {
- upgradeController.initDBProperties();
- }
-
- App.stackUpgradeHistoryMapper.map(data);
- upgradeController.loadStackVersionsToModel(true).done(function () {
- upgradeController.loadCompatibleVersions();
- upgradeController.updateCurrentStackVersion();
- App.set('stackVersionsAvailable', App.StackVersion.find().content.length > 0);
- });
- });
- },
-
isRunningState: function(status){
if (status) {
return "IN_PROGRESS" === status || "PENDING" === status || status.contains("HOLDING");
diff --git a/ambari-web/app/controllers/global/update_controller.js b/ambari-web/app/controllers/global/update_controller.js
index 14cd3cc..5f38eef 100644
--- a/ambari-web/app/controllers/global/update_controller.js
+++ b/ambari-web/app/controllers/global/update_controller.js
@@ -209,7 +209,6 @@ App.UpdateController = Em.Controller.extend({
App.StompClient.subscribe('/events/hosts', App.hostStateMapper.map.bind(App.hostStateMapper));
App.StompClient.subscribe('/events/alert_definitions', App.alertDefinitionsMapperAdapter.map.bind(App.alertDefinitionsMapperAdapter));
App.StompClient.subscribe('/events/alert_group', App.alertGroupsMapperAdapter.map.bind(App.alertGroupsMapperAdapter));
- App.StompClient.subscribe('/events/upgrade', App.upgradeStateMapper.map.bind(App.upgradeStateMapper));
},
/**
diff --git a/ambari-web/app/controllers/main/admin/highAvailability/progress_popup_controller.js b/ambari-web/app/controllers/main/admin/highAvailability/progress_popup_controller.js
index 9d8f33e..133ae41 100644
--- a/ambari-web/app/controllers/main/admin/highAvailability/progress_popup_controller.js
+++ b/ambari-web/app/controllers/main/admin/highAvailability/progress_popup_controller.js
@@ -160,9 +160,6 @@ App.HighAvailabilityProgressPopupController = Ember.Controller.extend({
this.calculateHostsData(hostsData);
App.HostPopup.initPopup(popupTitle, this, false, this.get("requestIds")[0]);
if (this.isRequestRunning(hostsData)) {
- if (this.get('progressController.name') === 'mainAdminStackAndUpgradeController') {
- this.doPolling();
- }
this.addObserver('progressController.logs.length', this, 'getDataFromProgressController');
}
}
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
deleted file mode 100644
index 50c0902..0000000
--- a/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
+++ /dev/null
@@ -1,2226 +0,0 @@
-/**
- * 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');
-var stringUtils = require('utils/string_utils');
-
-App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage, {
- name: 'mainAdminStackAndUpgradeController',
-
- /**
- * @type {boolean}
- */
- isLoaded: false,
-
- /**
- * @type {object}
- * @default null
- */
- upgradeData: null,
-
- /**
- * @type {number}
- * @default null
- */
- upgradeId: null,
-
- /**
- * Start version of upgrade
- * @type {string}
- * @default null
- */
- fromVersion: null,
-
- /**
- * @type {string}
- * @default null
- */
- upgradeVersion: null,
-
- /**
- * @type {string}
- * @default null
- */
- upgradeType: null,
-
- /**
- * @type {Em.Object}
- */
- upgradeTypeConfig: Em.computed.findByKey('upgradeMethods', 'type', 'upgradeType'),
-
- /**
- * @type {boolean}
- */
- cantBeStarted: Em.computed.alias('upgradeTypeConfig.cantBeStarted'),
-
- /**
- * @type {boolean}
- */
- showPauseButton: Em.computed.and('!App.upgradeSuspended', '!App.upgradeCompleted', '!App.upgradeInit'),
-
- /**
- * @type {boolean}
- * @default true
- */
- downgradeAllowed: true,
-
- /**
- * @type {string}
- * @default null
- */
- upgradeTypeDisplayName: null,
-
- /**
- * @type {object}
- * @default null
- */
- failuresTolerance: null,
-
- /**
- * @type {boolean}
- * @default false
- */
- isDowngrade: false,
-
- /**
- * flag which indicate that upgrade suspended
- * @type {boolean}
- * @default false
- */
- isSuspended: false,
-
- /**
- * version that currently applied to server
- * should be plain object, because stored to localStorage
- * @type {object|null}
- */
- currentVersion: null,
-
- /**
- * versions to which cluster could be upgraded
- * @type {Array}
- */
- targetVersions: [],
-
- /**
- * @type {object}
- * @default null
- */
- slaveComponentStructuredInfo: null,
-
- /**
- * @type {Array}
- */
- serviceCheckFailuresServicenames: [],
-
- /**
- * @type {boolean}
- * @default false
- */
- isUpgradeTypesLoaded: false,
-
- /**
- * @type {string}
- */
- getSupportedUpgradeError: '',
-
- /**
- * Restricted type of upgrade, can't be viewed in wizard.
- * It's status visible only in upgrade status label
- * @type {boolean}
- * @default false
- */
- isWizardRestricted: false,
-
- /**
- * @type {string}
- */
- wizardModalTitle: function () {
- var repoVersion = App.RepositoryVersion.find().findProperty('repositoryVersion', this.get('toVersion'));
- return this.getUpgradeDowngradeHeader(
- this.get('upgradeTypeDisplayName'),
- this.get('upgradeVersion'),
- this.get('isDowngrade'),
- repoVersion
- );
- }.property('upgradeTypeDisplayName', 'upgradeVersion', 'isDowngrade'),
-
-
- /**
- * @param {string} upgradeType
- * @param {string} upgradeVersion
- * @param {boolean} isDowngrade
- * @param {boolean} isPatch
- * @returns {string}
- */
- getUpgradeDowngradeHeader: function(upgradeType, upgradeVersion, isDowngrade, repoVersion) {
- if (isDowngrade) {
- return Em.I18n.t('admin.stackUpgrade.dialog.downgrade.header').format(upgradeVersion);
- }
- if (repoVersion && repoVersion.get('isPatch')) {
- return Em.I18n.t('admin.stackUpgrade.dialog.upgrade.patch.header').format(upgradeType, upgradeVersion);
- }
- if (repoVersion && repoVersion.get('isMaint')) {
- return Em.I18n.t('admin.stackUpgrade.dialog.upgrade.maint.header').format(upgradeType, upgradeVersion);
- }
- return Em.I18n.t('admin.stackUpgrade.dialog.upgrade.header').format(upgradeType, upgradeVersion);
- },
-
- /**
- * methods through which cluster could be upgraded, "allowed" indicated if the method is allowed
- * by stack upgrade path
- * @type {Array}
- */
- upgradeMethods: [
- Em.Object.create({
- displayName: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.RU.title'),
- type: 'ROLLING',
- icon: "glyphicon glyphicon-dashboard",
- description: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.RU.description'),
- selected: false,
- allowed: true,
- isCheckComplete: false,
- isCheckRequestInProgress: false,
- precheckResultsMessage: '',
- precheckResultsTitle: '',
- action: '',
- isWizardRestricted: false
- }),
- Em.Object.create({
- displayName: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.EU.title'),
- type: 'NON_ROLLING',
- icon: "icon-bolt",
- description: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.EU.description'),
- selected: false,
- allowed: true,
- isCheckComplete: false,
- isCheckRequestInProgress: false,
- precheckResultsMessage: '',
- precheckResultsTitle: '',
- action: '',
- isWizardRestricted: false
- }),
- Em.Object.create({
- displayName: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.HOU.title'),
- type: 'HOST_ORDERED',
- icon: "icon-bolt",
- description: '',
- selected: false,
- allowed: false,
- isCheckComplete: false,
- isCheckRequestInProgress: false,
- precheckResultsMessage: '',
- precheckResultsTitle: '',
- action: '',
- isWizardRestricted: !App.supports.enabledWizardForHostOrderedUpgrade,
- cantBeStarted: true
- })
- ],
-
- /**
- * pre-check messages map
- * @type {object}
- */
- preCheckMessages: {
- 'WARNING': {
- template: 'admin.stackUpgrade.preCheck.warning.message',
- precheckResultsMessageClass: 'ORANGE',
- isPrecheckFailed: false,
- precheckResultsMessageIconClass: 'glyphicon glyphicon-warning-sign'
- },
- 'BYPASS': {
- template: 'admin.stackUpgrade.preCheck.bypass.message',
- precheckResultsMessageClass: 'RED',
- isPrecheckFailed: false,
- precheckResultsMessageIconClass: 'glyphicon glyphicon-remove',
- bypassedFailures: true
- },
- 'FAIL': {
- template: 'admin.stackUpgrade.preCheck.fail.message',
- precheckResultsMessageClass: 'RED',
- isPrecheckFailed: true,
- precheckResultsMessageIconClass: 'glyphicon glyphicon-remove'
- }
- },
-
- runningCheckRequests: [],
-
- /**
- * @type {boolean} true if some request that should disable actions is in progress
- */
- requestInProgress: false,
-
- /**
- * @type {number} repo id, request for which is currently in progress
- */
- requestInProgressRepoId: null,
-
- /**
- * @type {boolean} true while no updated upgrade info is loaded after retry
- */
- isRetryPending: false,
-
- /**
- * properties that stored to localStorage to resume wizard progress
- */
- wizardStorageProperties: [
- 'fromVersion',
- 'upgradeId',
- 'upgradeVersion',
- 'toVersion',
- 'currentVersion',
- 'upgradeTypeDisplayName',
- 'upgradeType',
- 'failuresTolerance',
- 'isDowngrade',
- 'downgradeAllowed',
- 'isSuspended',
- 'isWizardRestricted'
- ],
-
- /**
- * mutable properties of Upgrade Task
- * @type {Array}
- */
- taskDetailsProperties: ['status', 'stdout', 'stderr', 'error_log', 'host_name', 'output_log'],
-
- /**
- * Context for Finalize item
- * @type {string}
- */
- finalizeContext: 'Confirm Finalize',
-
- /**
- * Context for Slave component failures manual item
- * @type {string}
- */
- slaveFailuresContext: "Check Component Versions",
-
- /**
- * Context for Service check (may include slave component) failures manual item
- * @type {string}
- */
- serviceCheckFailuresContext: "Verifying Skipped Failures",
-
- /**
- * Check if current item is Finalize
- * @type {boolean}
- */
- isFinalizeItem: false,
-
- isLoadUpgradeDataPending: false,
-
- /**
- * path to the mock json
- * @type {String}
- */
- mockRepoUrl: '/data/stack_versions/repo_versions_all.json',
-
- /**
- * api to get RepoVersions
- * @type {String}
- */
- realRepoUrl: function () {
- return App.get('apiPrefix') + '/stacks?fields=versions/repository_versions/RepositoryVersions,' +
- 'versions/repository_versions/operating_systems/*,versions/repository_versions/operating_systems/repositories/*';
- }.property('App.stackVersionURL'),
-
- /**
- * path to the mock json
- * @type {String}
- */
- mockStackUrl: '/data/stack_versions/stack_version_all.json',
-
- /**
- * api to get ClusterStackVersions with repository_versions (use to init data load)
- * @type {String}
- */
- realStackUrl: function () {
- return App.get('apiPrefix') + '/clusters/' + App.get('clusterName') +
- '/stack_versions?fields=*,repository_versions/*,repository_versions/operating_systems/OperatingSystems/*,repository_versions/operating_systems/repositories/*';
- }.property('App.clusterName'),
-
- /**
- * api to get ClusterStackVersions without repository_versions (use to update data)
- * @type {String}
- */
- realUpdateUrl: function () {
- return App.get('apiPrefix') + '/clusters/' + App.get('clusterName') + '/stack_versions?fields=ClusterStackVersions/*';
- }.property('App.clusterName'),
-
- /**
- * Determines if list of services with checks that failed and were skipped by user during the upgrade is loaded
- * @type {boolean}
- */
- areSkippedServiceChecksLoaded: false,
-
- /**
- * List of services with checks that failed and were skipped by user during the upgrade
- * @type {array}
- */
- skippedServiceChecks: [],
-
- /**
- * status of tasks/items/groups which should be grayed out and disabled
- * @type {Array}
- */
- nonActiveStates: ['PENDING', 'ABORTED'],
-
- /**
- * status of Upgrade request
- * @type {string}
- */
- requestStatus: function () {
- if (this.get('upgradeData.Upgrade') && App.get('upgradeSuspended')) {
- return 'SUSPENDED';
- } else if (this.get('upgradeData.Upgrade')){
- return this.get('upgradeData.Upgrade.request_status');
- } else {
- return 'INIT';
- }
- }.property('upgradeData.Upgrade.request_status', 'App.upgradeSuspended'),
-
- init: function () {
- this.initDBProperties();
- },
-
- /**
- * restore data from localStorage
- */
- initDBProperties: function () {
- var props = this.getDBProperties(this.get('wizardStorageProperties'));
- Em.keys(props).forEach(function (k) {
- if (!Em.isNone(props[k])) {
- this.set(k, props[k]);
- }
- }, this);
- },
-
- /**
- * load all data:
- * - upgrade data
- * - stack versions
- * - repo versions
- */
- load: function () {
- var dfd = $.Deferred();
- var self = this;
-
- this.loadStackVersionsToModel(true).done(function () {
- self.loadRepoVersionsToModel().done(function() {
- self.loadCompatibleVersions().done(function() {
- self.updateCurrentStackVersion();
- dfd.resolve();
- });
- });
- });
- return dfd.promise();
- },
-
- updateCurrentStackVersion: function(){
- var currentVersion = App.StackVersion.find().findProperty('state', 'CURRENT');
- if (currentVersion) {
- this.set('currentVersion', {
- stack_name: currentVersion.get('repositoryVersion.stackVersionType'),
- repository_version: currentVersion.get('repositoryVersion.repositoryVersion'),
- repository_name: currentVersion.get('repositoryVersion.displayName'),
- id: currentVersion.get('repositoryVersion.id')
- });
- }
- },
-
- /**
- * load upgrade tasks by upgrade id
- * @return {$.Deferred}
- * @param {boolean} onlyState
- */
- loadUpgradeData: function (onlyState) {
- var upgradeId = this.get('upgradeId'),
- deferred = $.Deferred(),
- self = this;
-
- if (Em.isNone(upgradeId)) {
- deferred.resolve();
- } else {
- this.set('isLoadUpgradeDataPending', true);
- App.ajax.send({
- name: (onlyState) ? 'admin.upgrade.state' : 'admin.upgrade.data',
- sender: this,
- data: {
- id: upgradeId
- },
- success: 'loadUpgradeDataSuccessCallback'
- }).then(deferred.resolve).always(function () {
- self.set('isLoadUpgradeDataPending', false);
- });
- }
- return deferred.promise();
- },
-
- /**
- * parse and push upgrade tasks to controller
- * @param data
- */
- loadUpgradeDataSuccessCallback: function (data) {
- if (Em.isNone(data)) return;
- App.set('upgradeState', data.Upgrade.request_status);
- this.setDBProperty('upgradeState', data.Upgrade.request_status);
- this.set('isSuspended', data.Upgrade.suspended);
- this.setDBProperty('isSuspended', data.Upgrade.suspended);
- if (data.upgrade_groups) {
- this.updateUpgradeData(data);
- }
- if (this.get('isRetryPending') && data.Upgrade.request_status !== 'ABORTED') {
- this.setProperties({
- requestInProgress: false,
- isRetryPending: false
- });
- }
- if (data.Upgrade.request_status === 'COMPLETED') {
- this.finish();
- }
- },
-
- loadCompatibleVersions: function() {
- return App.ajax.send({
- name: 'admin.upgrade.get_compatible_versions',
- sender: this,
- data: {
- stackName: App.get('currentStackName'),
- stackVersion: App.get('currentStackVersionNumber')
- },
- success: 'loadCompatibleVersionsSuccessCallback'
- });
- },
-
- /**
- *
- * @param {object} data
- */
- loadCompatibleVersionsSuccessCallback: function(data) {
- App.RepositoryVersion.find().forEach(function(repo) {
- var version = repo.get('repositoryVersion');
- repo.set('isCompatible', data.items.someProperty('CompatibleRepositoryVersions.repository_version', version));
- });
- },
-
- /**
- * update data of Upgrade
- * @param {object} newData
- */
- updateUpgradeData: function (newData) {
- var oldData = this.get('upgradeData'),
- nonActiveStates = this.get('nonActiveStates'),
- groupsMap = {},
- itemsMap = {};
-
- if (Em.isNone(oldData) || (newData.upgrade_groups.length !== oldData.upgradeGroups.length)) {
- this.initUpgradeData(newData);
- } else {
- //create entities maps
- newData.upgrade_groups.forEach(function (newGroup) {
- groupsMap[newGroup.UpgradeGroup.group_id] = newGroup.UpgradeGroup;
- newGroup.upgrade_items.forEach(function (item) {
- itemsMap[item.UpgradeItem.stage_id] = item.UpgradeItem;
- })
- });
-
- //update existed entities with new data
- oldData.upgradeGroups.forEach(function (oldGroup) {
- oldGroup.set('status', groupsMap[oldGroup.get('group_id')].status);
- oldGroup.set('display_status', groupsMap[oldGroup.get('group_id')].display_status);
- oldGroup.set('progress_percent', groupsMap[oldGroup.get('group_id')].progress_percent);
- oldGroup.set('completed_task_count', groupsMap[oldGroup.get('group_id')].completed_task_count);
- oldGroup.upgradeItems.forEach(function (item) {
- item.set('status', itemsMap[item.get('stage_id')].status);
- item.set('display_status', itemsMap[item.get('stage_id')].display_status);
- item.set('progress_percent', itemsMap[item.get('stage_id')].progress_percent);
- });
- var hasExpandableItems = oldGroup.upgradeItems.some(function (item) {
- return !nonActiveStates.contains(item.get('status'));
- });
- oldGroup.set('hasExpandableItems', hasExpandableItems);
- });
- oldData.set('Upgrade', newData.Upgrade);
- }
- },
-
- /**
- * change structure of Upgrade
- * In order to maintain nested views in template object should have direct link to its properties, for example
- * item.UpgradeItem.<properties> -> item.<properties>
- * @param {object} newData
- */
- initUpgradeData: function (newData) {
- var upgradeGroups = [],
- nonActiveStates = this.get('nonActiveStates');
-
- //wrap all entities into App.upgradeEntity
- newData.upgrade_groups.forEach(function (newGroup) {
- var hasExpandableItems = newGroup.upgrade_items.some(function (item) {
- return !nonActiveStates.contains(item.UpgradeItem.status);
- }),
- oldGroup = App.upgradeEntity.create({type: 'GROUP', hasExpandableItems: hasExpandableItems}, newGroup.UpgradeGroup),
- upgradeItems = [];
- newGroup.upgrade_items.forEach(function (item) {
- var oldItem = App.upgradeEntity.create({type: 'ITEM'}, item.UpgradeItem);
- this.formatMessages(oldItem);
- oldItem.set('tasks', []);
- upgradeItems.pushObject(oldItem);
- }, this);
- upgradeItems.reverse();
- oldGroup.set('upgradeItems', upgradeItems);
- upgradeGroups.pushObject(oldGroup);
- }, this);
- upgradeGroups.reverse();
- this.set('upgradeData', Em.Object.create({
- upgradeGroups: upgradeGroups,
- Upgrade: newData.Upgrade
- }));
- this.set('downgradeAllowed', newData.Upgrade.downgrade_allowed);
- this.setDBProperty('downgradeAllowed', newData.Upgrade.downgrade_allowed);
- },
-
- /**
- * format upgrade item text
- * @param {App.upgradeEntity} oldItem
- */
- formatMessages: function (oldItem) {
- var text = oldItem.get('text');
- var messages = [];
-
- try {
- var messageArray = JSON.parse(text);
- for (var i = 0; i < messageArray.length; i++) {
- messages.push(messageArray[i].message);
- }
- oldItem.set('text', messages.join(' '));
- } catch (err) {
- console.warn('Upgrade Item has malformed text');
- }
- oldItem.set('messages', messages);
- },
-
- /**
- * request Upgrade Item and its tasks from server
- * @param {Em.Object} item
- * @param {Function} customCallback
- * @return {$.ajax}
- */
- getUpgradeItem: function (item, customCallback) {
- return App.ajax.send({
- name: 'admin.upgrade.upgrade_item',
- sender: this,
- data: {
- upgradeId: item.get('request_id'),
- groupId: item.get('group_id'),
- stageId: item.get('stage_id')
- },
- success: customCallback || 'getUpgradeItemSuccessCallback'
- });
- },
-
- /**
- * success callback of <code>getTasks</code>
- * @param {object} data
- */
- getUpgradeItemSuccessCallback: function (data) {
- this.get('upgradeData.upgradeGroups').forEach(function (group) {
- if (group.get('group_id') === data.UpgradeItem.group_id) {
- group.get('upgradeItems').forEach(function (item) {
- if (item.get('stage_id') === data.UpgradeItem.stage_id) {
- if (item.get('tasks.length')) {
- data.tasks.forEach(function (task) {
- var currentTask = item.get('tasks').findProperty('id', task.Tasks.id);
- this.get('taskDetailsProperties').forEach(function (property) {
- currentTask.set(property, task.Tasks[property]);
- }, this);
- }, this);
- } else {
- var tasks = [];
- data.tasks.forEach(function (task) {
- tasks.pushObject(App.upgradeEntity.create({type: 'TASK'}, task.Tasks));
- });
- item.set('tasks', tasks);
- }
- item.set('isTasksLoaded', true);
- }
- }, this);
- }
- }, this);
- },
-
- /**
- * Failures info may includes service_check and host_component failures. These two types should be displayed separately.
- */
- getServiceCheckItemSuccessCallback: function(data) {
- var task = data.tasks[0];
- var info = {
- hosts: [],
- host_detail: {}
- };
-
- if (task && task.Tasks && task.Tasks.structured_out && task.Tasks.structured_out.failures) {
- this.set('serviceCheckFailuresServicenames', task.Tasks.structured_out.failures.service_check || []);
- if (task.Tasks.structured_out.failures.host_component) {
- for (var hostname in task.Tasks.structured_out.failures.host_component){
- info.hosts.push(hostname);
- }
- info.host_detail = task.Tasks.structured_out.failures.host_component;
- }
- this.set('slaveComponentStructuredInfo', info);
- }
- },
-
- getSlaveComponentItemSuccessCallback: function(data) {
- var info = data.tasks[0];
- if (info && info.Tasks && info.Tasks.structured_out) {
- this.set('slaveComponentStructuredInfo', info.Tasks.structured_out);
- }
- },
-
- /**
- * downgrade confirmation popup
- * @param {object} event
- */
- confirmDowngrade: function (event) {
- var self = this;
- if(!this.get('currentVersion')){
- this.updateCurrentStackVersion();
- }
- var currentVersion = this.get('currentVersion');
- return App.showConfirmationPopup(
- function() {
- self.downgrade.call(self, currentVersion, event);
- },
- Em.I18n.t('admin.stackUpgrade.downgrade.body').format(currentVersion.repository_name),
- null,
- Em.I18n.t('admin.stackUpgrade.dialog.downgrade.header').format(this.get('upgradeVersion')),
- Em.I18n.t('admin.stackUpgrade.downgrade.proceed')
- );
- },
-
- /**
- * make call to start downgrade process
- * @param {object} currentVersion
- * @param {object} event
- */
- downgrade: function (currentVersion, event) {
- var self = this;
- this.set('requestInProgress', true);
- this.abortUpgrade().done(function() {
- var interval = setInterval(function() {
- if (self.get('upgradeData.Upgrade.request_status') == 'ABORTED') {
- clearInterval(interval);
- self.startDowngrade(currentVersion);
- }
- }, 1000);
- });
- },
-
- /**
- * abort upgrade (in order to start Downgrade)
- */
- abortUpgrade: function () {
- var errorCallback = this.get('isDowngrade') ? 'abortDowngradeErrorCallback' : 'abortUpgradeErrorCallback';
- return App.ajax.send({
- name: 'admin.upgrade.abort',
- sender: this,
- data: {
- upgradeId: this.get('upgradeId'),
- isDowngrade: this.get('isDowngrade')
- },
- error: errorCallback
- });
- },
-
- /**
- * just request ro start downgrade,
- * should be performed only if <code>abortUpgrade<code> was completed
- */
- startDowngrade: function(currentVersion) {
- App.ajax.send({
- name: 'admin.downgrade.start',
- sender: this,
- data: {
- value: currentVersion.repository_version,
- label: this.get('upgradeVersion'),
- id: currentVersion.id,
- isDowngrade: true,
- upgradeType: this.get('upgradeType')
- },
- success: 'upgradeSuccessCallback',
- callback: function() {
- this.sender.set('requestInProgress', false);
- }
- });
- },
-
- /**
- * suspend upgrade (in order to restart it later)
- */
- abortUpgradeWithSuspend: function () {
- var errorCallback = this.get('isDowngrade') ? 'abortDowngradeErrorCallback' : 'abortUpgradeErrorCallback';
- return App.ajax.send({
- name: 'admin.upgrade.suspend',
- sender: this,
- data: {
- upgradeId: this.get('upgradeId'),
- isDowngrade: this.get('isDowngrade')
- },
- error: errorCallback
- });
- },
-
- /**
- * error callback of <code>abortUpgrade()</code>
- * @param {object} data
- */
- abortUpgradeErrorCallback: function (data) {
- var header = Em.I18n.t('admin.stackUpgrade.state.paused.fail.header');
- var body = Em.I18n.t('admin.stackUpgrade.state.paused.fail.body');
- if (data && data.responseText) {
- try {
- var json = $.parseJSON(data.responseText);
- body = body + ' ' + json.message;
- } catch (err) {}
- }
- App.showAlertPopup(header, body);
- },
-
- /**
- * error callback of <code>abortDowngrade()</code>
- * @param {object} data
- */
- abortDowngradeErrorCallback: function (data) {
- var header = Em.I18n.t('admin.stackDowngrade.state.paused.fail.header');
- var body = Em.I18n.t('admin.stackDowngrade.state.paused.fail.body');
- if(data && data.responseText){
- try {
- var json = $.parseJSON(data.responseText);
- body = body + ' ' + json.message;
- } catch (err) {}
- }
- App.showAlertPopup(header, body);
- },
-
- retryUpgrade: function () {
- this.setProperties({
- requestInProgress: true,
- isRetryPending: true
- });
- return App.ajax.send({
- name: 'admin.upgrade.retry',
- sender: this,
- data: {
- upgradeId: this.get('upgradeId')
- }
- });
- },
-
- /**
- * make call to start upgrade process and show popup with current progress
- * @param {object} version
- */
- upgrade: function (version) {
- this.set('requestInProgress', true);
- App.ajax.send({
- name: 'admin.upgrade.start',
- sender: this,
- data: version,
- success: 'upgradeSuccessCallback',
- error: 'upgradeErrorCallback',
- callback: function() {
- this.sender.set('requestInProgress', false);
- }
- });
- this.setDBProperty('currentVersion', this.get('currentVersion'));
-
- // Show a "preparing the upgrade..." dialog in case the api call returns too slow
- if (App.router.get('currentState.name') != 'stackUpgrade') {
- this.showPreparingUpgradeIndicator();
- }
- },
-
- /**
- * Should progress bar be displayed when preparing upgrade,
- * should show after Upgrade Options window and before Upgrade Wizard
- * @method showPreparingUpgradeIndicator
- */
- showPreparingUpgradeIndicator: function () {
- return App.ModalPopup.show({
- header: '',
- showFooter: false,
- showCloseButton: false,
- bodyClass: Em.View.extend({
- templateName: require('templates/wizard/step8/step8_log_popup'),
- controllerBinding: 'App.router.mainAdminStackAndUpgradeController',
-
- /**
- * Css-property for progress-bar
- * @type {string}
- */
- barWidth: 'width: 100%;',
- progressBarClass: 'progress log_popup',
-
- /**
- * Popup-message
- * @type {string}
- */
- message: Em.I18n.t('admin.stackUpgrade.dialog.prepareUpgrade.header'),
-
- /**
- * Hide popup when upgrade wizard is open
- * @method autoHide
- */
- autoHide: function () {
- if (!this.get('controller.requestInProgress')) {
- this.get('parentView').hide();
- }
- }.observes('controller.requestInProgress')
- })
- });
- },
-
- /**
- * error callback of <code>upgrade()</code>
- * @param {object} data
- */
- upgradeErrorCallback: function (data) {
- var header = Em.I18n.t('admin.stackVersions.upgrade.start.fail.title');
- var body = "";
- if (data && data.responseText) {
- try {
- var json = $.parseJSON(data.responseText);
- body = json.message;
- } catch (err) {}
- }
- App.showAlertPopup(header, body);
- },
-
- /**
- * success callback of <code>upgrade()</code>
- * @param {object} data
- */
- upgradeSuccessCallback: function (data, opt, params) {
- this.set('upgradeData', null);
- this.set('upgradeId', data.resources[0].Upgrade.request_id);
- this.set('toVersion', params.value);
- this.set('upgradeVersion', params.label);
- this.set('isDowngrade', !!params.isDowngrade);
- var upgradeMethod = this.get('upgradeMethods').findProperty('type', params.type),
- upgradeTypeDisplayName = null,
- upgradeType = null,
- isWizardRestricted = false;
-
- if (upgradeMethod) {
- upgradeTypeDisplayName = upgradeMethod.get('displayName');
- upgradeType = upgradeMethod.get('type');
- isWizardRestricted = upgradeMethod.get('isWizardRestricted');
- }
-
- this.set('isWizardRestricted', isWizardRestricted);
- this.set('upgradeType', upgradeType);
- this.set('upgradeTypeDisplayName', upgradeTypeDisplayName);
- this.set('failuresTolerance', Em.Object.create({
- skipComponentFailures: params.skipComponentFailures == 'true',
- skipSCFailures: params.skipSCFailures == 'true'
- }));
- this.setDBProperties({
- upgradeVersion: params.label,
- upgradeId: data.resources[0].Upgrade.request_id,
- toVersion: params.value,
- upgradeState: 'PENDING',
- isDowngrade: !!params.isDowngrade,
- upgradeType: upgradeType,
- isWizardRestricted: isWizardRestricted,
- upgradeTypeDisplayName: upgradeTypeDisplayName,
- failuresTolerance: Em.Object.create({
- skipComponentFailures: params.skipComponentFailures == 'true',
- skipSCFailures: params.skipSCFailures == 'true'
- })
- });
- App.set('upgradeState', 'PENDING');
- App.clusterStatus.setClusterStatus({
- wizardControllerName: this.get('name'),
- localdb: App.db.data
- });
- this.load();
- this.openUpgradeDialog();
- },
-
- /**
- * success callback of updating upgrade options including failures tolerance. etc
- * @param {object} data
- */
- updateOptionsSuccessCallback: function (data, opt, params) {
- this.set('failuresTolerance', Em.Object.create({
- skipComponentFailures: params.skipComponentFailures == 'true',
- skipSCFailures: params.skipSCFailures == 'true'
- }));
- },
-
- /**
- * run upgrade checks and add results to each method object and set selected method
- * @param {Em.Object} version
- */
- runUpgradeMethodChecks: function(version) {
- this.get('upgradeMethods').forEach(function (method) {
- if (method.get('allowed')) {
- this.runPreUpgradeCheckOnly({
- id: version.get('id'),
- label: version.get('displayName'),
- type: method.get('type')
- });
- } else {
- //if method not supported in current stack version, mark as check completed
- method.setProperties({
- isCheckComplete: false,
- isCheckRequestInProgress: false,
- action: ''
- });
- }
- }, this);
- },
-
- getConfigsWarnings: function (configsMergeWarning) {
- var configs = [];
- if (configsMergeWarning && Em.get(configsMergeWarning, 'UpgradeChecks.status') === 'WARNING') {
- var configsMergeCheckData = Em.get(configsMergeWarning, 'UpgradeChecks.failed_detail');
- if (configsMergeCheckData && Em.isArray(configsMergeCheckData)) {
- configs = configsMergeCheckData.reduce(function (allConfigs, item) {
- var isDeprecated = Em.isNone(item.new_stack_value),
- willBeRemoved = Em.isNone(item.result_value);
-
- return allConfigs.concat({
- type: item.type,
- name: item.property,
- wasModified: (!isDeprecated && !willBeRemoved && Em.compare(item.current, item.result_value) === 0),
- currentValue: item.current,
- recommendedValue: isDeprecated ? Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.deprecated') : item.new_stack_value,
- isDeprecated: isDeprecated,
- resultingValue: willBeRemoved ? Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.willBeRemoved') : item.result_value,
- willBeRemoved: willBeRemoved
- });
- }, []);
- }
- }
- return configs;
- },
-
- showUpgradeOptions: function ( version ) {
- this.upgradeOptions(false, version, true);
- },
-
- /**
- * Open upgrade options window: upgrade type and failures tolerance
- * @param {boolean} isInUpgradeWizard
- * @param {object} version
- * @return App.ModalPopup
- */
- upgradeOptions: function (isInUpgradeWizard, version, preUpgradeShow) {
- var self = this,
- upgradeMethods = this.get('upgradeMethods'),
- runningCheckRequests = this.get('runningCheckRequests');
- if (!isInUpgradeWizard) {
- upgradeMethods.setEach('isCheckRequestInProgress', true);
- upgradeMethods.setEach('selected', false);
- var request = this.getSupportedUpgradeTypes(Ember.Object.create({
- stackName: App.get('currentStackVersion').split('-')[0],
- stackVersion: App.get('currentStackVersion').split('-')[1],
- toVersion: version.get('repositoryVersion')
- })).done(function () {
- if (App.get('router.currentState.name') === 'versions' && App.get('router.currentState.parentState.name') === 'stackAndUpgrade') {
- self.runUpgradeMethodChecks(version);
- }
- }).always(function () {
- self.set('isUpgradeTypesLoaded', true);
- self.set('runningCheckRequests', runningCheckRequests.rejectProperty('type', 'ALL'));
- });
- request.type = 'ALL';
- this.get('runningCheckRequests').push(request);
- } else {
- this.set('isUpgradeTypesLoaded', true);
- }
-
- return App.ModalPopup.show({
- encodeBody: false,
- primary: function() {
- if ( preUpgradeShow ) return false;
- if ( isInUpgradeWizard || this.get('controller.getSupportedUpgradeError') ) return Em.I18n.t('ok');
- return Em.I18n.t('common.proceed');
- }.property('controller.getSupportedUpgradeError'),
- secondary: function() {
- if (preUpgradeShow) return Em.I18n.t('common.dismiss');
- if (this.get('controller.getSupportedUpgradeError')) return null;
- return Em.I18n.t('common.cancel');
- }.property('controller.getSupportedUpgradeError'),
- secondaryClass: preUpgradeShow ? 'btn-success' : '',
- classNames: ['upgrade-options-popup'],
- header: preUpgradeShow ? Em.I18n.t('admin.stackVersions.version.preUpgrade.header') : Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.header'),
- controller: this,
- showFooter: function() {
- return this.get('controller.isUpgradeTypesLoaded') || preUpgradeShow;
- }.property('controller.isUpgradeTypesLoaded'),
- bodyClass: Em.View.extend({
- templateName: require('templates/main/admin/stack_upgrade/upgrade_options'),
- didInsertElement: function () {
- App.tooltip($(".failure-tolerance-tooltip"), {
- placement: "top",
- title: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.tolerance.tooltip')
- });
- Em.run.later(this, function () {
- App.tooltip($(".img-thumbnail.check-failed"), {
- placement: "bottom",
- title: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.preCheck.failed.tooltip')
- });
- App.tooltip($(".not-allowed-by-version"), {
- placement: "bottom",
- title: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.notAllowed')
- });
- }, 1000);
- },
- upgradeMethods: function () {
- self.updateSelectedMethod(isInUpgradeWizard);
- return self.get('upgradeMethods');
- }.property().volatile(),
- isInUpgradeWizard: isInUpgradeWizard,
- showPreUpgradeChecks: App.get('supports.preUpgradeCheck') && !isInUpgradeWizard,
- versionText: (function () {
- if ( preUpgradeShow ) return Em.I18n.t('admin.stackVersions.version.preUpgrade.bodyMsg.version').format(version.get('displayName'));
- if ( isInUpgradeWizard ) return '';
- return Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.bodyMsg.version').format(version.get('displayName'));
- })(),
- selectMethod: function (event) {
- if (isInUpgradeWizard || !event.context.get('allowed') || event.context.get('isPrecheckFailed')) return;
- var selectedMethod = event.context;
- self.updateSelectedMethod(isInUpgradeWizard);
- self.get('upgradeMethods').forEach(function (method) {
- method.set('selected', false);
- });
- selectedMethod.set('selected', true);
- this.set('parentView.selectedMethod', selectedMethod);
- },
- runAction: function (event) {
- var method = event.context,
- action = method.get('action');
- if (action) {
- this.get(action)(event);
- }
- },
- rerunCheck: function (event) {
- self.runPreUpgradeCheckOnly({
- id: version.get('id'),
- label: version.get('displayName'),
- type: event.context.get('type')
- });
- },
- openMessage: function (event) {
- if (isInUpgradeWizard || !event.context.get('allowed')) return;
- var data = event.context.get('precheckResultsData');
-
- var failTitle = Em.I18n.t('popup.clusterCheck.Upgrade.fail.title');
- var failAlert = new Em.Handlebars.SafeString(Em.I18n.t('popup.clusterCheck.Upgrade.fail.alert'));
- var bypassedFailures = data.items.filterProperty('UpgradeChecks.status', 'BYPASS').length > 0;
- if (data.items.filterProperty('UpgradeChecks.status', 'ERROR').length == 0 && bypassedFailures) {
- failTitle = Em.I18n.t('popup.clusterCheck.Upgrade.bypassed-failures.title');
- failAlert = new Em.Handlebars.SafeString(Em.I18n.t('popup.clusterCheck.Upgrade.bypassed-failures.alert'));
- }
-
- var header = Em.I18n.t('popup.clusterCheck.Upgrade.header').format(version.get('displayName')),
- warningTitle = Em.I18n.t('popup.clusterCheck.Upgrade.warning.title'),
- warningAlert = new Em.Handlebars.SafeString(Em.I18n.t('popup.clusterCheck.Upgrade.warning.alert')),
- configsMergeWarning = data.items.findProperty('UpgradeChecks.id', "CONFIG_MERGE"),
- popupData = {
- items: data.items.rejectProperty('UpgradeChecks.id', 'CONFIG_MERGE')
- },
- configs = self.getConfigsWarnings(configsMergeWarning);
- App.showClusterCheckPopup(popupData, {
- header: header,
- failTitle: failTitle,
- failAlert: failAlert,
- warningTitle: warningTitle,
- warningAlert: warningAlert,
- primary: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.preCheck.rerun'),
- secondary: Em.I18n.t('common.cancel'),
- bypassedFailures: bypassedFailures,
- callback: function () {
- self.runPreUpgradeCheckOnly.call(self, {
- id: version.get('id'),
- label: version.get('displayName'),
- type: event.context.get('type')
- });
- }
- }, configs);
- },
- upgradeShow: !preUpgradeShow
- }),
-
- /**
- * @type {Em.Object}
- * @default null
- */
- selectedMethod: null,
- skipComponentFailures: self.get('failuresTolerance.skipComponentFailures'),
- skipSCFailures: self.get('failuresTolerance.skipSCFailures'),
- disablePrimary: function () {
- if (isInUpgradeWizard || this.get('controller.getSupportedUpgradeError')) return false;
- var selectedMethod = this.get('selectedMethod');
- if (selectedMethod) {
- if (App.get('supports.preUpgradeCheck')) {
- return selectedMethod.get('isPrecheckFailed') || selectedMethod.get('isCheckRequestInProgress');
- } else {
- return false;
- }
- } else {
- return true;
- }
- }.property('selectedMethod', 'selectedMethod.isPrecheckFailed', 'selectedMethod.isCheckRequestInProgress'),
- onPrimary: function () {
- this.hide();
- if (isInUpgradeWizard) {
- return App.ajax.send({
- name: 'admin.upgrade.update.options',
- sender: self,
- data: {
- upgradeId: self.get('upgradeId'),
- skipComponentFailures: Boolean(this.get('skipComponentFailures')).toString(),
- skipSCFailures: Boolean(this.get('skipSCFailures')).toString()
- },
- success: 'updateOptionsSuccessCallback'
- });
- } else {
- var upgradeMethod = self.get('upgradeMethods').findProperty('selected');
- version.upgradeType = upgradeMethod.get('type');
- version.upgradeTypeDisplayName = upgradeMethod.get('displayName');
- version.skipComponentFailures = this.get('skipComponentFailures');
- version.skipSCFailures = this.get('skipSCFailures');
-
- var toVersion = version.get('displayName');
- var bodyMessage = Em.Object.create({
- confirmButton: Em.I18n.t('yes'),
- confirmMsg: upgradeMethod.get('type') === 'ROLLING' ?
- Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.RU.confirm.msg').format(toVersion) :
- Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.EU.confirm.msg').format(toVersion)
- });
- return App.showConfirmationFeedBackPopup(function (query) {
- return self.runPreUpgradeCheck.call(self, version);
- }, bodyMessage);
- }
- }
- });
- },
-
- /**
- * open upgrade options from upgrade wizard
- */
- openUpgradeOptions: function () {
- if (this.get('isDowngrade')) return;
- this.upgradeOptions(true, null);
- },
-
- /**
- * upgrade confirmation popup including upgrade options: upgrade type and failures tolerance
- * @param {object} version
- * @return App.ModalPopup
- */
- confirmUpgrade: function (version) {
- this.upgradeOptions(false, version);
- },
-
- /**
- * send request for pre upgrade check only
- */
- runPreUpgradeCheckOnly: function (data) {
- if (App.get('supports.preUpgradeCheck')) {
- var method = this.get('upgradeMethods').findProperty('type', data.type);
- method.setProperties({
- isCheckComplete: false,
- isCheckRequestInProgress: true,
- action: ''
- });
- var request = App.ajax.send({
- name: "admin.upgrade.pre_upgrade_check",
- sender: this,
- data: data,
- success: 'runPreUpgradeCheckOnlySuccess',
- error: 'runPreUpgradeCheckOnlyError',
- callback: function () {
- var runningCheckRequests = this.sender.get('runningCheckRequests');
- method.set('isCheckRequestInProgress', false);
- this.sender.set('runningCheckRequests', runningCheckRequests.rejectProperty('type', this.data.type));
- }
- });
- request.type = data.type;
- this.get('runningCheckRequests').push(request);
- }
- },
-
- /**
- * send request to get available upgrade tye names
- */
- getSupportedUpgradeTypes: function(data) {
- this.set('isUpgradeTypesLoaded', false);
- this.set('getSupportedUpgradeError', '');
- return App.ajax.send({
- name: "admin.upgrade.get_supported_upgradeTypes",
- sender: this,
- data: data,
- success: "getSupportedUpgradeTypesSuccess",
- error: "getSupportedUpgradeTypesError"
- });
- },
-
- /**
- * success callback of <code>getSupportedUpgradeTypes()</code>
- * @param data {object}
- */
- getSupportedUpgradeTypesSuccess: function (data) {
- var supportedUpgradeTypes = data.items[0] && data.items[0].CompatibleRepositoryVersions.upgrade_types;
- this.get('upgradeMethods').forEach(function (method) {
- method.set('allowed', Boolean(supportedUpgradeTypes && supportedUpgradeTypes.contains(method.get('type'))));
- });
- },
-
- /**
- * error callback of <code>getSupportedUpgradeTypes()</code>
- * @param xhr {object}
- */
- getSupportedUpgradeTypesError: function (xhr) {
- var response;
- try {
- response = JSON.parse(xhr.responseText);
- } catch (e) {
- response = {message: xhr.statusText};
- }
- this.set('getSupportedUpgradeError', response.message);
- },
-
- /**
- * success callback of <code>runPreUpgradeCheckOnly()</code>
- * Show a message how many fails/warnings/bypass/passed
- * on clicking that message a popup window show up
- * @param data {object}
- * @param opt {object}
- * @param params {object}
- */
- runPreUpgradeCheckOnlySuccess: function (data, opt, params) {
- var properties = {
- precheckResultsTitle: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.preCheck.msg.title'),
- precheckResultsData: data,
- isCheckComplete: true,
- action: 'openMessage',
- precheckResultsMessage: '',
- recheckResultsMessageClass: 'GREEN',
- isPrecheckFailed: false,
- precheckResultsMessageIconClass: 'glyphicon glyphicon-ok',
- bypassedFailures: false
- };
-
- Object.keys(this.get('preCheckMessages')).forEach(function(status) {
- if (data.items.someProperty('UpgradeChecks.status', status)) {
- properties = this.formatPreCheckMessage(status, data, properties);
- }
- }, this);
-
- if (!properties.precheckResultsMessage) {
- properties.precheckResultsMessage = Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.preCheck.allPassed');
- }
- this.get('upgradeMethods').findProperty('type', params.type).setProperties(properties);
- this.updateSelectedMethod(false);
- this.addPrecheckMessageTooltip();
- },
-
- /**
- * @method formatPreCheckMessage
- * @param {string} type
- * @param {object} data
- * @param {object} defaults
- * @returns {object}
- */
- formatPreCheckMessage: function(type, data, defaults) {
- var length = data.items.filterProperty('UpgradeChecks.status', type).length;
- var properties = this.get('preCheckMessages')[type] || {};
- var message = Em.I18n.t(properties.template).format(length, defaults.precheckResultsMessage);
- defaults = $.extend(defaults, properties);
- delete defaults.template;
- defaults.precheckResultsMessage = message;
- return defaults;
- },
-
- addPrecheckMessageTooltip: function() {
- Em.run.later(this, function () {
- // add tooltip for the type with preCheck errors
- App.tooltip($(".img-thumbnail.check-failed"), {
- placement: "bottom",
- title: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.preCheck.failed.tooltip')
- });
- // destroy the tooltip for the type wo preCheck errors
- $(".img-thumbnail").not(".check-failed").not(".not-allowed-by-version").tooltip("destroy");
- }, 1000);
- },
-
- runPreUpgradeCheckOnlyError: function (request, ajaxOptions, error, data, params) {
- var method = this.get('upgradeMethods').findProperty('type', params.type);
- method.setProperties({
- precheckResultsMessage: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.preCheck.msg.failed.link'),
- precheckResultsTitle: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.preCheck.msg.failed.title'),
- precheckResultsMessageClass: 'RED',
- isPrecheckFailed: true,
- precheckResultsMessageIconClass: 'glyphicon glyphicon-warning-sign',
- action: 'rerunCheck'
- });
- },
-
- /**
- * In Upgrade Wizard: update which method already been selected on open
- * Not in upgrade wizard: de-select the method with pre-check errors
- * @param isInUpgradeWizard {boolean}
- */
- updateSelectedMethod: function (isInUpgradeWizard) {
- if (isInUpgradeWizard) {
- this.get('upgradeMethods').forEach(function (method) {
- method.set('selected', method.get('type') === this.get('upgradeType'));
- }, this);
- } else {
- var ruMethod = this.get('upgradeMethods').findProperty('type', 'ROLLING');
- var euMethod = this.get('upgradeMethods').findProperty('type', 'NON_ROLLING');
- if (ruMethod && ruMethod.get('isPrecheckFailed')) ruMethod.set('selected', false);
- if (euMethod && euMethod.get('isPrecheckFailed')) euMethod.set('selected', false);
- }
- },
-
- /**
- * send request for pre upgrade check
- * @param version
- */
- runPreUpgradeCheck: function(version) {
- var params = {
- value: version.get('repositoryVersion'),
- label: version.get('displayName'),
- type: version.get('upgradeType'),
- skipComponentFailures: version.get('skipComponentFailures') ? 'true' : 'false',
- skipSCFailures: version.get('skipSCFailures') ? 'true' : 'false',
- id: version.get('id'),
- targetStack: version.get('displayName')
- };
- if (App.get('supports.preUpgradeCheck')) {
- this.set('requestInProgress', true);
- App.ajax.send({
- name: "admin.upgrade.pre_upgrade_check",
- sender: this,
- data: params,
- success: "runPreUpgradeCheckSuccess",
- error: "runPreUpgradeCheckError"
- });
- } else {
- this.upgrade(params);
- }
- },
-
- /**
- * success callback of <code>runPreUpgradeCheckSuccess()</code>
- * if there are some fails - it shows popup else run upgrade
- * @param data {object}
- * @param opt {object}
- * @param params {object}
- * @returns {App.ModalPopup|undefined}
- */
- runPreUpgradeCheckSuccess: function (data, opt, params) {
- var self = this;
- if (data.items.someProperty('UpgradeChecks.status', 'FAIL') || data.items.someProperty('UpgradeChecks.status', 'WARNING') || data.items.someProperty('UpgradeChecks.status', 'BYPASS')) {
- this.set('requestInProgress', false);
- var hasFails = data.items.someProperty('UpgradeChecks.status', 'FAIL'),
- header = Em.I18n.t('popup.clusterCheck.Upgrade.header').format(params.label),
- failTitle = Em.I18n.t('popup.clusterCheck.Upgrade.fail.title'),
- failAlert = new Em.Handlebars.SafeString(Em.I18n.t('popup.clusterCheck.Upgrade.fail.alert')),
- warningTitle = Em.I18n.t('popup.clusterCheck.Upgrade.warning.title'),
- warningAlert = new Em.Handlebars.SafeString(Em.I18n.t('popup.clusterCheck.Upgrade.warning.alert')),
- bypassedFailures = data.items.someProperty('UpgradeChecks.status', 'BYPASS').length > 0,
- configsMergeWarning = data.items.findProperty('UpgradeChecks.id', 'CONFIG_MERGE'),
- popupData = {
- items: data.items.rejectProperty('UpgradeChecks.id', 'CONFIG_MERGE')
- },
- configs = this.getConfigsWarnings(configsMergeWarning);
- App.showClusterCheckPopup(popupData, {
- header: header,
- failTitle: failTitle,
- failAlert: failAlert,
- warningTitle: warningTitle,
- warningAlert: warningAlert,
- bypassedFailures: bypassedFailures,
- noCallbackCondition: hasFails,
- callback: function () {
- self.upgrade(params);
- }
- }, configs, params.label);
- } else {
- this.upgrade(params);
- }
- },
-
- runPreUpgradeCheckError: function() {
- this.set('requestInProgress', false);
- },
-
- confirmRetryUpgrade: function (version) {
- var self = this;
- return App.showConfirmationPopup(
- function () {
- self.retryUpgrade();
- },
- Em.I18n.t('admin.stackUpgrade.upgrade.retry.confirm.body').format(version.get('displayName')),
- null,
- this.getUpgradeDowngradeHeader(version.get('upgradeTypeDislayName'), version.get('displayName'))
- );
- },
-
- confirmRetryDowngrade: function () {
- var self = this,
- currentVersion = this.get('currentVersion');
- return App.showConfirmationPopup(
- function() {
- self.retryUpgrade();
- },
- Em.I18n.t('admin.stackUpgrade.downgrade.retry.body').format(currentVersion.repository_name),
- null,
- Em.I18n.t('admin.stackUpgrade.dialog.downgrade.header').format(currentVersion.repository_name),
- Em.I18n.t('admin.stackUpgrade.downgrade.proceed')
- );
- },
-
- /**
- * confirmation popup before install repository version
- */
- installRepoVersionPopup: function (repo) {
- var availableServices = repo.get('stackServices').filter(function(service) {
- return App.Service.find(service.get('name')).get('isLoaded') && service.get('isAvailable') && service.get('isUpgradable');
- }, this);
- if (!availableServices.length && !repo.get('isStandard')){
- return App.showAlertPopup( Em.I18n.t('admin.stackVersions.upgrade.installPackage.fail.title'), Em.I18n.t('admin.stackVersions.upgrade.installPackage.fail.noAvailableServices').format(repo.get('displayName')) );
- }
- var self = this;
- var bodyContent = repo.get('isPatch')
- ? Em.I18n.t('admin.stackVersions.version.install.patch.confirm')
- : Em.I18n.t('admin.stackVersions.version.install.confirm');
- return App.ModalPopup.show({
- header: Em.I18n.t('popup.confirmation.commonHeader'),
- popupBody: bodyContent.format(repo.get('displayName')),
- skipDependencyCheck: false,
- bodyClass: Em.View.extend({
- classNames: ['install-repo-confirmation'],
- content: availableServices,
- showAvailableServices: repo.get('isPatch') || repo.get('isMaint'),
- templateName: require('templates/common/modal_popups/install_repo_confirmation')
- }),
- onPrimary: function () {
- self.installRepoVersion(repo);
- this._super();
- }
- });
- },
-
- /**
- * sends request to install repoVersion to the cluster
- * and create clusterStackVersion resourse
- * @param {Em.Object} repo
- * @return {$.ajax}
- * @method installRepoVersion
- */
- installRepoVersion: function (repo) {
- this.set('requestInProgress', true);
- this.set('requestInProgressRepoId', repo.get('id'));
-
- var data = {
- ClusterStackVersions: {
- stack: repo.get('stackVersionType'),
- version: repo.get('stackVersionNumber'),
- repository_version: repo.get('repositoryVersion')
- },
- id: repo.get('id')
- };
- return App.ajax.send({
- name: 'admin.stack_version.install.repo_version',
- sender: this,
- data: data,
- success: 'installRepoVersionSuccess',
- error: 'installRepoVersionError',
- callback: function() {
- this.sender.set('requestInProgress', false);
- this.sender.set('requestInProgressRepoId', null);
- }
- });
- },
-
- /**
- * transform repo data into json for
- * saving changes to repository version
- * @param {Em.Object} repo
- * @returns {{operating_systems: Array}}
- */
- prepareRepoForSaving: function(repo) {
- var repoVersion = { "operating_systems": [] };
- var ambari_managed_repositories = !repo.get('useRedhatSatellite');
- repo.get('operatingSystems').forEach(function (os, k) {
- repoVersion.operating_systems.push({
- "OperatingSystems": {
- "os_type": os.get("osType"),
- "ambari_managed_repositories": ambari_managed_repositories
- },
- "repositories": []
- });
- os.get('repositories').forEach(function (repository) {
- repoVersion.operating_systems[k].repositories.push({
- "Repositories": {
- "base_url": repository.get('baseUrl'),
- "repo_id": repository.get('repoId'),
- "repo_name": repository.get('repoName')
- }
- });
- });
- });
- return repoVersion;
- },
-
- /**
- * Return stack version for the repo object
- * @param {Em.Object} repo
- * */
- getStackVersionNumber: function(repo){
- var stackVersionNumber = repo.get('stackVersion');
- if(null == stackVersionNumber)
- stackVersionNumber = App.get('currentStackVersion');
- return stackVersionNumber;
- },
-
- /**
- * perform validation if <code>skip<code> is false and run save if
- * validation successfull or run save without validation is <code>skip<code> is true
- * @param {Em.Object} repo
- * @param {boolean} skip
- * @returns {$.Deferred}
- */
- saveRepoOS: function (repo, skip) {
- var self = this;
- var deferred = $.Deferred();
- this.validateRepoVersions(repo, skip).done(function(data) {
- if (data.length > 0) {
- deferred.resolve(data);
- } else {
- var repoVersion = self.prepareRepoForSaving(repo);
- var stackVersionNumber = self.getStackVersionNumber(repo);
-
- App.ajax.send({
- name: 'admin.stack_versions.edit.repo',
- sender: this,
- data: {
- stackName: App.get('currentStackName'),
- stackVersion: stackVersionNumber,
- repoVersionId: repo.get('repoVersionId'),
- repoVersion: repoVersion
- }
- }).success(function() {
- deferred.resolve([]);
- });
- }
- });
- return deferred.promise();
- },
-
- /**
- * send request for validation for each repository
- * @param {Em.Object} repo
- * @param {boolean} skip
- * @returns {*}
- */
- validateRepoVersions: function(repo, skip) {
- var deferred = $.Deferred(),
- totalCalls = 0,
- invalidUrls = [];
-
- if (skip) {
- deferred.resolve(invalidUrls);
- } else {
- var stackVersionNumber = this.getStackVersionNumber(repo);
- repo.get('operatingSystems').forEach(function (os) {
- if (os.get('isSelected')) {
- os.get('repositories').forEach(function (repo) {
- totalCalls++;
- this.validationCall(repo, os, stackVersionNumber)
- .success(function () {
- totalCalls--;
- if (totalCalls === 0) deferred.resolve(invalidUrls);
- })
- .error(function () {
- repo.set('hasError', true);
- invalidUrls.push(repo);
- totalCalls--;
- if (totalCalls === 0) deferred.resolve(invalidUrls);
- });
- }, this);
- } else {
- return deferred.resolve(invalidUrls);
- }
- }, this);
- }
- return deferred.promise();
- },
-
- /**
- *
- * @param {Em.Object} repo
- * @param {Em.Object} os
- * @param {string} stackVersionNumber
- */
- validationCall: function(repo, os, stackVersionNumber) {
- return App.ajax.send({
- name: 'admin.stack_versions.validate.repo',
- sender: this,
- data: {
- repo: repo,
- repoName: repo.get('repoName'),
- repoId: repo.get('repoId'),
- baseUrl: repo.get('baseUrl'),
- osType: os.get('osType'),
- stackName: App.get('currentStackName'),
- stackVersion: stackVersionNumber
- }
- })
- },
-
- /**
- * success callback for <code>installRepoVersion()<code>
- * saves request id to the db
- * @param data
- * @param opt
- * @param params
- * @method installStackVersionSuccess
- */
- installRepoVersionSuccess: function (data, opt, params) {
- if (data && data.statusText === "timeout") {
- App.showAlertPopup(Em.I18n.t('admin.stackVersions.upgrade.installPackage.fail.title'), Em.I18n.t('admin.stackVersions.upgrade.installPackage.fail.timeout'));
- return false;
- }
- var version = App.RepositoryVersion.find(params.id);
- App.db.set('repoVersionInstall', 'id', [data.Requests.id]);
- App.clusterStatus.setClusterStatus({
- wizardControllerName: this.get('name'),
- localdb: App.db.data
- });
- version.set('defaultStatus', 'INSTALLING');
- if (version.get('stackVersion')) {
- version.set('stackVersion.state', 'INSTALLING');
- }
- },
-
- /**
- * error callback for <code>installRepoVersion()<code>
- * show the error message
- * @param data
- * @method installStackVersionSuccess
- */
- installRepoVersionError: function (data, opt, params) {
- var header = Em.I18n.t('admin.stackVersions.upgrade.installPackage.fail.title');
- var body = "";
- if (data && data.responseText) {
- try {
- var json = $.parseJSON(data.responseText);
- body = json.message;
- } catch (err) {}
- }
- if (data && data.statusText === "timeout") {
- body = Em.I18n.t('admin.stackVersions.upgrade.installPackage.fail.timeout');
- }
- var version = App.RepositoryVersion.find(params.id);
- version.set('defaultStatus', 'INSTALL_FAILED');
- if (version.get('stackVersion')) {
- version.set('stackVersion.state', 'INSTALL_FAILED');
- }
- App.showAlertPopup(header, body);
- },
-
- /**
- * opens a popup with installations state per host
- * @param {Em.Object} version
- * @method showProgressPopup
- */
- showProgressPopup: function(version) {
- var popupTitle = Em.I18n.t('admin.stackVersions.details.install.hosts.popup.title').format(version.get('displayName'));
- var requestIds = this.getRepoVersionInstallId();
- var hostProgressPopupController = App.router.get('highAvailabilityProgressPopupController');
- hostProgressPopupController.initPopup(popupTitle, requestIds, this);
- },
-
- getRepoVersionInstallId: function() {
- if (App.get('testMode')) return [1];
-
- var requestIds = App.db.get('repoVersionInstall', 'id');
- var lastRepoVersionInstall = App.router.get('backgroundOperationsController.services').find(function(request) {
- return request.get('name').startsWith('Install version');
- });
- if (lastRepoVersionInstall &&
- (!requestIds || !requestIds.contains(lastRepoVersionInstall.get('id')))) {
- requestIds = [lastRepoVersionInstall.get('id')];
- }
- return requestIds || [];
- },
-
- /**
- * reset upgradeState to NOT_REQUIRED when upgrade is COMPLETED
- * and clean auxiliary data
- */
- finish: function () {
- var upgradeVersion = this.get('upgradeVersion') && this.get('upgradeVersion').match(/[a-zA-Z]+\-\d+\.\d+/);
- this.setDBProperties({
- fromVersion: undefined,
- upgradeId: undefined,
- upgradeState: 'NOT_REQUIRED',
- upgradeVersion: undefined,
- currentVersion: undefined,
- upgradeTypeDisplayName: undefined,
- upgradeType: undefined,
- isWizardRestricted: false,
- failuresTolerance: undefined,
- isDowngrade: undefined,
- downgradeAllowed: undefined
- });
- this.initDBProperties();
- App.clusterStatus.setClusterStatus({
- localdb: App.db.data
- });
- if (upgradeVersion && upgradeVersion[0]) {
- App.set('currentStackVersion', upgradeVersion[0]);
- }
- App.set('upgradeState', 'NOT_REQUIRED');
- },
-
- /**
- * Check <code>App.upgradeState</code> for HOLDING
- * If it is, send request to check if current item is Finalize
- * @method updateFinalize
- */
- updateFinalize: function () {
- var upgradeState = App.get('upgradeState');
- if (upgradeState === 'HOLDING') {
- return App.ajax.send({
- name: 'admin.upgrade.finalizeContext',
- sender: this,
- success: 'updateFinalizeSuccessCallback',
- error: 'updateFinalizeErrorCallback'
- })
- }
- else {
- this.set('isFinalizeItem', false);
- }
- }.observes('App.upgradeState'),
-
- /**
- *
- * @param {object|null} data
- * @method updateFinalizeSuccessCallback
- */
- updateFinalizeSuccessCallback: function (data) {
- var context = data ? Em.get(data, 'items.firstObject.upgrade_groups.firstObject.upgrade_items.firstObject.UpgradeItem.context') : '';
- this.set('isFinalizeItem', context === this.get('finalizeContext'));
- },
-
- updateFinalizeErrorCallback: function() {
- this.set('isFinalizeItem', false);
- },
-
- /**
- * show dialog with tasks of upgrade
- * @return {App.ModalPopup}
- */
- openUpgradeDialog: function () {
- if (App.isAuthorized('CLUSTER.UPGRADE_DOWNGRADE_STACK') && !this.get('isWizardRestricted')) {
- App.propertyDidChange('upgradeSuspended');
- App.router.transitionTo('admin.stackUpgrade');
- }
- },
-
- /**
- * returns url to get data for repoVersion or clusterStackVersion
- * @param {Boolean} stack true if load clusterStackVersion
- * @param {Boolean} fullLoad true if load all data
- * @returns {String}
- * @method getUrl
- */
- getUrl: function(stack, fullLoad) {
- if (App.get('testMode')) {
- return stack ? this.get('mockStackUrl') : this.get('mockRepoUrl')
- } else {
- if (fullLoad) {
- return stack ? this.get('realStackUrl') : this.get('realRepoUrl');
- } else {
- return this.get('realUpdateUrl');
- }
- }
- },
-
- /**
- * get stack versions from server and push it to model
- * @return {*}
- * @method loadStackVersionsToModel
- */
- loadStackVersionsToModel: function (fullLoad) {
- var dfd = $.Deferred();
- App.HttpClient.get(this.getUrl(true, fullLoad), App.stackVersionMapper, {
- complete: function () {
- dfd.resolve();
- }
- });
- return dfd.promise();
- },
-
- /**
- * get repo versions from server and push it to model
- * @return {*}
- * @params {Boolean} isUpdate - if true loads part of data that need to be updated
- * @method loadRepoVersionsToModel()
- */
- loadRepoVersionsToModel: function () {
- var dfd = $.Deferred();
- App.HttpClient.get(this.getUrl(false, true), App.repoVersionMapper, {
- complete: function () {
- dfd.resolve();
- }
- });
- return dfd.promise();
- },
-
- /**
- * set status to Upgrade item
- * @param item
- * @param status
- */
- setUpgradeItemStatus: function(item, status) {
- this.set('requestInProgress', true);
- return App.ajax.send({
- name: 'admin.upgrade.upgradeItem.setState',
- sender: this,
- data: {
- upgradeId: item.get('request_id'),
- itemId: item.get('stage_id'),
- groupId: item.get('group_id'),
- status: status
- },
- callback: function() {
- this.sender.set('requestInProgress', false);
- }
- }).done(function () {
- item.set('status', status);
- });
- },
-
- currentVersionObserver: function () {
- var versionNumber = this.get('currentVersion.repository_version');
- var currentVersionObject = App.RepositoryVersion.find().findProperty('status', 'CURRENT');
- var versionName = currentVersionObject && currentVersionObject.get('stackVersionType');
- App.set('isStormMetricsSupported', versionName != 'HDP' || stringUtils.compareVersions(versionNumber, '2.2.2') > -1 || !versionNumber);
- }.observes('currentVersion.repository_version'),
-
- /**
- * get the installed repositories of HDP from server
- */
- loadRepositories: function () {
- if (App.router.get('clusterController.isLoaded') && App.get('currentStackVersion')) {
- var nameVersionCombo = App.get('currentStackVersion');
- var stackName = nameVersionCombo.split('-')[0];
- var stackVersion = nameVersionCombo.split('-')[1];
- App.ajax.send({
- name: 'cluster.load_repositories',
- sender: this,
- data: {
- stackName: stackName,
- stackVersion: stackVersion
- },
- success: 'loadRepositoriesSuccessCallback',
- error: 'loadRepositoriesErrorCallback'
- });
- }
- }.observes('App.router.clusterController.isLoaded'),
-
- loadRepositoriesSuccessCallback: function (data) {
- var allRepos = [];
- data.items.forEach(function (os) {
- os.repositories.forEach(function (repository) {
- var osType = repository.Repositories.os_type;
- var repo = Em.Object.create({
- baseUrl: repository.Repositories.base_url,
- osType: osType,
- repoId: repository.Repositories.repo_id,
- repoName : repository.Repositories.repo_name,
- stackName : repository.Repositories.stack_name,
- stackVersion : repository.Repositories.stack_version,
- isFirst: false
- });
- var group = allRepos.findProperty('name', osType);
- if (!group) {
- group = {
- name: osType,
- repositories: []
- };
- repo.set('isFirst', true);
- allRepos.push(group);
- }
- group.repositories.push(repo);
- });
- }, this);
- allRepos.stackVersion = App.get('currentStackVersionNumber');
- this.set('allRepos', allRepos);
- },
-
- loadRepositoriesErrorCallback: function (request, ajaxOptions, error) {
-
- },
-
- /**
- * @returns {$.ajax}
- */
- suspendUpgrade: function () {
- var self = this;
- return this.abortUpgradeWithSuspend().done(function () {
- App.set('upgradeState', 'ABORTED');
- self.setDBProperty('upgradeState', 'ABORTED');
- App.clusterStatus.setClusterStatus({
- wizardControllerName: self.get('name'),
- localdb: App.db.data
- });
- });
- },
-
- /**
- * @returns {$.ajax}
- */
- resumeUpgrade: function() {
- var self = this;
- this.retryUpgrade().done(function () {
- App.set('upgradeState', 'PENDING');
- App.propertyDidChange('upgradeSuspended');
- self.setDBProperty('upgradeState', 'PENDING');
- App.clusterStatus.setClusterStatus({
- wizardControllerName: self.get('name'),
- localdb: App.db.data
- });
- });
- },
-
- /**
- *
- * @param {Em.Object} version
- */
- confirmRevertPatchUpgrade: function(version) {
- var self = this;
- var currentStack = App.RepositoryVersion.find(this.get('currentVersion.id'));
-
- App.ModalPopup.show({
- header: Em.I18n.t('popup.confirmation.commonHeader'),
- popupBody: Em.I18n.t('admin.stackVersions.upgrade.patch.revert.confirmation'),
- bodyClass: Em.View.extend({
- classNames: ['revert-patch-upgrade-confirmation'],
- servicesToBeReverted: this.getServicesToBeReverted(version, currentStack),
- stackFromVersion: version.get('displayName'),
- stackToVersion: currentStack.get('displayNameSimple'),
- templateName: require('templates/common/modal_popups/revert_patch_upgrade_confirmation')
- }),
- onPrimary: function () {
- self.revertPatchUpgrade(version);
- this._super();
- }
- });
- },
-
- /**
- *
- * @param {Em.Object} version
- * @param {Em.Object} currentStack
- * @returns {Array}
- */
- getServicesToBeReverted: function(version, currentStack) {
- return version.get('stackServices').filter(function(_service) {
- var originalService = App.Service.find(_service.get('name'));
- var isOriginal = originalService.get('desiredRepositoryVersionId') === version.get('id')
- return (originalService.get('isLoaded') && _service.get('isAvailable')) && isOriginal;
- }).map(function(_service) {
- return {
- displayName: _service.get('displayName'),
- fromVersion: _service.get('latestVersion'),
- toVersion: currentStack.get('stackServices').findProperty('name', _service.get('name')).get('latestVersion')
- }
- });
- },
-
- /**
- *
- * @param {Em.Object} version
- * @returns {$.ajax}
- */
- revertPatchUpgrade: function (version) {
- this.set('requestInProgress', true);
- return App.ajax.send({
- name: 'admin.upgrade.revert',
- sender: this,
- success: 'upgradeSuccessCallback',
- error: 'upgradeErrorCallback',
- callback: function () {
- this.sender.set('requestInProgress', false);
- },
- data: {
- upgradeId: version.get('stackVersion').get('revertUpgradeId'),
- id: version.get('id'),
- value: version.get('repositoryVersion'),
- label: version.get('displayName'),
- isDowngrade: true
- }
- });
- },
-
- /**
- * @param {App.RepositoryVersion} version
- * @returns {Em.Object}
- */
- confirmDiscardRepoVersion: function(version) {
- var self = this;
- return App.showConfirmationPopup(function() {
- self.discardRepoVersion(version);
- });
- },
-
- /**
- * @param {App.RepositoryVersion} version
- * @returns {$.ajax}
- */
- discardRepoVersion: function(version) {
- this.set('requestInProgress', true);
- return App.ajax.send({
- name: 'admin.stack_versions.discard',
- sender: this,
- callback: function () {
- this.sender.set('requestInProgress', false);
- },
- data: {
- id: version.get('id'),
- stackName: version.get('stackVersionType'),
- stackVersion: version.get('stackVersionNumber')
- },
- });
- },
-
- /**
- * restore last Upgrade data
- * @param {object} lastUpgradeData
- */
- restoreLastUpgrade: function(lastUpgradeData) {
- var self = this;
- var upgradeType = this.get('upgradeMethods').findProperty('type', lastUpgradeData.Upgrade.upgrade_type);
- const isDowngrade = lastUpgradeData.Upgrade.direction === 'DOWNGRADE';
- this.setDBProperties({
- toVersion: lastUpgradeData.Upgrade.associated_version,
- upgradeId: lastUpgradeData.Upgrade.request_id,
- isDowngrade,
- upgradeState: lastUpgradeData.Upgrade.request_status,
- upgradeType: lastUpgradeData.Upgrade.upgrade_type,
- isWizardRestricted: upgradeType.get('isWizardRestricted'),
- downgradeAllowed: lastUpgradeData.Upgrade.downgrade_allowed,
- upgradeTypeDisplayName: upgradeType.get('displayName'),
- isSuspended: lastUpgradeData.Upgrade.suspended,
- failuresTolerance: {
- skipComponentFailures: lastUpgradeData.Upgrade.skip_failures,
- skipSCFailures: lastUpgradeData.Upgrade.skip_service_check_failures
- }
- });
- this.initDBProperties();
- App.set('upgradeState', lastUpgradeData.Upgrade.request_status);
- this.loadRepoVersionsToModel().done(function () {
- var toVersion = App.RepositoryVersion.find().findProperty('repositoryVersion', lastUpgradeData.Upgrade.associated_version);
- self.setDBProperty('upgradeVersion', toVersion && toVersion.get('displayName'));
- self.set('upgradeVersion', toVersion && toVersion.get('displayName'));
- });
- },
-
- /**
- * Build table from configs list and open new window to show this table
- * @param configs
- */
- openConfigsInNewWindow: function (configs) {
- var newWindow;
- var output = '';
-
- output += '<table style="text-align: left;"><thead><tr>' +
- '<th>' + Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.configType') + '</th>' +
- '<th>' + Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.propertyName') + '</th>' +
- '<th>' + Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.currentValue') + '</th>' +
- '<th>' + Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.recommendedValue') + '</th>' +
- '<th>' + Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.resultingValue') + '</th>' +
- '</tr></thead><tbody>';
-
- configs.context.forEach(function (config) {
- output += '<tr>' +
- '<td>' + config.type + '</td>' +
- '<td>' + config.name + '</td>' +
- '<td>' + config.currentValue + '</td>' +
- '<td>' + config.recommendedValue + '</td>' +
- '<td>' + config.resultingValue + '</td>' +
- '</tr>';
- });
-
- output += '</tbody></table>';
- newWindow = window.open();
- newWindow.document.write(output);
- newWindow.focus();
- },
-
- /**
- * load version for services to display on Choose Services page
- * should load from VersionDefinition endpoint
- */
- loadServiceVersionFromVersionDefinitions: function () {
- return App.ajax.send({
- name: 'cluster.load_current_repo_stack_services',
- sender: this,
- data: {
- clusterName: App.get('clusterName')
- },
- success: 'loadServiceVersionFromVersionDefinitionsSuccessCallback',
- error: 'loadServiceVersionFromVersionDefinitionsErrorCallback'
- });
- },
-
- serviceVersionsMap: {},
-
- /**
- * @param {object|null} jsonData
- */
- loadServiceVersionFromVersionDefinitionsSuccessCallback: function (jsonData) {
- var rv = Em.getWithDefault(jsonData, 'items', []).filter(function(i) {
- return Em.getWithDefault(i, 'ClusterStackVersions.stack', null) === App.get('currentStackName') &&
- Em.getWithDefault(i, 'ClusterStackVersions.version', null) === App.get('currentStackVersionNumber');
- })[0];
- var map = this.get('serviceVersionsMap');
- var stackServices = Em.getWithDefault(rv || {}, 'repository_versions.0.RepositoryVersions.stack_services', false);
- if (stackServices) {
- stackServices.forEach(function (item) {
- map[item.name] = item.versions[0];
- });
- }
- },
-
- loadServiceVersionFromVersionDefinitionsErrorCallback: function (request, ajaxOptions, error) {}
-
-});
diff --git a/ambari-web/app/data/controller_route.js b/ambari-web/app/data/controller_route.js
index 13d0380..193a353 100644
--- a/ambari-web/app/data/controller_route.js
+++ b/ambari-web/app/data/controller_route.js
@@ -70,10 +70,6 @@ module.exports = [
route: 'main.services.rollbackHighAvailability'
},
{
- wizardControllerName: App.router.get('mainAdminStackAndUpgradeController.name'),
- route: App.db.get('MainAdminStackAndUpgrade', 'upgradeState') === 'NOT_REQUIRED' ? 'main.admin.stackAndUpgrade.index' : 'main.admin.stackAndUpgrade.versions'
- },
- {
wizardControllerName: App.router.get('widgetWizardController.name'),
route: 'main.createWidget'
},
diff --git a/ambari-web/app/mappers.js b/ambari-web/app/mappers.js
index f310d44..49bd42e 100644
--- a/ambari-web/app/mappers.js
+++ b/ambari-web/app/mappers.js
@@ -51,5 +51,4 @@ require('mappers/socket/host_component_status_mapper');
require('mappers/socket/alert_summary_mapper');
require('mappers/socket/host_state_mapper');
require('mappers/socket/alert_definitions_mapper_adapter');
-require('mappers/socket/alert_groups_mapper_adapter');
-require('mappers/socket/upgrade_state_mapper');
+require('mappers/socket/alert_groups_mapper_adapter');
\ No newline at end of file
diff --git a/ambari-web/app/mappers/socket/upgrade_state_mapper.js b/ambari-web/app/mappers/socket/upgrade_state_mapper.js
deleted file mode 100644
index 1670ed5..0000000
--- a/ambari-web/app/mappers/socket/upgrade_state_mapper.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * 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.upgradeStateMapper = App.QuickDataMapper.create({
-
- /**
- * @param {object} event
- */
- map: function (event) {
- var controller = App.router.get('mainAdminStackAndUpgradeController');
- if (event.type === 'CREATE') {
- controller.restoreLastUpgrade({Upgrade: event});
- }
- //TODO rename type to eventType
- if (event.type === 'UPDATE' && controller.get('upgradeId') === event.request_id) {
- if (!Em.isNone(event.request_status)) {
- App.set('upgradeState', event.request_status);
- controller.setDBProperty('upgradeState', event.request_status);
- }
- if (!Em.isNone(event.suspended)) {
- controller.set('isSuspended', event.suspended);
- controller.setDBProperty('isSuspended', event.suspended);
- }
- }
- }
-});
diff --git a/ambari-web/app/router.js b/ambari-web/app/router.js
index c1e060f..2c11aa9 100644
--- a/ambari-web/app/router.js
+++ b/ambari-web/app/router.js
@@ -709,16 +709,8 @@ App.Router = Em.Router.extend({
route = wizardControllerRoute.route;
}
}
- if (wizardControllerRoute && wizardControllerRoute.wizardControllerName === 'mainAdminStackAndUpgradeController') {
- var clusterController = App.router.get('clusterController');
- clusterController.loadClusterName().done(function(){
- clusterController.restoreUpgradeState().done(function(){
- callback(route);
- });
- });
- } else {
- callback(route);
- }
+
+ callback(route);
});
});
} else {
diff --git a/ambari-web/app/routes/main.js b/ambari-web/app/routes/main.js
index 8589b32..ab2ef31 100644
--- a/ambari-web/app/routes/main.js
+++ b/ambari-web/app/routes/main.js
@@ -88,18 +88,6 @@ module.exports = Em.Route.extend(App.RouterRedirections, {
}
});
},
- /*
- routePath: function(router,event) {
- if (router.getAuthenticated()) {
- App.router.get('clusterController').loadClusterName(false);
- router.get('mainController').initialize();
- // TODO: redirect to last known state
- } else {
- Ember.run.next(function () {
- router.transitionTo('login');
- });
- }
- }, */
index: Ember.Route.extend({
route: '/',
@@ -580,64 +568,6 @@ module.exports = Em.Route.extend(App.RouterRedirections, {
}
}),
- stackAndUpgrade: Em.Route.extend({
- route: '/stack',
- breadcrumbs: null,
- connectOutlets: function (router) {
- router.set('mainAdminController.category', "stackAndUpgrade");
- router.set('mainAdminController.categoryLabel', Em.I18n.t('admin.stackUpgrade.title'));
- router.get('mainAdminController').connectOutlet('mainAdminStackAndUpgrade');
- },
-
- index: Em.Route.extend({
- route: '/',
- redirectsTo: 'services'
- }),
-
- services: Em.Route.extend({
-
- breadcrumbs: {
- label: Em.I18n.t('common.stack')
- },
-
- route: '/services',
- connectOutlets: function (router, context) {
- router.get('mainAdminStackAndUpgradeController').connectOutlet('mainAdminStackServices');
- }
- }),
-
- versions: Em.Route.extend({
- breadcrumbs: {
- label: Em.I18n.t('common.versions')
- },
- route: '/versions',
- connectOutlets: function (router, context) {
- router.get('mainAdminStackAndUpgradeController').connectOutlet('MainAdminStackVersions');
- }
- }),
-
- upgradeHistory: Em.Route.extend({
-
- breadcrumbs: {
- label: Em.I18n.t('common.upgrade.history')
- },
-
- route: '/history',
- connectOutlets: function (router, context) {
- router.get('mainAdminStackAndUpgradeController').connectOutlet('mainAdminStackUpgradeHistory');
- },
- }),
-
- stackNavigate: function (router, event) {
- var parent = event.view._parentView;
- parent.deactivateChildViews();
- event.view.set('active', "active");
- router.transitionTo(event.context);
- }
- }),
-
- stackUpgrade: require('routes/stack_upgrade_routes'),
-
adminAdvanced: Em.Route.extend({
route: '/advanced',
connectOutlets: function (router) {
diff --git a/ambari-web/app/routes/stack_upgrade_routes.js b/ambari-web/app/routes/stack_upgrade_routes.js
deleted file mode 100644
index d36253a..0000000
--- a/ambari-web/app/routes/stack_upgrade_routes.js
+++ /dev/null
@@ -1,95 +0,0 @@
-/**
- * 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');
-
-module.exports = App.WizardRoute.extend({
- route: 'stack/upgrade',
-
- breadcrumbs: {
- labelBindingPath: 'App.router.mainAdminStackAndUpgradeController.wizardModalTitle'
- },
-
- enter: function (router) {
- 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);
-
- return App.ModalPopup.show({
- classNames: ['upgrade-wizard-modal'],
- modalDialogClasses: ['modal-xlg'],
- headerClass: Em.View.extend({
- header: Em.computed.alias('controller.wizardModalTitle'),
- controllerBinding: 'App.router.mainAdminStackAndUpgradeController',
- template: Ember.Handlebars.compile(
- '{{view.header}}' +
- '<div {{bindAttr class=":upgrade-options-link controller.isDowngrade:disabled" disabled="controller.isDowngrade"}} {{action openUpgradeOptions target="controller"}}>' +
- '<i class="icon-cogs"></i><a>{{t admin.stackVersions.version.upgrade.upgradeOptions.header}}</a>' +
- '</div>'
- )
- }),
- 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');
-
- 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();
- if (['NOT_REQUIRED', 'COMPLETED'].contains(App.get('upgradeState'))) {
- location.reload();
- }
- }
- });
- });
- });
- } else {
- Em.run.next(function () {
- App.router.transitionTo('main.views');
- });
- }
- }
-});
diff --git a/ambari-web/app/templates/application.hbs b/ambari-web/app/templates/application.hbs
index b108a94..5748c83 100644
--- a/ambari-web/app/templates/application.hbs
+++ b/ambari-web/app/templates/application.hbs
@@ -202,32 +202,6 @@
<div class="container main-container">
<div id="content">
- {{#if App.wizardIsNotFinished}}
- <div class="ru-badge row">
- {{#if isExistingClusterDataLoaded}}
- <p class="col-md-4 col-md-offset-4">
- {{#if App.router.wizardWatcherController.isNonWizardUser}}
- <span class="label upgrade-in-progress">
- <i class="glyphicon glyphicon-cog"></i> {{App.router.wizardWatcherController.wizardDisplayName}}
- </span>
- {{/if}}
- {{#if showUpgradeLabel}}
- <a href="#" {{action "openUpgradeDialog" target="App.router.mainAdminStackAndUpgradeController"}}>
- <span {{bindAttr class="upgradeMap.cls :label"}}>
- <i {{bindAttr class="upgradeMap.icon :glyphicon"}}></i>
- {{upgradeMap.msg}}
- </span>
- </a>
- {{/if}}
- </p>
- {{/if}}
- </div>
- <div class="row">
- {{#if App.router.mainAdminStackAndUpgradeController.isFinalizeItem}}
- <p class="col-md-10 col-md-offset-1 alert alert-danger">{{t admin.stackVersions.version.upgrade.notFinalized.warning}}</p>
- {{/if}}
- </div>
- {{/if}}
{{outlet}}
</div>
</div>
diff --git a/ambari-web/app/templates/main/admin/stack_and_upgrade.hbs b/ambari-web/app/templates/main/admin/stack_and_upgrade.hbs
deleted file mode 100644
index e0a7242..0000000
--- a/ambari-web/app/templates/main/admin/stack_and_upgrade.hbs
+++ /dev/null
@@ -1,22 +0,0 @@
-{{!
-* 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="stack-upgrade-page">
- {{view App.MainAdminStackMenuView}}
- {{outlet}}
-</div>
\ No newline at end of file
diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/services.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/services.hbs
deleted file mode 100644
index f1c61f9..0000000
--- a/ambari-web/app/templates/main/admin/stack_upgrade/services.hbs
+++ /dev/null
@@ -1,123 +0,0 @@
-{{!
-* 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 class="row">
- <h2 class="table-title col-sm-1">{{t common.stack}}</h2>
-</div>
-<table class="table table-hover">
- <thead>
- <tr>
- <th>{{t common.service}}</th>
- <th>{{t common.version}}</th>
- <th>{{t common.status}}</th>
- <th>{{t common.description}}</th>
- </tr>
- </thead>
- <tbody>
- {{#each service in view.services}}
- <tr>
- <td class="service-display-name">{{service.displayName}}</td>
- <td class="service-stack-version">{{service.serviceVersionDisplay}}</td>
- <td class="stack-version-state">
- {{#if service.isInstalled}}
- <span class="label label-success">{{t common.installed}}</span>
- {{else}}
- <a {{bindAttr class=":path-link view.isAddServiceAvailable::not-active-link"}} {{action goToAddService service.serviceName target="view"}}>
- {{t services.service.add}}</a>
- {{/if}}
- </td>
- <td class="service-description">{{{service.comments}}}</td>
- </tr>
- {{/each}}
- </tbody>
-</table>
-
-{{#unless App.stackVersionsAvailable}}
-
- <div class="header">
- <strong>{{t admin.cluster.repositories.repositories}}</strong>
- </div>
- <ul class="nav nav-tabs">
- <li class="active">
- <a href="javascript:void(null);">{{view.allRepositoriesGroups.stackVersion}}</a>
- </li>
- </ul>
-
- <div class="admin-cluster">
- <div class="repositories-table">
- <div class="thead">
- <div class="th os-th">{{t common.os}}</div>
- <div class="th name-th">{{t common.name}}</div>
- <div class="th url-th">{{t installer.step1.advancedRepo.localRepo.column.baseUrl}}</div>
- </div>
- <div class="tbody">
- {{#each repoGroup in view.allRepositoriesGroups}}
- <div class="trow">
- <div class="os-td">
- <label>
- <span class="os">{{repoGroup.name}}</span>
- </label>
- </div>
- <div style="width:89%">
- {{#each repository in repoGroup.repositories}}
- <div class="sub-trow">
- <div class="name-td">{{repository.repoId}}</div>
- <!--edit mode for current url-->
- {{#if repository.onEdit}}
- <div {{bindAttr class=":url-td repository.empty-error:textfield-error repository.invalid-error:textfield-error"}}>
- {{view Ember.TextField valueBinding="repository.baseUrl" class="form-control"}}
- </div>
- <div class="clear-td">
- {{#if repository.clearAll}}
- <a {{action "clearGroupLocalRepository" repository target="view" }}>
- <i class="glyphicon glyphicon-remove-sign"></i>
- </a>
- {{/if}}
- </div>
- <div class="edit-buttons-td">
- <a class="btn btn-default" {{action doCancel repository target="view"}}>{{t common.cancel}}</a>
- </div>
- <div class="edit-buttons-td">
- {{#if repository.empty-error}}
- <a class="btn btn-primary" disabled="disabled">{{t common.save}}</a>
- {{else}}
- <a class="btn btn-primary" {{action saveRepoUrls repository target="view"}}>{{t common.save}}</a>
- {{/if}}
- </div>
- <!--non-edit mode for current url-->
- {{else}}
- <div class="url-text-td">
- {{repository.baseUrl}}
- </div>
- <div class="edit-td">
- <a {{action "onEditClick" repository target="view" }}>
- <i class="glyphicon glyphicon-edit"></i> {{t common.edit}}
- </a>
- </div>
- {{/if}}
- </div>
- {{/each}}
- </div>
- </div>
- {{/each}}
- </div>
- </div>
- </div>
-
-{{/unless}}
\ No newline at end of file
diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs
deleted file mode 100644
index 332594e..0000000
--- a/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs
+++ /dev/null
@@ -1,340 +0,0 @@
-{{!
-* 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="stack-upgrade-dialog">
-
- <div {{bindAttr class="view.isLoaded::hidden :row"}}>
- <div class="col-md-2 task-list-main-wrap">{{statusIcon controller.requestStatus}}
- {{view.upgradeStatusLabel}}</div>
- <div class="col-md-7">
- {{view App.ProgressBarView
- progressBinding="view.overallProgress"
- statusBinding="controller.requestStatus"
- }}
- </div>
- <div class="col-md-1">
- {{view.overallProgress}}%
- </div>
- <div class="col-md-2 pause-button pull-right">
- {{#if view.isLoaded}}
- {{#if showPauseButton}}
- {{#if isDowngrade}}
- <button
- class="btn btn-default pull-right" {{action confirmPauseDowngrade target="view"}}>{{t admin.stackUpgrade.pauseDowngrade}}</button>
- {{else}}
- <button
- class="btn btn-default pull-right" {{action confirmPauseUpgrade target="view"}}>{{t admin.stackUpgrade.pauseUpgrade}}</button>
- {{/if}}
- {{/if}}
- {{/if}}
- </div>
- </div>
-
- <div class="task-list scrollable-block task-list-main-wrap upgrade-groups">
- {{#if view.isLoaded}}
- <div class="panel-group">
- {{#if view.runningItem}}
- <div class="panel panel-default details-box row">
- <div class="panel-heading row">
- <div class="pull-left col-md-6">
- {{t admin.stackUpgrade.dialog.inProgress}} {{view.runningItem.text}}
- </div>
- {{#if view.isDetailsOpened}}
- <div class="pull-right col-md-6">
- <a href="#collapseBox" class="pull-right" {{action toggleDetails target="view"}}
- data-toggle="collapse">
- {{t admin.stackUpgrade.dialog.details.hide}}
- </a>
- </div>
- {{else}}
- <div class="pull-right col-md-6">
- <a href="#collapseBox" class="pull-right" {{action toggleDetails target="view"}}
- data-toggle="collapse">
- {{t admin.stackUpgrade.dialog.details.open}}
- </a>
- </div>
- {{/if}}
- </div>
- <div id="collapseBox" class="panel-collapse collapse">
- <div class="panel-body">
- {{#if view.runningItem.isTasksLoaded}}
- <div class="clear col-md-12">
- {{view App.upgradeTaskView contentBinding="view.taskDetails" outsideViewBinding="view.outsideView"}}
- </div>
- {{else}}
- {{view App.SpinnerView classNames="clear"}}
- {{/if}}
- </div>
- </div>
- </div>
- {{/if}}
- {{#if view.failedItem}}
- {{#unless view.isSlaveComponentFailuresItem}}
- <div class="panel panel-default details-box row">
- <div class="panel-heading row">
- <div class="pull-left col-md-6">
- {{t admin.stackUpgrade.dialog.failed}} {{view.failedItem.text}}
- </div>
- {{#if view.isDetailsOpened}}
- <div class="pull-right col-md-6">
- <a href="#collapseBox" class="pull-right" {{action toggleDetails target="view"}}
- data-toggle="collapse">
- {{t admin.stackUpgrade.dialog.details.hide}}
- </a>
- </div>
- {{else}}
- <div class="pull-right col-md-6">
- <a href="#collapseBox" class="pull-right" {{action toggleDetails target="view"}}
- data-toggle="collapse">
- {{t admin.stackUpgrade.dialog.details.open}}
- </a>
- </div>
- {{/if}}
- </div>
- <div id="collapseBox" class="panel-collapse collapse">
- <div class="panel-body">
- {{#if view.failedItem.isTasksLoaded}}
- <div class="clear col-md-12">
- {{view App.upgradeTaskView contentBinding="view.taskDetails" outsideViewBinding="view.outsideView"}}
- </div>
- {{else}}
- {{view App.SpinnerView classNames="clear"}}
- {{/if}}
- </div>
- </div>
- {{#if view.isHoldingState}}
- <div class="button-row">
- {{#if view.isDowngradeAvailable}}
- <button
- class="btn btn-danger" {{bindAttr disabled="controller.requestInProgress"}} {{action confirmDowngrade view.failedItem target="controller"}}>{{t common.downgrade}}</button>
- {{/if}}
- {{#if view.canSkipFailedItem}}
- <button
- class="btn btn-warning" {{bindAttr disabled="controller.requestInProgress"}} {{action continue view.failedItem target="view"}}>{{t admin.stackUpgrade.dialog.continue}}</button>
- {{/if}}
- <button
- class="btn btn-default" {{bindAttr disabled="controller.requestInProgress"}} {{action retry view.failedItem target="view"}}>{{t common.retry}}</button>
- </div>
- {{/if}}
- </div>
- {{/unless}}
- {{/if}}
- {{#if view.plainManualItem}}
- <div class="panel panel-default details-box">
- <p class="manual-steps-title"><strong>{{t admin.stackUpgrade.dialog.manual}}</strong></p>
- {{#if view.manualItem.messages.length}}
- {{#each message in view.manualItem.messages}}
- <p class="manual-steps-content">{{message}}</p>
- {{/each}}
- {{else}}
- <p class="manual-steps-content">{{t admin.stackUpgrade.dialog.skipped.failures}}</p>
- {{/if}}
- <label class="message">
- {{view App.CheckboxView checkedBinding="view.isManualDone" labelTranslate="admin.stackUpgrade.dialog.manualDone"}}
- </label>
- <div class="button-row">
- {{#if view.isDowngradeAvailable}}
- <button class="btn btn-danger" {{bindAttr disabled="controller.requestInProgress"}} {{action confirmDowngrade view.manualItem target="controller"}}>{{t common.downgrade}}</button>
- {{/if}}
- <button class="btn btn-success" {{bindAttr disabled="view.isManualProceedDisabled"}} {{action complete view.manualItem target="view"}}>
- {{t common.proceed}}
- </button>
- </div>
- </div>
- {{/if}}
- {{#if view.isFinalizeItem}}
- <div class="panel panel-default details-box">
- <p class="manual-steps-title"><strong>{{t admin.stackUpgrade.dialog.manual}}</strong></p>
- {{#if isDowngrade}}
- <p class="manual-steps-content">{{t admin.stackUpgrade.finalize.message.downgrade}}</p>
- {{else}}
- {{#if view.isRevertibleUpgrade}}
- <p class="manual-steps-content">{{{view.revertibleFinalizeMessage}}}</p>
- {{else}}
- <p class="manual-steps-content">{{t admin.stackUpgrade.finalize.message.upgrade}}</p>
- {{/if}}
- {{/if}}
- <p class="manual-steps-content"><strong>{{t admin.stackUpgrade.finalize.message.autoStart}}</strong></p>
-
- {{#if areSkippedServiceChecksLoaded}}
- {{#if skippedServiceChecks.length}}
- <div>{{t admin.stackUpgrade.finalize.message.skippedServiceChecks}}</div>
- <ul>
- {{#each serviceName in skippedServiceChecks}}
- <li>{{serviceName}}</li>
- {{/each}}
- </ul>
- <div>{{t admin.stackUpgrade.finalize.message.testServices}}</div>
- {{/if}}
- {{else}}
- {{view App.SpinnerView}}
- {{/if}}
-
- <label class="message">
- {{view App.CheckboxView checkedBinding="view.isManualDone" labelTranslate="admin.stackUpgrade.dialog.manualDone"}}
- </label>
- <div class="button-row">
- {{#if view.isDowngradeAvailable}}
- <button class="btn btn-danger" {{bindAttr disabled="controller.requestInProgress"}} {{action confirmDowngrade view.manualItem target="controller"}}>{{t common.downgrade}}</button>
- {{/if}}
- <button class="btn btn-default" {{action confirmPauseUpgrade target="view"}}>{{t admin.stackUpgrade.finalize.later}}</button>
- <button class="btn btn-success" {{bindAttr disabled="view.isManualProceedDisabled"}} {{action complete view.manualItem target="view"}}>
- {{t common.finalize}}
- </button>
- </div>
- </div>
- {{/if}}
- {{#if view.isSlaveComponentFailuresItem}}
- <div class="panel panel-default details-box">
- <p class="manual-steps-title"><strong>{{t admin.stackUpgrade.dialog.manual}}</strong></p>
- <div class="slave-failures-info">
- <p>
- {{#if areSlaveComponentFailuresHostsLoaded}}
- {{t admin.stackUpgrade.failedHosts.message}}
- <a href="#" {{action showFailedHosts target="view"}}>{{view.failedHostsMessage}}</a>
- {{else}}
- {{view App.SpinnerView}}
- {{/if}}
- </p>
- <p>
- {{t admin.stackUpgrade.failedHosts.options}}
- <ul>
- {{#if view.isOutOfSync}}
- <li>{{t admin.stackUpgrade.failedHosts.isOutOfSync.options.first}}</li>
- <li>{{t admin.stackUpgrade.failedHosts.isOutOfSync.options.second}}</li>
- {{/if}}
- <li>{{t admin.stackUpgrade.failedHosts.options.first}}</li>
- {{#if view.isDowngradeAvailable}}
- <li>{{t admin.stackUpgrade.failedHosts.options.second}}</li>
- {{/if}}
- </ul>
- </p>
- </div>
- {{#unless view.isHoldingState}}
- <label class="message">
- {{view App.CheckboxView checkedBinding="view.isManualDone" labelTranslate="admin.stackUpgrade.dialog.manualDone"}}
- </label>
- {{/unless}}
- <div class="button-row">
- {{#if view.isDowngradeAvailable}}
- <button class="btn btn-danger" {{bindAttr disabled="controller.requestInProgress"}} {{action confirmDowngrade view.manualItem target="controller"}}>{{t common.downgrade}}</button>
- {{/if}}
- {{#if view.isHoldingState}}
- <button class="btn btn-default" {{bindAttr disabled="controller.requestInProgress"}} {{action retry view.failedItem target="view"}}>{{t common.retry}}</button>
- {{else}}
- <button class="btn btn-success" {{bindAttr disabled="view.isManualProceedDisabled"}} {{action complete view.manualItem target="view"}}>
- {{t common.proceed}}
- </button>
- {{/if}}
- </div>
- </div>
- {{/if}}
- {{#if view.isServiceCheckFailuresItem}}
- <div class="panel panel-default details-box">
- <p class="manual-steps-title"><strong>{{t admin.stackUpgrade.dialog.manual}}</strong></p>
-
- {{#if areServiceCheckFailuresServicenamesLoaded}}
- {{#if serviceCheckFailuresServicenames.length}}
- <div class="service-check-failures-info">
- <p class="service-check-failures-title"><strong>{{t admin.stackUpgrade.dialog.manual.serviceCheckFailures.title}}</strong></p>
- <div>{{t admin.stackUpgrade.dialog.manual.serviceCheckFailures.msg1}}</div>
- <ul class="failed-info-list">
- {{#each serviceName in serviceCheckFailuresServicenames}}
- <li>{{serviceName}}</li>
- {{/each}}
- </ul>
- <div>{{t admin.stackUpgrade.dialog.manual.serviceCheckFailures.msg2}}</div>
- </div>
- {{/if}}
- {{#if slaveComponentStructuredInfo.hosts.length}}
- <div class="slave-failures-info">
- <p class="slave-failures-title"><strong>{{t admin.stackUpgrade.dialog.manual.slaveComponentFailures.title}}</strong></p>
- <p>
- {{t admin.stackUpgrade.failedHosts.message}}
- <a href="#" {{action showFailedHosts target="view"}}>{{view.failedHostsMessage}}</a>
- </p>
- <p>
- {{t admin.stackUpgrade.failedHosts.options}}
- <ul>
- <li>{{t admin.stackUpgrade.failedHosts.options.first}}</li>
- <li>{{t admin.stackUpgrade.failedHosts.options.third}}</li>
- {{#if view.isDowngradeAvailable}}
- <li>{{t admin.stackUpgrade.failedHosts.options.second}}</li>
- {{/if}}
- </ul>
- </p>
- </div>
- {{/if}}
- {{else}}
- {{view App.SpinnerView}}
- {{/if}}
-
- <label class="message">
- {{view App.CheckboxView checkedBinding="view.isManualDone" labelTranslate="admin.stackUpgrade.dialog.manualDone"}}
- </label>
- <div class="button-row">
- {{#if view.isDowngradeAvailable}}
- <button class="btn btn-danger" {{bindAttr disabled="controller.requestInProgress"}} {{action confirmDowngrade view.manualItem target="controller"}}>{{t common.downgrade}}</button>
- {{/if}}
- <button class="btn btn-success" {{bindAttr disabled="view.isManualProceedDisabled"}} {{action complete view.manualItem target="view"}}>
- {{t common.proceed}}
- </button>
- </div>
- </div>
- {{/if}}
- {{#if view.noActiveItem}}
- <div class="panel panel-default details-box">
- <div>
- {{t admin.stackUpgrade.dialog.notActive}}
- </div>
- </div>
- {{/if}}
- {{#if App.upgradeSuspended}}
- <div class="panel panel-default details-box">
- <label class="message">
- {{#if isDowngrade}}
- {{t admin.stackUpgrade.dialog.suspended.downgrade}}
- {{else}}
- {{t admin.stackUpgrade.dialog.suspended}}
- {{/if}}
- </label>
- <div class="button-row">
- {{#if isDowngrade}}
- <button class="btn btn-primary" {{action resumeUpgrade target="controller"}}>
- {{t admin.stackUpgrade.dialog.resume.downgrade}}
- </button>
- {{else}}
- <button class="btn btn-primary" {{action resumeUpgrade target="controller"}}>
- {{t admin.stackUpgrade.dialog.resume}}
- </button>
- {{/if}}
- </div>
- </div>
- {{/if}}
- </div>
- {{#each group in view.upgradeGroups}}
- {{#if group.isVisible}}
- {{view App.upgradeGroupView contentBinding="group"}}
- {{/if}}
- {{/each}}
- {{/if}}
- </div>
- {{#unless view.isLoaded}}
- {{view App.SpinnerView}}
- {{/unless}}
-</div>
diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_configs_merge_table.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_configs_merge_table.hbs
index b78ba5a..aecf410 100644
--- a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_configs_merge_table.hbs
+++ b/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_configs_merge_table.hbs
@@ -17,7 +17,7 @@
}}
<h4 class="configurations-changes-header">{{t popup.clusterCheck.Upgrade.configsMerge.title}}</h4>
-<a {{action openConfigsInNewWindow view.configs target="App.router.mainAdminStackAndUpgradeController"}} {{translateAttr title="common.openNewWindow"}} class="pull-right open-in-new-window" href="#">
+<a {{action openConfigsInNewWindow view.configs target="view"}} {{translateAttr title="common.openNewWindow"}} class="pull-right open-in-new-window" href="#">
<i class="icon-external-link"></i> <span>{{t common.open}}</span>
</a>
<div class="alert alert-warning">
diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_configs_recommend_table.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_configs_recommend_table.hbs
index 8df3327..be0bfce 100644
--- a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_configs_recommend_table.hbs
+++ b/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_configs_recommend_table.hbs
@@ -17,7 +17,7 @@
}}
<h4 class="configurations-changes-header">{{t popup.clusterCheck.Upgrade.configsRecommend.title}}</h4>
-<a {{action openConfigsInNewWindow view.configs target="App.router.mainAdminStackAndUpgradeController"}} {{translateAttr title="common.openNewWindow"}} class="pull-right open-in-new-window" href="#">
+<a {{action openConfigsInNewWindow view.configs target="view"}} {{translateAttr title="common.openNewWindow"}} class="pull-right open-in-new-window" href="#">
<i class="icon-external-link"></i> <span id="i18n-34">{{t common.open}}</span>
</a>
<div class="alert alert-warning">
diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_version_box.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_version_box.hbs
deleted file mode 100644
index d40483d..0000000
--- a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_version_box.hbs
+++ /dev/null
@@ -1,116 +0,0 @@
-{{!
-* 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.
-}}
-
-{{#if view.isOutOfSync}}
- <i class="glyphicon glyphicon-exclamation-sign out-of-sync-badge"></i>
-{{/if}}
-
-<p {{bindAttr class=":version view.isRepoUrlsEditDisabled:not-active-link"}}>
- <span>{{view.content.displayName}}</span>
- <a class="pull-right not-active link-tooltip" {{action editRepositories target="view"}}>
- <i class="glyphicon glyphicon-edit"></i>
- </a>
-</p>
-<p class="repository-name">({{view.content.repositoryVersion}})</p>
-
-<p class="patch-icon">
- {{#if view.content.isMaint}}
- <i class="icon-wrench"></i> {{t common.maint}}
- {{/if}}
- {{#if view.content.isPatch}}
- <i class="icon-bug"></i> {{t common.patch}}
- {{/if}}
- {{#if view.content.isService}}
- <i class="icon-umbrella"></i> {{t common.service}}
- {{/if}}
-</p>
-
-
-<div {{bindAttr class="view.stateElement.isInstalling:installing :align-center :state :repo-version-tooltip"}}>
- {{#if view.stateElement.isButton}}
- <button class="btn btn-primary"
- {{action runAction target="view"}}
- {{bindAttr disabled="view.stateElement.isDisabled"}}>
- {{view.stateElement.text}}
- </button>
- {{/if}}
- {{#if view.stateElement.isButtonGroup}}
- <div class="btn-group">
- <button class="btn btn-primary"
- {{action runAction target="view"}}
- {{bindAttr disabled="view.stateElement.isDisabled"}}>
- {{view.stateElement.text}}
- </button>
- <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown" {{bindAttr disabled="view.stateElement.isDisabled"}}>
- <span class="caret"></span>
- </button>
- <ul class="dropdown-menu">
- {{#each button in view.stateElement.buttons}}
- <li {{bindAttr class="button.isDisabled:disabled"}}>
- <a {{action runAction button.action target="view"}}>
- {{button.text}}
- </a>
- </li>
- {{/each}}
- </ul>
- </div>
- {{/if}}
- {{#if view.stateElement.isLabel}}
- <span {{bindAttr class="view.stateElement.class"}}>{{view.stateElement.text}}</span>
- {{/if}}
- {{#if view.stateElement.isLink}}
- {{#if view.stateElement.iconClass}}
- <i {{bindAttr class="view.stateElement.iconClass" disabled="view.stateElement.isDisabled"}}></i>
- {{/if}}
- <a href="#" {{action runAction target="view"}}
- {{bindAttr disabled="view.stateElement.isDisabled"}}>{{view.stateElement.text}}</a>
- {{#if view.stateElement.isInstalling}}
- {{view App.ProgressBarView
- progressBinding="view.installProgress"
- statusBinding="view.PROGRESS_STATUS"
- }}
- {{/if}}
- {{/if}}
- {{#if view.stateElement.isSpinner}}
- {{view App.SpinnerView}}
- {{/if}}
-</div>
-
-<div class="hosts-section">
- <div class="hosts-bar">{{t common.hosts}}</div>
- <div class="row host-link">
- <div class="col-md-4 align-center not-installed-hosts">
- <div><a href="#" class="hosts-tooltip not-active" {{bindAttr data-original-title="view.content.noInitHostsTooltip" }}
- {{action showHosts view.versionStateMap.not_installed target="view"}}>
- {{view.notInstalledHosts.length}}</a></div>
- <div>{{t admin.stackVersions.version.notInstalled}}</div>
- </div>
- <div class="col-md-4 align-center installed-hosts">
- <div><a href="#" class="hosts-tooltip not-active" {{bindAttr data-original-title="view.content.noInstalledHostsTooltip" }}
- {{action showHosts view.versionStateMap.installed target="view"}}>
- {{view.installedHosts.length}}</a></div>
- <div>{{t common.installed}}</div>
- </div>
- <div class="col-md-4 align-center current-hosts">
- <div><a href="#" class="hosts-tooltip not-active" {{bindAttr data-original-title="view.content.noCurrentHostsTooltip" }}
- {{action showHosts view.versionStateMap.current target="view"}}>
- {{view.currentHosts.length}}</a></div>
- <div>{{t common.current}}</div>
- </div>
- </div>
-</div>
diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_version_column.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_version_column.hbs
deleted file mode 100644
index bfeae65..0000000
--- a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_version_column.hbs
+++ /dev/null
@@ -1,121 +0,0 @@
-{{!
-* 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.
-}}
-
-{{#if view.isOutOfSync}}
- <i class="glyphicon glyphicon-exclamation-sign out-of-sync-badge"></i>
-{{/if}}
-
-<p class="version-column-display-name">
- {{#if view.content.isStandard}}
- <span>{{view.content.displayNameSimple}}</span>
- {{else}}
- <span>{{view.content.displayName}}</span>
- {{/if}}
-</p>
-
-<p class="version-column-display-type">
- {{#if view.content.isMaint}}
- <i class="icon-wrench"></i> {{t common.maint}}
- {{/if}}
- {{#if view.content.isPatch}}
- <i class="icon-bug"></i> {{t common.patch}}
- {{/if}}
- {{#if view.content.isService}}
- <i class="icon-umbrella"></i> {{t common.service}}
- {{/if}}
-</p>
-
-<p class="version-column-show-details">
- <a {{action openVersionBoxPopup target="view"}}>{{t admin.stackVersions.version.column.showDetails}}</a>
-</p>
-<div {{bindAttr class="view.stateElement.isInstalling:installing :align-center :state :repo-version-tooltip"}}>
- {{#if view.stateElement.isButton}}
- <button class="btn btn-primary"
- {{action runAction target="view"}}
- {{bindAttr disabled="view.stateElement.isDisabled"}}>
- {{view.stateElement.text}}
- </button>
- {{/if}}
- {{#if view.stateElement.isButtonGroup}}
- <div class="btn-group">
- <button class="btn btn-primary"
- {{action runAction target="view"}}
- {{bindAttr disabled="view.stateElement.isDisabled"}}>
- {{view.stateElement.text}}
- </button>
- <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown" {{bindAttr disabled="view.stateElement.isDisabled"}}>
- <span class="caret"></span>
- </button>
- <ul class="dropdown-menu">
- {{#each button in view.stateElement.buttons}}
- <li {{bindAttr class="button.isDisabled:disabled"}}>
- <a {{action runAction button.action target="view"}}>
- {{button.text}}
- </a>
- </li>
- {{/each}}
- </ul>
- </div>
- {{/if}}
- {{#if view.stateElement.isLabel}}
- <div class="label-wrapper">
- <span {{bindAttr class="view.stateElement.class"}}>{{view.stateElement.text}}</span>
- {{#if view.stateElement.canBeReverted}}
- <button class="btn dropdown-toggle" data-toggle="dropdown">
- <span class="caret"></span>
- </button>
- <ul class="dropdown-menu">
- <li>
- <a {{action runAction view.stateElement.action target="view"}}>
- {{view.stateElement.actionText}}
- </a>
- </li>
- </ul>
- {{/if}}
- </div>
- {{/if}}
- {{#if view.stateElement.isLink}}
- {{#if view.stateElement.iconClass}}
- <i {{bindAttr class="view.stateElement.iconClass" disabled="view.stateElement.isDisabled"}}></i>
- {{/if}}
- <a href="#" {{action runAction target="view"}}
- {{bindAttr disabled="view.stateElement.isDisabled"}}>{{view.stateElement.text}}</a>
- {{#if view.stateElement.isInstalling}}
- {{view App.ProgressBarView
- progressBinding="view.installProgress"
- statusBinding="view.PROGRESS_STATUS"
- }}
- {{/if}}
- {{/if}}
- {{#if view.stateElement.isSpinner}}
- {{view App.SpinnerView}}
- {{/if}}
-</div>
-
-<div class="services-section">
- {{#each service in view.services}}
- <p class="service-version-info">
- <span {{bindAttr class="service.isVersionInvisible:invisible service.isAvailable:available :label"}}>
- {{service.latestVersion}}
- </span>
- {{#if service.notUpgradable}}
- <i class="icon-info-sign not-upgradable"></i>
- {{/if}}
- </p>
- {{/each}}
-</div>
diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/versions.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/versions.hbs
deleted file mode 100644
index 47f9a2d..0000000
--- a/ambari-web/app/templates/main/admin/stack_upgrade/versions.hbs
+++ /dev/null
@@ -1,71 +0,0 @@
-{{!
-* 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="versions-filter-section" class="btn-toolbar">
- {{#havePermissions "AMBARI.MANAGE_STACK_VERSIONS"}}
- <button class="btn btn-primary" {{action goToVersions target="view"}} {{bindAttr disabled="App.router.wizardWatcherController.isNonWizardUser"}} id="manage-versions-link">
- <i class="icon-external-link"></i> {{t admin.stackVersions.manageVersions}}
- </button>
- {{/havePermissions}}
- <div class="btn-group display-inline-block">
- <button class="btn btn-default dropdown-toggle" data-toggle="dropdown" href="#">
- <span class="filters-label">{{t common.filter}}: </span>
- <span>
- {{view.selectedCategory.label}}
- <span class="caret"></span>
- </span>
- </button>
- <ul class="dropdown-menu">
- {{#each category in view.categories}}
- <li>
- <a {{action selectCategory category target="view"}} href="#">
- {{category.label}}
- </a>
- </li>
- {{/each}}
- </ul>
- </div>
-</div>
-<div id="versions-section" class="row col-md-12">
- <div class="col-md-3 left-menu-table">
- <table class="table border-extended-table">
- <thead>
- </thead>
- <tbody>
- {{#each service in view.services}}
- <tr>
- <td class="service-display-name">{{service.displayName}}</td>
- </tr>
- {{/each}}
- </tbody>
- </table>
- </div>
- <div class="col-md-9 versions-slides">
- {{#if isLoaded}}
- <div class="versions-slides-bar">
- {{#each version in view.repoVersions}}
- {{#if version.isVisible}}
- {{view App.UpgradeVersionColumnView contentBinding="version"}}
- {{/if}}
- {{/each}}
- </div>
- {{else}}
- {{view App.SpinnerView}}
- {{/if}}
- </div>
-</div>
diff --git a/ambari-web/app/templates/main/host/stack_versions.hbs b/ambari-web/app/templates/main/host/stack_versions.hbs
index cf167a4..5cc7ee3 100644
--- a/ambari-web/app/templates/main/host/stack_versions.hbs
+++ b/ambari-web/app/templates/main/host/stack_versions.hbs
@@ -43,13 +43,9 @@
{{#if version.isCurrent}}
<span class="label label-success">{{t common.current}}</span>
{{else}}
- {{#if version.isInstalling}}
- <a href="#" {{action showInstallProgress version target="view"}}><i class="glyphicon glyphicon-cog in_progress"></i> {{version.displayStatus}}</a>
- {{else}}
- {{version.displayStatus}}
- {{#if version.isOutOfSync}}
- {{view view.outOfSyncInfo}}
- {{/if}}
+ {{version.displayStatus}}
+ {{#if version.isOutOfSync}}
+ {{view view.outOfSyncInfo}}
{{/if}}
{{/if}}
</td>
diff --git a/ambari-web/app/utils/ajax/ajax.js b/ambari-web/app/utils/ajax/ajax.js
index fbc26ae..d288030 100644
--- a/ambari-web/app/utils/ajax/ajax.js
+++ b/ambari-web/app/utils/ajax/ajax.js
@@ -1867,47 +1867,6 @@ var urls = {
'mock': ''
},
- 'admin.stack_versions.edit.repo': {
- 'real': '/stacks/{stackName}/versions/{stackVersion}/repository_versions/{repoVersionId}',
- 'mock': '',
- 'type': 'PUT',
- 'format': function (data) {
- return {
- data: JSON.stringify(data.repoVersion)
- }
- }
- },
- 'admin.stack_versions.validate.repo': {
- 'real': '/stacks/{stackName}/versions/{stackVersion}/operating_systems/{osType}/repositories/{repoId}?validate_only=true',
- 'mock': '',
- 'type': 'POST',
- 'format': function (data) {
- return {
- data: JSON.stringify({
- "Repositories": {
- "base_url": data.baseUrl,
- "repo_name": data.repoName
- }
- })
- }
- }
- },
-
- 'admin.stack_versions.discard': {
- 'real': '/stacks/{stackName}/versions/{stackVersion}/repository_versions/{id}',
- 'mock': '',
- 'type': 'PUT',
- 'format': function (data) {
- return {
- data: JSON.stringify({
- "RepositoryVersions":{
- "hidden": "true"
- }
- })
- }
- }
- },
-
'admin.upgrade.pre_upgrade_check': {
'real': '/clusters/{clusterName}/rolling_upgrades_check?fields=*&UpgradeChecks/repository_version_id={id}&UpgradeChecks/upgrade_type={type}',
'mock': '/data/stack_versions/pre_upgrade_check.json'
diff --git a/ambari-web/app/views.js b/ambari-web/app/views.js
index 163484e..92156b5 100644
--- a/ambari-web/app/views.js
+++ b/ambari-web/app/views.js
@@ -231,18 +231,11 @@ require('views/main/admin/serviceAccounts_view');
require('views/main/admin/serviceGroups_view');
require('views/main/admin/serviceGroups/upgradeStatus_view');
require('views/main/admin/serviceGroups/serviceGroup_view');
-require('views/main/admin/stack_upgrade/upgrade_wizard_view');
-require('views/main/admin/stack_upgrade/upgrade_version_box_view');
-require('views/main/admin/stack_upgrade/upgrade_version_column_view');
require('views/main/admin/stack_upgrade/upgrade_group_view');
require('views/main/admin/stack_upgrade/upgrade_task_view');
require('views/main/admin/stack_upgrade/upgrade_history_view');
require('views/main/admin/stack_upgrade/upgrade_history_details_view');
-require('views/main/admin/stack_upgrade/services_view');
-require('views/main/admin/stack_upgrade/versions_view');
-require('views/main/admin/stack_upgrade/menu_view');
require('views/main/admin/stack_upgrade/failed_hosts_modal_view');
-require('views/main/admin/stack_and_upgrade_view');
require('views/main/admin/mpack_upgrade_view');
require('views/main/admin/mpack_upgrade_view');
require('views/main/admin/mpackUpgrade/downloadOptions_view');
diff --git a/ambari-web/app/views/common/modal_popups/cluster_check_popup.js b/ambari-web/app/views/common/modal_popups/cluster_check_popup.js
index bef3c90..01f77ce 100644
--- a/ambari-web/app/views/common/modal_popups/cluster_check_popup.js
+++ b/ambari-web/app/views/common/modal_popups/cluster_check_popup.js
@@ -88,16 +88,50 @@ App.showClusterCheckPopup = function (data, popup, configs) {
});
};
+/**
+ * Build table from configs list and open new window to show this table
+ * @param configs
+ */
+function openConfigsInNewWindow(configs) {
+ var newWindow;
+ var output = '';
+
+ output += '<table style="text-align: left;"><thead><tr>' +
+ '<th>' + Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.configType') + '</th>' +
+ '<th>' + Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.propertyName') + '</th>' +
+ '<th>' + Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.currentValue') + '</th>' +
+ '<th>' + Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.recommendedValue') + '</th>' +
+ '<th>' + Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.resultingValue') + '</th>' +
+ '</tr></thead><tbody>';
+
+ configs.context.forEach(function (config) {
+ output += '<tr>' +
+ '<td>' + config.type + '</td>' +
+ '<td>' + config.name + '</td>' +
+ '<td>' + config.currentValue + '</td>' +
+ '<td>' + config.recommendedValue + '</td>' +
+ '<td>' + config.resultingValue + '</td>' +
+ '</tr>';
+ });
+
+ output += '</tbody></table>';
+ newWindow = window.open();
+ newWindow.document.write(output);
+ newWindow.focus();
+};
+
App.getMergeConflictsView = function (configs) {
return Em.View.extend({
templateName: require('templates/main/admin/stack_upgrade/upgrade_configs_merge_table'),
- configs: configs
+ configs: configs,
+ openConfigsInNewWindow: openConfigsInNewWindow
});
};
App.getNewStackRecommendationsView = function (configs) {
return Em.View.extend({
templateName: require('templates/main/admin/stack_upgrade/upgrade_configs_recommend_table'),
- configs: configs
+ configs: configs,
+ openConfigsInNewWindow: openConfigsInNewWindow
});
};
diff --git a/ambari-web/app/views/main/admin.js b/ambari-web/app/views/main/admin.js
index 05d0f56..c132a16 100644
--- a/ambari-web/app/views/main/admin.js
+++ b/ambari-web/app/views/main/admin.js
@@ -23,13 +23,6 @@ App.MainAdminView = Em.View.extend({
selectedBinding: 'controller.category',
categories: function() {
var items = [];
- if(App.isAuthorized('CLUSTER.VIEW_STACK_DETAILS, CLUSTER.UPGRADE_DOWNGRADE_STACK') || (App.get('upgradeInProgress') || App.get('upgradeHolding'))) {
- items.push({
- name: 'stackAndUpgrade',
- url: 'stackAndUpgrade.index',
- label: Em.I18n.t('admin.stackUpgrade.title')
- });
- }
if(App.isAuthorized('SERVICE.SET_SERVICE_USERS_GROUPS') || (App.get('upgradeInProgress') || App.get('upgradeHolding'))) {
items.push({
name: 'adminServiceAccounts',
diff --git a/ambari-web/app/views/main/admin/stack_and_upgrade_view.js b/ambari-web/app/views/main/admin/stack_and_upgrade_view.js
deleted file mode 100644
index 09e34b0..0000000
--- a/ambari-web/app/views/main/admin/stack_and_upgrade_view.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * 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.MainAdminStackAndUpgradeView = Em.View.extend({
- templateName: require('templates/main/admin/stack_and_upgrade')
-});
-
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/menu_view.js b/ambari-web/app/views/main/admin/stack_upgrade/menu_view.js
deleted file mode 100644
index b3a9df8..0000000
--- a/ambari-web/app/views/main/admin/stack_upgrade/menu_view.js
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * 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.MainAdminStackMenuView = Em.CollectionView.extend({
- tagName: 'ul',
- classNames: ["nav", "nav-tabs", "background-text"],
- defaultRoute: 'services',
-
- content: function () {
- return [
- Em.Object.create({
- name: 'services',
- label: Em.I18n.t('common.stack'),
- routing: 'services'
- }),
- Em.Object.create({
- name: 'versions',
- label: Em.I18n.t('common.versions'),
- routing: 'versions',
- hidden: !App.get('stackVersionsAvailable')
- }),
- Em.Object.create({
- name: 'upgradeHistory',
- label: Em.I18n.t('common.upgrade.history'),
- routing: 'upgradeHistory',
- hidden: !App.get('upgradeHistoryAvailable')
- })
- ]
- }.property('App.stackVersionsAvailable'),
-
- didInsertElement: function () {
- this.activateView();
- },
-
- activateView: function () {
- var defaultRoute = App.router.get('currentState.name') || this.get('defaultRoute');
- $.each(this._childViews, function () {
- this.set('active', (this.get('content.routing') == defaultRoute) ? "active" : "");
- });
- },
-
- deactivateChildViews: function () {
- $.each(this._childViews, function () {
- this.set('active', "");
- });
- },
-
- itemViewClass: Em.View.extend({
- classNameBindings: ["active"],
- active: "",
- template: Ember.Handlebars.compile('{{#unless view.content.hidden}}<a {{action stackNavigate view.content.routing }} href="#"> {{unbound view.content.label}}</a>{{/unless}}')
- })
-});
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/services_view.js b/ambari-web/app/views/main/admin/stack_upgrade/services_view.js
deleted file mode 100644
index 257087d..0000000
--- a/ambari-web/app/views/main/admin/stack_upgrade/services_view.js
+++ /dev/null
@@ -1,146 +0,0 @@
-/**
- * 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.MainAdminStackServicesView = Em.View.extend({
- templateName: require('templates/main/admin/stack_upgrade/services'),
-
- isAddServiceAvailable: function () {
- return App.isAuthorized('CLUSTER.UPGRADE_DOWNGRADE_STACK');
- }.property('App.supports.opsDuringRollingUpgrade', 'App.upgradeState', 'App.isAdmin'),
-
- /**
- * @type {Array}
- */
- services: function() {
- var services = App.supports.installGanglia ? App.StackService.find() : App.StackService.find().without(App.StackService.find('GANGLIA'));
- var controller = this.get('controller');
- controller.loadServiceVersionFromVersionDefinitions().complete(function () {
- return services.map(function(s) {
- s.set('serviceVersionDisplay', controller.get('serviceVersionsMap')[s.get('serviceName')]);
- s.set('isInstalled', App.Service.find().someProperty('serviceName', s.get('serviceName')));
- return s;
- });
- });
- return services;
- }.property('App.router.clusterController.isLoaded'),
-
- didInsertElement: function () {
- if (!App.get('stackVersionsAvailable')) {
- this.get('controller').loadStackVersionsToModel(true).done(function () {
- App.set('stackVersionsAvailable', App.StackVersion.find().content.length > 0);
- });
- this.get('controller').loadRepositories();
- }
- },
-
- /**
- * launch Add Service wizard
- * @param event
- */
- goToAddService: function (event) {
- if (!App.isAuthorized('SERVICE.ADD_DELETE_SERVICES') || !App.supports.enableAddDeleteServices) {
- return;
- } else if (event.context == "KERBEROS") {
- App.router.get('mainAdminKerberosController').checkAndStartKerberosWizard();
- App.router.get('kerberosWizardController').setDBProperty('onClosePath', 'main.admin.stackAndUpgrade.services');
- } else {
- App.router.get('addServiceController').set('serviceToInstall', event.context);
- App.router.get('addServiceController').setDBProperty('onClosePath', 'main.admin.stackAndUpgrade.services');
- App.get('router').transitionTo('main.serviceAdd');
- }
- },
-
- /**
- * List of all repo-groups
- * @type {Object[][]}
- */
- allRepositoriesGroups: function () {
- var repos = this.get('controller.allRepos');
- var reposGroup = [];
- var repositories = [];
- reposGroup.set('stackVersion', App.get('currentStackVersionNumber'));
- if (repos) {
- repos.forEach(function (group) {
- group.repositories.forEach (function(repo) {
- var cur_repo = Em.Object.create({
- 'repoId': repo.repoId,
- 'id': repo.repoId + '-' + repo.osType,
- 'repoName' : repo.repoName,
- 'stackName' : repo.stackName,
- 'stackVersion' : repo.stackVersion,
- 'baseUrl': repo.baseUrl,
- 'originalBaseUrl': repo.baseUrl,
- 'osType': repo.osType,
- 'onEdit': false,
- 'empty-error': !repo.baseUrl,
- 'undo': false,
- 'clearAll': repo.baseUrl
- });
- var cur_group = reposGroup.findProperty('name', group.name);
- if (!cur_group) {
- cur_group = Ember.Object.create({
- name: group.name,
- repositories: []
- });
- reposGroup.push(cur_group);
- }
- cur_group.repositories.push(cur_repo);
- repositories.push(cur_repo);
- });
- });
- }
- this.set('allRepos', repositories);
- return reposGroup;
- }.property('controller.allRepos'),
-
- /**
- * Onclick handler for edit action of each repo, enter edit mode
- * @param {object} event
- */
- onEditClick:function (event) {
- var targetRepo = this.get('allRepos').findProperty('id', event.context.get('id'));
- if (targetRepo) {
- targetRepo.set('onEdit', true);
- }
- },
-
- /**
- * Handler for clear icon click
- * @method clearGroupLocalRepository
- * @param {object} event
- */
- clearGroupLocalRepository: function (event) {
- this.doActionForGroupLocalRepository(event, '');
- },
-
- /**
- * Common handler for repo groups actions
- * @method doActionForGroupLocalRepository
- * @param {object} event
- * @param {string} newBaseUrlField
- */
- doActionForGroupLocalRepository: function (event, newBaseUrlField) {
- var targetRepo = this.get('allRepos').findProperty('id', event.context.get('id'));
- if (targetRepo) {
- targetRepo.set('baseUrl', Em.isEmpty(newBaseUrlField) ? '' : Em.get(targetRepo, newBaseUrlField));
- }
- },
-});
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_box_view.js b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_box_view.js
deleted file mode 100644
index c0786a3..0000000
--- a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_box_view.js
+++ /dev/null
@@ -1,635 +0,0 @@
-/**
- * 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');
-var stringUtils = require('utils/string_utils');
-
-App.UpgradeVersionBoxView = Em.View.extend({
- templateName: require('templates/main/admin/stack_upgrade/upgrade_version_box'),
- classNames: ['version-box'],
- classNameBindings: ['versionClass'],
-
- /**
- * @type {string}
- * @constant
- */
- PROGRESS_STATUS: 'IN_PROGRESS',
-
- /**
- * @type {boolean}
- */
- upgradeCheckInProgress: false,
-
- /**
- * progress of version installation
- * @type {number}
- */
- installProgress: function() {
- if (App.get('testMode')) return 100;
-
- var installRequest, requestIds = this.get('controller').getRepoVersionInstallId();
- if (requestIds) {
- installRequest = App.router.get('backgroundOperationsController.services').findProperty('id', requestIds[0]);
- }
- return (installRequest) ? installRequest.get('progress') : 0;
- }.property('App.router.backgroundOperationsController.serviceTimestamp'),
-
- /**
- * version is upgrading or downgrading
- * @type {boolean}
- */
- isUpgrading: function () {
- return (this.get('controller.upgradeVersion') === this.get('content.displayName') ||
- this.get('controller.fromVersion') === this.get('content.repositoryVersion'))
- && App.get('upgradeState') !== 'NOT_REQUIRED';
- }.property('App.upgradeState', 'content.displayName', 'controller.upgradeVersion'),
-
- isRepoUrlsEditDisabled: function () {
- return ['INSTALLING', 'UPGRADING'].contains(this.get('content.status')) || this.get('isUpgrading') || (!App.isAuthorized('AMBARI.MANAGE_STACK_VERSIONS'));
- }.property('content.status', 'isUpgrading'),
-
- /**
- * @type {string}
- */
- versionClass: function () {
- return this.get('content.status') === 'CURRENT' ? 'current-version-box' : '';
- }.property('content.status'),
-
- /**
- * @type {boolean}
- */
- isOutOfSync: Em.computed.equal('content.status', 'OUT_OF_SYNC'),
-
- /**
- * map containing version (id, label)
- * this is used as param for <code>showHosts<code> method
- * @type {Object}
- */
- versionStateMap: {
- 'current': {
- 'type': 'CURRENT',
- 'value': ['CURRENT'],
- 'property': 'currentHosts',
- 'label': Em.I18n.t('admin.stackVersions.hosts.popup.header.current')
- },
- 'installed': {
- 'type': 'INSTALLED',
- 'value': ['INSTALLED'],
- 'property': 'installedHosts',
- 'label': Em.I18n.t('admin.stackVersions.hosts.popup.header.installed')
- },
- 'not_installed': {
- 'type': 'NOT_INSTALLED',
- 'value': ['INSTALLING', 'INSTALL_FAILED', 'OUT_OF_SYNC'],
- 'property': 'notInstalledHosts',
- 'label': Em.I18n.t('admin.stackVersions.hosts.popup.header.not_installed')
- }
- },
-
- /**
- * @type {object}
- * @default null
- */
- content: null,
-
- /**
- * map of properties which correspond to particular state of Upgrade version
- * @type {object}
- */
- statePropertiesMap: {
- 'CURRENT': {
- isLabel: true,
- text: Em.I18n.t('common.current'),
- class: 'label label-success'
- },
- 'NOT_REQUIRED': {
- isButton: true,
- text: Em.I18n.t('admin.stackVersions.version.installNow'),
- action: 'installRepoVersionPopup'
- },
- 'LOADING': {
- isSpinner: true,
- class: 'spinner'
- },
- 'INSTALLING': {
- iconClass: 'glyphicon glyphicon-cog',
- isLink: true,
- text: Em.I18n.t('hosts.host.stackVersions.status.installing'),
- action: 'showProgressPopup'
- },
- 'INSTALLED': {
- iconClass: 'glyphicon glyphicon-ok',
- isButtonGroup: true,
- text: Em.I18n.t('common.installed'),
- action: null
- },
- 'SUSPENDED': {
- isButton: true,
- text: Em.I18n.t('admin.stackUpgrade.dialog.resume'),
- action: 'resumeUpgrade'
- },
- 'CURRENT_PATCH': {
- isLabel: true,
- text: Em.I18n.t('common.current'),
- class: 'label label-success'
- }
- },
-
- /**
- * object that describes how content should be displayed
- * @type {Em.Object}
- * TODO remove <code>isUpgrading</code> condition when transition of version states in API fixed
- */
- stateElement: function () {
- var statePropertiesMap = this.get('statePropertiesMap');
- var status = this.get('content.status');
- var element = Em.Object.create({
- status: status,
- isInstalling: Em.computed.equal('status', 'INSTALLING'),
- buttons: [],
- isDisabled: false
- });
- var isSuspended = App.get('upgradeSuspended');
-
- if (status === 'CURRENT' && this.get('content.isPatch') && !this.get('isUpgrading')) {
- element.setProperties(statePropertiesMap['CURRENT_PATCH']);
- element.set('canBeReverted', this.get('content.stackVersion').get('supportsRevert'));
- element.set('action', 'confirmRevertPatchUpgrade');
- element.set('actionText', Em.I18n.t('common.revert'));
- }
- else if (['INSTALLING', 'CURRENT'].contains(status) && !this.get('content.isPatch')) {
- element.setProperties(statePropertiesMap[status]);
- }
- else if (status === 'NOT_REQUIRED') {
- this.processNotRequiredState(element);
- }
- else if ((status === 'INSTALLED' && !this.get('isUpgrading')) || (['INSTALL_FAILED', 'OUT_OF_SYNC'].contains(status))) {
- this.processPreUpgradeState(element);
- }
- else if (this.get('isUpgrading') && !isSuspended) {
- this.processUpgradingState(element);
- }
- else if (isSuspended) {
- this.processSuspendedState(element);
- }
- //For restricted upgrade wizard should be disabled in any state
- if (this.get('controller.isWizardRestricted') || (!App.isAuthorized('CLUSTER.UPGRADE_DOWNGRADE_STACK'))) {
- element.set('isDisabled', true);
- }
- return element;
- }.property(
- 'content.status',
- 'controller.isDowngrade',
- 'isUpgrading',
- 'controller.requestInProgress',
- 'controller.requestInProgressRepoId',
- 'parentView.repoVersions.@each.status',
- 'isCurrentStackPresent'
- ),
-
- /**
- * check if actions of NOT_REQUIRED stack version disabled
- * @returns {boolean}
- */
- isDisabledOnInit: function() {
- return this.get('controller.requestInProgress') ||
- !this.get('isCurrentStackPresent') ||
- !this.get('content.isCompatible') ||
- (App.get('upgradeIsRunning') && !App.get('upgradeSuspended')) ||
- this.get('parentView.repoVersions').someProperty('status', 'INSTALLING');
- },
-
- /**
- * @param {Em.Object} element
- */
- processSuspendedState: function(element) {
- element.setProperties(this.get('statePropertiesMap')['SUSPENDED']);
- var text = this.get('controller.isDowngrade')
- ? Em.I18n.t('admin.stackUpgrade.dialog.resume.downgrade')
- : Em.I18n.t('admin.stackUpgrade.dialog.resume');
- element.set('text', this.get('isVersionColumnView') ? Em.I18n.t('common.resume'): text);
- element.set('isDisabled', this.get('controller.requestInProgress'));
- },
-
- /**
- * @param {Em.Object} element
- */
- processUpgradingState: function(element) {
- element.set('isLink', true);
- element.set('action', 'openUpgradeDialog');
- if (['HOLDING', 'HOLDING_FAILED', 'HOLDING_TIMEDOUT', 'ABORTED'].contains(App.get('upgradeState'))) {
- element.set('iconClass', 'glyphicon glyphicon-pause');
- if (this.get('controller.isDowngrade')) {
- element.set('text', Em.I18n.t('admin.stackVersions.version.downgrade.pause'));
- }
- else {
- element.set('text', Em.I18n.t('admin.stackVersions.version.upgrade.pause'));
- }
- }
- else {
- element.set('iconClass', 'glyphicon glyphicon-cog');
- if (this.get('controller.isDowngrade')) {
- element.set('text', Em.I18n.t('admin.stackVersions.version.downgrade.running'));
- }
- else {
- element.set('text', Em.I18n.t('admin.stackVersions.version.upgrade.running'));
- }
- }
- },
-
- /**
- * @param {Em.Object} element
- */
- processPreUpgradeState: function(element) {
- var currentVersion = this.get('controller.currentVersion');
- var status = this.get('content.status');
- var isVersionHigherThanCurrent = stringUtils.compareVersions(
- this.get('content.repositoryVersion'),
- Em.get(currentVersion, 'repository_version')
- ) === 1;
- var isDisabled = this.isDisabledOnInstalled();
- if (Em.get(currentVersion, 'stack_name') !== this.get('content.stackVersionType') || isVersionHigherThanCurrent) {
- switch (status){
- case 'OUT_OF_SYNC':
- element.set('isButton', true);
- element.set('text', this.get('isVersionColumnView') ? Em.I18n.t('common.reinstall') : Em.I18n.t('admin.stackVersions.version.reinstall'));
- element.set('action', 'installRepoVersionPopup');
- break;
- case 'INSTALL_FAILED':
- element.set('isButton', true);
- element.set('text', this.get('isVersionColumnView') ? Em.I18n.t('common.reinstall') : Em.I18n.t('admin.stackVersions.version.reinstall'));
- element.set('action', 'installRepoVersionPopup');
- break;
- default:
- var isVersionColumnView = this.get('isVersionColumnView');
- var stackServices = this.get('content.stackServices');
- var isUpgradable = stackServices && (this.get('content.isStandard') || stackServices.some( function(stackService){
- return stackService.get('isUpgradable');
- }));
- var isPatch = this.get('content.isPatch');
- var isMaint = this.get('content.isMaint');
-
- element.set('isButtonGroup', true);
- if (isUpgradable){
- element.set('text', isVersionColumnView ? Em.I18n.t('common.upgrade') : Em.I18n.t('admin.stackVersions.version.performUpgrade'));
- element.set('action', 'confirmUpgrade');
- element.get('buttons').pushObject({
- text: isVersionColumnView ? Em.I18n.t('common.reinstall') : Em.I18n.t('admin.stackVersions.version.reinstall'),
- action: 'installRepoVersionPopup',
- isDisabled: isDisabled
- });
-
- element.get('buttons').pushObject({
- text: Em.I18n.t('admin.stackVersions.version.preUpgradeCheck'),
- action: 'showUpgradeOptions',
- isDisabled: isDisabled
- });
- }
- else{
- element.set('iconClass', 'icon-ok');
- element.set('text', Em.I18n.t('common.installed'))
- }
-
- if ( isPatch || isMaint ) {
- element.get('buttons').pushObject({
- text: Em.I18n.t('common.hide'),
- action: 'confirmDiscardRepoVersion',
- isDisabled: isDisabled
- });
- }
-
- }
- element.set('isDisabled', isDisabled);
- }
- else {
- element.setProperties(this.get('statePropertiesMap')['INSTALLED']);
- if (this.get('content.isPatch') || this.get('content.isMaint')) {
- element.get('buttons').pushObject({
- text: Em.I18n.t('common.hide'),
- action: 'confirmDiscardRepoVersion',
- isDisabled: isDisabled
- });
- }
- }
- },
-
- /**
- * @param {Em.Object} element
- */
- processNotRequiredState: function(element) {
- var isDisabledOnInit = this.isDisabledOnInit();
- var requestInProgressRepoId = this.get('controller.requestInProgressRepoId');
- var status = this.get('content.status');
-
- if (requestInProgressRepoId && requestInProgressRepoId === this.get('content.id')) {
- element.setProperties(this.get('statePropertiesMap')['LOADING']);
- } else {
- element.setProperties(this.get('statePropertiesMap')[status]);
- }
- element.set('isDisabled', isDisabledOnInit);
- element.set('isButtonGroup', true);
- element.set('isButton', false);
- element.get('buttons').pushObject({
- text: Em.I18n.t('common.hide'),
- action: 'confirmDiscardRepoVersion',
- isDisabled: isDisabledOnInit
- });
- },
-
- /**
- * check if actions of INSTALLED stack version disabled
- * @returns {boolean}
- */
- isDisabledOnInstalled: function() {
- return !this.get('isCurrentStackPresent') ||
- !App.isAuthorized('CLUSTER.UPGRADE_DOWNGRADE_STACK') ||
- this.get('controller.requestInProgress') ||
- this.get('parentView.repoVersions').someProperty('status', 'INSTALLING') ||
- (this.get('controller.isDowngrade') &&
- (this.get('controller.currentVersion.repository_name') === this.get('controller.upgradeVersion'))
- );
- },
-
- didInsertElement: function () {
- App.tooltip($('.link-tooltip'), {title: Em.I18n.t('admin.stackVersions.version.linkTooltip')});
- App.tooltip($('.hosts-tooltip'));
- App.tooltip($('.out-of-sync-badge'), {title: Em.I18n.t('hosts.host.stackVersions.status.out_of_sync')});
- if (!this.get('content.isCompatible')) {
- App.tooltip(this.$(".repo-version-tooltip"), {
- title: Em.I18n.t('admin.stackVersions.version.noCompatible.tooltip')
- });
- }
- Em.run.later(this, function () {
- if (this.get('state') !== 'inDOM') {
- return;
- }
- if (this.get('maintenanceHosts').length + this.get('notRequiredHosts').length) {
- App.tooltip(this.$('.hosts-section'), {placement: 'bottom', title: Em.I18n.t('admin.stackVersions.version.hostsInfoTooltip').format(
- this.get('maintenanceHosts').length + this.get('notRequiredHosts').length, this.get('maintenanceHosts').length, this.get('notRequiredHosts').length
- )});
- }
- }, 1000);
- },
-
- willDestroyElement: function () {
- $('.link-tooltip').tooltip('destroy');
- $('.hosts-tooltip').tooltip('destroy');
- $('.out-of-sync-badge').tooltip('destroy');
- },
-
- isCurrentStackPresent: Ember.computed('parentView.repoVersions.@each.stackVersion.state', function () {
- return this.get('parentView.repoVersions').someProperty('stackVersion.state', 'CURRENT');
- }),
-
- /**
- * run custom action of controller
- */
- runAction: function (event) {
- var target = event && event.target,
- action = event && event.context || this.get('stateElement.action');
- if (target && ($(target).hasClass('disabled') || $(target).parent().hasClass('disabled'))) {
- return;
- }
- if (action) {
- this.get('controller')[action](this.get('content'));
- }
- },
-
- /**
- * @param App.RepositoryVersion
- * */
- getStackVersionNumber: function(repository){
- var stackVersion = null;
- var systems = repository.get('operatingSystems');
-
- systems.forEach(function (os) {
- os.get('repositories').forEach(function (repo) {
- stackVersion = repo.get('stackVersion');
- if (null != stackVersion)
- return stackVersion;
- });
- });
-
- return stackVersion;
- },
-
- /**
- * show popup with repositories to edit
- * @return {App.ModalPopup}
- */
- editRepositories: function () {
- var self = this;
- var repoRecord = App.RepositoryVersion.find(this.get('content.id'));
- //make deep copy of repoRecord
- var repo = Em.Object.create({
- repoVersionId: repoRecord.get('id'),
- displayName: repoRecord.get('displayName'),
- repositoryVersion: repoRecord.get('displayName'),
- stackVersion: self.getStackVersionNumber(repoRecord),
- useRedhatSatellite: repoRecord.get('useRedhatSatellite'),
- operatingSystems: repoRecord.get('operatingSystems').map(function (os) {
- return Em.Object.create({
- osType: os.get('osType'),
- isSelected: true,
- repositories: os.get('repositories').map(function (repository) {
- return Em.Object.create({
- repoName: repository.get('repoName'),
- repoId: repository.get('repoId'),
- baseUrl: repository.get('baseUrl'),
- hasError: false
- });
- })
- });
- })
- });
-
- return this.get('isRepoUrlsEditDisabled') ? null : App.ModalPopup.show({
- classNames: ['repository-list', 'common-modal-wrapper'],
- modalDialogClasses: ['modal-lg'],
- skipValidation: false,
- autoHeight: false,
- /**
- * @type {boolean}
- */
- serverValidationFailed: false,
- bodyClass: Ember.View.extend({
- content: repo,
- skipCheckBox: App.CheckboxView.extend({
- repoBinding: 'parentView.content',
- checkboxClassNames: ["align-checkbox"],
- change: function() {
- this.get('repo.operatingSystems').forEach(function(os) {
- os.get('repositories').forEach(function(repo) {
- repo.set('skipValidation', this.get('checked'));
- }, this);
- }, this);
- }
- }),
-
- /**
- * set <code>disablePrimary</code> of popup depending on base URL validation
- */
- uiValidation: function () {
- var disablePrimary = !(App.get('isAdmin') && !App.get('isOperator'));
-
- this.get('content.operatingSystems').forEach(function (os) {
- os.get('repositories').forEach(function (repo) {
- disablePrimary = !disablePrimary ? repo.get('hasError') : disablePrimary;
- }, this);
- }, this);
- this.set('parentView.disablePrimary', disablePrimary);
- },
- templateName: require('templates/main/admin/stack_upgrade/edit_repositories'),
- didInsertElement: function () {
- App.tooltip($("[rel=skip-validation-tooltip], [rel=use-redhat-tooltip]"), {placement: 'right'});
- },
- willDestroyElement: function () {
- $("[rel=skip-validation-tooltip], [rel=use-redhat-tooltip]").tooltip('destroy');
- }
- }),
- header: Em.I18n.t('common.repositories'),
- primary: Em.I18n.t('common.save'),
- disablePrimary: false,
- onPrimary: function () {
- var self = this;
- App.get('router.mainAdminStackAndUpgradeController').saveRepoOS(repo, this.get('skipValidation')).done(function(data){
- if (data.length > 0) {
- self.set('serverValidationFailed', true);
- self.set('disablePrimary', true);
- } else {
- self.hide();
- }
- })
- }
- });
- },
-
- /**
- * shows popup with listed hosts wich has current state of hostStackVersion
- * @param {object} event
- * @returns {App.ModalPopup}
- * @method showHostsListPopup
- */
- showHosts: function (event) {
- var status = event.contexts[0];
- var displayName = this.get('content.displayName');
- var hosts = this.get(status['property']);
- var self = this;
- var title = status.type === 'CURRENT'
- ? Em.I18n.t('admin.stackVersions.hosts.popup.current.title').format(displayName, hosts.length)
- : Em.I18n.t('admin.stackVersions.hosts.popup.title').format(displayName, status.label, hosts.length);
- hosts.sort();
- if (hosts.length) {
- return App.ModalPopup.show({
- bodyClass: Ember.View.extend({
- title: title,
- hosts: hosts,
- template: Em.Handlebars.compile('<h4>{{view.title}}</h4><div class="limited-height-2">{{#each view.hosts}}<div>{{this}}</div>{{/each}}</div>')
- }),
- header: Em.I18n.t('admin.stackVersions.hosts.popup.header').format(status.label),
- primary: Em.I18n.t('admin.stackVersions.hosts.popup.primary'),
- secondary: Em.I18n.t('common.close'),
- onPrimary: function () {
- this.hide();
- if ($('.version-box-popup .modal')) {
- $('.version-box-popup .modal .modal-footer .btn-success').click();
- }
- self.filterHostsByStack(displayName, status.value);
- }
- });
- }
- },
-
- /**
- * goes to the hosts page with content filtered by repo_version_name and repo_version_state
- * @param {string} displayName
- * @param {Array} states
- * @method filterHostsByStack
- */
- filterHostsByStack: function (displayName, states) {
- if (Em.isNone(displayName) || Em.isNone(states) || !states.length) return;
- App.router.get('mainHostController').filterByStack(displayName, states);
- App.router.get('mainHostController').set('showFilterConditionsFirstLoad', true);
- App.router.get('mainHostController').set('filterChangeHappened', true);
- App.router.transitionTo('hosts.index');
- },
-
- /**
- * Not installed hosts should exclude 1.not required hosts 2. Maintenance Mode hosts,
- * or it maybe confusing to users
- * @type {Array}
- */
- notInstalledHosts: function () {
- var notInstalledHosts = this.get('content.notInstalledHosts') || App.get('allHostNames');
- var notRequiredHosts = this.get('notRequiredHosts');
- var maintenanceHosts = this.get('maintenanceHosts');
- if (notInstalledHosts.length && notRequiredHosts.length) {
- notRequiredHosts.forEach(function(not_required) {
- var index = notInstalledHosts.indexOf(not_required);
- if (index > -1) {
- notInstalledHosts.splice(index, 1);
- }
- });
- }
- if (notInstalledHosts.length && maintenanceHosts.length) {
- maintenanceHosts.forEach(function(mm_host) {
- var index = notInstalledHosts.indexOf(mm_host);
- if (index > -1) {
- notInstalledHosts.splice(index, 1);
- }
- });
- }
- return notInstalledHosts;
- }.property('content.notInstalledHosts', 'notRequiredHosts', 'maintenanceHosts'),
-
- /**
- * @type {Array}
- */
- maintenanceHosts: function () {
- return App.Host.find().filterProperty('passiveState', 'ON').mapProperty('hostName') || [];
- }.property(''),
-
- /**
- * Host with no HDP component is not required to install new version
- * @type {Array}
- */
- notRequiredHosts: function () {
- var notRequiredHosts = [];
- App.Host.find().forEach(function(host) {
- if (!host.get('hostComponents').someProperty('isHDPComponent')) {
- notRequiredHosts.push(host.get('hostName'));
- }
- });
- return notRequiredHosts.uniq() || [];
- }.property(''),
-
- /**
- * @type {Array}
- */
- installedHosts: function () {
- return this.get('content.installedHosts') || [];
- }.property('content.installedHosts'),
-
- /**
- * @type {Array}
- */
- currentHosts: function () {
- return this.get('content.currentHosts') || [];
- }.property('content.currentHosts')
-});
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_column_view.js b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_column_view.js
deleted file mode 100644
index cb276ae..0000000
--- a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_column_view.js
+++ /dev/null
@@ -1,120 +0,0 @@
-/**
- * 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.UpgradeVersionColumnView = App.UpgradeVersionBoxView.extend({
- templateName: require('templates/main/admin/stack_upgrade/upgrade_version_column'),
- isVersionColumnView: true,
- classNames: ['version-column', 'col-md-4'],
-
- didInsertElement: function () {
- App.tooltip($('.out-of-sync-badge'), {title: Em.I18n.t('hosts.host.stackVersions.status.out_of_sync')});
- App.tooltip($('.not-upgradable'), {title: Em.I18n.t('admin.stackVersions.version.service.notUpgradable')});
- if (!this.get('content.isCompatible')) {
- App.tooltip(this.$(".repo-version-tooltip"), {
- title: Em.I18n.t('admin.stackVersions.version.noCompatible.tooltip')
- });
- }
- this.adjustColumnWidth();
- },
-
- adjustColumnWidth: function() {
- //set the width, height of each version column dynamically
- var reposCount = App.RepositoryVersion.find().filterProperty('isVisible').get('length');
- var widthFactor = reposCount > 3 ? 0.18: 0.31;
- $('.version-column').width($('.versions-slides').width() * widthFactor);
- var height = App.Service.find().get('length') > 10 ? ((App.Service.find().get('length') - 10) * 40 + 500) : 500;
- $('.version-column').height(height);
-
- // set the lines width of the table, line up the labels
- $('.border-extended-table').width(reposCount * 100 + 100 + "%");
- $('.border-extended-table').css("max-width", reposCount * 100 + 100 + "%");
- }.observes('parentView.repoVersions.@each.isVisible'),
-
- services: function() {
- var originalServices = this.get('content.stackServices');
- // sort the services in the order the same as service menu
- return App.Service.find().map(function (service) {
-
- var stackService = originalServices.findProperty('name', service.get('serviceName'));
- var isAvailable = this.isStackServiceAvailable(stackService);
-
- var notUpgradable = false;
- if (!stackService) {
- console.error(stackService + " definition does not exist in the stack.")
- notUpgradable = true;
- } else {
- notUpgradable = this.getNotUpgradable(isAvailable, stackService.get('isUpgradable'));
- }
-
- return Em.Object.create({
- displayName: service.get('displayName'),
- name: service.get('serviceName'),
- latestVersion: stackService ? stackService.get('latestVersion') : '',
- isVersionInvisible: !stackService,
- notUpgradable: notUpgradable,
- isAvailable: isAvailable
- });
- }, this);
- }.property(),
-
- getNotUpgradable: function(isAvailable, isUpgradable) {
- return this.get('content.isMaint') && !this.get('isUpgrading') && this.get('content.status') !== 'CURRENT' && isAvailable && !isUpgradable;
- },
-
-
- /**
- * @param {Em.Object} stackService
- * @returns {boolean}
- */
- isStackServiceAvailable: function(stackService) {
- var self = this;
- if (!stackService) {
- return false;
- }
- if ( this.get('content.isCurrent') ){
- var originalService = App.Service.find(stackService.get('name'));
- return stackService.get('isAvailable') && originalService.get('desiredRepositoryVersionId') === this.get('content.id');
- }
- else{
- return stackService.get('isAvailable')
- }
- },
-
- /**
- * on click handler for "show details" link
- */
- openVersionBoxPopup: function (event) {
- var content = this.get('content');
- var parentView = this.get('parentView');
-
- return App.ModalPopup.show({
- classNames: ['version-box-popup'],
- bodyClass: App.UpgradeVersionBoxView.extend({
- classNames: ['version-box-in-popup'],
- content: content,
- parentView: parentView
- }),
- header: Em.I18n.t('admin.stackVersions.version.column.showDetails.title'),
- primary: Em.I18n.t('common.dismiss'),
- secondary: null
- });
- }
-});
-
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js
deleted file mode 100644
index 87e2adf..0000000
--- a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js
+++ /dev/null
@@ -1,520 +0,0 @@
-/**
- * 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');
-var stringUtils = require('utils/string_utils');
-
-App.upgradeWizardView = Em.View.extend({
- controllerBinding: 'App.router.mainAdminStackAndUpgradeController',
- templateName: require('templates/main/admin/stack_upgrade/stack_upgrade_wizard'),
-
- /**
- * @type {Array}
- */
- failedStatuses: ['HOLDING_FAILED', 'HOLDING_TIMEDOUT', 'FAILED', 'TIMED_OUT', 'ABORTED'],
-
- /**
- * @type {Array}
- */
- activeStatuses: ['HOLDING_FAILED', 'HOLDING_TIMEDOUT', 'FAILED', 'TIMED_OUT', 'HOLDING', 'IN_PROGRESS', 'ABORTED'],
-
- /**
- * update timer
- * @type {number|null}
- * @default null
- */
- updateTimer: null,
-
- /**
- * update timer of Upgrade Item
- * @type {number|null}
- * @default null
- */
- upgradeItemTimer: null,
-
- /**
- * @type {boolean}
- */
- isLoaded: false,
-
- /**
- * @type {boolean}
- */
- isDetailsOpened: false,
-
- /**
- * @type {boolean}
- */
- outsideView: true,
-
- /**
- * Downgrade should be available only if target version higher than current, so we can't downgrade
- * when downgrade already started
- * @type {boolean}
- */
- isDowngradeAvailable: Em.computed.and(
- '!controller.isDowngrade',
- 'controller.downgradeAllowed',
- '!controller.cantBeStarted'
- ),
-
- /**
- * progress value is rounded to floor
- * @type {number}
- */
- overallProgress: function () {
- return Math.floor(this.get('controller.upgradeData.Upgrade.progress_percent'));
- }.property('controller.upgradeData.Upgrade.progress_percent'),
-
- /**
- * upgrade groups, reversed and PENDING ones are hidden
- * @type {Array}
- */
- upgradeGroups: function () {
- return this.get('controller.upgradeData.upgradeGroups') || [];
- }.property('controller.upgradeData.upgradeGroups'),
-
- /**
- * currently active group
- * @type {object|undefined}
- */
- activeGroup: function () {
- if (App.get('upgradeSuspended')) return;
- return this.get('upgradeGroups').find(function (item) {
- return this.get('activeStatuses').contains(item.get('status'));
- }, this);
- }.property('upgradeGroups.@each.status'),
-
- /**
- * if upgrade group is in progress it should have currently running item
- * @type {object|undefined}
- */
- runningItem: Em.computed.findBy('activeGroup.upgradeItems', 'status', 'IN_PROGRESS'),
-
- /**
- * if upgrade group is failed it should have failed item
- * @type {object|undefined}
- */
- failedItem: function () {
- return this.get('activeGroup.upgradeItems') && this.get('activeGroup.upgradeItems').find(function (item) {
- return this.get('failedStatuses').contains(item.get('status'));
- }, this);
- }.property('activeGroup.upgradeItems.@each.status'),
-
- /**
- * can skip failed item or not
- * @type {boolean}
- */
- canSkipFailedItem: function () {
- var failedItem = this.get('failedItem');
- var associatedVersion = this.get('controller.upgradeData.Upgrade.associated_version');
- var version = associatedVersion && App.RepositoryVersion.find().findProperty('repositoryVersion', associatedVersion);
- var isPatchOrMaint = version && ( version.get('isPatch') || version.get('isMaint') );
- return failedItem && failedItem.get('skippable') && !(this.get('isFinalizeItem') && isPatchOrMaint);
- }.property('failedItem'),
-
- /**
- * upgrade doesn't have any failed or manual or running item
- * @type {boolean}
- */
- noActiveItem: function () {
- return (Em.isNone(this.get('failedItem')) && Em.isNone(this.get('runningItem')) && Em.isNone(this.get('manualItem'))) &&
- !['NOT_REQUIRED', 'COMPLETED', 'ABORTED'].contains(App.get('upgradeState'));
- }.property('failedItem', 'runningItem', 'manualItem', 'App.upgradeState'),
-
- /**
- * details of currently active task
- * @type {object|null}
- */
- taskDetails: function () {
- if (this.get('runningItem')) {
- return this.get('runningItem').get('tasks').findProperty('status', 'IN_PROGRESS');
- } else if (this.get('failedItem')) {
- return this.get('failedItem').get('tasks').find(function (task) {
- return this.get('failedStatuses').contains(task.get('status'));
- }, this);
- } else {
- return null;
- }
- }.property('failedItem.tasks.@each.status', 'runningItem.tasks.@each.status'),
-
- /**
- * indicate whether failed item can be skipped or retried in order to continue Upgrade
- * @type {boolean}
- */
- isHoldingState: function () {
- return Boolean(this.get('failedItem.status') &&
- this.get('failedItem.status').contains('HOLDING') || this.get('failedItem.status') === 'ABORTED');
- }.property('failedItem.status'),
-
- /**
- * @type {boolean}
- */
- isManualDone: false,
-
- /**
- * if manualItem has been switched then isManualDone flag should be reset
- */
- resetManualDone: function() {
- this.set('isManualDone', false);
- }.observes('manualItem'),
-
- /**
- * @type {boolean}
- */
- isManualProceedDisabled: Em.computed.or('!isManualDone', 'controller.requestInProgress'),
-
- /**
- * if upgrade group is manual it should have manual item
- * @type {object|undefined}
- */
- manualItem: Em.computed.findBy('activeGroup.upgradeItems', 'status', 'HOLDING'),
-
- /**
- * plain manual item
- * @type {object|undefined}
- */
- plainManualItem: function () {
- return this.get('manualItem') && ![
- this.get('controller.finalizeContext'),
- this.get("controller.slaveFailuresContext"),
- this.get("controller.serviceCheckFailuresContext")
- ].contains(this.get('manualItem.context'));
- }.property('manualItem.context'),
-
- /**
- * manualItem: indicate whether the step is "Slave component failures", a dialog with instructions will show up for manual steps
- * @type {boolean}
- */
- isSlaveComponentFailuresItem: function () {
- var item = this.get('activeGroup.upgradeItems') && this.get('activeGroup.upgradeItems').findProperty('context', this.get("controller.slaveFailuresContext"));
- var status = item && item.get('status');
- this.set('isOutOfSync', status === 'OUT_OF_SYNC');
- return ['HOLDING', 'HOLDING_FAILED', 'OUT_OF_SYNC'].contains(status);
- }.property('activeGroup.upgradeItems.@each.status', 'activeGroup.upgradeItems.@each.context'),
-
- /**
- * manualItem: indicate whether the step is "Service check failures", a dialog with instructions will show up for manual steps
- * @type {boolean}
- */
- isServiceCheckFailuresItem: Em.computed.equalProperties('manualItem.context', 'controller.serviceCheckFailuresContext'),
-
- /**
- * manualItem: indicate whether the step is Finalize
- * @type {boolean}
- */
- isFinalizeItem: Em.computed.equalProperties('manualItem.context', 'controller.finalizeContext'),
-
- /**
- * Upgrade of PATCH version is revertible
- */
- isRevertibleUpgrade: function() {
- var associatedVersion = this.get('controller.upgradeData.Upgrade.associated_version');
- var upgradeVersion = App.RepositoryVersion.find().findProperty('repositoryVersion', associatedVersion);
- return ['PATCH'].contains(upgradeVersion.get('type'));
- }.property('controller.upgradeData.Upgrade.associated_version'),
-
- revertibleFinalizeMessage: function() {
- var associatedVersion = this.get('controller.upgradeData.Upgrade.associated_version');
- var upgradeVersion = App.RepositoryVersion.find().findProperty('repositoryVersion', associatedVersion);
- return Em.I18n.t('admin.stackUpgrade.finalize.message.revertible')
- .format(upgradeVersion.get('type'), upgradeVersion.get('displayName'));
- }.property('controller.upgradeData.Upgrade.associated_version'),
-
- /**
- * label of Upgrade status
- * @type {string}
- */
- upgradeStatusLabel: function() {
- var labelKey = null;
- switch (this.get('controller.upgradeData.Upgrade.request_status')) {
- case 'QUEUED':
- case 'PENDING':
- case 'IN_PROGRESS':
- labelKey = 'admin.stackUpgrade.state.inProgress';
- break;
- case 'COMPLETED':
- labelKey = 'admin.stackUpgrade.state.completed';
- break;
- case 'ABORTED':
- labelKey = 'admin.stackUpgrade.state.paused';
- break;
- case 'TIMEDOUT':
- case 'FAILED':
- case 'HOLDING_FAILED':
- case 'HOLDING_TIMEDOUT':
- case 'HOLDING':
- labelKey = 'admin.stackUpgrade.state.paused';
- break;
- default:
- labelKey = 'admin.stackUpgrade.state.init';
- break;
- }
- if (labelKey) {
- labelKey += (this.get('controller.isDowngrade')) ? '.downgrade' : "";
- return Em.I18n.t(labelKey);
- } else {
- return "";
- }
- }.property('controller.upgradeData.Upgrade.request_status', 'controller.isDowngrade'),
-
- /**
- * toggle details box
- */
- toggleDetails: function () {
- this.toggleProperty('isDetailsOpened');
- },
-
- /**
- * close details block if no active task present
- */
- closeDetails: function () {
- if (this.get('noActiveItem')) {
- this.set('isDetailsOpened', false);
- }
- }.observes('noActiveItem'),
-
- /**
- * start polling upgrade data
- */
- startPolling: function () {
- var self = this;
- if (App.get('clusterName')) {
- this.get('controller').loadUpgradeData().done(function () {
- self.set('isLoaded', true);
- self.doPolling();
- });
- }
- }.observes('App.clusterName'),
-
- getSkippedServiceChecks: function () {
- if (this.get('isFinalizeItem')) {
- if (!this.get('controller.areSkippedServiceChecksLoaded')) {
- var self = this;
- App.ajax.send({
- name: 'admin.upgrade.service_checks',
- sender: this,
- data: {
- upgradeId: this.get('controller.upgradeId')
- },
- success: 'getSkippedServiceChecksSuccessCallback'
- }).complete(function () {
- self.set('controller.areSkippedServiceChecksLoaded', true);
- });
- }
- } else {
- this.set('controller.areSkippedServiceChecksLoaded', false);
- }
- }.observes('isFinalizeItem'),
-
- getSkippedServiceChecksSuccessCallback: function (data) {
- if (data.items && data.items.length) {
- var lastItemWithChecks = data.items[data.items.length - 1];
- if (lastItemWithChecks && lastItemWithChecks.upgrade_items && lastItemWithChecks.upgrade_items.length) {
- var skippedServiceChecks = [];
- lastItemWithChecks.upgrade_items.forEach(function (item) {
- if (item.tasks && item.tasks.length) {
- item.tasks.forEach(function (task) {
- var detail = Em.get(task, 'Tasks.command_detail');
- if (detail && detail.startsWith('SERVICE_CHECK ')) {
- skippedServiceChecks.push(App.format.role(detail.replace('SERVICE_CHECK ', ''), true));
- }
- });
- }
- });
- skippedServiceChecks = skippedServiceChecks.uniq();
- this.set('controller.skippedServiceChecks', skippedServiceChecks);
- }
- }
- },
-
- /**
- * get slave-component failure hosts
- */
- getSlaveComponentItem: function() {
- var controller = this.get('controller');
- if (this.get('isSlaveComponentFailuresItem')) {
- if (!this.get('controller.areSlaveComponentFailuresHostsLoaded')) {
- var item = this.get('activeGroup.upgradeItems') && this.get('activeGroup.upgradeItems').findProperty('context', this.get("controller.slaveFailuresContext"));
- controller.getUpgradeItem(item, 'getSlaveComponentItemSuccessCallback').complete(function () {
- controller.set('areSlaveComponentFailuresHostsLoaded', true);
- });
- }
- } else {
- controller.set('areSlaveComponentFailuresHostsLoaded', false);
- }
- }.observes('isSlaveComponentFailuresItem'),
-
- /**
- * get service names of Service Check failures
- */
- getServiceCheckItem: function() {
- var controller = this.get('controller');
- if (this.get('isServiceCheckFailuresItem')) {
- if (!this.get('controller.areServiceCheckFailuresServicenamesLoaded')) {
- controller.getUpgradeItem(this.get('manualItem'), 'getServiceCheckItemSuccessCallback').complete(function () {
- controller.set('areServiceCheckFailuresServicenamesLoaded', true);
- });
- }
- } else {
- controller.set('areServiceCheckFailuresServicenamesLoaded', false);
- }
- }.observes('isServiceCheckFailuresItem'),
-
- /**
- * start polling upgrade data
- */
- willInsertElement: function () {
- this.startPolling();
- },
-
- /**
- * stop polling upgrade data
- */
- willDestroyElement: function () {
- clearTimeout(this.get('updateTimer'));
- clearTimeout(this.get('upgradeItemTimer'));
- this.set('isLoaded', false);
- },
-
- /**
- * load upgrade data with time interval
- */
- doPolling: function () {
- var self = this;
- this.set('updateTimer', setTimeout(function () {
- self.get('controller').loadUpgradeData().done(function() {
- self.doPolling();
- });
- }, App.bgOperationsUpdateInterval));
- },
-
- /**
- * previous item request
- */
- prevItemRequest: null,
-
- /**
- * poll for tasks when item is expanded
- */
- doUpgradeItemPolling: function () {
- var self = this;
- var item = this.get('runningItem') || this.get('failedItem');
- var request = this.get('prevItemRequest');
- if ( request ) request.abort();
- if (item && this.get('isDetailsOpened')) {
- request = this.get('controller').getUpgradeItem(item).complete(function () {
- self.set('upgradeItemTimer', setTimeout(function () {
- self.doUpgradeItemPolling();
- }, App.bgOperationsUpdateInterval));
- });
-
- this.set('prevItemRequest', request);
- } else {
- clearTimeout(this.get('upgradeItemTimer'));
- }
- }.observes('isDetailsOpened', 'runningItem', 'failedItem'),
-
- /**
- * set current upgrade item state to FAILED (for HOLDING_FAILED) or TIMED_OUT (for HOLDING_TIMED_OUT)
- * in order to ignore fail and continue Upgrade
- * @param {object} event
- */
- continue: function (event) {
- this.get('controller').setUpgradeItemStatus(event.context, event.context.get('status').slice(8));
- this.set('isDetailsOpened', false);
- },
-
- /**
- * set current upgrade item state to PENDING in order to retry Upgrade
- * @param {object} event
- */
- retry: function (event) {
- this.get('controller').setUpgradeItemStatus(event.context, 'PENDING');
- this.set('isDetailsOpened', false);
- },
-
- /**
- * set current upgrade item state to COMPLETED in order to proceed
- * @param {object} event
- */
- complete: function (event) {
- this.get('controller').setUpgradeItemStatus(event.context, 'COMPLETED');
- this.set('isManualDone', false);
- },
-
- pauseUpgrade: function() {
- var self = this;
- this.get('controller').suspendUpgrade().done(function() {
- self.get('parentView').closeWizard();
- });
- },
-
- /**
- * pause upgrade confirmation popup
- * @param {object} event
- */
- confirmPauseUpgrade: function () {
- var self = this;
- return App.showConfirmationPopup(
- function() {
- self.pauseUpgrade();
- },
- Em.I18n.t('admin.stackUpgrade.pauseUpgrade.warning').format("upgrade"),
- null,
- Em.I18n.t('common.warning'),
- Em.I18n.t('admin.stackUpgrade.pauseUpgrade')
- );
- },
-
- /**
- * pause downgrade confirmation popup
- * @param {object} event
- */
- confirmPauseDowngrade: function () {
- var self = this;
- return App.showConfirmationPopup(
- function() {
- self.pauseUpgrade();
- },
- Em.I18n.t('admin.stackUpgrade.pauseUpgrade.warning').format("downgrade"),
- null,
- Em.I18n.t('common.warning'),
- Em.I18n.t('admin.stackUpgrade.pauseDowngrade')
- );
- },
-
- /**
- * @type {string}
- */
- failedHostsMessage: function() {
- var count = this.get('controller.slaveComponentStructuredInfo.hosts.length') || 0;
- return Em.I18n.t('admin.stackUpgrade.failedHosts.showHosts').format(count);
- }.property('controller.slaveComponentStructuredInfo.hosts'),
-
- showFailedHosts: function() {
- return App.ModalPopup.show({
- header: Em.I18n.t('admin.stackUpgrade.failedHosts.header'),
- bodyClass: App.FailedHostsPopupBodyView,
- secondary: null,
- primary: Em.I18n.t('common.close'),
- content: this.get('controller.slaveComponentStructuredInfo')
- });
- }
-});
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/versions_view.js b/ambari-web/app/views/main/admin/stack_upgrade/versions_view.js
deleted file mode 100644
index 3899bb1..0000000
--- a/ambari-web/app/views/main/admin/stack_upgrade/versions_view.js
+++ /dev/null
@@ -1,254 +0,0 @@
-/**
- * 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');
-var stringUtils = require('utils/string_utils');
-
-App.MainAdminStackVersionsView = Em.View.extend({
- templateName: require('templates/main/admin/stack_upgrade/versions'),
-
- /**
- * update timer
- * @type {number|null}
- * @default null
- */
- updateTimer: null,
-
- /**
- * @type {Array}
- */
- services: App.Service.find(),
-
- /**
- * Not Installed = the version is not installed or out of sync
- * Upgrade Ready = the version is installed and ready for upgrade
- * Current = the version currently being used
- * Upgrade in Process = UPGRADING
- * Ready to Finalize = UPGRADED
- * Installed = All the versions that are installed BUT cannot be upgraded to (meaning: they are lower than the current)
- * @type {Array}
- */
- categories: [
- Em.Object.create({
- labelKey: 'admin.stackVersions.filter.all',
- value: '',
- isSelected: true
- }),
- Em.Object.create({
- labelKey: 'admin.stackVersions.filter.notInstalled',
- value: 'NOT_INSTALLED',
- isSelected: false
- }),
- Em.Object.create({
- labelKey: 'admin.stackVersions.filter.upgradeReady',
- value: 'UPGRADE_READY',
- isSelected: false
- }),
- Em.Object.create({
- labelKey: 'admin.stackVersions.filter.current',
- value: 'CURRENT',
- isSelected: false
- }),
- Em.Object.create({
- labelKey: 'admin.stackVersions.filter.installed',
- value: 'INSTALLED',
- isSelected: false
- }),
- Em.Object.create({
- labelKey: 'admin.stackVersions.filter.upgrading',
- value: 'UPGRADING',
- isSelected: false
- }),
- Em.Object.create({
- labelKey: 'admin.stackVersions.filter.upgraded',
- value: 'UPGRADED',
- isSelected: false
- })
- ],
-
- didInsertElement: function () {
- this.observesCategories();
- },
-
- /**
- * update categories labels
- */
- observesCategories: function () {
- this.get('categories').forEach(function (category) {
- category.set('label', Em.I18n.t(category.labelKey).format(this.filterBy(this.get('repoVersions'), category).length));
- }, this);
- this.filterVersions(this.get('selectedCategory'));
- }.observes('repoVersions.@each.stackVersion.state', 'controller.isLoaded'),
-
- /**
- * select category
- * @param event
- */
- selectCategory: function (event) {
- this.get('categories').filterProperty('isSelected').setEach('isSelected', false);
- event.context.set('isSelected', true);
- this.filterVersions(event.context);
- },
-
- /**
- * filter versions that match category
- * @param {Em.Object} category
- */
- filterVersions: function (category) {
- var filteredVersionIds = this.filterBy(this.get('repoVersions'), category).mapProperty('id');
- this.get('repoVersions').forEach(function (version) {
- version.set('isVisible', filteredVersionIds.contains(version.get('id')));
- });
- },
-
- /**
- * @type {object}
- */
- selectedCategory: Em.computed.findBy('categories', 'isSelected', true),
-
- /**
- * @type {Em.Array}
- */
- repoVersions: App.RepositoryVersion.find(),
-
- /**
- * @type {Em.Array}
- */
- stackVersions: App.StackVersion.find(),
-
- /**
- * filter versions by category
- * @param versions
- * @param filter
- * @return {Array}
- */
- filterBy: function (versions, filter) {
- var currentVersion = this.get('controller.currentVersion');
- if (filter && filter.get('value')) {
- versions = versions.filter(function (version) {
- var status = version.get('status');
- var isUpgrading = this.isVersionUpgrading(version);
- if (status === 'INSTALLED' && ['UPGRADE_READY', 'INSTALLED', 'UPGRADING'].contains(filter.get('value'))) {
- if (filter.get('value') === 'UPGRADING') {
- return isUpgrading;
- } else if (filter.get('value') === 'UPGRADE_READY') {
- return !isUpgrading &&
- stringUtils.compareVersions(version.get('repositoryVersion'), Em.get(currentVersion, 'repository_version')) === 1;
- } else if (filter.get('value') === 'INSTALLED') {
- return stringUtils.compareVersions(version.get('repositoryVersion'), Em.get(currentVersion, 'repository_version')) < 1;
- }
- } else if (filter.get('value') === 'NOT_INSTALLED') {
- return ['NOT_REQUIRED', 'INSTALL_FAILED', 'INSTALLING', 'OUT_OF_SYNC'].contains(status);
- } else {
- return status === filter.get('value');
- }
- }, this);
- }
- if (App.get('supports.displayOlderVersions') || Em.isNone(currentVersion)) {
- return versions.filterProperty('hidden', false).toArray();
- } else {
- return versions.filterProperty('hidden', false).filter(function(v) {
- if (v.get('stackVersionType') === Em.get(currentVersion, 'stack_name')) {
- // PATCH or MAINT version should be visible even if patch number lower than current
- return v.get('isPatch') || v.get('isMaint') || stringUtils.compareVersions(v.get('repositoryVersion'), Em.get(currentVersion, 'repository_version')) >= 0;
- }
- return v.get('isCompatible');
- }).toArray();
- }
- },
-
- /**
- * is version in upgrading or downgrading state
- * @param version
- */
- isVersionUpgrading: function(version) {
- var upgradeController = App.router.get('mainAdminStackAndUpgradeController');
- return upgradeController.get('upgradeVersion') === version.get('displayName') ||
- upgradeController.get('fromVersion') === version.get('repositoryVersion');
- },
-
- /**
- * route to versions in Admin View
- * @return {App.ModalPopup}
- */
- goToVersions: function () {
- var self = this;
- return App.showConfirmationPopup(function () {
- App.ajax.send({
- name: 'ambari.service.load_server_version',
- sender: self
- }).then(function(data) {
- var components = Em.get(data,'components');
- if (Em.isArray(components)) {
- var mappedVersions = components.map(function(component) {
- if (Em.get(component, 'RootServiceComponents.component_version')) {
- return Em.get(component, 'RootServiceComponents.component_version');
- }
- }),
- sortedMappedVersions = mappedVersions.sort(),
- latestVersion = sortedMappedVersions[sortedMappedVersions.length-1].replace(/[^\d.-]/g, '');
- window.location.replace(App.appURLRoot + 'views/ADMIN_VIEW/' + latestVersion + '/INSTANCE/#/stackVersions');
- }
- });
- },
- Em.I18n.t('admin.stackVersions.manageVersions.popup.body'),
- null,
- Em.I18n.t('admin.stackVersions.manageVersions'));
- },
-
- /**
- * load ClusterStackVersions data
- */
- willInsertElement: function () {
- this.poll();
- },
-
- /**
- * stop polling upgrade state
- */
- willDestroyElement: function () {
- window.clearTimeout(this.get('updateTimer'));
- App.ajax.abortRequests(this.get('controller.runningCheckRequests'));
- },
-
- /**
- * set timer for polling
- */
- doPolling: function () {
- var self = this;
- this.set('updateTimer', window.setTimeout(function () {
- self.poll.apply(self);
- }, App.bgOperationsUpdateInterval));
- },
-
- /**
- * poll data
- */
- poll: function () {
- var self = this;
- //skip call if Upgrade wizard opened
- if (App.router.get('updateController').get('isWorking')) {
- this.get('controller').load().done(function () {
- self.set('controller.isLoaded', true);
- self.doPolling();
- });
- }
- }
-
-});
diff --git a/ambari-web/app/views/main/host/stack_versions_view.js b/ambari-web/app/views/main/host/stack_versions_view.js
index 62a88b4..af48580 100644
--- a/ambari-web/app/views/main/host/stack_versions_view.js
+++ b/ambari-web/app/views/main/host/stack_versions_view.js
@@ -152,13 +152,6 @@ App.MainHostStackVersionsView = App.TableView.extend({
}
}),
- /**
- * show progress of installation of version on host
- */
- showInstallProgress: function (event) {
- App.router.get('mainAdminStackAndUpgradeController').showProgressPopup(event.context);
- },
-
outOfSyncInfo: Em.View.extend({
tagName: 'i',
classNames: ['glyphicon glyphicon-question-sign'],
diff --git a/ambari-web/app/views/main/menu.js b/ambari-web/app/views/main/menu.js
index acbd7dc..c90d4ac 100644
--- a/ambari-web/app/views/main/menu.js
+++ b/ambari-web/app/views/main/menu.js
@@ -108,14 +108,6 @@ App.MainSideMenuView = Em.CollectionView.extend({
href: router.urlFor('main.admin.serviceGroups')
});
}
- if (App.isAuthorized('CLUSTER.VIEW_STACK_DETAILS, CLUSTER.UPGRADE_DOWNGRADE_STACK') || upg) {
- categories.push({
- name: 'stackAndUpgrade',
- url: 'stack',
- label: Em.I18n.t('admin.stackUpgrade.title'),
- href: router.urlFor('main.admin.stackAndUpgrade')
- });
- }
if(App.isAuthorized('SERVICE.SET_SERVICE_USERS_GROUPS') || upg) {
categories.push({
name: 'adminServiceAccounts',
diff --git a/ambari-web/test/app_test.js b/ambari-web/test/app_test.js
index 2812b7d..f2089b8 100644
--- a/ambari-web/test/app_test.js
+++ b/ambari-web/test/app_test.js
@@ -412,180 +412,4 @@ describe('App', function () {
});
});
});
-
- describe('#upgradeIsRunning', function () {
-
- Em.A([
- {
- upgradeState: 'IN_PROGRESS',
- m: 'should be true (1)',
- e: true
- },
- {
- upgradeState: 'HOLDING',
- m: 'should be true (2)',
- e: true
- },
- {
- upgradeState: 'FAKE',
- m: 'should be false',
- e: false
- }
- ]).forEach(function (test) {
- it(test.m, function () {
- App.set('upgradeState', test.upgradeState);
- expect(App.get('upgradeIsRunning')).to.equal(test.e);
- });
- });
-
- });
-
- describe('#upgradeSuspended', function () {
- var cases = [
- {
- upgradeState: 'NOT_REQUIRED',
- isSuspended: false,
- upgradeSuspended: false
- },
- {
- upgradeState: 'ABORTED',
- isSuspended: false,
- upgradeSuspended: false
- },
- {
- upgradeState: 'ABORTED',
- isSuspended: true,
- upgradeSuspended: true
- }
- ];
-
- beforeEach(function() {
- this.mock = sinon.stub(App.router, 'get');
- });
- afterEach(function() {
- this.mock.restore();
- });
-
- cases.forEach(function (test) {
- it(test.upgradeState + ", isSuspended=" + test.isSuspended, function () {
- App.set('upgradeState', test.upgradeState);
- this.mock.returns(test.isSuspended);
- App.propertyDidChange('upgradeSuspended');
- expect(App.get('upgradeSuspended')).to.equal(test.upgradeSuspended);
- });
- });
- });
-
- describe('#upgradeAborted', function () {
-
- var cases = [
- {
- upgradeState: 'NOT_REQUIRED',
- isSuspended: false,
- upgradeAborted: false
- },
- {
- upgradeState: 'ABORTED',
- isSuspended: true,
- upgradeAborted: false
- },
- {
- upgradeState: 'ABORTED',
- isSuspended: false,
- upgradeAborted: true
- }
- ];
-
- beforeEach(function() {
- this.mock = sinon.stub(App.router, 'get');
- });
- afterEach(function() {
- this.mock.restore();
- });
-
- cases.forEach(function (test) {
- it(test.upgradeState + ", isSuspended=" + test.isSuspended, function () {
- App.set('upgradeState', test.upgradeState);
- this.mock.returns(test.isSuspended);
- App.propertyDidChange('upgradeAborted');
- expect(App.get('upgradeAborted')).to.equal(test.upgradeAborted);
- });
- });
- });
-
- describe('#wizardIsNotFinished', function () {
- var cases = [
- {
- upgradeState: 'NOT_REQUIRED',
- wizardIsNotFinished: false
- },
- {
- upgradeState: 'IN_PROGRESS',
- wizardIsNotFinished: true
- },
- {
- upgradeState: 'HOLDING',
- wizardIsNotFinished: true
- },
- {
- upgradeState: 'HOLDING_TIMEDOUT',
- wizardIsNotFinished: true
- },
- {
- upgradeState: 'ABORTED',
- wizardIsNotFinished: true
- }
- ];
-
- cases.forEach(function (item) {
- it(item.upgradeState, function () {
- App.set('upgradeState', item.upgradeState);
- App.propertyDidChange('wizardIsNotFinished');
- expect(App.get('wizardIsNotFinished')).to.equal(item.wizardIsNotFinished);
- });
- });
- });
-
- describe("#upgradeHolding", function () {
- var cases = [
- {
- upgradeState: 'NOT_REQUIRED',
- upgradeAborted: false,
- upgradeHolding: false
- },
- {
- upgradeState: 'HOLDING',
- upgradeAborted: false,
- upgradeHolding: true
- },
- {
- upgradeState: 'HOLDING_FAILED',
- upgradeAborted: false,
- upgradeHolding: true
- },
- {
- upgradeState: 'NOT_REQUIRED',
- upgradeAborted: true,
- upgradeHolding: true
- }
- ];
-
- beforeEach(function() {
- this.mock = sinon.stub(App.router, 'get');
- });
- afterEach(function() {
- this.mock.restore();
- });
-
- cases.forEach(function (test) {
- it(test.upgradeState + ", upgradeAborted=" + test.upgradeAborted, function () {
- App.reopen({
- upgradeAborted: test.upgradeAborted,
- upgradeState: test.upgradeState
- });
- App.propertyDidChange('upgradeHolding');
- expect(App.get('upgradeHolding')).to.equal(test.upgradeHolding);
- });
- });
- });
});
diff --git a/ambari-web/test/controllers/global/cluster_controller_test.js b/ambari-web/test/controllers/global/cluster_controller_test.js
index 1b05fd2..947d9b7 100644
--- a/ambari-web/test/controllers/global/cluster_controller_test.js
+++ b/ambari-web/test/controllers/global/cluster_controller_test.js
@@ -244,151 +244,6 @@ describe('App.clusterController', function () {
});
- describe("#restoreUpgradeState()", function() {
- var data = {upgradeData: {}};
- var mock = {
- done: function (callback) {
- callback(data.upgradeData);
- }
- };
- var upgradeController = Em.Object.create({
- restoreLastUpgrade: Em.K,
- initDBProperties: Em.K,
- loadUpgradeData: Em.K,
- loadCompatibleVersions: Em.K,
- updateCurrentStackVersion: Em.K,
- loadStackVersionsToModel: function () {
- return {done: Em.clb};
- }
- });
-
- beforeEach(function () {
- sinon.stub(controller, 'getAllUpgrades').returns(mock);
- sinon.spy(mock, 'done');
- sinon.stub(App.router, 'get').returns(upgradeController);
- sinon.stub(App.db, 'get').returns('PENDING');
- sinon.spy(upgradeController, 'restoreLastUpgrade');
- sinon.spy(upgradeController, 'initDBProperties');
- sinon.spy(upgradeController, 'loadUpgradeData');
- sinon.spy(upgradeController, 'loadStackVersionsToModel');
- sinon.spy(upgradeController, 'loadCompatibleVersions');
- sinon.spy(upgradeController, 'updateCurrentStackVersion');
- sinon.stub(App.stackUpgradeHistoryMapper, 'map');
- });
-
- afterEach(function () {
- mock.done.restore();
- controller.getAllUpgrades.restore();
- App.router.get.restore();
- App.db.get.restore();
- upgradeController.restoreLastUpgrade.restore();
- upgradeController.initDBProperties.restore();
- upgradeController.loadUpgradeData.restore();
- upgradeController.loadStackVersionsToModel.restore();
- upgradeController.loadCompatibleVersions.restore();
- upgradeController.updateCurrentStackVersion.restore();
- App.stackUpgradeHistoryMapper.map.restore();
- });
-
- describe("has upgrade request", function() {
-
- beforeEach(function () {
- data.upgradeData = {items: [
- {
- Upgrade: {
- request_id: 1
- }
- }
- ]};
- controller.restoreUpgradeState();
- });
-
- it('getAllUpgrades is called once', function () {
- expect(controller.getAllUpgrades.calledOnce).to.be.true;
- });
-
- it('restoreLastUpgrade is called with valid arguments', function () {
- expect(upgradeController.restoreLastUpgrade.calledWith(data.upgradeData.items[0])).to.be.true;
- });
-
- it('loadStackVersionsToModel is called with valid arguments', function () {
- expect(upgradeController.loadStackVersionsToModel.calledWith(true)).to.be.true;
- });
-
- it('loadCompatibleVersions should be called', function () {
- expect(upgradeController.loadCompatibleVersions.calledOnce).to.be.true;
- });
-
- it('updateCurrentStackVersion should be called', function () {
- expect(upgradeController.updateCurrentStackVersion.calledOnce).to.be.true;
- });
-
- it('initDBProperties is not called', function () {
- expect(upgradeController.initDBProperties.called).to.be.false;
- });
-
- it('loadUpgradeData is not called', function () {
- expect(upgradeController.loadUpgradeData.called).to.be.false;
- });
-
- it('App.stackUpgradeHistoryMapper.map should be called', function () {
- expect(App.stackUpgradeHistoryMapper.map.calledOnce).to.be.true;
- });
- });
-
- describe("has completed upgrade request", function() {
-
- beforeEach(function () {
- data.upgradeData = {items: [
- {
- Upgrade: {
- request_id: 1,
- request_status: 'COMPLETED'
- }
- }
- ]};
- controller.restoreUpgradeState();
- });
-
- it('getAllUpgrades is called once', function () {
- expect(controller.getAllUpgrades.calledOnce).to.be.true;
- });
-
- it('restoreLastUpgrade should not be called', function () {
- expect(upgradeController.restoreLastUpgrade.called).to.be.false;
- });
-
- it('loadStackVersionsToModel should be called', function () {
- expect(upgradeController.loadStackVersionsToModel).to.be.calledOnce;
- });
- });
-
- describe("does not have upgrade request", function() {
-
- beforeEach(function () {
- data.upgradeData = {items: []};
- controller.restoreUpgradeState();
- });
-
- it('getAllUpgrades is called once', function () {
- expect(controller.getAllUpgrades.calledOnce).to.be.true;
- });
-
- it('restoreLastUpgrade is not called', function () {
- expect(upgradeController.restoreLastUpgrade.called).to.be.false;
- });
-
- it('loadStackVersionsToModel is called with valid arguments', function () {
- expect(upgradeController.loadStackVersionsToModel.calledWith(true)).to.be.true;
- });
-
- it('initDBProperties is called once', function () {
- expect(upgradeController.initDBProperties.calledOnce).to.be.true;
- });
-
- });
- });
-
describe('#isRunningState()', function() {
var testCases = [
{
@@ -645,7 +500,6 @@ describe('App.clusterController', function () {
sinon.stub(controller, 'loadAuthorizations');
sinon.stub(controller, 'getAllHostNames');
sinon.stub(controller, 'loadClusterInfo');
- sinon.stub(controller, 'restoreUpgradeState');
sinon.stub(controller, 'loadClusterDataToModel');
sinon.stub(App.router.get('mainController'), 'startPolling');
sinon.stub(App.router.get('userSettingsController'), 'getAllUserSettings');
@@ -666,7 +520,6 @@ describe('App.clusterController', function () {
controller.loadAuthorizations.restore();
controller.getAllHostNames.restore();
controller.loadClusterInfo.restore();
- controller.restoreUpgradeState.restore();
controller.loadClusterDataToModel.restore();
});
@@ -695,11 +548,6 @@ describe('App.clusterController', function () {
expect(controller.loadClusterInfo.calledOnce).to.be.true;
});
- it('restoreUpgradeState should be called', function() {
- controller.loadClusterData();
- expect(controller.restoreUpgradeState.calledOnce).to.be.true;
- });
-
it('getUser should be called', function() {
controller.loadClusterData();
expect(App.router.get('wizardWatcherController').getUser.calledOnce).to.be.true;
diff --git a/ambari-web/test/controllers/global/update_controller_test.js b/ambari-web/test/controllers/global/update_controller_test.js
index 62a6bb1..a6ed0f2 100644
--- a/ambari-web/test/controllers/global/update_controller_test.js
+++ b/ambari-web/test/controllers/global/update_controller_test.js
@@ -87,7 +87,6 @@ describe('App.UpdateController', function () {
expect(App.StompClient.subscribe.calledWith('/events/hosts')).to.be.true;
expect(App.StompClient.subscribe.calledWith('/events/alert_definitions')).to.be.true;
expect(App.StompClient.subscribe.calledWith('/events/alert_group')).to.be.true;
- expect(App.StompClient.subscribe.calledWith('/events/upgrade')).to.be.true;
});
});
diff --git a/ambari-web/test/controllers/main/admin/highAvailability/progress_popup_controller_test.js b/ambari-web/test/controllers/main/admin/highAvailability/progress_popup_controller_test.js
index b14bf86..b531926 100644
--- a/ambari-web/test/controllers/main/admin/highAvailability/progress_popup_controller_test.js
+++ b/ambari-web/test/controllers/main/admin/highAvailability/progress_popup_controller_test.js
@@ -282,7 +282,6 @@ describe('App.HighAvailabilityProgressPopupController', function () {
sinon.stub(App.HostPopup, 'initPopup');
sinon.stub(controller, 'isRequestRunning').returns(true);
sinon.stub(controller, 'addObserver');
- sinon.stub(controller, 'doPolling');
sinon.stub(spinner, 'hide');
controller.setProperties({
requestIds: [1],
@@ -301,7 +300,6 @@ describe('App.HighAvailabilityProgressPopupController', function () {
App.HostPopup.initPopup.restore();
controller.isRequestRunning.restore();
controller.addObserver.restore();
- controller.doPolling.restore();
spinner.hide.restore();
});
@@ -320,10 +318,6 @@ describe('App.HighAvailabilityProgressPopupController', function () {
it("spinnerPopup.hide should be called", function() {
expect(spinner.hide.calledOnce).to.be.true;
});
-
- it("doPolling should be called", function() {
- expect(controller.doPolling.calledOnce).to.be.true;
- });
});
describe("#calculateHostsData()", function () {
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
deleted file mode 100644
index 0ebaee8..0000000
--- a/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
+++ /dev/null
@@ -1,3606 +0,0 @@
-/**
- * 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');
-require('controllers/main/admin/stack_and_upgrade_controller');
-require('utils/string_utils');
-var testHelpers = require('test/helpers');
-
-describe('App.MainAdminStackAndUpgradeController', function() {
-
- var controller = App.MainAdminStackAndUpgradeController.create({
- getDBProperty: Em.K,
- setDBProperty: Em.K,
- setDBProperties: Em.K,
- getDBProperties: Em.K
- });
-
- controller.removeObserver('App.upgradeState', controller, 'finish');
-
-
- describe("#realRepoUrl", function() {
- before(function () {
- this.mock = sinon.stub(App, 'get');
- this.mock.withArgs('apiPrefix').returns('apiPrefix');
- });
- after(function () {
- this.mock.restore();
- });
- it("should be valid", function() {
- var expected = 'apiPrefix/stacks?fields=versions/repository_versions/RepositoryVersions,' +
- 'versions/repository_versions/operating_systems/*,versions/repository_versions/operating_systems/repositories/*';
- controller.propertyDidChange('realRepoUrl');
- expect(controller.get('realRepoUrl')).to.equal(expected);
- });
- });
-
- describe("#realStackUrl", function() {
- before(function () {
- this.mock = sinon.stub(App, 'get');
- this.mock.withArgs('apiPrefix').returns('apiPrefix')
- .withArgs('clusterName').returns('clusterName');
- });
- after(function () {
- this.mock.restore();
- });
- it("should be valid", function() {
- controller.propertyDidChange('realStackUrl');
- expect(controller.get('realStackUrl')).to.equal('apiPrefix/clusters/clusterName/stack_versions?fields=*,repository_versions/*,repository_versions/operating_systems/OperatingSystems/*,repository_versions/operating_systems/repositories/*');
- });
- });
-
- describe("#realUpdateUrl", function() {
- before(function () {
- this.mock = sinon.stub(App, 'get');
- this.mock.withArgs('apiPrefix').returns('apiPrefix')
- .withArgs('clusterName').returns('clusterName');
- });
- after(function () {
- this.mock.restore();
- });
- it("realUpdateUrl is valid", function() {
- controller.propertyDidChange('realUpdateUrl');
- expect(controller.get('realUpdateUrl')).to.equal('apiPrefix/clusters/clusterName/stack_versions?fields=ClusterStackVersions/*');
- });
- });
-
- describe("#requestStatus", function() {
-
- beforeEach(function() {
- this.mock = sinon.stub(App, 'get');
- });
- afterEach(function() {
- this.mock.restore();
- });
-
- it("App.upgradeSuspended is true", function() {
- this.mock.returns(true);
- controller.set('upgradeData', { Upgrade: {request_status: 'ABORTED'}});
- controller.propertyDidChange('requestStatus');
- expect(controller.get('requestStatus')).to.equal('SUSPENDED');
- });
-
- it("state not ABORTED", function() {
- this.mock.returns(false);
- controller.set('upgradeData', { Upgrade: {request_status: 'NOT_REQUIRED'}});
- controller.propertyDidChange('requestStatus');
- expect(controller.get('requestStatus')).to.equal('NOT_REQUIRED');
- });
-
- it("upgradeData is null", function() {
- this.mock.returns(false);
- controller.set('upgradeData', null);
- controller.propertyDidChange('requestStatus');
- expect(controller.get('requestStatus')).to.equal('INIT');
- });
- });
-
- describe("#load()", function() {
- beforeEach(function(){
- sinon.stub(controller, 'loadStackVersionsToModel').returns({
- done: Em.clb
- });
- sinon.stub(controller, 'loadRepoVersionsToModel').returns({
- done: Em.clb
- });
- sinon.stub(controller, 'loadCompatibleVersions').returns({
- done: Em.clb
- });
- sinon.stub(App.StackVersion, 'find').returns([Em.Object.create({
- state: 'CURRENT',
- repositoryVersion: {
- id: '1',
- stackVersionType: 'HDP',
- repositoryVersion: '2.2',
- displayName: 'HDP-2.2'
- }
- })]);
- controller.load();
- });
- afterEach(function(){
- controller.loadStackVersionsToModel.restore();
- controller.loadRepoVersionsToModel.restore();
- controller.loadCompatibleVersions.restore();
- App.StackVersion.find.restore();
- });
- it('loadStackVersionsToModel called with valid arguments', function () {
- expect(controller.loadStackVersionsToModel.calledWith(true)).to.be.true;
- });
- it('loadRepoVersionsToModel called once', function () {
- expect(controller.loadRepoVersionsToModel.calledOnce).to.be.true;
- });
- it('loadCompatibleVersions called once', function () {
- expect(controller.loadCompatibleVersions.calledOnce).to.be.true;
- });
- it('currentVersion is corrent', function () {
- expect(controller.get('currentVersion')).to.eql({
- "id": "1",
- "stack_name": 'HDP',
- "repository_version": "2.2",
- "repository_name": "HDP-2.2"
- });
- });
- });
-
- describe("#loadUpgradeData()", function() {
-
- it("get entire data", function() {
- controller.set('upgradeId', 1);
- controller.loadUpgradeData();
- var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.data');
- expect(args[0]).to.exists;
- expect(args[0].sender).to.be.eql(controller);
- expect(args[0].data).to.be.eql({
- id: 1
- });
- });
- it("get only state", function() {
- controller.set('upgradeId', 1);
- controller.loadUpgradeData(true);
- var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.state');
- expect(args[0]).to.exists;
- expect(args[0].sender).to.be.eql(controller);
- expect(args[0].data).to.be.eql({
- id: 1
- });
- });
- it("upgrade id is null", function() {
- controller.set('upgradeId', null);
- controller.loadUpgradeData();
- var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.state');
- var args2 = testHelpers.findAjaxRequest('name', 'admin.upgrade.data');
- expect(args).to.not.exists;
- expect(args2).to.not.exists;
- });
- });
-
- describe("#loadUpgradeDataSuccessCallback()", function() {
- var retryCases = [
- {
- isRetryPendingInitial: true,
- status: 'ABORTED',
- isRetryPending: true,
- requestInProgress: true,
- title: 'retry request not yet applied'
- },
- {
- isRetryPendingInitial: true,
- status: 'UPGRADING',
- isRetryPending: false,
- requestInProgress: false,
- title: 'retry request applied'
- },
- {
- isRetryPendingInitial: false,
- status: 'ABORTED',
- isRetryPending: false,
- requestInProgress: true,
- title: 'no retry request sent'
- },
- {
- isRetryPendingInitial: false,
- status: 'UPGRADING',
- isRetryPending: false,
- requestInProgress: true,
- title: 'upgrade wasn\'t aborted'
- }
- ];
- beforeEach(function () {
- sinon.stub(controller, 'updateUpgradeData', Em.K);
- sinon.stub(controller, 'setDBProperty', Em.K);
- sinon.stub(controller, 'finish');
- });
- afterEach(function () {
- controller.updateUpgradeData.restore();
- controller.setDBProperty.restore();
- controller.finish.restore();
- App.set('upgradeState', 'NOT_REQUIRED');
- });
-
- it("correct data", function() {
- var data = {
- "Upgrade": {
- "request_status": "UPGRADED"
- },
- "upgrade_groups": [
- {
- "UpgradeGroup": {
- "id": 1
- },
- "upgrade_items": []
- }
- ]};
- controller.loadUpgradeDataSuccessCallback(data);
- expect(App.get('upgradeState')).to.equal('UPGRADED');
- expect(controller.updateUpgradeData.calledOnce).to.be.true;
- expect(controller.setDBProperty.calledWith('upgradeState', 'UPGRADED')).to.be.true;
- });
-
- it("data is null", function() {
- var data = null;
- controller.loadUpgradeDataSuccessCallback(data);
- expect(controller.updateUpgradeData.called).to.be.false;
- expect(controller.setDBProperty.called).to.be.false;
- });
-
- it("finish should be called", function() {
- var data = {
- "Upgrade": {
- "request_status": "COMPLETED"
- }
- };
- controller.loadUpgradeDataSuccessCallback(data);
- expect(controller.finish.calledOnce).to.be.true;
- });
-
- retryCases.forEach(function (item) {
- it(item.title, function () {
- var data = {
- "Upgrade": {
- "request_status": item.status
- }
- };
- controller.setProperties({
- isRetryPending: item.isRetryPendingInitial,
- requestInProgress: true
- });
- controller.loadUpgradeDataSuccessCallback(data);
- expect(controller.getProperties(['isRetryPending', 'requestInProgress'])).to.eql({
- isRetryPending: item.isRetryPending,
- requestInProgress: item.requestInProgress
- });
- });
- });
- });
-
- describe("#getUpgradeItem()", function() {
-
- it("default callback", function() {
- var item = Em.Object.create({
- request_id: 1,
- group_id: 2,
- stage_id: 3
- });
- controller.getUpgradeItem(item);
- var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.upgrade_item');
- expect(args[0]).to.exists;
- expect(args[0].sender).to.be.eql(controller);
- expect(args[0].success).to.be.equal('getUpgradeItemSuccessCallback');
- expect(args[0].data).to.be.eql({
- upgradeId: 1,
- groupId: 2,
- stageId: 3
- });
- });
- it("custom callback", function() {
- var item = Em.Object.create({
- request_id: 1,
- group_id: 2,
- stage_id: 3
- });
- controller.getUpgradeItem(item, 'customCallback');
- var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.upgrade_item');
- expect(args[0]).to.exists;
- expect(args[0].sender).to.be.eql(controller);
- expect(args[0].success).to.be.equal('customCallback');
- expect(args[0].data).to.be.eql({
- upgradeId: 1,
- groupId: 2,
- stageId: 3
- });
- });
- });
-
- describe("#openUpgradeDialog()", function () {
- var mock = {
- observer: Em.K
- };
- 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');
- });
- 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('should not open dialog, isWizardRestricted=true', function () {
- this.mockAuthorized.returns(true);
- controller.set('isWizardRestricted', true);
- 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;
- });
-
- it('upgradeSuspended should not receive value, isWizardRestricted=true', function () {
- this.mockAuthorized.returns(true);
- controller.set('isWizardRestricted', true);
- controller.openUpgradeDialog();
- expect(mock.observer.called).to.be.false;
- });
- });
-
- describe("#runPreUpgradeCheck()", function() {
- it("make ajax call", function() {
- controller.runPreUpgradeCheck(Em.Object.create({
- id: '1',
- repositoryVersion: '2.2',
- displayName: 'HDP-2.2',
- upgradeType: 'ROLLING',
- skipComponentFailures: false,
- skipSCFailures: false
- }));
- var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.pre_upgrade_check');
- expect(args[0]).to.exists;
- expect(args[0].sender).to.be.eql(controller);
- expect(args[0].data).to.be.eql({
- id: '1',
- value: '2.2',
- label: 'HDP-2.2',
- type: 'ROLLING',
- targetStack: "HDP-2.2",
- skipComponentFailures: 'false',
- skipSCFailures: 'false'
- });
- });
- });
-
- describe("#runPreUpgradeCheckSuccess()", function () {
- var cases = [
- {
- check: {
- "check": "Work-preserving RM/NM restart is enabled in YARN configs",
- "status": "FAIL",
- "reason": "FAIL",
- "failed_on": [],
- "check_type": "SERVICE"
- },
- showClusterCheckPopupCalledCount: 1,
- upgradeCalledCount: 0,
- title: 'popup is displayed if fails are present'
- },
- {
- check: {
- "check": "Configuration Merge Check",
- "status": "WARNING",
- "reason": "Conflict",
- "failed_on": [],
- "failed_detail": [
- {
- type: 't0',
- property: 'p0',
- current: 'c0',
- new_stack_value: 'n0',
- result_value: 'n0'
- },
- {
- type: 't1',
- property: 'p1',
- current: 'c1',
- new_stack_value: null,
- result_value: 'c1'
- },
- {
- type: 't2',
- property: 'p2',
- current: 'c2',
- new_stack_value: null,
- result_value: null
- }
- ],
- "check_type": "CLUSTER",
- "id": "CONFIG_MERGE"
- },
- showClusterCheckPopupCalledCount: 1,
- upgradeCalledCount: 0,
- configs: [
- {
- type: 't0',
- name: 'p0',
- currentValue: 'c0',
- recommendedValue: 'n0',
- resultingValue: 'n0',
- isDeprecated: false,
- wasModified: false,
- willBeRemoved: false
- },
- {
- type: 't1',
- name: 'p1',
- currentValue: 'c1',
- recommendedValue: Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.deprecated'),
- resultingValue: 'c1',
- isDeprecated: true,
- wasModified: false,
- willBeRemoved: false
- },
- {
- type: 't2',
- name: 'p2',
- currentValue: 'c2',
- recommendedValue: Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.deprecated'),
- resultingValue: Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.willBeRemoved'),
- isDeprecated: true,
- wasModified: false,
- willBeRemoved: true
- }
- ],
- title: 'popup is displayed if warnings are present; configs merge conflicts'
- },
- {
- check: {
- "check": "Work-preserving RM/NM restart is enabled in YARN configs",
- "status": "PASS",
- "reason": "OK",
- "failed_on": [],
- "check_type": "SERVICE"
- },
- showClusterCheckPopupCalledCount: 0,
- upgradeCalledCount: 1,
- title: 'upgrade is started if fails and warnings are absent'
- }
- ];
- beforeEach(function () {
- sinon.stub(App, 'showClusterCheckPopup', Em.K);
- sinon.stub(controller, 'upgrade', Em.K);
- });
- afterEach(function () {
- App.showClusterCheckPopup.restore();
- controller.upgrade.restore();
- });
- cases.forEach(function (item) {
- it(item.title, function () {
- controller.runPreUpgradeCheckSuccess(
- {
- items: [
- {
- UpgradeChecks: item.check
- }
- ]
- }, null, {
- label: 'name'
- }
- );
- expect(controller.upgrade.callCount).to.equal(item.upgradeCalledCount);
- expect(App.showClusterCheckPopup.callCount).to.equal(item.showClusterCheckPopupCalledCount);
- if (item.check.id === 'CONFIG_MERGE') {
- expect(App.showClusterCheckPopup.firstCall.args[2]).to.eql(item.configs);
- }
- });
- });
- });
-
- describe("#initDBProperties()", function() {
- before(function () {
- this.mock = sinon.stub(controller, 'getDBProperties');
- });
- after(function () {
- this.mock.restore();
- });
- it("set string properties", function () {
- this.mock.returns({prop: 'string'});
- controller.initDBProperties();
- expect(controller.get('prop')).to.equal('string');
- });
- it("set number properties", function () {
- this.mock.returns({prop: 0});
- controller.initDBProperties();
- expect(controller.get('prop')).to.equal(0);
- });
- it("set boolean properties", function () {
- this.mock.returns({prop: false});
- controller.initDBProperties();
- expect(controller.get('prop')).to.be.false;
- });
- it("set undefined properties", function () {
- this.mock.returns({prop: undefined});
- controller.set('prop', 'value');
- controller.initDBProperties();
- expect(controller.get('prop')).to.equal('value');
- });
- it("set null properties", function () {
- this.mock.returns({prop: null});
- controller.set('prop', 'value');
- controller.initDBProperties();
- expect(controller.get('prop')).to.equal('value');
- });
- });
-
- describe("#init()", function() {
- before(function () {
- sinon.stub(controller, 'initDBProperties', Em.K);
- });
- after(function () {
- controller.initDBProperties.restore();
- });
- it("call initDBProperties", function () {
- controller.init();
- expect(controller.initDBProperties.calledOnce).to.be.true;
- });
- });
-
- describe("#upgrade()", function() {
- var callArgs;
-
- beforeEach(function () {
- sinon.stub(controller, 'setDBProperty', Em.K);
- controller.set('currentVersion', {
- repository_version: '2.2'
- });
- controller.upgrade({
- value: '2.2',
- label: 'HDP-2.2'
- });
- callArgs = testHelpers.findAjaxRequest('name', 'admin.upgrade.start')[0];
- });
-
- afterEach(function () {
- controller.setDBProperty.restore();
- });
-
- it("request-data is valid", function() {
- expect(callArgs.data).to.eql({"value": '2.2', "label": 'HDP-2.2'});
- });
- it('request-name is valid', function () {
- expect(callArgs.name).to.equal('admin.upgrade.start');
- });
- it('request-sender is valid', function () {
- expect(callArgs.sender).to.eql(controller);
- });
- it('callback is valid', function () {
- expect(callArgs.success).to.equal('upgradeSuccessCallback');
- });
- it('callback is called', function () {
- expect(callArgs.callback).to.be.called;
- });
- it('setDBProperty is called with valid data', function () {
- expect(controller.setDBProperty.calledWith('currentVersion', {
- repository_version: '2.2'
- })).to.be.true;
- });
- });
-
- describe("#upgradeSuccessCallback()", function() {
-
- beforeEach(function () {
- sinon.stub(App.clusterStatus, 'setClusterStatus', Em.K);
- sinon.stub(controller, 'openUpgradeDialog', Em.K);
- sinon.stub(controller, 'setDBProperties', Em.K);
- sinon.stub(controller, 'load', Em.K);
- var data = {
- resources: [
- {
- Upgrade: {
- request_id: 1
- }
- }
- ]
- };
- controller.upgradeSuccessCallback(data, {}, {label: 'HDP-2.2.1', isDowngrade: true});
- });
-
- afterEach(function () {
- App.clusterStatus.setClusterStatus.restore();
- controller.openUpgradeDialog.restore();
- controller.setDBProperties.restore();
- controller.load.restore();
- });
-
- it('load is called ocne', function() {
- expect(controller.load.calledOnce).to.be.true;
- });
- it('upgradeVersion is HDP-2.2.1', function() {
- expect(controller.get('upgradeVersion')).to.equal('HDP-2.2.1');
- });
- it('upgradeData is null', function() {
- expect(controller.get('upgradeData')).to.be.null;
- });
- it('isDowngrade is true', function() {
- expect(controller.get('isDowngrade')).to.be.true;
- });
- it('App.clusterStatus.setClusterStatus is called once', function() {
- expect(App.clusterStatus.setClusterStatus.calledOnce).to.be.true;
- });
- it('controller.openUpgradeDialog is called once', function() {
- expect(controller.openUpgradeDialog.calledOnce).to.be.true;
- });
- });
-
- describe("#updateUpgradeData()", function() {
- beforeEach(function () {
- sinon.stub(controller, 'initUpgradeData', Em.K);
- });
- afterEach(function () {
- controller.initUpgradeData.restore();
- });
- it("data loaded first time", function() {
- controller.set('upgradeData', null);
- controller.updateUpgradeData({});
- expect(controller.initUpgradeData.calledWith({})).to.be.true;
- });
-
- describe('upgradeData exists', function () {
-
- var groups;
-
- beforeEach(function() {
- var oldData = Em.Object.create({
- upgradeGroups: [
- Em.Object.create({
- group_id: 1,
- upgradeItems: [
- Em.Object.create({
- stage_id: 1
- })
- ]
- }),
- Em.Object.create({
- group_id: 2,
- upgradeItems: [
- Em.Object.create({
- stage_id: 2
- }),
- Em.Object.create({
- stage_id: 3
- })
- ]
- })
- ]
- });
- var newData = {
- Upgrade: {
- request_id: 1
- },
- upgrade_groups: [
- {
- UpgradeGroup: {
- group_id: 1,
- status: 'COMPLETED',
- display_status: 'COMPLETED',
- progress_percent: 100,
- completed_task_count: 3
- },
- upgrade_items: [
- {
- UpgradeItem: {
- stage_id: 1,
- status: 'COMPLETED',
- display_status: 'COMPLETED',
- progress_percent: 100
- }
- }
- ]
- },
- {
- UpgradeGroup: {
- group_id: 2,
- status: 'ABORTED',
- display_status: 'ABORTED',
- progress_percent: 50,
- completed_task_count: 1
- },
- upgrade_items: [
- {
- UpgradeItem: {
- stage_id: 2,
- status: 'ABORTED',
- display_status: 'ABORTED',
- progress_percent: 99
- }
- },
- {
- UpgradeItem: {
- stage_id: 3,
- status: 'PENDING',
- display_status: 'PENDING',
- progress_percent: 0
- }
- }
- ]
- }
- ]
- };
- controller.set('upgradeData', oldData);
- controller.updateUpgradeData(newData);
- groups = controller.get('upgradeData.upgradeGroups');
- });
-
- describe("checking 1st group", function() {
- it('status is COMPLETED', function () {
- expect(groups[0].get('status')).to.equal('COMPLETED');
- });
- it('display_status is COMPLETED', function () {
- expect(groups[0].get('display_status')).to.equal('COMPLETED');
- });
- it('progress_percent is 100', function () {
- expect(groups[0].get('progress_percent')).to.equal(100);
- });
- it('completed_task_count = 3', function () {
- expect(groups[0].get('completed_task_count')).to.equal(3);
- });
- it('upgradeItems.0.status is COMPLETED', function () {
- expect(groups[0].get('upgradeItems')[0].get('status')).to.equal('COMPLETED');
- });
- it('upgradeItems.0.display_status is COMPLETED', function () {
- expect(groups[0].get('upgradeItems')[0].get('display_status')).to.equal('COMPLETED');
- });
- it('upgradeItems.0.progress_percent is 100', function () {
- expect(groups[0].get('upgradeItems')[0].get('progress_percent')).to.equal(100);
- });
- it('hasExpandableItems is true', function () {
- expect(groups[0].get('hasExpandableItems')).to.be.true;
- });
- });
-
- describe('checking 2nd group', function () {
- it('status is ABORTED', function () {
- expect(groups[1].get('status')).to.equal('ABORTED');
- });
- it('display_status is ABORTED', function () {
- expect(groups[1].get('display_status')).to.equal('ABORTED');
- });
- it('progress_percent is 50', function () {
- expect(groups[1].get('progress_percent')).to.equal(50);
- });
- it('completed_task_count = 1', function () {
- expect(groups[1].get('completed_task_count')).to.equal(1);
- });
- it('upgradeItems.[].status = ["ABORTED", "PENDING"]', function () {
- expect(groups[1].get('upgradeItems').mapProperty('status')).to.eql(['ABORTED', 'PENDING']);
- });
- it('upgradeItems.[].display_status = ["ABORTED", "PENDING"]', function () {
- expect(groups[1].get('upgradeItems').mapProperty('display_status')).to.eql(['ABORTED', 'PENDING']);
- });
- it('upgradeItems.[].progress_percent = [99, 0]', function () {
- expect(groups[1].get('upgradeItems').mapProperty('progress_percent')).to.eql([99, 0]);
- });
- it('hasExpandableItems is false', function () {
- expect(groups[1].get('hasExpandableItems')).to.be.false;
- });
- });
-
- });
- });
-
- describe("#initUpgradeData()", function() {
- beforeEach(function () {
- sinon.stub(controller, 'setDBProperty');
- sinon.stub(controller, 'formatMessages');
- var newData = {
- Upgrade: {
- request_id: 1,
- downgrade_allowed: false
- },
- upgrade_groups: [
- {
- UpgradeGroup: {
- group_id: 1
- },
- upgrade_items: [
- {
- UpgradeItem: {
- stage_id: 1,
- status: 'IN_PROGRESS'
- }
- },
- {
- UpgradeItem: {
- stage_id: 2
- }
- }
- ]
- },
- {
- UpgradeGroup: {
- group_id: 2
- },
- upgrade_items: []
- },
- {
- UpgradeGroup: {
- group_id: 3
- },
- upgrade_items: [
- {
- UpgradeItem: {
- stage_id: 3,
- status: 'ABORTED'
- }
- },
- {
- UpgradeItem: {
- stage_id: 4,
- status: 'PENDING'
- }
- }
- ]
- }
- ]
- };
- controller.initUpgradeData(newData);
- });
- afterEach(function () {
- controller.setDBProperty.restore();
- controller.formatMessages.restore();
- });
- it("setDBProperty called with valid arguments", function() {
- expect(controller.setDBProperty.calledWith('downgradeAllowed', false)).to.be.true;
- });
- it('downgradeAllowed is false', function () {
- expect(controller.get('downgradeAllowed')).to.be.false;
- });
- it('upgradeData.Upgrade.request_id is 1', function () {
- expect(controller.get('upgradeData.Upgrade.request_id')).to.equal(1);
- });
- it('upgradeData.upgradeGroups contain valid data', function () {
- var groups = controller.get('upgradeData.upgradeGroups');
- expect(groups.mapProperty('group_id')).to.eql([3,2,1]);
- expect(groups[2].get('upgradeItems').mapProperty('stage_id')).to.eql([2,1]);
- expect(groups.mapProperty('hasExpandableItems')).to.eql([false, false, true]);
- });
- });
-
- describe("#confirmDowngrade()", function() {
-
- before(function () {
- sinon.spy(App, 'showConfirmationPopup');
- sinon.stub(controller, 'downgrade', Em.K);
- });
-
- after(function () {
- App.showConfirmationPopup.restore();
- controller.downgrade.restore();
- });
-
- it("show confirmation popup", function() {
- controller.set('currentVersion', Em.Object.create({
- repository_version: '2.2',
- repository_name: 'HDP-2.2'
- }));
- var popup = controller.confirmDowngrade();
- expect(App.showConfirmationPopup.calledOnce).to.be.true;
- popup.onPrimary();
- expect(controller.downgrade.calledWith(Em.Object.create({
- repository_version: '2.2',
- repository_name: 'HDP-2.2'
- }))).to.be.true;
- });
- });
-
- describe("#upgradeOptions()", function() {
- var version = Em.Object.create({displayName: 'HDP-2.2'});
- beforeEach(function () {
- sinon.spy(App.ModalPopup, 'show');
- sinon.spy(App, 'showConfirmationFeedBackPopup');
- sinon.stub(controller, 'getSupportedUpgradeTypes').returns({
- done: function (callback) {
- callback([1]);
- return {
- always: function (alwaysCallback) {
- alwaysCallback();
- return {};
- }
- };
- }
- });
- sinon.stub(controller, 'runPreUpgradeCheck', Em.K);
- sinon.stub(App.RepositoryVersion, 'find').returns([
- Em.Object.create({
- status: 'CURRENT'
- })
- ]);
- controller.get('runningCheckRequests').clear();
- });
-
- afterEach(function () {
- App.ModalPopup.show.restore();
- App.showConfirmationFeedBackPopup.restore();
- controller.runPreUpgradeCheck.restore();
- controller.getSupportedUpgradeTypes.restore();
- controller.get('upgradeMethods').setEach('selected', false);
- App.RepositoryVersion.find.restore();
- });
-
- describe("show confirmation popup", function() {
-
- beforeEach(function () {
- controller.set('isDowngrade', false);
- this.popup = controller.upgradeOptions(false, version);
- });
-
- it('popup is shown', function () {
- expect(App.ModalPopup.show.calledOnce).to.be.true;
- });
-
- it('all upgradeMethods have isCheckRequestInProgress = true', function () {
- expect(controller.get('upgradeMethods').everyProperty('isCheckRequestInProgress')).to.be.true;
- });
-
- it('upgradeMethods no one is selected', function () {
- expect(controller.get('upgradeMethods').someProperty('selected')).to.be.false;
- });
-
- describe('#popup.onPrimary', function () {
-
- beforeEach(function () {
- controller.get('upgradeMethods')[0].set('selected', true);
- this.confirmPopup = this.popup.onPrimary();
- });
-
- it('showConfirmationFeedBackPopup is called once', function () {
- expect(App.showConfirmationFeedBackPopup.calledOnce).to.be.true;
- });
-
- describe('#confirmPopup.onPrimary', function () {
- beforeEach(function () {
- this.confirmPopup.onPrimary();
- });
-
- it('runPreUpgradeCheck is called with correct version', function () {
- expect(controller.runPreUpgradeCheck.calledWith(version)).to.be.true;
- });
-
- it('runningCheckRequests has 1 item', function () {
- expect(controller.get('runningCheckRequests')).to.have.length(1);
- });
-
- });
-
- });
-
- describe('#popup.disablePrimary', function () {
-
- beforeEach(function() {
- this.mock = sinon.stub(App, 'get');
- });
-
- afterEach(function() {
- App.get.restore();
- });
-
- it('should be disabled if no method is selected', function () {
- expect(this.popup.get('disablePrimary')).to.be.true;
- });
-
- it('should be disabled if preupgradecheck is supproted and isPrecheckFailed is true', function () {
- this.mock.returns(true);
- this.popup.set('selectedMethod', Em.Object.create({
- selected: true,
- isPrecheckFailed: true,
- isCheckRequestInProgress: false
- }));
-
- expect(this.popup.get('disablePrimary')).to.be.true;
- });
-
- it('should be disabled if preupgradecheck is supproted and isCheckRequestInProgress is true', function () {
- this.popup.set('selectedMethod', Em.Object.create({
- selected: true,
- isPrecheckFailed: false,
- isCheckRequestInProgress: true
- }));
- this.mock.returns(true);
- expect(this.popup.get('disablePrimary')).to.be.true;
- });
-
- it('should be enabled with preupgrade check', function () {
- this.popup.set('selectedMethod', Em.Object.create({
- selected: true,
- isPrecheckFailed: false,
- isCheckRequestInProgress: false
- }));
- this.mock.returns(true);
- expect(this.popup.get('disablePrimary')).to.be.false;
- });
-
- it('should be enabled without preupgrade check', function () {
- this.popup.set('selectedMethod', Em.Object.create({
- selected: true
- }));
- this.mock.returns(false);
- expect(this.popup.get('disablePrimary')).to.be.false;
- });
-
- });
-
- });
-
- describe("NOT show confirmation popup on Downgrade", function() {
- beforeEach(function () {
- controller.set('isDowngrade', true);
- controller.upgradeOptions(false, version);
- });
-
- it('runningCheckRequests has 1 item', function () {
- expect( controller.get('runningCheckRequests')).to.have.length(1);
- });
-
- });
- });
-
- describe("#confirmUpgrade()", function() {
- before(function () {
- sinon.stub(controller, 'upgradeOptions', Em.K);
- });
- after(function () {
- controller.upgradeOptions.restore();
- });
- it("show show upgrade options popup window", function() {
- var version = Em.Object.create({displayName: 'HDP-2.2'});
- controller.confirmUpgrade(version);
- expect(controller.upgradeOptions.calledWith(false, version)).to.be.true;
- });
- });
-
- describe("#downgrade", function() {
- beforeEach(function () {
- sinon.stub(controller, 'abortUpgrade').returns({
- done: function(callback) {callback()}
- });
- sinon.stub(controller, 'startDowngrade');
- controller.downgrade('versionInfo');
- });
-
- afterEach(function () {
- controller.abortUpgrade.restore();
- controller.startDowngrade.restore();
- });
-
- it('should run abortUpgrade', function() {
- expect(controller.abortUpgrade.calledOnce).to.be.true;
- });
-
- });
-
- describe("#startDowngrade()", function() {
- beforeEach(function () {
- sinon.stub(App.RepositoryVersion, 'find').returns([
- Em.Object.create({
- displayName: 'HDP-2.3',
- repositoryVersion: '2.3'
- })
- ]);
- controller.set('upgradeVersion', 'HDP-2.3');
- controller.set('upgradeType', 'NON_ROLLING');
- controller.startDowngrade(Em.Object.create({
- id: '1',
- repository_version: '2.2',
- repository_name: 'HDP-2.2'
- }));
- this.callArgs = testHelpers.findAjaxRequest('name', 'admin.downgrade.start')[0];
- });
-
- afterEach(function () {
- App.RepositoryVersion.find.restore();
- });
-
- it('request-data is valid', function () {
- expect(this.callArgs.data).to.eql({
- id: '1',
- value: '2.2',
- label: 'HDP-2.3',
- isDowngrade: true,
- upgradeType: "NON_ROLLING"
- });
- });
- it('request-name is valid', function () {
- expect(this.callArgs.name).to.be.equal('admin.downgrade.start');
- });
- it('request-sender is valid', function () {
- expect(this.callArgs.sender).to.be.eql(controller);
- });
- it('callback is valid', function () {
- expect(this.callArgs.success).to.be.equal('upgradeSuccessCallback');
- });
- it('callback is called', function () {
- expect(this.callArgs.callback).to.be.called;
- });
- });
-
- describe("#installRepoVersionPopup()", function () {
- before(function () {
- sinon.stub(controller, 'installRepoVersion', Em.K);
- sinon.stub(App.Service, 'find').returns(Em.Object.create({
- isLoaded: true
- }));
- });
- after(function () {
- controller.installRepoVersion.restore();
- App.Service.find.restore();
- });
- it("show confirmation popup for non standart and available services", function () {
- var repo = Em.Object.create({'displayName': 'HDP-2.2', isStandard: false, stackServices: [Em.Object.create({
- name: 'HDFS',
- isUpgradable: true,
- isAvailable: true
- })]});
- var popup = controller.installRepoVersionPopup(repo);
- popup.onPrimary();
- expect(controller.installRepoVersion.calledWith(repo)).to.be.true;
- });
- it("show pre-check popup for non standard and empty available services", function () {
- var repo = Em.Object.create({'displayName': 'HDP-2.2', isStandard: false, stackServices: []});
- var popup = controller.installRepoVersionPopup(repo);
- popup.onPrimary();
- expect(controller.installRepoVersion.calledWith(repo)).to.be.false;
- });
- it("show confirmation popup for standart", function () {
- var repo = Em.Object.create({'displayName': 'HDP-2.2', isStandard: true, stackServices: []});
- var popup = controller.installRepoVersionPopup(repo);
- popup.onPrimary();
- expect(controller.installRepoVersion.calledWith(repo)).to.be.true;
- });
- });
-
- describe("#installRepoVersion()", function () {
-
- it("make ajax call", function () {
- var repo = Em.Object.create({
- stackVersionType: 'HDP',
- stackVersionNumber: '2.2',
- repositoryVersion: '2.2.1',
- repoId: 1
- });
- controller.installRepoVersion(repo);
- var args = testHelpers.findAjaxRequest('name', 'admin.stack_version.install.repo_version');
- expect(args).to.exists;
- });
- });
-
- describe("#installRepoVersionSuccess()", function() {
- var mock = Em.Object.create({
- id: 1,
- defaultStatus: 'NOT_REQUIRED',
- stackVersion: {}
- });
- beforeEach(function () {
- sinon.spy(mock, 'set');
- sinon.stub(App.db, 'set', Em.K);
- sinon.stub(App.clusterStatus, 'setClusterStatus', Em.K);
- sinon.stub(App.RepositoryVersion, 'find').returns(mock);
- sinon.stub(App, 'showAlertPopup');
- });
- afterEach(function () {
- App.db.set.restore();
- App.clusterStatus.setClusterStatus.restore();
- App.RepositoryVersion.find.restore();
- mock.set.restore();
- App.showAlertPopup.restore();
- });
-
- it("App.showAlertPopup should be called", function() {
- expect(controller.installRepoVersionSuccess({statusText: 'timeout'}, {}, {id: 1})).to.be.false;
- expect(App.showAlertPopup.calledWith(
- Em.I18n.t('admin.stackVersions.upgrade.installPackage.fail.title'),
- Em.I18n.t('admin.stackVersions.upgrade.installPackage.fail.timeout')
- )).to.be.true;
- });
-
- it("data sdtored to the local db", function() {
- controller.installRepoVersionSuccess({Requests: {id: 1}}, {}, {id: 1});
- expect(App.db.set.calledWith('repoVersionInstall', 'id', [1])).to.be.true;
- });
-
- it('clusterStatus is updated', function () {
- controller.installRepoVersionSuccess({Requests: {id: 1}}, {}, {id: 1});
- expect(App.clusterStatus.setClusterStatus.calledOnce).to.be.true;
- });
-
- it('App.RepositoryVersion models have valid states', function () {
- controller.installRepoVersionSuccess({Requests: {id: 1}}, {}, {id: 1});
- expect(App.RepositoryVersion.find.calledWith(1)).to.be.true;
- expect(App.RepositoryVersion.find(1).get('defaultStatus')).to.equal('INSTALLING');
- expect(App.RepositoryVersion.find(1).get('stackVersion.state')).to.equal('INSTALLING');
- });
- });
-
- describe("#setUpgradeItemStatus()", function () {
- var item;
- beforeEach(function () {
- item = Em.Object.create({
- request_id: 1,
- stage_id: 1,
- group_id: 1
- });
- controller.setUpgradeItemStatus(item, 'PENDING');
- this.callArgs = testHelpers.findAjaxRequest('name', 'admin.upgrade.upgradeItem.setState')[0];
- });
-
- it('request-data is valid', function () {
- expect(this.callArgs.data).to.be.eql({upgradeId: 1, itemId: 1, groupId: 1, status: 'PENDING'});
- });
- it('request-name is valid', function () {
- expect(this.callArgs.name).to.be.equal('admin.upgrade.upgradeItem.setState');
- });
- it('request-sendeer is valid', function () {
- expect(this.callArgs.sender).to.be.eql(controller);
- });
- it('callback is called', function () {
- expect(this.callArgs.callback).to.be.called;
- });
- it('item.status is PENDING', function () {
- expect(item.get('status')).to.equal('PENDING');
- });
- });
-
- describe("#prepareRepoForSaving()", function () {
- it("prepare date for saving", function () {
- var repo = Em.Object.create({
- operatingSystems: [
- Em.Object.create({
- osType: "redhat6",
- isDisabled: Em.computed.not('isSelected'),
- repositories: [Em.Object.create({
- "baseUrl": "111121",
- "repoId": "HDP-2.2",
- "repoName": "HDP",
- hasError: false
- }),
- Em.Object.create({
- "baseUrl": "1",
- "repoId": "HDP-UTILS-1.1.0.20",
- "repoName": "HDP-UTILS",
- hasError: false
- })]
- })
- ]
- });
- var result = {
- "operating_systems": [
- {
- "OperatingSystems": {
- "os_type": "redhat6",
- "ambari_managed_repositories": true
- },
- "repositories": [
- {
- "Repositories": {
- "base_url": "111121",
- "repo_id": "HDP-2.2",
- "repo_name": "HDP"
- }
- },
- {
- "Repositories": {
- "base_url": "1",
- "repo_id": "HDP-UTILS-1.1.0.20",
- "repo_name": "HDP-UTILS"
- }
- }
- ]
- }
- ]};
- expect(controller.prepareRepoForSaving(repo)).to.eql(result);
- });
- });
-
- describe("#getStackVersionNumber()", function(){
- it("get stack version number", function(){
- var repo = Em.Object.create({
- "stackVersionType": 'HDP',
- "stackVersion": '2.3',
- "repositoryVersion": '2.2.1'
- });
-
- var stackVersion = controller.getStackVersionNumber(repo);
- expect(stackVersion).to.equal('2.3');
- });
-
- it("get default stack version number", function(){
- App.set('currentStackVersion', '1.2.3');
- var repo = Em.Object.create({
- "stackVersionType": 'HDP',
- "repositoryVersion": '2.2.1'
- });
-
- var stackVersion = controller.getStackVersionNumber(repo);
- expect(stackVersion).to.equal('1.2.3');
- });
- });
-
- describe("#saveRepoOS()", function() {
- before(function(){
- this.mock = sinon.stub(controller, 'validateRepoVersions');
- sinon.stub(controller, 'prepareRepoForSaving', Em.K);
- });
- after(function(){
- this.mock.restore();
- controller.prepareRepoForSaving.restore();
- });
- describe("validation errors present", function() {
-
- beforeEach(function () {
- this.mock.returns({
- done: function(callback) {callback([1]);}
- });
- controller.saveRepoOS(Em.Object.create({repoVersionId: 1}), true);
- this.args = testHelpers.findAjaxRequest('name', 'admin.stack_versions.edit.repo');
- });
-
- it('validateRepoVersions is called with valid arguments', function () {
- expect(controller.validateRepoVersions.calledWith(Em.Object.create({repoVersionId: 1}), true)).to.be.true;
- });
-
- it('prepareRepoForSaving is not called', function () {
- expect(controller.prepareRepoForSaving.called).to.be.false;
- });
-
- it('no requests are sent', function () {
- expect(this.args).to.not.exists;
- });
- });
-
- describe("no validation errors", function() {
-
- beforeEach(function () {
- this.mock.returns({
- done: function(callback) {callback([]);}
- });
- controller.saveRepoOS(Em.Object.create({repoVersionId: 1}), true);
- });
- it('validateRepoVersions is called with valid arguments', function () {
- expect(controller.validateRepoVersions.calledWith(Em.Object.create({repoVersionId: 1}), true)).to.be.true;
- });
- it('prepareRepoForSaving is called with valid arguments', function () {
- expect(controller.prepareRepoForSaving.calledWith(Em.Object.create({repoVersionId: 1}))).to.be.true;
- });
- });
- });
-
- describe("#validateRepoVersions()", function () {
-
- beforeEach(function() {
- sinon.stub(controller, 'validationCall').returns({
- success: function() {
- return {error: Em.K}
- }
- });
- sinon.stub(controller, 'getStackVersionNumber').returns('v1')
- });
-
- afterEach(function() {
- controller.validationCall.restore();
- controller.getStackVersionNumber.restore();
- });
-
-
- it("validationCall should not be called", function () {
- controller.validateRepoVersions(Em.Object.create({repoVersionId: 1}), true);
- expect(controller.validationCall.called).to.be.false;
- });
- it("validationCall should be called", function () {
- var os = Em.Object.create({
- isSelected: true,
- repositories: [
- Em.Object.create()
- ]
- });
- var repo = Em.Object.create({
- repoVersionId: 1,
- operatingSystems: [ os ]
- });
- controller.validateRepoVersions(repo, false);
- expect(controller.validationCall.calledOnce).to.be.true;
- });
- });
-
- describe("#validationCall()", function () {
-
- it("App.ajax.send should be called", function() {
- controller.validationCall(Em.Object.create(), Em.Object.create(), 'v1');
- var args = testHelpers.findAjaxRequest('name', 'admin.stack_versions.validate.repo');
- expect(args[0]).to.exists;
- });
- });
-
- describe("#getUrl()", function() {
- beforeEach(function(){
- controller.reopen({
- realStackUrl: 'realStackUrl',
- realRepoUrl: 'realRepoUrl',
- realUpdateUrl: 'realUpdateUrl'
- });
- });
-
- it("full load is true, stack is null", function() {
- expect(controller.getUrl(null, true)).to.equal('realRepoUrl');
- });
- it("full load is true, stack is valid", function() {
- expect(controller.getUrl({}, true)).to.equal('realStackUrl');
- });
- it("full load is false, stack is valid", function() {
- expect(controller.getUrl({}, false)).to.equal('realUpdateUrl');
- });
- });
-
- describe("#loadStackVersionsToModel()", function () {
- before(function () {
- sinon.stub(App.HttpClient, 'get');
- });
- after(function () {
- App.HttpClient.get.restore();
- });
- it("HttpClient did get-request", function () {
- controller.loadStackVersionsToModel();
- expect(App.HttpClient.get.calledOnce).to.be.true;
- });
- });
-
- describe("#loadRepoVersionsToModel()", function () {
- before(function () {
- sinon.stub(App.HttpClient, 'get');
- });
- after(function () {
- App.HttpClient.get.restore();
- });
- it("HttpClient did get-request", function () {
- controller.loadRepoVersionsToModel();
- expect(App.HttpClient.get.calledOnce).to.be.true;
- });
- });
-
- describe('#currentVersionObserver()', function () {
-
- var cases = [
- {
- stackVersionType: 'HDP',
- repoVersion: '2.2.1.1.0-1',
- isStormMetricsSupported: false,
- title: 'HDP < 2.2.2'
- },
- {
- stackVersionType: 'HDP',
- repoVersion: '2.2.2.1.0-1',
- isStormMetricsSupported: true,
- title: 'HDP 2.2.2'
- },
- {
- stackVersionType: 'HDP',
- repoVersion: '2.2.3.1.0-1',
- isStormMetricsSupported: true,
- title: 'HDP > 2.2.2'
- },
- {
- stackVersionType: 'BIGTOP',
- repoVersion: '0.8.1.1.0-1',
- isStormMetricsSupported: true,
- title: 'not HDP'
- }
- ];
-
- afterEach(function () {
- App.RepositoryVersion.find.restore();
- });
-
- cases.forEach(function (item) {
- describe(item.title, function () {
-
- beforeEach(function () {
- sinon.stub(App.RepositoryVersion, 'find').returns([
- Em.Object.create({
- status: 'CURRENT',
- stackVersionType: item.stackVersionType
- })
- ]);
- controller.set('currentVersion', {
- repository_version: item.repoVersion
- });
- });
-
- it('isStormMetricsSupported is ' + (item.isStormMetricsSupported ? '' : 'not') + ' supported', function () {
- expect(App.get('isStormMetricsSupported')).to.equal(item.isStormMetricsSupported);
- });
-
- });
- });
-
- });
-
- describe('#updateFinalize', function () {
-
- beforeEach(function() {
- controller.set('isFinalizeItem', true);
- this.stub = sinon.stub(App, 'get');
- });
-
- afterEach(function () {
- this.stub.restore();
- });
-
- describe('should do ajax-request', function () {
-
- beforeEach(function () {
- this.stub.withArgs('upgradeState').returns('HOLDING');
- controller.updateFinalize();
- this.args = testHelpers.findAjaxRequest('name', 'admin.upgrade.finalizeContext');
- });
-
- it('request is sent', function () {
- expect(this.args[0]).to.exists;
- });
-
- });
-
- describe('shouldn\'t do ajax-request', function () {
-
- beforeEach(function () {
- this.stub.withArgs('upgradeState').returns('HOLDING_TIMEDOUT');
- controller.updateFinalize();
- this.args = testHelpers.findAjaxRequest('name', 'admin.upgrade.finalizeContext');
- });
-
- it('request is not sent', function () {
- expect(this.args).to.not.exists;
- });
-
- it('isFinalizeItem is false', function () {
- expect(controller.get('isFinalizeItem')).to.be.false;
- });
-
- });
-
- });
-
- describe('#updateFinalizeSuccessCallback', function () {
-
- it('data exists and Finalize should be true', function() {
- var data = {
- items: [
- {
- upgrade_groups: [
- {
- upgrade_items: [
- {
- UpgradeItem: {
- context: controller.get('finalizeContext'),
- status: "HOLDING"
- }
- }
- ]
- }
- ]
- }
- ]
- };
- controller.set('isFinalizeItem', false);
- controller.updateFinalizeSuccessCallback(data);
- expect(controller.get('isFinalizeItem')).to.be.true;
- });
-
- it('data exists and Finalize should be false', function() {
- var data = {
- upgrade_groups: [
- {
- upgrade_items: [
- {
- UpgradeItem: {
- context: '!@#$%^&',
- status: "HOLDING"
- }
- }
- ]
- }
- ]
- };
- controller.set('isFinalizeItem', true);
- controller.updateFinalizeSuccessCallback(data);
- expect(controller.get('isFinalizeItem')).to.be.false;
- });
-
- it('data doesn\'t exist', function() {
- var data = null;
- controller.set('isFinalizeItem', true);
- controller.updateFinalizeSuccessCallback(data);
- expect(controller.get('isFinalizeItem')).to.be.false;
- });
-
- });
-
- describe('#updateFinalizeErrorCallback', function () {
-
- it('should set isFinalizeItem to false', function () {
- controller.set('isFinalizeItem', true);
- controller.updateFinalizeErrorCallback();
- expect(controller.get('isFinalizeItem')).to.be.false;
- });
-
- });
-
- describe("#suspendUpgrade()", function() {
- beforeEach(function () {
- sinon.stub(controller, 'abortUpgradeWithSuspend').returns({
- done: Em.clb
- });
- sinon.stub(controller, 'setDBProperty', Em.K);
- sinon.stub(App.clusterStatus, 'setClusterStatus', Em.K);
- controller.suspendUpgrade();
- });
- afterEach(function () {
- controller.abortUpgradeWithSuspend.restore();
- controller.setDBProperty.restore();
- App.clusterStatus.setClusterStatus.restore();
- });
- it("upgrade aborted", function() {
- expect(controller.abortUpgradeWithSuspend.calledOnce).to.be.true;
- });
- it('App.upgradeState is ABORTED', function () {
- expect(App.get('upgradeState')).to.equal('ABORTED');
- });
- it('new upgradeState is saved to the localDB', function () {
- expect(controller.setDBProperty.calledWith('upgradeState', 'ABORTED')).to.be.true;
- });
- it('clusterStatus is updated', function () {
- expect(App.clusterStatus.setClusterStatus.calledOnce).to.be.true;
- });
- });
-
- describe("#resumeUpgrade()", function() {
- beforeEach(function () {
- sinon.stub(controller, 'retryUpgrade').returns({
- done: Em.clb
- });
- sinon.stub(controller, 'setDBProperty', Em.K);
- sinon.stub(App.clusterStatus, 'setClusterStatus', Em.K);
- controller.resumeUpgrade();
- });
- afterEach(function () {
- controller.retryUpgrade.restore();
- controller.setDBProperty.restore();
- App.clusterStatus.setClusterStatus.restore();
- });
- it("Upgrade is retrying", function() {
- expect(controller.retryUpgrade.calledOnce).to.be.true;
- });
- it('App.upgradeState is PENDING', function () {
- expect(App.get('upgradeState')).to.equal('PENDING');
- });
- it('new upgradeState is saved to the localDB', function () {
- expect(controller.setDBProperty.calledWith('upgradeState', 'PENDING')).to.be.true;
- });
- it('clusterStatus is updated', function () {
- expect(App.clusterStatus.setClusterStatus.calledOnce).to.be.true;
- });
- });
-
- describe("#runUpgradeMethodChecks()", function() {
- beforeEach(function () {
- sinon.stub(controller, 'runPreUpgradeCheckOnly');
- });
- afterEach(function () {
- controller.runPreUpgradeCheckOnly.restore();
- controller.get('upgradeMethods').setEach('allowed', true);
- });
- it("no allowed upgrade methods", function () {
- controller.get('upgradeMethods').setEach('allowed', false);
- controller.runUpgradeMethodChecks();
- expect(controller.runPreUpgradeCheckOnly.called).to.be.false;
- });
- it("Rolling method allowed", function () {
- controller.get('upgradeMethods').setEach('allowed', true);
- controller.runUpgradeMethodChecks(Em.Object.create({
- id: 1,
- repositoryVersion: '1.2',
- displayName: 'V1'
- }));
- expect(controller.runPreUpgradeCheckOnly.calledWith({
- id: 1,
- label: 'V1',
- type: 'ROLLING'
- })).to.be.true;
- });
- });
-
- describe("#restoreLastUpgrade()", function () {
-
- var data = {
- Upgrade: {
- associated_version: '1.1',
- request_id: 1,
- direction: 'UPGRADE',
- request_status: 'PENDING',
- upgrade_type: 'ROLLING',
- downgrade_allowed: true,
- skip_failures: true,
- suspended: false,
- skip_service_check_failures: true,
- to_version: '1'
- }
- };
-
- beforeEach(function () {
- sinon.stub(App.RepositoryVersion, 'find').returns([Em.Object.create({
- repositoryVersion: '1',
- displayName: 'HDP-1'
- })]);
- sinon.stub(controller, 'setDBProperties');
- sinon.stub(controller, 'loadRepoVersionsToModel', function () {
- return {
- done: function (callback) {
- callback();
- }
- }
- });
- sinon.stub(controller, 'setDBProperty');
- sinon.stub(controller, 'initDBProperties');
- sinon.stub(controller, 'loadUpgradeData');
- controller.restoreLastUpgrade(data);
- });
- afterEach(function () {
- App.RepositoryVersion.find.restore();
- controller.setDBProperties.restore();
- controller.loadRepoVersionsToModel.restore();
- controller.setDBProperty.restore();
- controller.initDBProperties.restore();
- controller.loadUpgradeData.restore();
- });
- it('proper data is saved to the localDB', function () {
- expect(controller.setDBProperties.getCall(0).args[0]).to.eql({
- toVersion: '1.1',
- upgradeId: 1,
- isDowngrade: false,
- upgradeState: 'PENDING',
- upgradeType: "ROLLING",
- isWizardRestricted: false,
- downgradeAllowed: true,
- isSuspended: false,
- upgradeTypeDisplayName: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.RU.title'),
- failuresTolerance: {
- skipComponentFailures: true,
- skipSCFailures: true
- }
- });
- });
- it('models are saved', function () {
- expect(controller.loadRepoVersionsToModel.calledOnce).to.be.true;
- });
- it('initDBProperties is called', function () {
- expect(controller.initDBProperties.calledOnce).to.be.true;
- });
- });
-
- describe("#getServiceCheckItemSuccessCallback()", function() {
- var testCases = [
- {
- title: 'no tasks',
- data: {
- tasks: []
- },
- expected: {
- slaveComponentStructuredInfo: null,
- serviceCheckFailuresServicenames: []
- }
- },
- {
- title: 'no structured_out property',
- data: {
- tasks: [
- {
- Tasks: {}
- }
- ]
- },
- expected: {
- slaveComponentStructuredInfo: null,
- serviceCheckFailuresServicenames: []
- }
- },
- {
- title: 'no failures',
- data: {
- tasks: [
- {
- Tasks: {
- structured_out: {}
- }
- }
- ]
- },
- expected: {
- slaveComponentStructuredInfo: null,
- serviceCheckFailuresServicenames: []
- }
- },
- {
- title: 'service check failures',
- data: {
- tasks: [
- {
- Tasks: {
- structured_out: {
- failures: {
- service_check: ['HDSF', 'YARN']
- }
- }
- }
- }
- ]
- },
- expected: {
- slaveComponentStructuredInfo: {
- hosts: [],
- host_detail: {}
- },
- serviceCheckFailuresServicenames: ['HDSF', 'YARN']
- }
- },
- {
- title: 'host-component failures',
- data: {
- tasks: [
- {
- Tasks: {
- structured_out: {
- failures: {
- service_check: ['HDSF'],
- host_component: {
- "host1": [
- {
- component: "DATANODE",
- service: 'HDFS'
- }
- ]
- }
- }
- }
- }
- }
- ]
- },
- expected: {
- slaveComponentStructuredInfo: {
- hosts: ['host1'],
- host_detail: {
- "host1": [
- {
- component: "DATANODE",
- service: 'HDFS'
- }
- ]
- }
- },
- serviceCheckFailuresServicenames: ['HDSF']
- }
- }
- ];
-
- testCases.forEach(function(test) {
- it(test.title, function() {
- controller.set('slaveComponentStructuredInfo', null);
- controller.set('serviceCheckFailuresServicenames', []);
- controller.getServiceCheckItemSuccessCallback(test.data);
- expect(controller.get('serviceCheckFailuresServicenames')).eql(test.expected.serviceCheckFailuresServicenames);
- expect(controller.get('slaveComponentStructuredInfo')).eql(test.expected.slaveComponentStructuredInfo);
- });
- });
- });
-
- describe("#getSlaveComponentItemSuccessCallback()", function () {
- var testCases = [
- {
- title: 'no tasks',
- data: {
- tasks: []
- },
- expected: {
- slaveComponentStructuredInfo: null
- }
- },
- {
- title: 'structured_out property absent',
- data: {
- tasks: [
- {
- Tasks: {}
- }
- ]
- },
- expected: {
- slaveComponentStructuredInfo: null
- }
- },
- {
- title: 'structured_out property present',
- data: {
- tasks: [
- {
- Tasks: {
- "structured_out" : {
- "hosts" : [
- "host1"
- ],
- "host_detail" : {
- "host1" : [
- {
- "service" : "FLUME",
- "component" : "FLUME_HANDLER"
- }
- ]
- }
- }
- }
- }
- ]
- },
- expected: {
- slaveComponentStructuredInfo: {
- "hosts" : [
- "host1"
- ],
- "host_detail" : {
- "host1" : [
- {
- "service" : "FLUME",
- "component" : "FLUME_HANDLER"
- }
- ]
- }
- }
- }
- }
- ];
-
- testCases.forEach(function (test) {
- it(test.title, function () {
- controller.set('slaveComponentStructuredInfo', null);
- controller.getSlaveComponentItemSuccessCallback(test.data);
- expect(controller.get('slaveComponentStructuredInfo')).eql(test.expected.slaveComponentStructuredInfo);
- });
- });
- });
-
- describe('#getConfigsWarnings', function () {
-
- var cases = [
- {
- configs: [],
- title: 'no warning'
- },
- {
- configsMergeWarning: {},
- configs: [],
- title: 'empty data'
- },
- {
- configsMergeWarning: {
- UpgradeChecks: {}
- },
- configs: [],
- title: 'incomplete data'
- },
- {
- configsMergeWarning: {
- UpgradeChecks: {
- failed_detail: {}
- }
- },
- configs: [],
- title: 'invalid data'
- },
- {
- configsMergeWarning: {
- UpgradeChecks: {
- failed_detail: []
- }
- },
- configs: [],
- title: 'empty configs array'
- },
- {
- configsMergeWarning: {
- UpgradeChecks: {
- status: 'FAIL',
- failed_detail: [
- {
- type: 't0',
- property: 'p0',
- current: 'c0',
- new_stack_value: 'n0',
- result_value: 'r0'
- },
- {
- type: 't1',
- property: 'p1',
- current: 'c1',
- new_stack_value: 'n1'
- },
- {
- type: 't2',
- property: 'p2',
- current: 'c2',
- result_value: 'r2'
- }
- ]
- }
- },
- configs: [],
- title: 'not a warning'
- },
- {
- configsMergeWarning: {
- UpgradeChecks: {
- status: 'WARNING',
- failed_detail: [
- {
- type: 't0',
- property: 'p0',
- current: 'c0',
- new_stack_value: 'n0',
- result_value: 'r0'
- },
- {
- type: 't1',
- property: 'p1',
- current: 'c1',
- new_stack_value: 'n1'
- },
- {
- type: 't2',
- property: 'p2',
- current: 'c2',
- result_value: 'r2'
- }
- ]
- }
- },
- configs: [
- {
- type: 't0',
- name: 'p0',
- currentValue: 'c0',
- recommendedValue: 'n0',
- isDeprecated: false,
- resultingValue: 'r0',
- wasModified: false,
- willBeRemoved: false
- },
- {
- type: 't1',
- name: 'p1',
- currentValue: 'c1',
- recommendedValue: 'n1',
- isDeprecated: false,
- resultingValue: Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.willBeRemoved'),
- wasModified: false,
- willBeRemoved: true
- },
- {
- type: 't2',
- name: 'p2',
- currentValue: 'c2',
- recommendedValue: Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.deprecated'),
- isDeprecated: true,
- resultingValue: 'r2',
- wasModified: false,
- willBeRemoved: false
- }
- ],
- title: 'normal case'
- },
- {
- configsMergeWarning: {
- UpgradeChecks: {
- status: 'WARNING',
- failed_detail: [
- {
- type: 't0',
- property: 'p0',
- current: 'c0',
- new_stack_value: 'n0',
- result_value: 'r0'
- },
- {
- type: 't1',
- property: 'p1',
- current: 'c1',
- new_stack_value: 'n1'
- },
- {
- type: 't2',
- property: 'p2',
- current: 'c2',
- result_value: 'r2'
- },
- {
- type: 't3',
- property: 'p3',
- current: 'c3',
- new_stack_value: 'c2',
- result_value: 'c3'
- }
- ]
- }
- },
- configs: [
- {
- type: 't0',
- name: 'p0',
- currentValue: 'c0',
- recommendedValue: 'n0',
- isDeprecated: false,
- resultingValue: 'r0',
- wasModified: false,
- willBeRemoved: false
- },
- {
- type: 't1',
- name: 'p1',
- currentValue: 'c1',
- recommendedValue: 'n1',
- isDeprecated: false,
- resultingValue: Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.willBeRemoved'),
- wasModified: false,
- willBeRemoved: true
- },
- {
- type: 't2',
- name: 'p2',
- currentValue: 'c2',
- recommendedValue: Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.deprecated'),
- isDeprecated: true,
- resultingValue: 'r2',
- wasModified: false,
- willBeRemoved: false
- },
- {
- "currentValue": "c3",
- "isDeprecated": false,
- "name": "p3",
- "recommendedValue": "c2",
- "resultingValue": "c3",
- "type": "t3",
- "wasModified": true,
- "willBeRemoved": false
- }
- ],
- title: 'should skip warning when current and result_value are the same'
- }
- ];
-
- cases.forEach(function (item) {
- it(item.title, function () {
- expect(controller.getConfigsWarnings(item.configsMergeWarning)).to.eql(item.configs);
- });
- });
-
- });
-
- describe('#runPreUpgradeCheckOnly', function () {
-
- var appGetMock,
- upgradeMethods = controller.get('upgradeMethods'),
- cases = [
- {
- supportsPreUpgradeCheck: false,
- ru: {
- isCheckComplete: true,
- isCheckRequestInProgress: false,
- action: 'a'
- },
- eu: {
- isCheckComplete: true,
- isCheckRequestInProgress: false,
- action: 'a'
- },
- ajaxCallCount: 0,
- runningCheckRequestsLength: 0,
- title: 'pre-upgrade checks not supported'
- },
- {
- supportsPreUpgradeCheck: true,
- ru: {
- isCheckComplete: false,
- isCheckRequestInProgress: true,
- action: ''
- },
- eu: {
- isCheckComplete: true,
- isCheckRequestInProgress: false,
- action: 'a'
- },
- ajaxCallCount: 1,
- type: 'ROLLING',
- runningCheckRequestsLength: 1,
- title: 'rolling upgrade'
- },
- {
- supportsPreUpgradeCheck: true,
- ru: {
- isCheckComplete: true,
- isCheckRequestInProgress: false,
- action: 'a'
- },
- eu: {
- isCheckComplete: false,
- isCheckRequestInProgress: true,
- action: ''
- },
- ajaxCallCount: 1,
- type: 'NON_ROLLING',
- runningCheckRequestsLength: 1,
- title: 'express upgrade'
- }
- ];
-
- beforeEach(function () {
- appGetMock = sinon.stub(App, 'get');
- controller.get('runningCheckRequests').clear();
- upgradeMethods.forEach(function (method) {
- method.setProperties({
- isCheckComplete: true,
- isCheckRequestInProgress: false,
- action: 'a'
- });
- });
- App.ajax.send.restore();
- sinon.stub(App.ajax, 'send').returns({});
- });
-
- afterEach(function () {
- appGetMock.restore();
- });
-
- cases.forEach(function (item) {
- describe(item.title, function () {
- var runningCheckRequests;
- beforeEach(function () {
- runningCheckRequests = controller.get('runningCheckRequests');
- appGetMock.returns(item.supportsPreUpgradeCheck);
- controller.runPreUpgradeCheckOnly({
- type: item.type
- });
- this.ajaxCalls = testHelpers.filterAjaxRequests('name', 'admin.upgrade.pre_upgrade_check');
- });
-
- it('ROLLING properties', function () {
- expect(upgradeMethods.findProperty('type', 'ROLLING').getProperties('isCheckComplete', 'isCheckRequestInProgress', 'action')).to.eql(item.ru);
- });
-
- it('NON_ROLLING properties', function () {
- expect(upgradeMethods.findProperty('type', 'NON_ROLLING').getProperties('isCheckComplete', 'isCheckRequestInProgress', 'action')).to.eql(item.eu);
- });
-
- it(item.ajaxCallCount + ' requests sent', function () {
- expect(this.ajaxCalls.length).to.be.equal(item.ajaxCallCount);
- });
-
- it('runningCheckRequests length is ' + item.runningCheckRequestsLength, function () {
- expect(runningCheckRequests).to.have.length(item.runningCheckRequestsLength);
- });
-
- if (item.runningCheckRequestsLength) {
- it('runningCheckRequests.type is ' + item.type, function () {
- expect(runningCheckRequests[0].type).to.equal(item.type);
- });
- }
-
- });
- });
-
- });
-
-
- describe("#openConfigsInNewWindow()", function () {
-
- var mock = {
- document: {
- write: function () {}
- },
- focus: function () {}
- };
-
- beforeEach(function(){
- sinon.stub(window, 'open', function () {
- return mock;
- });
- sinon.spy(mock.document, 'write');
- sinon.spy(mock, 'focus');
- controller.openConfigsInNewWindow({
- context: [
- {
- type: 'type1',
- name: 'name1',
- currentValue: 'currentValue1',
- recommendedValue: 'recommendedValue1',
- resultingValue: 'resultingValue1'
- },
- {
- type: 'type2',
- name: 'name2',
- currentValue: 'currentValue2',
- recommendedValue: 'recommendedValue2',
- resultingValue: 'resultingValue2'
- }
- ]
- });
- });
-
- afterEach(function(){
- window.open.restore();
- mock.document.write.restore();
- mock.focus.restore();
- });
-
- it('new window is open', function () {
- expect(window.open.calledOnce).to.be.true;
- });
-
- it('new window content is valid', function () {
- /*eslint-disable no-useless-concat */
- expect(mock.document.write.calledWith('<table style="text-align: left;"><thead><tr>' +
- '<th>' + Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.configType') + '</th>' +
- '<th>' + Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.propertyName') + '</th>' +
- '<th>' + Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.currentValue') + '</th>' +
- '<th>' + Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.recommendedValue') + '</th>' +
- '<th>' + Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.resultingValue') + '</th>' +
- '</tr></thead><tbody>' +
- '<tr>' +
- '<td>' + 'type1' + '</td>' +
- '<td>' + 'name1' + '</td>' +
- '<td>' + 'currentValue1' + '</td>' +
- '<td>' + 'recommendedValue1' + '</td>' +
- '<td>' + 'resultingValue1' + '</td>' +
- '</tr>' +
- '<tr>' +
- '<td>' + 'type2' + '</td>' +
- '<td>' + 'name2' + '</td>' +
- '<td>' + 'currentValue2' + '</td>' +
- '<td>' + 'recommendedValue2' + '</td>' +
- '<td>' + 'resultingValue2' + '</td>' +
- '</tr></tbody></table>')).to.be.true;
- /*eslint-enable no-useless-concat */
- });
-
- it('document.focus is called once', function () {
- expect(mock.focus.calledOnce).to.be.true;
- });
- });
-
- describe("#formatMessages()", function () {
-
- it("item with malformed text", function() {
- var item = Em.Object.create({
- text: null
- });
- controller.formatMessages(item);
- expect(item.get('messages')).to.be.empty;
- expect(item.get('text')).to.be.null;
- });
-
- it("item with correct text", function() {
- var item = Em.Object.create({
- text: '[{"message":"msg1"},{"message":"msg2"}]'
- });
- controller.formatMessages(item);
- expect(item.get('messages')).to.be.eql(['msg1', 'msg2']);
- expect(item.get('text')).to.be.equal('msg1 msg2');
- });
- });
-
- describe("#getUpgradeItemSuccessCallback()", function () {
-
- beforeEach(function() {
- controller.set('upgradeData', Em.Object.create({
- upgradeGroups: [
- Em.Object.create({
- group_id: 'g1',
- upgradeItems: [Em.Object.create({
- stage_id: 'i1',
- tasks: [],
- isTasksLoaded: false
- })]
- })
- ]
- }));
- });
-
- it("group has different id", function() {
- var data = {UpgradeItem: {group_id: 'g2'}};
- controller.getUpgradeItemSuccessCallback(data);
- expect(controller.get('upgradeData.upgradeGroups')[0].get('upgradeItems')[0].get('isTasksLoaded')).to.be.false;
- });
-
- it("item has different id", function() {
- var data = {UpgradeItem: {group_id: 'g1', stage_id: 'i2'}};
- controller.getUpgradeItemSuccessCallback(data);
- expect(controller.get('upgradeData.upgradeGroups')[0].get('upgradeItems')[0].get('isTasksLoaded')).to.be.false;
- });
-
- it("item has no tasks", function() {
- var data = {
- UpgradeItem: {
- group_id: 'g1',
- stage_id: 'i1'
- },
- tasks: [
- {
- Tasks: {id: 't1'}
- }
- ]
- };
- controller.getUpgradeItemSuccessCallback(data);
- expect(controller.get('upgradeData.upgradeGroups')[0].get('upgradeItems')[0].get('isTasksLoaded')).to.be.true;
- expect(controller.get('upgradeData.upgradeGroups')[0].get('upgradeItems')[0].get('tasks')).to.not.be.empty;
- });
-
- it("item has tasks", function() {
- controller.get('upgradeData.upgradeGroups')[0].get('upgradeItems')[0].set('tasks', [
- Em.Object.create({
- id: 't1',
- status: 'OLD'
- })
- ]);
- var data = {
- UpgradeItem: {
- group_id: 'g1',
- stage_id: 'i1'
- },
- tasks: [
- {
- Tasks: {
- id: 't1',
- status: 'NEW'
- }
- }
- ]
- };
- controller.getUpgradeItemSuccessCallback(data);
- expect(controller.get('upgradeData.upgradeGroups')[0].get('upgradeItems')[0].get('isTasksLoaded')).to.be.true;
- expect(controller.get('upgradeData.upgradeGroups')[0].get('upgradeItems')[0].get('tasks')[0].get('status')).to.be.equal('NEW');
- });
- });
-
- describe("#abortUpgrade()", function () {
-
- it("isDowngrade is true", function() {
- controller.set('isDowngrade', true);
- controller.set('upgradeId', 1);
- controller.abortUpgrade();
- var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.abort');
- expect(args[0]).to.be.eql({
- name: 'admin.upgrade.abort',
- sender: controller,
- data: {
- upgradeId: 1,
- isDowngrade: true
- },
- error: 'abortDowngradeErrorCallback'
- });
- });
-
- it("isDowngrade is false", function() {
- controller.set('isDowngrade', false);
- controller.set('upgradeId', 1);
- controller.abortUpgrade();
- var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.abort');
- expect(args[0]).to.be.eql({
- name: 'admin.upgrade.abort',
- sender: controller,
- data: {
- upgradeId: 1,
- isDowngrade: false
- },
- error: 'abortUpgradeErrorCallback'
- });
- });
- });
-
- describe("#abortUpgradeWithSuspend()", function () {
-
- it("isDowngrade is true", function() {
- controller.set('isDowngrade', true);
- controller.set('upgradeId', 1);
- controller.abortUpgradeWithSuspend();
- var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.suspend');
- expect(args[0]).to.be.eql({
- name: 'admin.upgrade.suspend',
- sender: controller,
- data: {
- upgradeId: 1,
- isDowngrade: true
- },
- error: 'abortDowngradeErrorCallback'
- });
- });
-
- it("isDowngrade is false", function() {
- controller.set('isDowngrade', false);
- controller.set('upgradeId', 1);
- controller.abortUpgradeWithSuspend();
- var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.suspend');
- expect(args[0]).to.be.eql({
- name: 'admin.upgrade.suspend',
- sender: controller,
- data: {
- upgradeId: 1,
- isDowngrade: false
- },
- error: 'abortUpgradeErrorCallback'
- });
- });
- });
-
- describe("#abortUpgradeErrorCallback()", function () {
- var header = Em.I18n.t('admin.stackUpgrade.state.paused.fail.header');
- var body = Em.I18n.t('admin.stackUpgrade.state.paused.fail.body');
-
- beforeEach(function() {
- sinon.stub(App, 'showAlertPopup');
- });
-
- afterEach(function() {
- App.showAlertPopup.restore();
- });
-
- it("data is null", function() {
- controller.abortUpgradeErrorCallback(null);
- expect(App.showAlertPopup.calledWith(header, body)).to.be.true;
- });
-
- it("data.responseText is null", function() {
- controller.abortUpgradeErrorCallback({responseText: null});
- expect(App.showAlertPopup.calledWith(header, body)).to.be.true;
- });
-
- it("data.responseText is incorrect", function() {
- controller.abortUpgradeErrorCallback({responseText: "//"});
- expect(App.showAlertPopup.calledWith(header, body)).to.be.true;
- });
-
- it("data.responseText is correct", function() {
- controller.abortUpgradeErrorCallback({responseText: '{"message": "msg"}'});
- expect(App.showAlertPopup.calledWith(header, body + ' msg')).to.be.true;
- });
- });
-
- describe("#abortDowngradeErrorCallback()", function () {
- var header = Em.I18n.t('admin.stackDowngrade.state.paused.fail.header');
- var body = Em.I18n.t('admin.stackDowngrade.state.paused.fail.body');
-
- beforeEach(function() {
- sinon.stub(App, 'showAlertPopup');
- });
-
- afterEach(function() {
- App.showAlertPopup.restore();
- });
-
- it("data is null", function() {
- controller.abortDowngradeErrorCallback(null);
- expect(App.showAlertPopup.calledWith(header, body)).to.be.true;
- });
-
- it("data.responseText is null", function() {
- controller.abortDowngradeErrorCallback({responseText: null});
- expect(App.showAlertPopup.calledWith(header, body)).to.be.true;
- });
-
- it("data.responseText is incorrect", function() {
- controller.abortDowngradeErrorCallback({responseText: "//"});
- expect(App.showAlertPopup.calledWith(header, body)).to.be.true;
- });
-
- it("data.responseText is correct", function() {
- controller.abortDowngradeErrorCallback({responseText: '{"message": "msg"}'});
- expect(App.showAlertPopup.calledWith(header, body + ' msg')).to.be.true;
- });
- });
-
- describe("#retryUpgrade()", function () {
-
- it("requestInProgress should be true", function() {
- controller.retryUpgrade();
- expect(controller.get('requestInProgress')).to.be.true;
- });
-
- it("isRetryPending should be true", function() {
- controller.retryUpgrade();
- expect(controller.get('isRetryPending')).to.be.true;
- });
-
- it("App.ajax.send should be called", function() {
- controller.set('upgradeId', 1);
- controller.retryUpgrade();
- var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.retry');
- expect(args[0]).to.be.eql({
- name: 'admin.upgrade.retry',
- sender: controller,
- data: {
- upgradeId: 1
- }
- });
- });
- });
-
- describe("#upgradeErrorCallback()", function () {
- var header = Em.I18n.t('admin.stackVersions.upgrade.start.fail.title');
- var body = "";
-
- beforeEach(function() {
- sinon.stub(App, 'showAlertPopup');
- });
-
- afterEach(function() {
- App.showAlertPopup.restore();
- });
-
- it("data is null", function() {
- controller.upgradeErrorCallback(null);
- expect(App.showAlertPopup.calledWith(header, body)).to.be.true;
- });
-
- it("data.responseText is null", function() {
- controller.upgradeErrorCallback({responseText: null});
- expect(App.showAlertPopup.calledWith(header, body)).to.be.true;
- });
-
- it("data.responseText is incorrect", function() {
- controller.upgradeErrorCallback({responseText: "//"});
- expect(App.showAlertPopup.calledWith(header, body)).to.be.true;
- });
-
- it("data.responseText is correct", function() {
- controller.upgradeErrorCallback({responseText: '{"message": "msg"}'});
- expect(App.showAlertPopup.calledWith(header, 'msg')).to.be.true;
- });
- });
-
- describe("#updateOptionsSuccessCallback()", function () {
-
- it("skipComponentFailures: true, skipSCFailures: true", function() {
- var params = {
- skipComponentFailures: 'true',
- skipSCFailures: 'true'
- };
- controller.updateOptionsSuccessCallback({}, {}, params);
- expect(controller.get('failuresTolerance')).to.be.eql(Em.Object.create({
- skipComponentFailures: true,
- skipSCFailures: true
- }));
- });
-
- it("skipComponentFailures: false, skipSCFailures: false", function() {
- var params = {
- skipComponentFailures: 'false',
- skipSCFailures: 'false'
- };
- controller.updateOptionsSuccessCallback({}, {}, params);
- expect(controller.get('failuresTolerance')).to.be.eql(Em.Object.create({
- skipComponentFailures: false,
- skipSCFailures: false
- }));
- });
- });
-
- describe("#openUpgradeOptions()", function () {
-
- beforeEach(function() {
- sinon.stub(controller, 'upgradeOptions');
- });
-
- afterEach(function() {
- controller.upgradeOptions.restore();
- });
-
- it("upgradeOptions should not be called", function() {
- controller.set('isDowngrade', true);
- controller.openUpgradeOptions();
- expect(controller.upgradeOptions.called).to.be.false;
- });
-
- it("upgradeOptions should be called", function() {
- controller.set('isDowngrade', false);
- controller.openUpgradeOptions();
- expect(controller.upgradeOptions.calledWith(true, null)).to.be.true;
- });
- });
-
- describe("#getSupportedUpgradeTypes()", function () {
-
- beforeEach(function() {
- controller.getSupportedUpgradeTypes({});
- });
-
- it("App.ajax.send should be called", function() {
- var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.get_supported_upgradeTypes');
- expect(args[0]).to.be.eql({
- name: "admin.upgrade.get_supported_upgradeTypes",
- sender: controller,
- data: {},
- success: "getSupportedUpgradeTypesSuccess",
- error: "getSupportedUpgradeTypesError"
- });
- });
-
- it("getSupportedUpgradeError should be empty", function() {
- expect(controller.get('getSupportedUpgradeError')).to.be.empty;
- });
-
- it("isUpgradeTypesLoaded should be false", function() {
- expect(controller.get('isUpgradeTypesLoaded')).to.be.false;
- });
- });
-
- describe("#getSupportedUpgradeTypesSuccess()", function () {
- var testCases = [
- {
- data: {
- items: []
- },
- expected: false
- },
- {
- data: {
- items: [{
- CompatibleRepositoryVersions: {}
- }]
- },
- expected: false
- },
- {
- data: {
- items: [{
- CompatibleRepositoryVersions: {
- upgrade_types: []
- }
- }]
- },
- expected: false
- },
- {
- data: {
- items: [{
- CompatibleRepositoryVersions: {
- upgrade_types: ['t1']
- }
- }]
- },
- expected: true
- }
- ];
-
- testCases.forEach(function(test) {
- it("data: " + JSON.stringify(test.data), function() {
- controller.set('upgradeMethods', [Em.Object.create({
- type: 't1',
- allowed: true
- })]);
- controller.getSupportedUpgradeTypesSuccess(test.data);
- expect(controller.get('upgradeMethods')[0].get('allowed')).to.be.equal(test.expected);
- });
- });
- });
-
- describe("#getSupportedUpgradeTypesError", function () {
-
- it("correct responseText", function() {
- controller.getSupportedUpgradeTypesError({responseText: JSON.stringify({
- message: 'error'
- })});
- expect(controller.get('getSupportedUpgradeError')).to.be.equal('error');
- });
-
- it("invalid responseText", function() {
- controller.getSupportedUpgradeTypesError({
- responseText: '',
- statusText: 'statusError'
- });
- expect(controller.get('getSupportedUpgradeError')).to.be.equal('statusError');
- });
- });
-
- describe("#runPreUpgradeCheckOnlySuccess()", function () {
-
- beforeEach(function() {
- sinon.stub(controller, 'formatPreCheckMessage').returns({precheckResultsMessage: 'formatted'});
- sinon.stub(controller, 'updateSelectedMethod');
- sinon.stub(controller, 'addPrecheckMessageTooltip');
- controller.set('upgradeMethods', [Em.Object.create({
- type: 'ROLLING'
- })]);
- });
-
- afterEach(function() {
- controller.formatPreCheckMessage.restore();
- controller.updateSelectedMethod.restore();
- controller.addPrecheckMessageTooltip.restore();
- });
-
- it("failed check", function() {
- var data = {
- items: [
- {
- UpgradeChecks: {
- status: 'FAIL'
- }
- }
- ]
- };
- var properties = {
- precheckResultsTitle: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.preCheck.msg.title'),
- precheckResultsData: data,
- isCheckComplete: true,
- action: 'openMessage',
- precheckResultsMessage: '',
- recheckResultsMessageClass: 'GREEN',
- isPrecheckFailed: false,
- precheckResultsMessageIconClass: 'glyphicon glyphicon-ok',
- bypassedFailures: false
- };
- controller.runPreUpgradeCheckOnlySuccess(data, {}, {type: 'ROLLING'});
- expect(controller.formatPreCheckMessage.calledWith('FAIL', data, properties)).to.be.true;
- var msg = controller.get('upgradeMethods').findProperty('type', 'ROLLING').get('precheckResultsMessage');
- expect(msg).to.be.equal('formatted');
- });
-
- it("success check", function() {
- var data = {
- items: []
- };
- controller.runPreUpgradeCheckOnlySuccess(data, {}, {type: 'ROLLING'});
- var msg = controller.get('upgradeMethods').findProperty('type', 'ROLLING').get('precheckResultsMessage');
- expect(msg).to.be.equal(Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.preCheck.allPassed'));
- });
-
- it("updateSelectedMethod should be called", function() {
- var data = {
- items: []
- };
- controller.runPreUpgradeCheckOnlySuccess(data, {}, {type: 'ROLLING'});
- expect(controller.updateSelectedMethod.calledWith(false)).to.be.true;
- });
-
- it("addPrecheckMessageTooltip should be called", function() {
- var data = {
- items: []
- };
- controller.runPreUpgradeCheckOnlySuccess(data, {}, {type: 'ROLLING'});
- expect(controller.addPrecheckMessageTooltip.calledOnce).to.be.true;
- });
- });
-
- describe("#formatPreCheckMessage()", function () {
-
- it("should return formatted message", function() {
- var data = {
- items: [{
- UpgradeChecks: {
- status: 'FAIL'
- }
- }]
- };
- expect(controller.formatPreCheckMessage('FAIL', data, {precheckResultsMessage: 'pre'})).to.be.eql({
- "precheckResultsMessage": "1 Required pre",
- "precheckResultsMessageClass": "RED",
- "isPrecheckFailed": true,
- "precheckResultsMessageIconClass": "glyphicon glyphicon-remove"
- });
- });
- });
-
- describe("#addPrecheckMessageTooltip()", function () {
-
- beforeEach(function() {
- sinon.stub(Em.run, 'later', function(ctx, callback) {
- callback();
- });
- sinon.stub(App, 'tooltip');
- });
-
- afterEach(function() {
- Em.run.later.restore();
- App.tooltip.restore();
- });
-
- it("App.tooltip should be called", function() {
- controller.addPrecheckMessageTooltip();
- expect(App.tooltip.calledOnce).to.be.true;
- });
- });
-
- describe("#runPreUpgradeCheckOnlyError()", function () {
-
- it("upgradeMethod should be updated", function() {
- controller.set('upgradeMethods', [Em.Object.create({
- type: 'ROLLING'
- })]);
- controller.runPreUpgradeCheckOnlyError({}, {}, '', {}, {type: 'ROLLING'});
- expect(JSON.stringify(controller.get('upgradeMethods').findProperty('type', 'ROLLING'))).to.be.equal(JSON.stringify({
- "type": "ROLLING",
- "precheckResultsMessage": Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.preCheck.msg.failed.link'),
- "precheckResultsTitle": Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.preCheck.msg.failed.title'),
- "precheckResultsMessageClass": "RED",
- "isPrecheckFailed": true,
- "precheckResultsMessageIconClass": "glyphicon glyphicon-warning-sign",
- "action": "rerunCheck"
- }));
- });
- });
-
- describe("#updateSelectedMethod()", function () {
-
- beforeEach(function() {
- controller.set('upgradeMethods', [
- Em.Object.create({
- type: 'ROLLING',
- isPrecheckFailed: false,
- selected: true
- }),
- Em.Object.create({
- type: 'NON_ROLLING',
- isPrecheckFailed: false,
- selected: true
- })
- ]);
- });
-
- it("should select upgrade method", function() {
- controller.set('upgradeType', 'ROLLING');
- controller.updateSelectedMethod(true);
- expect(controller.get('upgradeMethods').findProperty('type', 'ROLLING').get('selected')).to.be.true;
- });
-
- it("isPrecheckFailed true for ROLLING and NON_ROLLING", function() {
- controller.updateSelectedMethod(false);
- expect(controller.get('upgradeMethods').findProperty('type', 'ROLLING').get('selected')).to.be.true;
- expect(controller.get('upgradeMethods').findProperty('type', 'NON_ROLLING').get('selected')).to.be.true;
- });
-
- it("isPrecheckFailed false for ROLLING and NON_ROLLING", function() {
- controller.get('upgradeMethods').setEach('isPrecheckFailed', true);
- controller.updateSelectedMethod(false);
- expect(controller.get('upgradeMethods').findProperty('type', 'ROLLING').get('selected')).to.be.false;
- expect(controller.get('upgradeMethods').findProperty('type', 'NON_ROLLING').get('selected')).to.be.false;
- });
- });
-
- describe("#runPreUpgradeCheckError()", function () {
-
- it("requestInProgress should be false", function() {
- controller.runPreUpgradeCheckError();
- expect(controller.get('requestInProgress')).to.be.false;
- });
- });
-
- describe("#confirmRetryUpgrade()", function () {
-
- beforeEach(function() {
- sinon.spy(App, 'showConfirmationPopup');
- sinon.stub(controller, 'retryUpgrade');
- });
-
- afterEach(function() {
- App.showConfirmationPopup.restore();
- controller.retryUpgrade.restore();
- });
-
- it("App.showConfirmationPopup should be called", function() {
- var popup = controller.confirmRetryUpgrade(Em.Object.create());
- expect(App.showConfirmationPopup.calledOnce).to.be.true;
- popup.onPrimary();
- expect(controller.retryUpgrade.calledOnce).to.be.true;
- });
- });
-
- describe("#confirmRetryDowngrade()", function () {
-
- beforeEach(function() {
- sinon.spy(App, 'showConfirmationPopup');
- sinon.stub(controller, 'retryUpgrade');
- });
-
- afterEach(function() {
- App.showConfirmationPopup.restore();
- controller.retryUpgrade.restore();
- });
-
- it("App.showConfirmationPopup should be called", function() {
- var popup = controller.confirmRetryDowngrade(Em.Object.create());
- expect(App.showConfirmationPopup.calledOnce).to.be.true;
- popup.onPrimary();
- expect(controller.retryUpgrade.calledOnce).to.be.true;
- });
- });
-
- describe("#installRepoVersionError()", function () {
- var header = Em.I18n.t('admin.stackVersions.upgrade.installPackage.fail.title');
- var mock = Em.Object.create({
- id: 1,
- defaultStatus: 'NOT_REQUIRED',
- stackVersion: {}
- });
-
- beforeEach(function() {
- sinon.stub(App, 'showAlertPopup');
- sinon.stub(App.RepositoryVersion, 'find').returns(mock);
- });
-
- afterEach(function() {
- App.showAlertPopup.restore();
- App.RepositoryVersion.find.restore();
- });
-
- it("responseText is incorrect", function() {
- var data = {
- responseText: null
- };
- controller.installRepoVersionError(data, null, mock);
- expect(App.showAlertPopup.calledWith(header, "")).to.be.true;
- });
-
- it("statusText is timeout", function() {
- var data = {
- responseText: '',
- statusText: 'timeout'
- };
- controller.installRepoVersionError(data, null, mock);
- expect(App.showAlertPopup.calledWith(header, Em.I18n.t('admin.stackVersions.upgrade.installPackage.fail.timeout'))).to.be.true;
- });
-
- it("responseText is correct", function() {
- var data = {
- responseText: '{"message":"msg"}'
- };
- controller.installRepoVersionError(data, null, mock);
- expect(App.showAlertPopup.calledWith(header, 'msg')).to.be.true;
- });
- });
-
- describe("#showProgressPopup()", function () {
- var mock = {
- initPopup: Em.K
- };
-
- beforeEach(function() {
- sinon.stub(App.router, 'get').withArgs('highAvailabilityProgressPopupController').returns(mock);
- sinon.stub(mock, 'initPopup');
- sinon.stub(controller, 'getRepoVersionInstallId').returns([1]);
- });
-
- afterEach(function() {
- App.router.get.restore();
- mock.initPopup.restore();
- controller.getRepoVersionInstallId.restore();
- });
-
- it("initPopup should be called", function() {
- controller.showProgressPopup(Em.Object.create({displayName: 'v1'}));
- expect(mock.initPopup.calledWith(
- Em.I18n.t('admin.stackVersions.details.install.hosts.popup.title').format('v1'),
- [1],
- controller
- )).to.be.true;
- });
- });
-
- describe('#getRepoVersionInstallId', function() {
- beforeEach(function() {
- this.mockDB = sinon.stub(App.db, 'get');
- this.mockRequests = sinon.stub(App.router, 'get');
- });
- afterEach(function() {
- this.mockDB.restore();
- this.mockRequests.restore();
- });
-
- it('should return id from latest version install', function() {
- this.mockDB.returns(null);
- this.mockRequests.returns([Em.Object.create({
- name: 'Install version',
- id: 1
- })]);
- expect(controller.getRepoVersionInstallId()[0]).to.be.equal(1);
- });
- it('should return id from localDB', function() {
- this.mockDB.returns([2]);
- this.mockRequests.returns([Em.Object.create({
- name: 'Install version',
- id: 2
- })]);
- expect(controller.getRepoVersionInstallId()[0]).to.be.equal(2);
- });
- it('should return id from latest version install and ignore deprecated localDb value', function() {
- this.mockDB.returns([2]);
- this.mockRequests.returns([Em.Object.create({
- name: 'Install version',
- id: 3
- })]);
- expect(controller.getRepoVersionInstallId()[0]).to.be.equal(3);
- });
- });
-
- describe("#finish()", function () {
-
- beforeEach(function() {
- sinon.stub(controller, 'setDBProperties', Em.K);
- sinon.stub(App.clusterStatus, 'setClusterStatus');
- sinon.stub(controller, 'initDBProperties');
- App.set('upgradeState', 'COMPLETED');
- controller.set('upgradeVersion', '');
- });
-
- afterEach(function() {
- controller.setDBProperties.restore();
- controller.initDBProperties.restore();
- App.clusterStatus.setClusterStatus.restore();
- });
-
- it("setDBProperties should be called", function() {
- controller.finish();
- expect(controller.setDBProperties.calledWith({
- fromVersion: undefined,
- upgradeId: undefined,
- upgradeState: 'NOT_REQUIRED',
- upgradeVersion: undefined,
- currentVersion: undefined,
- upgradeTypeDisplayName: undefined,
- upgradeType: undefined,
- isWizardRestricted: false,
- failuresTolerance: undefined,
- isDowngrade: undefined,
- downgradeAllowed: undefined
- })).to.be.true;
- });
-
- it("initDBProperties should be called", function() {
- controller.finish();
- expect(controller.initDBProperties).to.be.calledOnce;
- });
-
- it("App.clusterStatus.setClusterStatus should be called", function() {
- controller.finish();
- expect(App.clusterStatus.setClusterStatus.calledOnce).to.be.true;
- });
-
- it("upgradeState should be NOT_REQUIRED", function() {
- controller.finish();
- expect(App.get('upgradeState')).to.be.equal('NOT_REQUIRED');
- });
-
- it("currentStackVersion should be set", function() {
- controller.set('upgradeVersion', 'HDP-2.2');
- controller.finish();
- expect(controller.get('upgradeVersion')).to.be.equal('HDP-2.2');
- });
- });
-
- describe("#loadRepositories()", function () {
-
- beforeEach(function() {
- sinon.stub(App.router, 'get').withArgs('clusterController.isLoaded').returns(true);
- });
-
- afterEach(function() {
- App.router.get.restore();
- });
-
- it("App.ajax.send should be called", function() {
- App.set('currentStackVersion', 'HDP-2.2');
- controller.loadRepositories();
- var args = testHelpers.findAjaxRequest('name', 'cluster.load_repositories');
- expect(args[0]).to.be.eql({
- name: 'cluster.load_repositories',
- sender: controller,
- data: {
- stackName: 'HDP',
- stackVersion: '2.2'
- },
- success: 'loadRepositoriesSuccessCallback',
- error: 'loadRepositoriesErrorCallback'
- });
- });
- });
-
- describe("#loadRepositoriesSuccessCallback()", function () {
-
- it("allRepos should be set", function() {
- var data = {
- items: [
- {
- repositories: [
- {
- Repositories: {
- os_type: 'redhat',
- base_url: 'base_url',
- repo_id: 'repo_id',
- repo_name: 'repo_name',
- stack_name: 'stack_name',
- stack_version: 'stack_version'
- }
- }
- ]
- }
- ]
- };
- controller.loadRepositoriesSuccessCallback(data);
- expect(controller.get('allRepos')[0].name).to.be.equal('redhat');
- expect(JSON.stringify(controller.get('allRepos')[0].repositories[0])).to.be.equal(JSON.stringify({
- "baseUrl": "base_url",
- "osType": "redhat",
- "repoId": "repo_id",
- "repoName": "repo_name",
- "stackName": "stack_name",
- "stackVersion": "stack_version",
- "isFirst": true
- }));
- });
- });
-
- describe("#loadServiceVersionFromVersionDefinitions()", function () {
-
- it("App.ajax.send should be called", function() {
- App.set('clusterName', 'c1');
- controller.loadServiceVersionFromVersionDefinitions();
- var args = testHelpers.findAjaxRequest('name', 'cluster.load_current_repo_stack_services');
- expect(args[0]).to.be.eql({
- name: 'cluster.load_current_repo_stack_services',
- sender: controller,
- data: {
- clusterName: App.get('clusterName')
- },
- success: 'loadServiceVersionFromVersionDefinitionsSuccessCallback',
- error: 'loadServiceVersionFromVersionDefinitionsErrorCallback'
- });
- });
- });
-
- describe("#loadServiceVersionFromVersionDefinitionsSuccessCallback()", function () {
- var cases;
- beforeEach(function() {
- this.appGetStub = sinon.stub(App, 'get');
- });
-
- afterEach(function() {
- App.get.restore();
- controller.set('serviceVersionsMap', {});
- });
- cases = [
- {
- jsonData: {
- items: [
- {
- ClusterStackVersions: {
- version: '2.3',
- stack: 'HDP',
- state: 'NOT_REQUIRED'
- },
- repository_versions: [
- {
- RepositoryVersions: {
- stack_services: [
- { name: 'S3', versions: ['v3']}
- ]
- }
- }
- ]
- },
- {
- ClusterStackVersions: {
- version: '2.2',
- stack: 'HDP',
- state: 'NOT_REQUIRED'
- },
- repository_versions: [
- {
- RepositoryVersions: {
- stack_services: [
- { name: 'S2', versions: ['v2']}
- ]
- }
- }
- ]
- }
- ]
- },
- currentStackData: {
- currentStackVersionNumber: '2.2',
- currentStackName: 'HDP'
- },
- m: 'should add stack services from stack version by current stack name and version number',
- e: { "S2": "v2"}
- }
- ];
-
- cases.forEach(function(test) {
- it(test.m, function() {
- this.appGetStub.withArgs('currentStackName').returns(test.currentStackData.currentStackName)
- .withArgs('currentStackVersionNumber').returns(test.currentStackData.currentStackVersionNumber);
- controller.loadServiceVersionFromVersionDefinitionsSuccessCallback(test.jsonData);
- expect(controller.get('serviceVersionsMap')).to.be.eql(test.e);
- })
- });
- });
-
- describe("#loadCompatibleVersions()", function () {
-
- beforeEach(function() {
- sinon.stub(App, 'get').returns('stack');
- });
-
- afterEach(function() {
- App.get.restore();
- });
-
- it("App.ajax.send should be called", function() {
- controller.loadCompatibleVersions();
- var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.get_compatible_versions');
- expect(args[0]).to.be.eql({
- name: 'admin.upgrade.get_compatible_versions',
- sender: controller,
- data: {
- stackName: 'stack',
- stackVersion: 'stack'
- },
- success: 'loadCompatibleVersionsSuccessCallback'
- });
- });
- });
-
- describe("#loadCompatibleVersionsSuccessCallback()", function () {
- var mock = [
- Em.Object.create({
- repositoryVersion: 'HDP-1',
- isCompatible: false
- }),
- Em.Object.create({
- repositoryVersion: 'HDP-2',
- isCompatible: false
- })
- ];
-
- beforeEach(function() {
- sinon.stub(App.RepositoryVersion, 'find').returns(mock);
- });
-
- afterEach(function() {
- App.RepositoryVersion.find.restore();
- });
-
- it("should set isCompatible property", function() {
- var data = {
- items: [
- {
- CompatibleRepositoryVersions: {
- repository_version: 'HDP-2'
- }
- }
- ]
- };
- controller.loadCompatibleVersionsSuccessCallback(data);
- expect(mock.mapProperty('isCompatible')).to.be.eql([false, true])
- });
- });
-
- describe('#confirmRevertPatchUpgrade', function() {
- beforeEach(function() {
- sinon.stub(App.RepositoryVersion, 'find').returns(Em.Object.create());
- sinon.stub(App.ModalPopup, 'show');
- sinon.stub(controller, 'getServicesToBeReverted');
- });
- afterEach(function() {
- App.RepositoryVersion.find.restore();
- App.ModalPopup.show.restore();
- controller.getServicesToBeReverted.restore();
- });
-
- it('App.ModalPopup.show should be called', function() {
- controller.confirmRevertPatchUpgrade(Em.Object.create());
- expect(App.ModalPopup.show.calledOnce).to.be.true;
- });
- });
-
- describe('#getServicesToBeReverted', function() {
- beforeEach(function() {
- sinon.stub(App.Service, 'find').returns(Em.Object.create({isLoaded: true}));
- });
- afterEach(function() {
- App.Service.find.restore();
- });
-
- it('should return services which will be reverted', function() {
- var version = Em.Object.create({
- stackServices: [
- Em.Object.create({
- name: 'S1',
- isAvailable: false,
- displayName: 's1',
- latestVersion: '1.0'
- }),
- Em.Object.create({
- name: 'S2',
- isAvailable: true,
- displayName: 's2',
- latestVersion: '2.0'
- })
- ]
- });
- var currentStack = Em.Object.create({
- stackServices: [
- Em.Object.create({
- name: 'S2',
- latestVersion: '2.1'
- })
- ]
- });
- expect(controller.getServicesToBeReverted(version, currentStack)).to.be.eql([
- {
- displayName: 's2',
- fromVersion: '2.0',
- toVersion: '2.1'
- }
- ]);
- });
- });
-
- describe('#revertPatchUpgrade', function() {
- it('App.ajax.send should be called', function() {
- var version = Em.Object.create({
- repositoryVersion: '1.1',
- id: 2,
- displayName: '1.2',
- upgradeType: 'EXPRESS',
- stackVersion: Em.Object.create({
- revertUpgradeId: 1
- })
- });
- controller.revertPatchUpgrade(version);
- expect(controller.get('requestInProgress')).to.be.true;
- var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.revert');
- expect(args[0]).to.exists;
- expect(args[0].data).to.be.eql({
- upgradeId: 1,
- isDowngrade: true,
- id: 2,
- value: '1.1',
- label: '1.2'
- });
- args[0].callback();
- expect(controller.get('requestInProgress')).to.be.false;
- });
- });
-
- describe('#getUpgradeDowngradeHeader', function() {
-
- it('should return downgrade header', function() {
- expect(controller.getUpgradeDowngradeHeader('t1', 'v1', true)).to.be.equal(
- Em.I18n.t('admin.stackUpgrade.dialog.downgrade.header').format('v1')
- );
- });
- it('should return patch upgrade header', function() {
- expect(controller.getUpgradeDowngradeHeader('t1', 'v1', false, Em.Object.create({isPatch: true}))).to.be.equal(
- Em.I18n.t('admin.stackUpgrade.dialog.upgrade.patch.header').format('t1', 'v1')
- );
- });
- it('should return maint upgrade header', function() {
- expect(controller.getUpgradeDowngradeHeader('t1', 'v1', false, Em.Object.create({isMaint: true}))).to.be.equal(
- Em.I18n.t('admin.stackUpgrade.dialog.upgrade.maint.header').format('t1', 'v1')
- );
- });
- it('should return upgrade header', function() {
- expect(controller.getUpgradeDowngradeHeader('t1', 'v1', false, false)).to.be.equal(
- Em.I18n.t('admin.stackUpgrade.dialog.upgrade.header').format('t1', 'v1')
- );
- });
- });
-
- describe('#confirmDiscardRepoVersion', function() {
- beforeEach(function() {
- sinon.stub(App, 'showConfirmationPopup', Em.clb);
- sinon.stub(controller, 'discardRepoVersion');
- });
- afterEach(function() {
- App.showConfirmationPopup.restore();
- controller.discardRepoVersion.restore();
- });
-
- it('discardRepoVersion should be called', function() {
- controller.confirmDiscardRepoVersion(Em.Object.create());
- expect(App.showConfirmationPopup.calledOnce).to.be.true;
- expect(controller.discardRepoVersion.calledWith(Em.Object.create())).to.be.true;
- });
- });
-
- describe('#discardRepoVersion', function() {
-
- it('App.ajax.send should be called', function() {
- var version = Em.Object.create({
- id: 2,
- stackVersionType: 'HDP',
- stackVersionNumber: '2.5'
- });
- controller.discardRepoVersion(version);
- expect(controller.get('requestInProgress')).to.be.true;
- var args = testHelpers.findAjaxRequest('name', 'admin.stack_versions.discard');
- expect(args[0]).to.exists;
- expect(args[0].data).to.be.eql({
- id: 2,
- stackName: 'HDP',
- stackVersion: '2.5'
- });
- args[0].callback();
- expect(controller.get('requestInProgress')).to.be.false;
- });
- });
-
- describe('#showUpgradeOptions', function () {
- before(function () {
- sinon.stub(controller, 'upgradeOptions', Em.K);
- });
- after(function () {
- controller.upgradeOptions.restore();
- });
- it("show upgrade options popup window", function() {
- var version = Em.Object.create({displayName: 'HDP-2.2'});
- controller.showUpgradeOptions(version);
- expect(controller.upgradeOptions.calledWith(false, version, true)).to.be.true;
- });
-
- it("runningCheckRequests has 1 item" + Em.I18n.t('common.dismiss'), function () {
- var version = Em.Object.create({displayName: 'HDP-2.2'});
- var popup = controller.upgradeOptions(false, version, true);
- expect( controller.get('runningCheckRequests')).to.have.length(1);
- })
- });
-});
diff --git a/ambari-web/test/mappers/socket/upgrade_state_mapper_test.js b/ambari-web/test/mappers/socket/upgrade_state_mapper_test.js
deleted file mode 100644
index 322c04f..0000000
--- a/ambari-web/test/mappers/socket/upgrade_state_mapper_test.js
+++ /dev/null
@@ -1,80 +0,0 @@
-/**
- * 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');
-
-require('mappers/socket/upgrade_state_mapper');
-
-describe('App.upgradeStateMapper', function () {
-
- describe('#map', function() {
- var mainAdminStackAndUpgradeController = Em.Object.create({
- restoreLastUpgrade: sinon.spy(),
- setDBProperty: sinon.spy(),
- upgradeId: 1
- });
- beforeEach(function() {
- sinon.stub(App.router, 'get').returns(mainAdminStackAndUpgradeController)
- });
- afterEach(function() {
- App.router.get.restore();
- });
-
- it('should call restoreLastUpgrade on CREATE event', function() {
- var event = {
- type: 'CREATE',
- associated_version: "2.5.4.0-121",
- cluster_id: 2,
- direction: "DOWNGRADE",
- downgrade_allowed: false,
- end_time: -1,
- progress_percent: 0,
- request_id: 26,
- request_status: "PENDING",
- revert_allowed: false,
- skip_failures: false,
- skip_service_check_failures: false,
- start_time: -1,
- suspended: false,
- upgrade_id: 56,
- upgrade_type: "NON_ROLLING"
- };
- App.upgradeStateMapper.map(event);
- expect(mainAdminStackAndUpgradeController.restoreLastUpgrade.getCall(0).args[0]).to.be.eql({
- Upgrade: event
- });
- });
-
- it('should set upgrade state on UPDATE event', function() {
- var event = {
- end_time: -1,
- progress_percent: 0,
- request_id: 1,
- request_status: "PENDING",
- start_time: -1,
- suspended: true,
- type: "UPDATE"
- };
- App.upgradeStateMapper.map(event);
- expect(App.get('upgradeState')).to.be.equal('PENDING');
- expect(mainAdminStackAndUpgradeController.get('isSuspended')).to.be.true;
- expect(mainAdminStackAndUpgradeController.setDBProperty.calledWith('upgradeState', 'PENDING')).to.be.true;
- expect(mainAdminStackAndUpgradeController.setDBProperty.calledWith('isSuspended', true)).to.be.true;
- });
- });
-});
diff --git a/ambari-web/test/views/main/admin/stack_upgrade/menu_view_test.js b/ambari-web/test/views/main/admin/stack_upgrade/menu_view_test.js
deleted file mode 100644
index f118e76..0000000
--- a/ambari-web/test/views/main/admin/stack_upgrade/menu_view_test.js
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * 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');
-var view;
-
-describe('App.MainAdminStackMenuView', function () {
-
- beforeEach(function () {
- view = App.MainAdminStackMenuView.create({});
- });
-
- describe('#content', function () {
-
- beforeEach(function () {
- this.stub = sinon.stub(App, 'get');
- });
-
- afterEach(function () {
- App.get.restore();
- });
-
- Em.A([
- {
- stackVersionsAvailable: true,
- m: '`versions` is visible',
- e: false
- },
- {
- stackVersionsAvailable: false,
- m: '`versions` is invisible',
- e: true
- }
- ]).forEach(function (test) {
- it(test.m, function () {
- this.stub.withArgs('stackVersionsAvailable').returns(test.stackVersionsAvailable);
- view.propertyDidChange('content');
- expect(view.get('content').findProperty('name', 'versions').get('hidden')).to.equal(test.e);
- });
- });
-
- });
-
... 3428 lines suppressed ...
--
To stop receiving notification emails like this one, please contact
jgolieb@apache.org.