Skip to content

Commit 6051d4d

Browse files
committed
Merge pull request #1748 from spinnaker/explicit-rollback-server-group-action
Support an explicit rollback action
2 parents d184fe6 + cb54b0c commit 6051d4d

13 files changed

+164
-25
lines changed
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<div class="modal-footer">
2-
<button type="submit" ng-click="vm.resize()" style="display:none"></button> <!-- Allows form submission via enter keypress-->
2+
<button type="submit" ng-click="vm.action()" style="display:none"></button> <!-- Allows form submission via enter keypress-->
33
<button class="btn btn-default" ng-click="vm.cancel()">Cancel</button>
44
<button type="submit"
55
class="btn btn-primary"
6-
ng-click="vm.resize()"
6+
ng-click="vm.action()"
77
ng-disabled="!vm.isValid()">
88
Submit
99
</button>
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
let angular = require('angular');
44

55
module.exports = angular
6-
.module('spinnaker.amazon.serverGroup.details.resize.footer.directive', [
6+
.module('spinnaker.amazon.footer.directive', [
77
])
8-
.directive('awsResizeFooter', function () {
8+
.directive('awsFooter', function () {
99
return {
1010
restrict: 'E',
11-
templateUrl: require('./resizeFooter.directive.html'),
11+
templateUrl: require('./footer.directive.html'),
1212
scope: {},
1313
bindToController: {
14-
resize: '&',
14+
action: '&',
1515
isValid: '&',
1616
cancel: '&',
1717
},
Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
1-
<div class="row" ng-if="vm.verification.required">
2-
<div class="col-sm-12">
3-
<hr/>
4-
<h4 class="confirmation-modal">Type the name of the account ( <account-tag account="vm.account"></account-tag> ) below to continue.</h4>
5-
</div>
1+
<div class="row verification" ng-if="vm.verification.required" style="margin-top: 10px">
62
<div class="col-sm-offset-1 col-sm-10">
3+
<p>Type the name of the account ( <account-tag account="vm.account"></account-tag> ) below to continue.</p>
74
<div class="form-inline">
85
<div class="form-group">
96
<input type="text" ng-model="vm.verification.verifyAccount" class="form-control input-sm highlight-pristine"

app/scripts/modules/amazon/serverGroup/details/resize/verification.directive.js renamed to app/scripts/modules/amazon/common/verification.directive.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
let angular = require('angular');
44

55
module.exports = angular
6-
.module('spinnaker.amazon.serverGroup.details.resize.verification.directive', [
6+
.module('spinnaker.amazon.verification.directive', [
77
])
8-
.directive('awsResizeVerification', function () {
8+
.directive('awsVerification', function () {
99
return {
1010
restrict: 'E',
1111
templateUrl: require('./verification.directive.html'),

app/scripts/modules/amazon/serverGroup/details/resize/resizeServerGroup.controller.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ module.exports = angular.module('spinnaker.amazon.serverGroup.details.resize.con
88
require('../../../../core/serverGroup/serverGroup.write.service.js'),
99
require('../../../../core/task/monitor/taskMonitorService.js'),
1010
require('./resizeCapacity.directive.js'),
11-
require('./resizeFooter.directive.js'),
12-
require('./verification.directive.js'),
11+
require('../../../common/footer.directive.js'),
12+
require('../../../common/verification.directive.js'),
1313
])
1414
.controller('awsResizeServerGroupCtrl', function($scope, $modalInstance, accountService, serverGroupWriter,
1515
taskMonitorService,
Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
1-
<div modal-page>
1+
<div modal-page class="confirmation-modal">
22
<task-monitor monitor="taskMonitor"></task-monitor>
33
<form role="form">
44
<modal-close></modal-close>
55
<div class="modal-header">
66
<h3>Resize {{serverGroup.name}}</h3>
77
</div>
8-
<div class="modal-body container-fluid form-horizontal">
9-
<aws-resize-capacity command="command" current-size="currentSize"></aws-resize-capacity>
8+
<div class="modal-body confirmation-modal">
9+
<div class="form-horizontal">
10+
<aws-resize-capacity command="command" current-size="currentSize"></aws-resize-capacity>
11+
</div>
1012
<div class="row" ng-if="command.platformHealthOnlyShowOverride">
1113
<div class="col-sm-10 col-sm-offset-1">
1214
<platform-health-override command="command"
@@ -15,9 +17,9 @@ <h3>Resize {{serverGroup.name}}</h3>
1517
</platform-health-override>
1618
</div>
1719
</div>
18-
<aws-resize-verification account="serverGroup.account" verification="verification"></aws-resize-verification>
20+
<aws-verification account="serverGroup.account" verification="verification"></aws-verification>
1921

2022
</div>
21-
<aws-resize-footer resize="ctrl.resize()" cancel="ctrl.cancel()" is-valid="ctrl.isValid()"></aws-resize-footer>
23+
<aws-footer resize="ctrl.resize()" cancel="ctrl.cancel()" is-valid="ctrl.isValid()"></aws-footer>
2224
</form>
2325
</div>
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
'use strict';
2+
3+
let angular = require('angular');
4+
5+
module.exports = angular.module('spinnaker.amazon.serverGroup.details.rollback.controller', [
6+
require('../../../../core/account/account.service.js'),
7+
require('../../../../core/application/modal/platformHealthOverride.directive.js'),
8+
require('../../../../core/serverGroup/serverGroup.write.service.js'),
9+
require('../../../../core/task/monitor/taskMonitorService.js'),
10+
require('../../../common/footer.directive.js'),
11+
require('../../../common/verification.directive.js'),
12+
])
13+
.controller('awsRollbackServerGroupCtrl', function ($scope, $modalInstance, accountService, serverGroupWriter,
14+
taskMonitorService,
15+
application, serverGroup, disabledServerGroups) {
16+
$scope.serverGroup = serverGroup;
17+
$scope.disabledServerGroups = disabledServerGroups;
18+
$scope.verification = {
19+
required: accountService.challengeDestructiveActions('aws', serverGroup.account)
20+
};
21+
22+
$scope.command = {
23+
rollbackType: 'EXPLICIT',
24+
rollbackContext: {
25+
rollbackServerGroupName: serverGroup.name
26+
}
27+
};
28+
29+
if (application && application.attributes) {
30+
$scope.command.platformHealthOnlyShowOverride = application.attributes.platformHealthOnlyShowOverride;
31+
}
32+
33+
this.isValid = function () {
34+
var command = $scope.command;
35+
if ($scope.verification.required && $scope.verification.verifyAccount !== serverGroup.account.toUpperCase()) {
36+
return false;
37+
}
38+
39+
return command.rollbackContext.restoreServerGroupName !== undefined;
40+
};
41+
42+
this.rollback = function () {
43+
if (!this.isValid()) {
44+
return;
45+
}
46+
47+
var submitMethod = function () {
48+
return serverGroupWriter.rollbackServerGroup(serverGroup, application, $scope.command);
49+
};
50+
51+
var taskMonitorConfig = {
52+
modalInstance: $modalInstance,
53+
application: application,
54+
title: 'Rollback ' + serverGroup.name,
55+
submitMethod: submitMethod
56+
};
57+
58+
$scope.taskMonitor = taskMonitorService.buildTaskMonitor(taskMonitorConfig);
59+
60+
$scope.taskMonitor.submit(submitMethod);
61+
};
62+
63+
this.cancel = function () {
64+
$modalInstance.dismiss();
65+
};
66+
}).name;
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<div modal-page class="confirmation-modal">
2+
<task-monitor monitor="taskMonitor"></task-monitor>
3+
<form role="form">
4+
<modal-close></modal-close>
5+
<div class="modal-header">
6+
<h3>Rollback {{serverGroup.name}}</h3>
7+
</div>
8+
<div class="modal-body confirmation-modal">
9+
<div class="row">
10+
<div class="col-sm-4 col-sm-offset-1">
11+
<strong>Restore Server Group</strong>
12+
</div>
13+
<div class="col-sm-6">
14+
<ui-select ng-model="command.rollbackContext.restoreServerGroupName" class="form-control input-sm">
15+
<ui-select-match placeholder="Select...">{{$select.selected.name}}</ui-select-match>
16+
<ui-select-choices repeat="serverGroup.name as serverGroup in disabledServerGroups">
17+
<span ng-bind-html="serverGroup.name"></span>
18+
</ui-select-choices>
19+
</ui-select>
20+
</div>
21+
</div>
22+
23+
<div class="row" ng-if="command.platformHealthOnlyShowOverride">
24+
<div class="col-sm-10 col-sm-offset-1">
25+
<platform-health-override command="command"
26+
platform-health-type="'Amazon'"
27+
show-help-details="true"
28+
field-columns="12">
29+
</platform-health-override>
30+
</div>
31+
</div>
32+
33+
<aws-verification account="serverGroup.account" verification="verification"></aws-verification>
34+
</div>
35+
<aws-footer action="ctrl.rollback()" cancel="ctrl.cancel()" is-valid="ctrl.isValid()"></aws-footer>
36+
</form>
37+
</div>

app/scripts/modules/amazon/serverGroup/details/serverGroupDetails.aws.controller.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ module.exports = angular.module('spinnaker.serverGroup.details.aws.controller',
2323
require('../../../core/insight/insightFilterState.model.js'),
2424
require('./scalingActivities/scalingActivities.controller.js'),
2525
require('./resize/resizeServerGroup.controller'),
26+
require('./rollback/rollbackServerGroup.controller'),
2627
require('../../../core/utils/selectOnDblClick.directive.js'),
2728
])
2829
.controller('awsServerGroupDetailsCtrl', function ($scope, $state, $templateCache, $interpolate, app, serverGroup, InsightFilterStateModel,
@@ -269,6 +270,21 @@ module.exports = angular.module('spinnaker.serverGroup.details.aws.controller',
269270
confirmationModalService.confirm(confirmationModalParams);
270271
};
271272

273+
this.rollbackServerGroup = function rollbackServerGroup() {
274+
$uibModal.open({
275+
templateUrl: templateOverrideRegistry.getTemplate('aws.rollback.modal', require('./rollback/rollbackServerGroup.html')),
276+
controller: 'awsRollbackServerGroupCtrl as ctrl',
277+
resolve: {
278+
serverGroup: function() { return $scope.serverGroup; },
279+
disabledServerGroups: function() {
280+
var cluster = _.find(app.clusters, {name: $scope.serverGroup.cluster, account: $scope.serverGroup.account});
281+
return _.filter(cluster.serverGroups, {isDisabled: true, region: $scope.serverGroup.region});
282+
},
283+
application: function() { return app; }
284+
}
285+
});
286+
};
287+
272288
this.toggleScalingProcesses = function toggleScalingProcesses() {
273289
$uibModal.open({
274290
templateUrl: require('./scalingProcesses/modifyScalingProcesses.html'),

app/scripts/modules/amazon/serverGroup/details/serverGroupDetails.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ <h3 select-on-dbl-click>
3434
Server Group Actions <span class="caret"></span>
3535
</button>
3636
<ul class="dropdown-menu" role="menu">
37+
<li><a href ng-if="!serverGroup.isDisabled" ng-click="ctrl.rollbackServerGroup()">Rollback</a></li>
38+
<li role="presentation" class="divider" ng-if="!serverGroup.isDisabled"></li>
3739
<li><a href ng-click="ctrl.resizeServerGroup()">Resize</a></li>
3840
<li><a href ng-if="!serverGroup.isDisabled" ng-click="ctrl.disableServerGroup()">Disable</a></li>
3941
<li><a href ng-if="serverGroup.isDisabled" ng-click="ctrl.enableServerGroup()">Enable</a></li>

app/scripts/modules/core/serverGroup/serverGroup.write.service.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,20 @@ module.exports = angular
6060
});
6161
}
6262

63+
function rollbackServerGroup(serverGroup, application, params={}) {
64+
params.type = 'rollbackServerGroup';
65+
params.regions = [serverGroup.region];
66+
params.zones = serverGroup.zones;
67+
params.credentials = serverGroup.account;
68+
params.cloudProvider = serverGroup.type;
69+
70+
return taskExecutor.executeTask({
71+
job: [params],
72+
application: application,
73+
description: 'Rollback Server Group: ' + serverGroup.name
74+
});
75+
}
76+
6377
function resizeServerGroup(serverGroup, application, params={}) {
6478
params.asgName = serverGroup.name;
6579
params.serverGroupName = serverGroup.name;
@@ -110,6 +124,7 @@ module.exports = angular
110124
destroyServerGroup: destroyServerGroup,
111125
disableServerGroup: disableServerGroup,
112126
enableServerGroup: enableServerGroup,
127+
rollbackServerGroup: rollbackServerGroup,
113128
resizeServerGroup: resizeServerGroup,
114129
cloneServerGroup: cloneServerGroup
115130
};

app/scripts/modules/netflix/serverGroup/awsServerGroupDetails.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ <h3 select-on-dbl-click>
3434
Server Group Actions <span class="caret"></span>
3535
</button>
3636
<ul class="dropdown-menu" role="menu">
37+
<li><a href ng-if="!serverGroup.isDisabled" ng-click="ctrl.rollbackServerGroup()">Rollback</a></li>
38+
<li role="presentation" class="divider" ng-if="!serverGroup.isDisabled"></li>
3739
<li><a href ng-click="ctrl.resizeServerGroup()">Resize</a></li>
3840
<li><a href ng-if="!serverGroup.isDisabled" ng-click="ctrl.disableServerGroup()">Disable</a></li>
3941
<li><a href ng-if="serverGroup.isDisabled" ng-click="ctrl.enableServerGroup()">Enable</a></li>
Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
<div modal-page>
1+
<div modal-page class="confirmation-modal">
22
<task-monitor monitor="taskMonitor"></task-monitor>
33
<form role="form">
44
<modal-close></modal-close>
55
<div class="modal-header">
66
<h3>Resize {{serverGroup.name}}</h3>
77
</div>
8-
<div class="modal-body container-fluid form-horizontal">
8+
<div class="modal-body confirmation-modal">
99
<div class="row">
1010
<div class="col-md-12">
1111
<reservation-report account="serverGroup.account"
@@ -15,7 +15,9 @@ <h3>Resize {{serverGroup.name}}</h3>
1515
</div>
1616
</div>
1717

18-
<aws-resize-capacity command="command" current-size="currentSize"></aws-resize-capacity>
18+
<div class="form-horizontal">
19+
<aws-resize-capacity command="command" current-size="currentSize"></aws-resize-capacity>
20+
</div>
1921
<div class="row" ng-if="command.platformHealthOnlyShowOverride">
2022
<div class="col-sm-10 col-sm-offset-1">
2123
<platform-health-override command="command"
@@ -24,9 +26,9 @@ <h3>Resize {{serverGroup.name}}</h3>
2426
</platform-health-override>
2527
</div>
2628
</div>
27-
<aws-resize-verification account="serverGroup.account" verification="verification"></aws-resize-verification>
29+
<aws-verification account="serverGroup.account" verification="verification"></aws-verification>
2830

2931
</div>
30-
<aws-resize-footer resize="ctrl.resize()" cancel="ctrl.cancel()" is-valid="ctrl.isValid()"></aws-resize-footer>
32+
<aws-footer action="ctrl.resize()" cancel="ctrl.cancel()" is-valid="ctrl.isValid()"></aws-footer>
3133
</form>
3234
</div>

0 commit comments

Comments
 (0)