@spinnaker/ecs 0.0.0-main-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/CHANGELOG.md +1186 -0
  2. package/LICENSE.txt +203 -0
  3. package/dist/common/common.module.d.ts +1 -0
  4. package/dist/common/footer.component.d.ts +1 -0
  5. package/dist/domain/IEcsLoadBalancer.d.ts +119 -0
  6. package/dist/ecs.help.d.ts +1 -0
  7. package/dist/ecs.module.d.ts +4 -0
  8. package/dist/ecs.settings.d.ts +9 -0
  9. package/dist/ecsCluster/IEcsCapacityProviderDetails.d.ts +10 -0
  10. package/dist/ecsCluster/IEcsCluster.d.ts +5 -0
  11. package/dist/ecsCluster/ecsCluster.read.service.d.ts +7 -0
  12. package/dist/iamRoles/IRole.d.ts +6 -0
  13. package/dist/iamRoles/iamRole.read.service.d.ts +5 -0
  14. package/dist/index.d.ts +1 -0
  15. package/dist/index.js +6010 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/instance/details/instance.details.controller.d.ts +2 -0
  18. package/dist/loadBalancer/EcsLoadBalancerClusterContainer.d.ts +6 -0
  19. package/dist/loadBalancer/TargetGroup.d.ts +11 -0
  20. package/dist/loadBalancer/details/loadBalancerDetails.d.ts +27 -0
  21. package/dist/loadBalancer/details/targetGroupDetails.d.ts +30 -0
  22. package/dist/loadBalancer/listener.d.ts +10 -0
  23. package/dist/loadBalancer/loadBalancer.transformer.d.ts +8 -0
  24. package/dist/loadBalancer/targetGroup.states.d.ts +1 -0
  25. package/dist/metricAlarm/MetricAlarm.d.ts +6 -0
  26. package/dist/metricAlarm/metricAlarm.read.service.d.ts +5 -0
  27. package/dist/pipeline/stages/destroyAsg/ecsDestroyAsgStage.d.ts +2 -0
  28. package/dist/pipeline/stages/disableAsg/ecsDisableAsgStage.d.ts +2 -0
  29. package/dist/pipeline/stages/disableCluster/ecsDisableClusterStage.d.ts +2 -0
  30. package/dist/pipeline/stages/enableAsg/ecsEnableAsgStage.d.ts +2 -0
  31. package/dist/pipeline/stages/findImageFromTags/ecsFindImageFromTagStage.d.ts +2 -0
  32. package/dist/pipeline/stages/resizeAsg/ecsResizeAsgStage.d.ts +2 -0
  33. package/dist/pipeline/stages/scaleDownCluster/ecsScaleDownClusterStage.d.ts +2 -0
  34. package/dist/pipeline/stages/shrinkCluster/ecsShrinkClusterStage.d.ts +2 -0
  35. package/dist/placementStrategy/IPlacementStrategy.d.ts +4 -0
  36. package/dist/placementStrategy/placementStrategy.service.d.ts +11 -0
  37. package/dist/secrets/ISecret.d.ts +5 -0
  38. package/dist/secrets/secret.read.service.d.ts +5 -0
  39. package/dist/securityGroup/details/securityGroupDetail.controller.d.ts +2 -0
  40. package/dist/securityGroup/securityGroup.module.d.ts +1 -0
  41. package/dist/securityGroup/securityGroup.reader.d.ts +5 -0
  42. package/dist/securityGroup/securityGroup.transformer.d.ts +2 -0
  43. package/dist/serverGroup/configure/serverGroupCommandBuilder.service.d.ts +2 -0
  44. package/dist/serverGroup/configure/serverGroupConfiguration.service.d.ts +165 -0
  45. package/dist/serverGroup/configure/wizard/CloneServerGroup.ecs.controller.d.ts +2 -0
  46. package/dist/serverGroup/configure/wizard/advancedSettings/advancedSettings.component.d.ts +2 -0
  47. package/dist/serverGroup/configure/wizard/capacityProvider/CapacityProvider.d.ts +7 -0
  48. package/dist/serverGroup/configure/wizard/container/Container.d.ts +32 -0
  49. package/dist/serverGroup/configure/wizard/horizontalScaling/horizontalScaling.component.d.ts +2 -0
  50. package/dist/serverGroup/configure/wizard/location/ServerGroupBasicSettings.controller.d.ts +2 -0
  51. package/dist/serverGroup/configure/wizard/logging/logging.component.d.ts +1 -0
  52. package/dist/serverGroup/configure/wizard/networking/Networking.d.ts +28 -0
  53. package/dist/serverGroup/configure/wizard/serviceDiscovery/ServiceDiscovery.d.ts +34 -0
  54. package/dist/serverGroup/configure/wizard/taskDefinition/TaskDefinition.d.ts +39 -0
  55. package/dist/serverGroup/details/resize/resizeCapacity.component.d.ts +1 -0
  56. package/dist/serverGroup/details/resize/resizeServerGroup.controller.d.ts +2 -0
  57. package/dist/serverGroup/details/rollback/rollbackServerGroup.controller.d.ts +2 -0
  58. package/dist/serverGroup/details/serverGroupDetails.ecs.controller.d.ts +2 -0
  59. package/dist/serverGroup/details/serverGroupDetails.module.d.ts +1 -0
  60. package/dist/serverGroup/events/EventsLink.d.ts +4 -0
  61. package/dist/serverGroup/events/events.component.d.ts +3 -0
  62. package/dist/serverGroup/events/events.controller.d.ts +19 -0
  63. package/dist/serverGroup/events/serverGroupEventsReader.service.d.ts +10 -0
  64. package/dist/serverGroup/serverGroup.module.d.ts +1 -0
  65. package/dist/serverGroup/serverGroup.transformer.d.ts +11 -0
  66. package/dist/serviceDiscovery/IServiceDiscovery.d.ts +12 -0
  67. package/dist/serviceDiscovery/serviceDiscovery.read.service.d.ts +4 -0
  68. package/package.json +47 -0
  69. package/src/common/common.module.ts +6 -0
  70. package/src/common/footer.component.ts +29 -0
  71. package/src/domain/IEcsLoadBalancer.ts +129 -0
  72. package/src/ecs.help.ts +91 -0
  73. package/src/ecs.module.ts +116 -0
  74. package/src/ecs.settings.ts +17 -0
  75. package/src/ecsCluster/IEcsCapacityProviderDetails.ts +11 -0
  76. package/src/ecsCluster/IEcsCluster.ts +5 -0
  77. package/src/ecsCluster/ecsCluster.read.service.ts +23 -0
  78. package/src/iamRoles/IRole.ts +6 -0
  79. package/src/iamRoles/iamRole.read.service.ts +14 -0
  80. package/src/index.ts +1 -0
  81. package/src/instance/details/instance.details.controller.js +356 -0
  82. package/src/instance/details/instanceDetails.html +204 -0
  83. package/src/loadBalancer/EcsLoadBalancerClusterContainer.tsx +48 -0
  84. package/src/loadBalancer/TargetGroup.tsx +74 -0
  85. package/src/loadBalancer/details/loadBalancerDetails.tsx +235 -0
  86. package/src/loadBalancer/details/targetGroupDetails.tsx +251 -0
  87. package/src/loadBalancer/listener.tsx +65 -0
  88. package/src/loadBalancer/loadBalancer.transformer.ts +21 -0
  89. package/src/loadBalancer/targetGroup.states.ts +59 -0
  90. package/src/logo/ecs.icon.svg +27 -0
  91. package/src/logo/ecs.logo.less +5 -0
  92. package/src/logo/ecs.logo.svg +27 -0
  93. package/src/metricAlarm/MetricAlarm.ts +6 -0
  94. package/src/metricAlarm/metricAlarm.read.service.ts +14 -0
  95. package/src/pipeline/stages/cloneServerGroup/cloneServerGroupStage.html +101 -0
  96. package/src/pipeline/stages/cloneServerGroup/cloneServerGroupStepLabel.html +1 -0
  97. package/src/pipeline/stages/cloneServerGroup/ecsCloneServerGroupStage.js +94 -0
  98. package/src/pipeline/stages/destroyAsg/destroyAsgStage.html +9 -0
  99. package/src/pipeline/stages/destroyAsg/destroyAsgStepLabel.html +1 -0
  100. package/src/pipeline/stages/destroyAsg/ecsDestroyAsgStage.js +65 -0
  101. package/src/pipeline/stages/disableAsg/disableAsgStage.html +11 -0
  102. package/src/pipeline/stages/disableAsg/disableAsgStepLabel.html +1 -0
  103. package/src/pipeline/stages/disableAsg/ecsDisableAsgStage.js +70 -0
  104. package/src/pipeline/stages/disableCluster/disableClusterStage.html +26 -0
  105. package/src/pipeline/stages/disableCluster/ecsDisableClusterStage.js +84 -0
  106. package/src/pipeline/stages/enableAsg/ecsEnableAsgStage.js +73 -0
  107. package/src/pipeline/stages/enableAsg/enableAsgStage.html +11 -0
  108. package/src/pipeline/stages/enableAsg/enableAsgStepLabel.html +1 -0
  109. package/src/pipeline/stages/findImageFromTags/ecsFindImageFromTagStage.js +26 -0
  110. package/src/pipeline/stages/findImageFromTags/findImageFromTagsExecutionDetails.html +36 -0
  111. package/src/pipeline/stages/findImageFromTags/findImageFromTagsStage.html +9 -0
  112. package/src/pipeline/stages/resizeAsg/ecsResizeAsgStage.js +128 -0
  113. package/src/pipeline/stages/resizeAsg/resizeAsgStage.html +87 -0
  114. package/src/pipeline/stages/resizeAsg/resizeAsgStepLabel.html +1 -0
  115. package/src/pipeline/stages/scaleDownCluster/ecsScaleDownClusterStage.js +78 -0
  116. package/src/pipeline/stages/scaleDownCluster/scaleDownClusterStage.html +35 -0
  117. package/src/pipeline/stages/shrinkCluster/ecsShrinkClusterStage.js +73 -0
  118. package/src/pipeline/stages/shrinkCluster/shrinkClusterStage.html +34 -0
  119. package/src/placementStrategy/IPlacementStrategy.ts +4 -0
  120. package/src/placementStrategy/placementStrategy.service.ts +63 -0
  121. package/src/secrets/ISecret.ts +5 -0
  122. package/src/secrets/secret.read.service.ts +14 -0
  123. package/src/securityGroup/details/securityGroupDetail.controller.js +147 -0
  124. package/src/securityGroup/details/securityGroupDetail.html +104 -0
  125. package/src/securityGroup/securityGroup.module.ts +12 -0
  126. package/src/securityGroup/securityGroup.reader.ts +16 -0
  127. package/src/securityGroup/securityGroup.transformer.js +13 -0
  128. package/src/serverGroup/configure/serverGroupCommandBuilder.service.js +281 -0
  129. package/src/serverGroup/configure/serverGroupConfiguration.service.ts +747 -0
  130. package/src/serverGroup/configure/wizard/CloneServerGroup.ecs.controller.js +259 -0
  131. package/src/serverGroup/configure/wizard/advancedSettings/advancedSettings.component.html +194 -0
  132. package/src/serverGroup/configure/wizard/advancedSettings/advancedSettings.component.js +17 -0
  133. package/src/serverGroup/configure/wizard/advancedSettings/advancedSettings.html +10 -0
  134. package/src/serverGroup/configure/wizard/capacityProvider/CapacityProvider.tsx +381 -0
  135. package/src/serverGroup/configure/wizard/capacityProvider/capacityProvider.html +11 -0
  136. package/src/serverGroup/configure/wizard/container/Container.tsx +347 -0
  137. package/src/serverGroup/configure/wizard/container/container.html +9 -0
  138. package/src/serverGroup/configure/wizard/horizontalScaling/horizontalScaling.component.html +118 -0
  139. package/src/serverGroup/configure/wizard/horizontalScaling/horizontalScaling.component.js +20 -0
  140. package/src/serverGroup/configure/wizard/horizontalScaling/horizontalScaling.html +13 -0
  141. package/src/serverGroup/configure/wizard/location/ServerGroupBasicSettings.controller.js +41 -0
  142. package/src/serverGroup/configure/wizard/location/basicSettings.html +137 -0
  143. package/src/serverGroup/configure/wizard/logging/logging.component.html +29 -0
  144. package/src/serverGroup/configure/wizard/logging/logging.component.ts +12 -0
  145. package/src/serverGroup/configure/wizard/logging/logging.html +7 -0
  146. package/src/serverGroup/configure/wizard/networking/Networking.tsx +261 -0
  147. package/src/serverGroup/configure/wizard/networking/networking.html +9 -0
  148. package/src/serverGroup/configure/wizard/serverGroupWizard.html +55 -0
  149. package/src/serverGroup/configure/wizard/serviceDiscovery/ServiceDiscovery.tsx +250 -0
  150. package/src/serverGroup/configure/wizard/serviceDiscovery/serviceDiscovery.html +11 -0
  151. package/src/serverGroup/configure/wizard/taskDefinition/TaskDefinition.tsx +460 -0
  152. package/src/serverGroup/configure/wizard/taskDefinition/taskDefinition.html +51 -0
  153. package/src/serverGroup/configure/wizard/templateSelection/templateSelection.html +9 -0
  154. package/src/serverGroup/configure/wizard/verticalScaling/verticalScaling.html +10 -0
  155. package/src/serverGroup/details/resize/resizeCapacity.component.html +94 -0
  156. package/src/serverGroup/details/resize/resizeCapacity.component.ts +14 -0
  157. package/src/serverGroup/details/resize/resizeServerGroup.controller.js +85 -0
  158. package/src/serverGroup/details/resize/resizeServerGroup.html +28 -0
  159. package/src/serverGroup/details/rollback/rollbackServerGroup.controller.js +97 -0
  160. package/src/serverGroup/details/rollback/rollbackServerGroup.html +67 -0
  161. package/src/serverGroup/details/serverGroupDetails.ecs.controller.js +366 -0
  162. package/src/serverGroup/details/serverGroupDetails.html +216 -0
  163. package/src/serverGroup/details/serverGroupDetails.module.ts +5 -0
  164. package/src/serverGroup/events/EventsLink.tsx +5 -0
  165. package/src/serverGroup/events/events.component.ts +35 -0
  166. package/src/serverGroup/events/events.controller.ts +45 -0
  167. package/src/serverGroup/events/events.html +36 -0
  168. package/src/serverGroup/events/serverGroupEventsReader.service.ts +27 -0
  169. package/src/serverGroup/serverGroup.module.ts +6 -0
  170. package/src/serverGroup/serverGroup.transformer.spec.ts +184 -0
  171. package/src/serverGroup/serverGroup.transformer.ts +117 -0
  172. package/src/serviceDiscovery/IServiceDiscovery.ts +13 -0
  173. package/src/serviceDiscovery/serviceDiscovery.read.service.ts +8 -0
