Skip to content

Commit

Permalink
Merge pull request #1748 from spinnaker/explicit-rollback-server-grou…
Browse files Browse the repository at this point in the history
…p-action

Support an explicit rollback action
  • Loading branch information
ajordens committed Nov 23, 2015
2 parents d184fe6 + cb54b0c commit 6051d4d
Show file tree
Hide file tree
Showing 13 changed files with 164 additions and 25 deletions.
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<div class="modal-footer">
<button type="submit" ng-click="vm.resize()" style="display:none"></button> <!-- Allows form submission via enter keypress-->
<button type="submit" ng-click="vm.action()" style="display:none"></button> <!-- Allows form submission via enter keypress-->
<button class="btn btn-default" ng-click="vm.cancel()">Cancel</button>
<button type="submit"
class="btn btn-primary"
ng-click="vm.resize()"
ng-click="vm.action()"
ng-disabled="!vm.isValid()">
Submit
</button>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@
let angular = require('angular');

module.exports = angular
.module('spinnaker.amazon.serverGroup.details.resize.footer.directive', [
.module('spinnaker.amazon.footer.directive', [
])
.directive('awsResizeFooter', function () {
.directive('awsFooter', function () {
return {
restrict: 'E',
templateUrl: require('./resizeFooter.directive.html'),
templateUrl: require('./footer.directive.html'),
scope: {},
bindToController: {
resize: '&',
action: '&',
isValid: '&',
cancel: '&',
},
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
<div class="row" ng-if="vm.verification.required">
<div class="col-sm-12">
<hr/>
<h4 class="confirmation-modal">Type the name of the account ( <account-tag account="vm.account"></account-tag> ) below to continue.</h4>
</div>
<div class="row verification" ng-if="vm.verification.required" style="margin-top: 10px">
<div class="col-sm-offset-1 col-sm-10">
<p>Type the name of the account ( <account-tag account="vm.account"></account-tag> ) below to continue.</p>
<div class="form-inline">
<div class="form-group">
<input type="text" ng-model="vm.verification.verifyAccount" class="form-control input-sm highlight-pristine"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
let angular = require('angular');

module.exports = angular
.module('spinnaker.amazon.serverGroup.details.resize.verification.directive', [
.module('spinnaker.amazon.verification.directive', [
])
.directive('awsResizeVerification', function () {
.directive('awsVerification', function () {
return {
restrict: 'E',
templateUrl: require('./verification.directive.html'),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ module.exports = angular.module('spinnaker.amazon.serverGroup.details.resize.con
require('../../../../core/serverGroup/serverGroup.write.service.js'),
require('../../../../core/task/monitor/taskMonitorService.js'),
require('./resizeCapacity.directive.js'),
require('./resizeFooter.directive.js'),
require('./verification.directive.js'),
require('../../../common/footer.directive.js'),
require('../../../common/verification.directive.js'),
])
.controller('awsResizeServerGroupCtrl', function($scope, $modalInstance, accountService, serverGroupWriter,
taskMonitorService,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
<div modal-page>
<div modal-page class="confirmation-modal">
<task-monitor monitor="taskMonitor"></task-monitor>
<form role="form">
<modal-close></modal-close>
<div class="modal-header">
<h3>Resize {{serverGroup.name}}</h3>
</div>
<div class="modal-body container-fluid form-horizontal">
<aws-resize-capacity command="command" current-size="currentSize"></aws-resize-capacity>
<div class="modal-body confirmation-modal">
<div class="form-horizontal">
<aws-resize-capacity command="command" current-size="currentSize"></aws-resize-capacity>
</div>
<div class="row" ng-if="command.platformHealthOnlyShowOverride">
<div class="col-sm-10 col-sm-offset-1">
<platform-health-override command="command"
Expand All @@ -15,9 +17,9 @@ <h3>Resize {{serverGroup.name}}</h3>
</platform-health-override>
</div>
</div>
<aws-resize-verification account="serverGroup.account" verification="verification"></aws-resize-verification>
<aws-verification account="serverGroup.account" verification="verification"></aws-verification>

</div>
<aws-resize-footer resize="ctrl.resize()" cancel="ctrl.cancel()" is-valid="ctrl.isValid()"></aws-resize-footer>
<aws-footer resize="ctrl.resize()" cancel="ctrl.cancel()" is-valid="ctrl.isValid()"></aws-footer>
</form>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
'use strict';

let angular = require('angular');

module.exports = angular.module('spinnaker.amazon.serverGroup.details.rollback.controller', [
require('../../../../core/account/account.service.js'),
require('../../../../core/application/modal/platformHealthOverride.directive.js'),
require('../../../../core/serverGroup/serverGroup.write.service.js'),
require('../../../../core/task/monitor/taskMonitorService.js'),
require('../../../common/footer.directive.js'),
require('../../../common/verification.directive.js'),
])
.controller('awsRollbackServerGroupCtrl', function ($scope, $modalInstance, accountService, serverGroupWriter,
taskMonitorService,
application, serverGroup, disabledServerGroups) {
$scope.serverGroup = serverGroup;
$scope.disabledServerGroups = disabledServerGroups;
$scope.verification = {
required: accountService.challengeDestructiveActions('aws', serverGroup.account)
};

$scope.command = {
rollbackType: 'EXPLICIT',
rollbackContext: {
rollbackServerGroupName: serverGroup.name
}
};

if (application && application.attributes) {
$scope.command.platformHealthOnlyShowOverride = application.attributes.platformHealthOnlyShowOverride;
}

this.isValid = function () {
var command = $scope.command;
if ($scope.verification.required && $scope.verification.verifyAccount !== serverGroup.account.toUpperCase()) {
return false;
}

return command.rollbackContext.restoreServerGroupName !== undefined;
};

this.rollback = function () {
if (!this.isValid()) {
return;
}

var submitMethod = function () {
return serverGroupWriter.rollbackServerGroup(serverGroup, application, $scope.command);
};

var taskMonitorConfig = {
modalInstance: $modalInstance,
application: application,
title: 'Rollback ' + serverGroup.name,
submitMethod: submitMethod
};

$scope.taskMonitor = taskMonitorService.buildTaskMonitor(taskMonitorConfig);

$scope.taskMonitor.submit(submitMethod);
};

this.cancel = function () {
$modalInstance.dismiss();
};
}).name;
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<div modal-page class="confirmation-modal">
<task-monitor monitor="taskMonitor"></task-monitor>
<form role="form">
<modal-close></modal-close>
<div class="modal-header">
<h3>Rollback {{serverGroup.name}}</h3>
</div>
<div class="modal-body confirmation-modal">
<div class="row">
<div class="col-sm-4 col-sm-offset-1">
<strong>Restore Server Group</strong>
</div>
<div class="col-sm-6">
<ui-select ng-model="command.rollbackContext.restoreServerGroupName" class="form-control input-sm">
<ui-select-match placeholder="Select...">{{$select.selected.name}}</ui-select-match>
<ui-select-choices repeat="serverGroup.name as serverGroup in disabledServerGroups">
<span ng-bind-html="serverGroup.name"></span>
</ui-select-choices>
</ui-select>
</div>
</div>

<div class="row" ng-if="command.platformHealthOnlyShowOverride">
<div class="col-sm-10 col-sm-offset-1">
<platform-health-override command="command"
platform-health-type="'Amazon'"
show-help-details="true"
field-columns="12">
</platform-health-override>
</div>
</div>

<aws-verification account="serverGroup.account" verification="verification"></aws-verification>
</div>
<aws-footer action="ctrl.rollback()" cancel="ctrl.cancel()" is-valid="ctrl.isValid()"></aws-footer>
</form>
</div>
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ module.exports = angular.module('spinnaker.serverGroup.details.aws.controller',
require('../../../core/insight/insightFilterState.model.js'),
require('./scalingActivities/scalingActivities.controller.js'),
require('./resize/resizeServerGroup.controller'),
require('./rollback/rollbackServerGroup.controller'),
require('../../../core/utils/selectOnDblClick.directive.js'),
])
.controller('awsServerGroupDetailsCtrl', function ($scope, $state, $templateCache, $interpolate, app, serverGroup, InsightFilterStateModel,
Expand Down Expand Up @@ -269,6 +270,21 @@ module.exports = angular.module('spinnaker.serverGroup.details.aws.controller',
confirmationModalService.confirm(confirmationModalParams);
};

this.rollbackServerGroup = function rollbackServerGroup() {
$uibModal.open({
templateUrl: templateOverrideRegistry.getTemplate('aws.rollback.modal', require('./rollback/rollbackServerGroup.html')),
controller: 'awsRollbackServerGroupCtrl as ctrl',
resolve: {
serverGroup: function() { return $scope.serverGroup; },
disabledServerGroups: function() {
var cluster = _.find(app.clusters, {name: $scope.serverGroup.cluster, account: $scope.serverGroup.account});
return _.filter(cluster.serverGroups, {isDisabled: true, region: $scope.serverGroup.region});
},
application: function() { return app; }
}
});
};

this.toggleScalingProcesses = function toggleScalingProcesses() {
$uibModal.open({
templateUrl: require('./scalingProcesses/modifyScalingProcesses.html'),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ <h3 select-on-dbl-click>
Server Group Actions <span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu">
<li><a href ng-if="!serverGroup.isDisabled" ng-click="ctrl.rollbackServerGroup()">Rollback</a></li>
<li role="presentation" class="divider" ng-if="!serverGroup.isDisabled"></li>
<li><a href ng-click="ctrl.resizeServerGroup()">Resize</a></li>
<li><a href ng-if="!serverGroup.isDisabled" ng-click="ctrl.disableServerGroup()">Disable</a></li>
<li><a href ng-if="serverGroup.isDisabled" ng-click="ctrl.enableServerGroup()">Enable</a></li>
Expand Down
15 changes: 15 additions & 0 deletions app/scripts/modules/core/serverGroup/serverGroup.write.service.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,20 @@ module.exports = angular
});
}

function rollbackServerGroup(serverGroup, application, params={}) {
params.type = 'rollbackServerGroup';
params.regions = [serverGroup.region];
params.zones = serverGroup.zones;
params.credentials = serverGroup.account;
params.cloudProvider = serverGroup.type;

return taskExecutor.executeTask({
job: [params],
application: application,
description: 'Rollback Server Group: ' + serverGroup.name
});
}

function resizeServerGroup(serverGroup, application, params={}) {
params.asgName = serverGroup.name;
params.serverGroupName = serverGroup.name;
Expand Down Expand Up @@ -110,6 +124,7 @@ module.exports = angular
destroyServerGroup: destroyServerGroup,
disableServerGroup: disableServerGroup,
enableServerGroup: enableServerGroup,
rollbackServerGroup: rollbackServerGroup,
resizeServerGroup: resizeServerGroup,
cloneServerGroup: cloneServerGroup
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ <h3 select-on-dbl-click>
Server Group Actions <span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu">
<li><a href ng-if="!serverGroup.isDisabled" ng-click="ctrl.rollbackServerGroup()">Rollback</a></li>
<li role="presentation" class="divider" ng-if="!serverGroup.isDisabled"></li>
<li><a href ng-click="ctrl.resizeServerGroup()">Resize</a></li>
<li><a href ng-if="!serverGroup.isDisabled" ng-click="ctrl.disableServerGroup()">Disable</a></li>
<li><a href ng-if="serverGroup.isDisabled" ng-click="ctrl.enableServerGroup()">Enable</a></li>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
<div modal-page>
<div modal-page class="confirmation-modal">
<task-monitor monitor="taskMonitor"></task-monitor>
<form role="form">
<modal-close></modal-close>
<div class="modal-header">
<h3>Resize {{serverGroup.name}}</h3>
</div>
<div class="modal-body container-fluid form-horizontal">
<div class="modal-body confirmation-modal">
<div class="row">
<div class="col-md-12">
<reservation-report account="serverGroup.account"
Expand All @@ -15,7 +15,9 @@ <h3>Resize {{serverGroup.name}}</h3>
</div>
</div>

<aws-resize-capacity command="command" current-size="currentSize"></aws-resize-capacity>
<div class="form-horizontal">
<aws-resize-capacity command="command" current-size="currentSize"></aws-resize-capacity>
</div>
<div class="row" ng-if="command.platformHealthOnlyShowOverride">
<div class="col-sm-10 col-sm-offset-1">
<platform-health-override command="command"
Expand All @@ -24,9 +26,9 @@ <h3>Resize {{serverGroup.name}}</h3>
</platform-health-override>
</div>
</div>
<aws-resize-verification account="serverGroup.account" verification="verification"></aws-resize-verification>
<aws-verification account="serverGroup.account" verification="verification"></aws-verification>

</div>
<aws-resize-footer resize="ctrl.resize()" cancel="ctrl.cancel()" is-valid="ctrl.isValid()"></aws-resize-footer>
<aws-footer action="ctrl.resize()" cancel="ctrl.cancel()" is-valid="ctrl.isValid()"></aws-footer>
</form>
</div>

0 comments on commit 6051d4d

Please sign in to comment.