@@ -0,0 +1,259 @@
1
+ 'use strict';
2
+
3
+ import UIROUTER_ANGULARJS from '@uirouter/angularjs';
4
+ import { module } from 'angular';
5
+
6
+ import {
7
+ ModalWizard,
8
+ OVERRIDE_REGISTRY,
9
+ SERVER_GROUP_COMMAND_REGISTRY_PROVIDER,
10
+ SERVER_GROUP_WRITER,
11
+ STAGE_ARTIFACT_SELECTOR_COMPONENT_REACT,
12
+ TaskMonitor,
13
+ } from '@spinnaker/core';
14
+
15
+ import { ECS_CLUSTER_READ_SERVICE } from '../../../ecsCluster/ecsCluster.read.service';
16
+ import { IAM_ROLE_READ_SERVICE } from '../../../iamRoles/iamRole.read.service';
17
+ import { ECS_SECRET_READ_SERVICE } from '../../../secrets/secret.read.service';
18
+ import { ECS_SERVER_GROUP_CONFIGURATION_SERVICE } from '../serverGroupConfiguration.service';
19
+
20
+ export const ECS_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_ECS_CONTROLLER =
21
+ 'spinnaker.ecs.cloneServerGroup.controller';
22
+ export const name = ECS_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_ECS_CONTROLLER; // for backwards compatibility
23
+ module(ECS_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_ECS_CONTROLLER, [
24
+ UIROUTER_ANGULARJS,
25
+ ECS_SERVER_GROUP_CONFIGURATION_SERVICE,
26
+ SERVER_GROUP_WRITER,
27
+ OVERRIDE_REGISTRY,
28
+ SERVER_GROUP_COMMAND_REGISTRY_PROVIDER,
29
+ IAM_ROLE_READ_SERVICE,
30
+ ECS_CLUSTER_READ_SERVICE,
31
+ ECS_SECRET_READ_SERVICE,
32
+ STAGE_ARTIFACT_SELECTOR_COMPONENT_REACT,
33
+ ]).controller('ecsCloneServerGroupCtrl', [
34
+ '$scope',
35
+ '$uibModalInstance',
36
+ '$q',
37
+ '$state',
38
+ 'serverGroupWriter',
39
+ 'overrideRegistry',
40
+ 'ecsServerGroupConfigurationService',
41
+ 'serverGroupCommandRegistry',
42
+ 'serverGroupCommand',
43
+ 'iamRoleReader',
44
+ 'ecsClusterReader',
45
+ 'secretReader',
46
+ 'application',
47
+ 'title',
48
+ function (
49
+ $scope,
50
+ $uibModalInstance,
51
+ $q,
52
+ $state,
53
+ serverGroupWriter,
54
+ overrideRegistry,
55
+ ecsServerGroupConfigurationService,
56
+ serverGroupCommandRegistry,
57
+ serverGroupCommand,
58
+ iamRoleReader,
59
+ ecsClusterReader,
60
+ secretReader,
61
+ application,
62
+ title,
63
+ ) {
64
+ $scope.pages = {
65
+ templateSelection: overrideRegistry.getTemplate(
66
+ 'ecs.serverGroup.templateSelection',
67
+ require('./templateSelection/templateSelection.html'),
68
+ ),
69
+ basicSettings: overrideRegistry.getTemplate(
70
+ 'ecs.serverGroup.basicSettings',
71
+ require('./location/basicSettings.html'),
72
+ ),
73
+ container: overrideRegistry.getTemplate('ecs.serverGroup.container', require('./container/container.html')),
74
+ horizontalScaling: overrideRegistry.getTemplate(
75
+ 'ecs.serverGroup.horizontalScaling',
76
+ require('./horizontalScaling/horizontalScaling.html'),
77
+ ),
78
+ networking: overrideRegistry.getTemplate('ecs.serverGroup.networking', require('./networking/networking.html')),
79
+ logging: overrideRegistry.getTemplate('ecs.serverGroup.logging', require('./logging/logging.html')),
80
+ serviceDiscovery: overrideRegistry.getTemplate(
81
+ 'ecs.serverGroup.serviceDiscovery',
82
+ require('./serviceDiscovery/serviceDiscovery.html'),
83
+ ),
84
+ advancedSettings: overrideRegistry.getTemplate(
85
+ 'ecs.serverGroup.advancedSettings',
86
+ require('./advancedSettings/advancedSettings.html'),
87
+ ),
88
+ taskDefinition: overrideRegistry.getTemplate(
89
+ 'ecs.taskDefinition',
90
+ require('./taskDefinition/taskDefinition.html'),
91
+ ),
92
+ };
93
+
94
+ $scope.title = title;
95
+
96
+ $scope.applicationName = application.name;
97
+ $scope.application = application;
98
+
99
+ $scope.command = serverGroupCommand;
100
+
101
+ $scope.state = {
102
+ loaded: false,
103
+ requiresTemplateSelection: !!serverGroupCommand.viewState.requiresTemplateSelection,
104
+ };
105
+
106
+ this.templateSelectionText = {
107
+ copied: ['account, region, ecs cluster, stack', 'capacity'],
108
+ notCopied: ['launch type, target group, network mode'],
109
+ };
110
+ if (!$scope.command.viewState.disableStrategySelection) {
111
+ this.templateSelectionText.notCopied.push(
112
+ 'the deployment strategy (if any) used to deploy the most recent server group',
113
+ );
114
+ }
115
+
116
+ function onApplicationRefresh() {
117
+ // If the user has already closed the modal, do not navigate to the new details view
118
+ if ($scope.$$destroyed) {
119
+ return;
120
+ }
121
+ const cloneStage = $scope.taskMonitor.task.execution.stages.find((stage) => stage.type === 'cloneServerGroup');
122
+ if (cloneStage && cloneStage.context['deploy.server.groups']) {
123
+ const newServerGroupName = cloneStage.context['deploy.server.groups'][$scope.command.region];
124
+ if (newServerGroupName) {
125
+ const newStateParams = {
126
+ serverGroup: newServerGroupName,
127
+ accountId: $scope.command.credentials,
128
+ region: $scope.command.region,
129
+ provider: 'ecs',
130
+ };
131
+ let transitionTo = '^.^.^.clusters.serverGroup';
132
+ if ($state.includes('**.clusters.serverGroup')) {
133
+ // clone via details, all view
134
+ transitionTo = '^.serverGroup';
135
+ }
136
+ if ($state.includes('**.clusters.cluster.serverGroup')) {
137
+ // clone or create with details open
138
+ transitionTo = '^.^.serverGroup';
139
+ }
140
+ if ($state.includes('**.clusters')) {
141
+ // create new, no details open
142
+ transitionTo = '.serverGroup';
143
+ }
144
+ $state.go(transitionTo, newStateParams);
145
+ }
146
+ }
147
+ }
148
+
149
+ function onTaskComplete() {
150
+ application.serverGroups.refresh();
151
+ application.serverGroups.onNextRefresh($scope, onApplicationRefresh);
152
+ }
153
+
154
+ $scope.taskMonitor = new TaskMonitor({
155
+ application: application,
156
+ title: 'Creating your server group',
157
+ modalInstance: $uibModalInstance,
158
+ onTaskComplete: onTaskComplete,
159
+ });
160
+
161
+ function configureCommand() {
162
+ ecsServerGroupConfigurationService.configureCommand($scope.command).then(function () {
163
+ $scope.state.loaded = true;
164
+ initializeCommand();
165
+ initializeSelectOptions();
166
+ initializeWatches();
167
+ });
168
+ }
169
+
170
+ function initializeWatches() {
171
+ $scope.$watch('command.subnetType', createResultProcessor($scope.command.subnetTypeChanged));
172
+ $scope.$watch('command.credentials', createResultProcessor($scope.command.credentialsChanged));
173
+ $scope.$watch('command.region', createResultProcessor($scope.command.regionChanged));
174
+ $scope.$watch(
175
+ 'command.placementStrategyName',
176
+ createResultProcessor($scope.command.placementStrategyNameChanged),
177
+ );
178
+ $scope.$watch('command.stack', () => $scope.command.clusterChanged($scope.command));
179
+ $scope.$watch('command.freeFormDetails', () => $scope.command.clusterChanged($scope.command));
180
+ }
181
+
182
+ function initializeSelectOptions() {
183
+ processCommandUpdateResult($scope.command.credentialsChanged(serverGroupCommand));
184
+ processCommandUpdateResult($scope.command.regionChanged(serverGroupCommand));
185
+ }
186
+
187
+ function createResultProcessor(method) {
188
+ return function () {
189
+ processCommandUpdateResult(method(serverGroupCommand));
190
+ };
191
+ }
192
+
193
+ function processCommandUpdateResult() {
194
+ // TODO(Bruno Carrier) - Implement marking sections either dirty or complete
195
+ }
196
+
197
+ function initializeCommand() {}
198
+
199
+ this.isValid = function () {
200
+ return true; // TODO(Bruno Carrier) - Implement validation of the form
201
+ };
202
+
203
+ this.showSubmitButton = function () {
204
+ return ModalWizard.allPagesVisited();
205
+ };
206
+
207
+ this.submit = function () {
208
+ if ($scope.command.viewState.mode === 'editPipeline' || $scope.command.viewState.mode === 'createPipeline') {
209
+ return $uibModalInstance.close($scope.command);
210
+ }
211
+ $scope.taskMonitor.submit(function () {
212
+ return serverGroupWriter.cloneServerGroup($scope.command, application);
213
+ });
214
+ };
215
+
216
+ this.cancel = function () {
217
+ $uibModalInstance.dismiss();
218
+ };
219
+
220
+ if (!$scope.state.requiresTemplateSelection) {
221
+ configureCommand();
222
+ } else {
223
+ $scope.state.loaded = true;
224
+ }
225
+
226
+ this.templateSelected = () => {
227
+ $scope.state.requiresTemplateSelection = false;
228
+ configureCommand();
229
+ };
230
+
231
+ // used by react components to update command fields in parent (angular) scope
232
+ $scope.notifyAngular = function (commandKey, value) {
233
+ if (commandKey == 'pipeline') {
234
+ $scope.command.viewState.pipeline = value;
235
+ } else {
236
+ $scope.command[commandKey] = value;
237
+ }
238
+ };
239
+
240
+ // used by react components to configure command for image queries
241
+ $scope.configureCommand = function (query) {
242
+ return ecsServerGroupConfigurationService.configureCommand($scope.command, query);
243
+ };
244
+
245
+ // TODO: Migrate horizontalScaling component to react and move this logic there
246
+ $scope.capacityProviderState = {
247
+ useCapacityProviders:
248
+ $scope.command.capacityProviderStrategy && $scope.command.capacityProviderStrategy.length > 0,
249
+ updateComputeOption: function (chosenOption) {
250
+ if (chosenOption == 'launchType') {
251
+ $scope.command.capacityProviderStrategy = [];
252
+ } else if (chosenOption == 'capacityProviders') {
253
+ $scope.command.launchType = '';
254
+ $scope.command.capacityProviderStrategy = $scope.command.capacityProviderStrategy || [];
255
+ }
256
+ },
257
+ };
258
+ },
259
+ ]);
@@ -0,0 +1,194 @@
1
+ <div class="container-fluid form-horizontal">
2
+ <div class="form-group">
3
+ <div class="col-md-5 sm-label-right">
4
+ Health Check Grace Period
5
+ <help-field key="ecs.healthgraceperiod"></help-field>
6
+ </div>
7
+ <div class="col-md-2">
8
+ <input
9
+ type="number"
10
+ class="form-control input-sm no-spel"
11
+ ng-model="$ctrl.command.healthCheckGracePeriodSeconds"
12
+ />
13
+ </div>
14
+ </div>
15
+
16
+ <div class="form-group">
17
+ <div class="col-md-5 sm-label-right">
18
+ <b>ECS IAM Instance Profile</b> <help-field key="ecs.iamrole"></help-field>
19
+ </div>
20
+ <!-- TODO - Add a help box that explains that the container does not share profiles with the host -->
21
+
22
+ <div class="col-md-7" ng-if="!$ctrl.command.backingData.filtered.iamRoles.length">
23
+ No account was selected, or no IAM roles are available for ECS tasks in this account.
24
+ </div>
25
+
26
+ <div class="col-md-7" ng-if="$ctrl.command.backingData.filtered.iamRoles.length">
27
+ <ui-select
28
+ ng-model="$ctrl.command.iamRole"
29
+ class="form-control input-sm"
30
+ required
31
+ on-select="$ctrl.fieldChanged()"
32
+ >
33
+ <ui-select-match>{{ $select.selected }}</ui-select-match>
34
+ <ui-select-choices repeat="iamRole in $ctrl.command.backingData.filtered.iamRoles | filter: $select.search">
35
+ <span ng-bind-html="iamRole"></span>
36
+ </ui-select-choices>
37
+ </ui-select>
38
+ </div>
39
+ </div>
40
+
41
+ <div ng-if="!$ctrl.command.useTaskDefinitionArtifact">
42
+ <div class="form-group">
43
+ <div class="col-md-5 sm-label-right">
44
+ <b>Docker Image Credentials</b> <help-field key="ecs.dockerimagecredentials"></help-field>
45
+ </div>
46
+ <div class="col-md-7" ng-if="!$ctrl.command.backingData.filtered.secrets.length">
47
+ No account or region was selected, or no AWS Secrets Manager secrets are available in this account and region.
48
+ </div>
49
+
50
+ <div class="col-md-7" ng-if="$ctrl.command.backingData.filtered.secrets.length">
51
+ <ui-select
52
+ ng-model="$ctrl.command.dockerImageCredentialsSecret"
53
+ class="form-control input-sm"
54
+ required
55
+ on-select="$ctrl.fieldChanged()"
56
+ >
57
+ <ui-select-match>{{ $select.selected }}</ui-select-match>
58
+ <ui-select-choices repeat="secret in $ctrl.command.backingData.filtered.secrets | filter: $select.search">
59
+ <span ng-bind-html="secret"></span>
60
+ </ui-select-choices>
61
+ </ui-select>
62
+ </div>
63
+ </div>
64
+ </div>
65
+
66
+ <div class="form-group">
67
+ <div class="col-md-5 sm-label-right">
68
+ Fargate platform version
69
+ <help-field key="ecs.platformVersion"></help-field>
70
+ </div>
71
+ <div class="col-md-3">
72
+ <input
73
+ type="text"
74
+ class="form-control input-sm"
75
+ name="platformVersion"
76
+ ng-model="$ctrl.command.platformVersion"
77
+ />
78
+ </div>
79
+ </div>
80
+
81
+ <div class="form-group">
82
+ <div class="col-md-5 sm-label-right">
83
+ Enable Deployment Circuit Breaker
84
+ <help-field key="ecs.enableDeploymentCircuitBreaker"></help-field>
85
+ </div>
86
+ <div class="col-md-3">
87
+ <input type="checkbox" ng-model="$ctrl.command.enableDeploymentCircuitBreaker" />
88
+ </div>
89
+ </div>
90
+
91
+ <div class="form-group">
92
+ <div class="col-md-5 sm-label-right">
93
+ <b>Placement Strategy</b> <help-field key="ecs.placementStrategy"></help-field>
94
+ </div>
95
+ <div class="col-md-7">
96
+ <ui-select ng-model="$ctrl.command.placementStrategyName" class="form-control input-sm">
97
+ <ui-select-match>{{ $select.selected }}</ui-select-match>
98
+ <ui-select-choices
99
+ repeat="item in ['AZ Balanced Spread', 'AZ Balanced BinPack CPU', 'AZ Balanced BinPack Memory', 'BinPack CPU', 'BinPack Memory', 'One Task Per Host', 'None'] | filter: $select.search"
100
+ >
101
+ <span ng-bind-html="item"></span>
102
+ </ui-select-choices>
103
+ </ui-select>
104
+ <!-- TODO - implement handling of custom placement strategies and constraints -->
105
+ </div>
106
+ </div>
107
+
108
+ <div class="form-group">
109
+ <div class="sm-label-left">
110
+ <b>Placement Constraints</b>
111
+ <help-field key="ecs.placementConstraints"></help-field>
112
+ </div>
113
+ <form name="ecsPlacementConstraints">
114
+ <table class="table table-condensed packed tags">
115
+ <thead>
116
+ <tr>
117
+ <th style="width: 25%">Type <help-field key="ecs.placementConstraintType"></help-field></th>
118
+ <th style="width: 68%">Expression <help-field key="ecs.placementConstraintExpression"></help-field></th>
119
+ <th></th>
120
+ </tr>
121
+ </thead>
122
+ <tbody>
123
+ <tr ng-repeat="constraint in $ctrl.command.placementConstraints">
124
+ <td>
125
+ <select
126
+ class="form-control input-sm"
127
+ ng-model="constraint.type"
128
+ ng-options="type for type in ['distinctInstance', 'memberOf']"
129
+ ></select>
130
+ </td>
131
+ <td>
132
+ <input type="text" class="form-control input-sm no-spel" ng-model="constraint.expression" />
133
+ </td>
134
+ <td>
135
+ <div class="form-control-static">
136
+ <a class="btn-link sm-label" ng-click="$ctrl.command.placementConstraints.splice($index, 1)">
137
+ <span class="glyphicon glyphicon-trash"></span>
138
+ <span class="sr-only">Remove</span>
139
+ </a>
140
+ </div>
141
+ </td>
142
+ </tr>
143
+ </tbody>
144
+ <tfoot>
145
+ <tr>
146
+ <td colspan="3">
147
+ <button class="btn btn-block btn-sm add-new" ng-click="$ctrl.command.placementConstraints.push({})">
148
+ <span class="glyphicon glyphicon-plus-sign"></span>
149
+ Add New Placement Constraint
150
+ </button>
151
+ </td>
152
+ </tr>
153
+ </tfoot>
154
+ </table>
155
+ </form>
156
+ </div>
157
+
158
+ <div ng-if="!$ctrl.command.useTaskDefinitionArtifact">
159
+ <div class="form-group">
160
+ <div class="sm-label-left">
161
+ <b>Docker labels (optional)</b>
162
+ <help-field key="ecs.dockerLabels"></help-field>
163
+ </div>
164
+ <map-editor model="$ctrl.command.dockerLabels" allow-empty="true"></map-editor>
165
+ </div>
166
+
167
+ <div class="form-group">
168
+ <div class="sm-label-left">
169
+ <b>Environment Variables (optional)</b>
170
+ <help-field key="ecs.environmentVariables"></help-field>
171
+ </div>
172
+ <map-editor model="$ctrl.command.environmentVariables" allow-empty="true"></map-editor>
173
+ </div>
174
+ </div>
175
+
176
+ <div class="form-group">
177
+ <div class="sm-label-left">
178
+ <b>Tags (optional)</b>
179
+ <help-field key="ecs.tags"></help-field>
180
+ </div>
181
+ <map-editor model="$ctrl.command.tags" allow-empty="true"></map-editor>
182
+ </div>
183
+
184
+ <div ng-if="$ctrl.command.useTaskDefinitionArtifact" style="color: #666">
185
+ <hr />
186
+ <p>
187
+ <em
188
+ ><strong>Docker Image Credentials, Docker labels</strong>, and <strong>Environment Variables</strong> cannot be
189
+ individually set when using a Task Definition artifact. Please include them in their respective container
190
+ definition in that file.
191
+ </em>
192
+ </p>
193
+ </div>
194
+ </div>
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ import { module } from 'angular';
4
+
5
+ export const ECS_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGS_COMPONENT =
6
+ 'spinnaker.ecs.serverGroup.configure.wizard.advancedSettings.component';
7
+ export const name = ECS_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGS_COMPONENT; // for backwards compatibility
8
+ module(ECS_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGS_COMPONENT, []).component(
9
+ 'ecsServerGroupAdvancedSettings',
10
+ {
11
+ bindings: {
12
+ command: '=',
13
+ application: '=',
14
+ },
15
+ templateUrl: require('./advancedSettings.component.html'),
16
+ },
17
+ );
@@ -0,0 +1,10 @@
1
+ <div class="clearfix">
2
+ <div class="row">
3
+ <div class="col-md-12">
4
+ <ecs-server-group-advanced-settings
5
+ command="command"
6
+ application="application"
7
+ ></ecs-server-group-advanced-settings>
8
+ </div>
9
+ </div>
10
+ </div>