@spinnaker/ecs 2026.2.4 → 2026.3.1
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.
- package/dist/ecs.module.d.ts +3 -1
- package/dist/ecsCluster/ecsCluster.read.service.d.ts +2 -3
- package/dist/iamRoles/iamRole.read.service.d.ts +1 -2
- package/dist/index.d.ts +5 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/instance/details/EcsInstanceDetails.d.ts +50 -0
- package/dist/loadBalancer/loadBalancer.transformer.d.ts +1 -5
- package/dist/loadBalancer/targetGroup.states.d.ts +2 -1
- package/dist/metricAlarm/metricAlarm.read.service.d.ts +1 -2
- package/dist/pipeline/stages/cloneServerGroup/ecsCloneServerGroupStage.d.ts +1 -0
- package/dist/pipeline/stages/common/EcsServerGroupStepLabel.d.ts +7 -0
- package/dist/pipeline/stages/common/EcsStageConfigs.d.ts +11 -0
- package/dist/pipeline/stages/destroyAsg/ecsDestroyAsgStage.d.ts +1 -2
- package/dist/pipeline/stages/disableAsg/ecsDisableAsgStage.d.ts +1 -2
- package/dist/pipeline/stages/disableCluster/ecsDisableClusterStage.d.ts +1 -2
- package/dist/pipeline/stages/enableAsg/ecsEnableAsgStage.d.ts +1 -2
- package/dist/pipeline/stages/findImageFromTags/EcsFindImageFromTagsExecutionDetails.d.ts +5 -0
- package/dist/pipeline/stages/findImageFromTags/ecsFindImageFromTagStage.d.ts +1 -2
- package/dist/pipeline/stages/resizeAsg/ecsResizeAsgStage.d.ts +1 -2
- package/dist/pipeline/stages/scaleDownCluster/ecsScaleDownClusterStage.d.ts +1 -2
- package/dist/pipeline/stages/shrinkCluster/ecsShrinkClusterStage.d.ts +1 -2
- package/dist/placementStrategy/placementStrategy.service.d.ts +0 -1
- package/dist/secrets/secret.read.service.d.ts +1 -2
- package/dist/securityGroup/details/EcsSecurityGroupDetails.d.ts +45 -0
- package/dist/securityGroup/securityGroup.reader.d.ts +0 -1
- package/dist/securityGroup/securityGroup.transformer.d.ts +3 -2
- package/dist/serverGroup/configure/dockerImage.util.d.ts +3 -0
- package/dist/serverGroup/configure/serverGroupCommandBuilder.service.d.ts +111 -2
- package/dist/serverGroup/configure/serverGroupConfiguration.service.d.ts +13 -63
- package/dist/serverGroup/configure/wizard/EcsCloneServerGroupModal.d.ts +64 -0
- package/dist/serverGroup/configure/wizard/capacityProvider/CapacityProvider.d.ts +29 -4
- package/dist/serverGroup/configure/wizard/container/Container.d.ts +3 -3
- package/dist/serverGroup/configure/wizard/networking/Networking.d.ts +3 -3
- package/dist/serverGroup/configure/wizard/pages/AdvancedSettings.d.ts +3 -0
- package/dist/serverGroup/configure/wizard/pages/BasicSettings.d.ts +3 -0
- package/dist/serverGroup/configure/wizard/pages/ContainerSettings.d.ts +3 -0
- package/dist/serverGroup/configure/wizard/pages/HorizontalScalingSettings.d.ts +3 -0
- package/dist/serverGroup/configure/wizard/pages/LoggingSettings.d.ts +3 -0
- package/dist/serverGroup/configure/wizard/pages/NetworkingSettings.d.ts +3 -0
- package/dist/serverGroup/configure/wizard/pages/ServiceDiscoverySettings.d.ts +3 -0
- package/dist/serverGroup/configure/wizard/pages/TaskDefinitionSettings.d.ts +3 -0
- package/dist/serverGroup/configure/wizard/pages/common.d.ts +8 -0
- package/dist/serverGroup/configure/wizard/pages/validation.d.ts +22 -0
- package/dist/serverGroup/configure/wizard/serviceDiscovery/ServiceDiscovery.d.ts +5 -3
- package/dist/serverGroup/configure/wizard/taskDefinition/TaskDefinition.d.ts +3 -3
- package/dist/serverGroup/details/EcsServerGroupActions.d.ts +6 -0
- package/dist/serverGroup/details/ecsServerGroupDetailsGetter.d.ts +3 -0
- package/dist/serverGroup/details/resize/EcsResizeServerGroupModal.d.ts +43 -0
- package/dist/serverGroup/details/resize/index.d.ts +1 -0
- package/dist/serverGroup/details/rollback/EcsRollbackServerGroupModal.d.ts +46 -0
- package/dist/serverGroup/details/rollback/index.d.ts +1 -0
- package/dist/serverGroup/details/sections/EcsServerGroupDetailsSections.d.ts +9 -0
- package/dist/serverGroup/details/sections/EcsServerGroupEventsSection.d.ts +3 -0
- package/dist/serverGroup/details/sections/EcsServerGroupInformationSection.d.ts +3 -0
- package/dist/serverGroup/events/EcsServerGroupEventsModal.d.ts +22 -0
- package/dist/serverGroup/events/EventsLink.d.ts +2 -0
- package/dist/serverGroup/events/serverGroupEventsReader.service.d.ts +1 -1
- package/dist/serverGroup/serverGroup.transformer.d.ts +1 -2
- package/dist/serviceDiscovery/serviceDiscovery.read.service.d.ts +1 -1
- package/package.json +3 -9
- package/src/ecs.module.spec.ts +86 -0
- package/src/ecs.module.ts +68 -84
- package/src/ecsCluster/ecsCluster.read.service.ts +3 -9
- package/src/iamRoles/iamRole.read.service.ts +1 -7
- package/src/index.ts +6 -0
- package/src/instance/details/EcsInstanceDetails.spec.tsx +426 -0
- package/src/instance/details/EcsInstanceDetails.tsx +474 -0
- package/src/loadBalancer/details/loadBalancerDetails.tsx +1 -1
- package/src/loadBalancer/details/targetGroupDetails.tsx +1 -1
- package/src/loadBalancer/loadBalancer.transformer.ts +2 -7
- package/src/loadBalancer/targetGroup.states.ts +55 -53
- package/src/metricAlarm/metricAlarm.read.service.ts +1 -7
- package/src/pipeline/stages/cloneServerGroup/ecsCloneServerGroupStage.js +22 -94
- package/src/pipeline/stages/common/EcsServerGroupStepLabel.tsx +16 -0
- package/src/pipeline/stages/common/EcsStageConfigs.tsx +587 -0
- package/src/pipeline/stages/destroyAsg/ecsDestroyAsgStage.js +29 -65
- package/src/pipeline/stages/disableAsg/ecsDisableAsgStage.js +27 -70
- package/src/pipeline/stages/disableCluster/ecsDisableClusterStage.js +21 -84
- package/src/pipeline/stages/enableAsg/ecsEnableAsgStage.js +22 -73
- package/src/pipeline/stages/findImageFromTags/EcsFindImageFromTagsExecutionDetails.tsx +40 -0
- package/src/pipeline/stages/findImageFromTags/ecsFindImageFromTagStage.js +12 -24
- package/src/pipeline/stages/resizeAsg/ecsResizeAsgStage.js +30 -128
- package/src/pipeline/stages/scaleDownCluster/ecsScaleDownClusterStage.js +24 -78
- package/src/pipeline/stages/shrinkCluster/ecsShrinkClusterStage.js +19 -73
- package/src/placementStrategy/placementStrategy.service.ts +0 -6
- package/src/secrets/secret.read.service.ts +1 -7
- package/src/securityGroup/details/EcsSecurityGroupDetails.spec.tsx +245 -0
- package/src/securityGroup/details/EcsSecurityGroupDetails.tsx +285 -0
- package/src/securityGroup/securityGroup.reader.ts +0 -5
- package/src/securityGroup/securityGroup.transformer.js +5 -13
- package/src/serverGroup/configure/dockerImage.util.ts +29 -0
- package/src/serverGroup/configure/serverGroupCommandBuilder.service.js +215 -278
- package/src/serverGroup/configure/serverGroupCommandBuilder.service.spec.ts +83 -0
- package/src/serverGroup/configure/serverGroupConfiguration.service.ts +16 -633
- package/src/serverGroup/configure/wizard/EcsCloneServerGroupModal.spec.tsx +2078 -0
- package/src/serverGroup/configure/wizard/EcsCloneServerGroupModal.tsx +712 -0
- package/src/serverGroup/configure/wizard/capacityProvider/CapacityProvider.tsx +98 -49
- package/src/serverGroup/configure/wizard/container/Container.spec.tsx +20 -8
- package/src/serverGroup/configure/wizard/container/Container.tsx +53 -24
- package/src/serverGroup/configure/wizard/networking/Networking.tsx +60 -38
- package/src/serverGroup/configure/wizard/pages/AdvancedSettings.tsx +290 -0
- package/src/serverGroup/configure/wizard/pages/BasicSettings.tsx +101 -0
- package/src/serverGroup/configure/wizard/pages/ContainerSettings.tsx +10 -0
- package/src/serverGroup/configure/wizard/pages/HorizontalScalingSettings.tsx +137 -0
- package/src/serverGroup/configure/wizard/pages/LoggingSettings.tsx +60 -0
- package/src/serverGroup/configure/wizard/pages/NetworkingSettings.tsx +10 -0
- package/src/serverGroup/configure/wizard/pages/ServiceDiscoverySettings.tsx +10 -0
- package/src/serverGroup/configure/wizard/pages/TaskDefinitionSettings.tsx +59 -0
- package/src/serverGroup/configure/wizard/pages/common.ts +10 -0
- package/src/serverGroup/configure/wizard/pages/validation.tsx +190 -0
- package/src/serverGroup/configure/wizard/serviceDiscovery/ServiceDiscovery.tsx +83 -34
- package/src/serverGroup/configure/wizard/taskDefinition/TaskDefinition.spec.tsx +21 -8
- package/src/serverGroup/configure/wizard/taskDefinition/TaskDefinition.tsx +63 -33
- package/src/serverGroup/details/EcsServerGroupActions.spec.tsx +244 -0
- package/src/serverGroup/details/EcsServerGroupActions.tsx +152 -0
- package/src/serverGroup/details/ecsServerGroupDetailsGetter.spec.ts +110 -0
- package/src/serverGroup/details/ecsServerGroupDetailsGetter.ts +73 -0
- package/src/serverGroup/details/resize/EcsResizeServerGroupModal.spec.tsx +130 -0
- package/src/serverGroup/details/resize/EcsResizeServerGroupModal.tsx +263 -0
- package/src/serverGroup/details/resize/index.ts +1 -0
- package/src/serverGroup/details/rollback/EcsRollbackServerGroupModal.spec.tsx +173 -0
- package/src/serverGroup/details/rollback/EcsRollbackServerGroupModal.tsx +285 -0
- package/src/serverGroup/details/rollback/index.ts +1 -0
- package/src/serverGroup/details/sections/EcsServerGroupDetailsSections.spec.tsx +130 -0
- package/src/serverGroup/details/sections/EcsServerGroupDetailsSections.tsx +172 -0
- package/src/serverGroup/details/sections/EcsServerGroupEventsSection.tsx +14 -0
- package/src/serverGroup/details/sections/EcsServerGroupInformationSection.tsx +25 -0
- package/src/serverGroup/events/EcsServerGroupEventsModal.spec.tsx +109 -0
- package/src/serverGroup/events/EcsServerGroupEventsModal.tsx +112 -0
- package/src/serverGroup/events/EventsLink.tsx +18 -0
- package/src/serverGroup/events/serverGroupEventsReader.service.spec.ts +41 -0
- package/src/serverGroup/events/serverGroupEventsReader.service.ts +2 -8
- package/src/serverGroup/serverGroup.transformer.spec.ts +10 -24
- package/src/serverGroup/serverGroup.transformer.ts +1 -5
- package/src/serviceDiscovery/serviceDiscovery.read.service.ts +1 -1
- package/dist/common/common.module.d.ts +0 -1
- package/dist/common/footer.component.d.ts +0 -1
- package/dist/instance/details/instance.details.controller.d.ts +0 -2
- package/dist/securityGroup/details/securityGroupDetail.controller.d.ts +0 -2
- package/dist/securityGroup/securityGroup.module.d.ts +0 -1
- package/dist/serverGroup/configure/wizard/CloneServerGroup.ecs.controller.d.ts +0 -2
- package/dist/serverGroup/configure/wizard/advancedSettings/advancedSettings.component.d.ts +0 -2
- package/dist/serverGroup/configure/wizard/horizontalScaling/horizontalScaling.component.d.ts +0 -2
- package/dist/serverGroup/configure/wizard/location/ServerGroupBasicSettings.controller.d.ts +0 -2
- package/dist/serverGroup/configure/wizard/logging/logging.component.d.ts +0 -1
- package/dist/serverGroup/details/resize/resizeCapacity.component.d.ts +0 -1
- package/dist/serverGroup/details/resize/resizeServerGroup.controller.d.ts +0 -2
- package/dist/serverGroup/details/rollback/rollbackServerGroup.controller.d.ts +0 -2
- package/dist/serverGroup/details/serverGroupDetails.ecs.controller.d.ts +0 -2
- package/dist/serverGroup/details/serverGroupDetails.module.d.ts +0 -1
- package/dist/serverGroup/events/events.component.d.ts +0 -3
- package/dist/serverGroup/events/events.controller.d.ts +0 -19
- package/dist/serverGroup/serverGroup.module.d.ts +0 -1
- package/src/common/common.module.ts +0 -6
- package/src/common/footer.component.ts +0 -29
- package/src/instance/details/instance.details.controller.js +0 -356
- package/src/instance/details/instanceDetails.html +0 -204
- package/src/pipeline/stages/cloneServerGroup/cloneServerGroupStage.html +0 -101
- package/src/pipeline/stages/cloneServerGroup/cloneServerGroupStepLabel.html +0 -1
- package/src/pipeline/stages/destroyAsg/destroyAsgStage.html +0 -9
- package/src/pipeline/stages/destroyAsg/destroyAsgStepLabel.html +0 -1
- package/src/pipeline/stages/disableAsg/disableAsgStage.html +0 -11
- package/src/pipeline/stages/disableAsg/disableAsgStepLabel.html +0 -1
- package/src/pipeline/stages/disableCluster/disableClusterStage.html +0 -26
- package/src/pipeline/stages/enableAsg/enableAsgStage.html +0 -11
- package/src/pipeline/stages/enableAsg/enableAsgStepLabel.html +0 -1
- package/src/pipeline/stages/findImageFromTags/findImageFromTagsExecutionDetails.html +0 -36
- package/src/pipeline/stages/findImageFromTags/findImageFromTagsStage.html +0 -9
- package/src/pipeline/stages/resizeAsg/resizeAsgStage.html +0 -87
- package/src/pipeline/stages/resizeAsg/resizeAsgStepLabel.html +0 -1
- package/src/pipeline/stages/scaleDownCluster/scaleDownClusterStage.html +0 -35
- package/src/pipeline/stages/shrinkCluster/shrinkClusterStage.html +0 -34
- package/src/securityGroup/details/securityGroupDetail.controller.js +0 -147
- package/src/securityGroup/details/securityGroupDetail.html +0 -104
- package/src/securityGroup/securityGroup.module.ts +0 -12
- package/src/serverGroup/configure/wizard/CloneServerGroup.ecs.controller.js +0 -259
- package/src/serverGroup/configure/wizard/advancedSettings/advancedSettings.component.html +0 -194
- package/src/serverGroup/configure/wizard/advancedSettings/advancedSettings.component.js +0 -17
- package/src/serverGroup/configure/wizard/advancedSettings/advancedSettings.html +0 -10
- package/src/serverGroup/configure/wizard/capacityProvider/capacityProvider.html +0 -11
- package/src/serverGroup/configure/wizard/container/container.html +0 -9
- package/src/serverGroup/configure/wizard/horizontalScaling/horizontalScaling.component.html +0 -118
- package/src/serverGroup/configure/wizard/horizontalScaling/horizontalScaling.component.js +0 -20
- package/src/serverGroup/configure/wizard/horizontalScaling/horizontalScaling.html +0 -13
- package/src/serverGroup/configure/wizard/location/ServerGroupBasicSettings.controller.js +0 -41
- package/src/serverGroup/configure/wizard/location/basicSettings.html +0 -137
- package/src/serverGroup/configure/wizard/logging/logging.component.html +0 -29
- package/src/serverGroup/configure/wizard/logging/logging.component.ts +0 -12
- package/src/serverGroup/configure/wizard/logging/logging.html +0 -7
- package/src/serverGroup/configure/wizard/networking/networking.html +0 -9
- package/src/serverGroup/configure/wizard/serverGroupWizard.html +0 -55
- package/src/serverGroup/configure/wizard/serviceDiscovery/serviceDiscovery.html +0 -11
- package/src/serverGroup/configure/wizard/taskDefinition/taskDefinition.html +0 -51
- package/src/serverGroup/configure/wizard/templateSelection/templateSelection.html +0 -9
- package/src/serverGroup/configure/wizard/verticalScaling/verticalScaling.html +0 -10
- package/src/serverGroup/details/resize/resizeCapacity.component.html +0 -94
- package/src/serverGroup/details/resize/resizeCapacity.component.ts +0 -14
- package/src/serverGroup/details/resize/resizeServerGroup.controller.js +0 -85
- package/src/serverGroup/details/resize/resizeServerGroup.html +0 -28
- package/src/serverGroup/details/rollback/rollbackServerGroup.controller.js +0 -97
- package/src/serverGroup/details/rollback/rollbackServerGroup.html +0 -67
- package/src/serverGroup/details/serverGroupDetails.ecs.controller.js +0 -366
- package/src/serverGroup/details/serverGroupDetails.html +0 -216
- package/src/serverGroup/details/serverGroupDetails.module.ts +0 -5
- package/src/serverGroup/events/events.component.ts +0 -35
- package/src/serverGroup/events/events.controller.ts +0 -45
- package/src/serverGroup/events/events.html +0 -36
- package/src/serverGroup/serverGroup.module.ts +0 -6
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
<div ng-controller="ecsDisableAsgStageCtrl as disableAsgStageCtrl" class="form-horizontal">
|
|
2
|
-
<div ng-if="!pipeline.strategy">
|
|
3
|
-
<account-region-cluster-selector application="application" component="stage" accounts="accounts">
|
|
4
|
-
</account-region-cluster-selector>
|
|
5
|
-
</div>
|
|
6
|
-
<stage-config-field label="Target">
|
|
7
|
-
<target-select model="stage" options="targets"></target-select>
|
|
8
|
-
</stage-config-field>
|
|
9
|
-
<stage-platform-health-override application="application" stage="stage" platform-health-type="'Ecs'">
|
|
10
|
-
</stage-platform-health-override>
|
|
11
|
-
</div>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<span class="task-label"> Disable Server Group: {{step.context.serverGroupName}} ({{step.context.region}}) </span>
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
<div ng-controller="ecsDisableClusterStageCtrl as disableClusterStageCtrl" class="form-horizontal">
|
|
2
|
-
<div ng-if="!pipeline.strategy">
|
|
3
|
-
<account-region-cluster-selector application="application" component="stage" accounts="accounts">
|
|
4
|
-
</account-region-cluster-selector>
|
|
5
|
-
</div>
|
|
6
|
-
<stage-config-field label="Disable Options">
|
|
7
|
-
<div class="form-inline">
|
|
8
|
-
Keep the
|
|
9
|
-
<input
|
|
10
|
-
type="number"
|
|
11
|
-
min="0"
|
|
12
|
-
required
|
|
13
|
-
ng-model="stage.remainingEnabledServerGroups"
|
|
14
|
-
class="form-control input-sm"
|
|
15
|
-
style="width: 50px"
|
|
16
|
-
/>
|
|
17
|
-
<select class="form-control input-sm" ng-model="stage.preferLargerOverNewer" style="width: 100px">
|
|
18
|
-
<option value="true">largest</option>
|
|
19
|
-
<option value="false">newest</option>
|
|
20
|
-
</select>
|
|
21
|
-
{{disableClusterStageCtrl.pluralize('server group', stage.remainingEnabledServerGroups)}} enabled.
|
|
22
|
-
</div>
|
|
23
|
-
</stage-config-field>
|
|
24
|
-
<stage-platform-health-override application="application" stage="stage" platform-health-type="'Ecs'">
|
|
25
|
-
</stage-platform-health-override>
|
|
26
|
-
</div>
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
<div ng-controller="ecsEnableAsgStageCtrl as enableAsgStageCtrl" class="form-horizontal">
|
|
2
|
-
<div ng-if="!pipeline.strategy">
|
|
3
|
-
<account-region-cluster-selector application="application" component="stage" accounts="accounts">
|
|
4
|
-
</account-region-cluster-selector>
|
|
5
|
-
</div>
|
|
6
|
-
<stage-config-field label="Target">
|
|
7
|
-
<target-select model="stage" options="targets"></target-select>
|
|
8
|
-
</stage-config-field>
|
|
9
|
-
<stage-platform-health-override application="application" stage="stage" platform-health-type="'Ecs'">
|
|
10
|
-
</stage-platform-health-override>
|
|
11
|
-
</div>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<span class="task-label"> Enable Server Group: {{step.context.serverGroupName}} ({{step.context.region}}) </span>
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
<div ng-controller="BaseExecutionDetailsCtrl">
|
|
2
|
-
<execution-details-section-nav sections="configSections"></execution-details-section-nav>
|
|
3
|
-
<div class="step-section-details" ng-if="detailsSection === 'findImageConfig'">
|
|
4
|
-
<div class="row">
|
|
5
|
-
<div class="col-md-12">
|
|
6
|
-
<dl class="dl-narrow dl-horizontal">
|
|
7
|
-
<dt if-multiple-providers>Provider</dt>
|
|
8
|
-
<dd if-multiple-providers>ECS</dd>
|
|
9
|
-
</dl>
|
|
10
|
-
</div>
|
|
11
|
-
</div>
|
|
12
|
-
<stage-failure-message stage="stage" message="stage.failureMessage"></stage-failure-message>
|
|
13
|
-
|
|
14
|
-
<div class="row" ng-if="stage.context.amiDetails">
|
|
15
|
-
<div class="col-md-12">
|
|
16
|
-
<div class="well alert alert-info">
|
|
17
|
-
<h4>Results</h4>
|
|
18
|
-
<dl ng-repeat="image in stage.context.amiDetails" class="dl-narrow dl-horizontal">
|
|
19
|
-
<dt>Region</dt>
|
|
20
|
-
<dd>{{image.region}}</dd>
|
|
21
|
-
<dt>Image ID</dt>
|
|
22
|
-
<dd>{{image.imageId}}</dd>
|
|
23
|
-
<dt>Unique ID</dt>
|
|
24
|
-
<dd>{{image.imageName}}</dd>
|
|
25
|
-
</dl>
|
|
26
|
-
</div>
|
|
27
|
-
</div>
|
|
28
|
-
</div>
|
|
29
|
-
</div>
|
|
30
|
-
|
|
31
|
-
<div class="step-section-details" ng-if="detailsSection === 'taskStatus'">
|
|
32
|
-
<div class="row">
|
|
33
|
-
<execution-step-details item="stage"></execution-step-details>
|
|
34
|
-
</div>
|
|
35
|
-
</div>
|
|
36
|
-
</div>
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
<div ng-controller="ecsFindImageFromTagsStageCtrl as findImageFromTagsCtrl" class="form-horizontal">
|
|
2
|
-
<stage-config-field label="Full Docker Image path (label or SHA-256)">
|
|
3
|
-
<input type="text" class="form-control input-sm" ng-model="stage.imageLabelOrSha" />
|
|
4
|
-
</stage-config-field>
|
|
5
|
-
</div>
|
|
6
|
-
|
|
7
|
-
<div>
|
|
8
|
-
<h5>Example value: <i>12345678901.dkr.ecr.us-west-2.amazonaws.com/continuous-delivery:latest</i></h5>
|
|
9
|
-
</div>
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
<div ng-controller="ecsResizeAsgStageCtrl as resizeAsgStageCtrl">
|
|
2
|
-
<div ng-if="!pipeline.strategy">
|
|
3
|
-
<div ng-if="!viewState.accountsLoaded">
|
|
4
|
-
<h4 class="text-center">
|
|
5
|
-
<span us-spinner="{radius:20, width:6, length: 12}"></span>
|
|
6
|
-
</h4>
|
|
7
|
-
</div>
|
|
8
|
-
<div ng-if="viewState.accountsLoaded">
|
|
9
|
-
<account-region-cluster-selector application="application" component="stage" accounts="accounts">
|
|
10
|
-
</account-region-cluster-selector>
|
|
11
|
-
</div>
|
|
12
|
-
</div>
|
|
13
|
-
<stage-config-field label="Target">
|
|
14
|
-
<target-select model="stage" options="resizeTargets"></target-select>
|
|
15
|
-
</stage-config-field>
|
|
16
|
-
<stage-config-field label="Action" help-key="pipeline.config.resizeAsg.action">
|
|
17
|
-
<select
|
|
18
|
-
class="form-control input-sm"
|
|
19
|
-
required
|
|
20
|
-
ng-model="stage.action"
|
|
21
|
-
ng-change="resizeAsgStageCtrl.updateResizeType()"
|
|
22
|
-
ng-options="a.val as a.label for a in scaleActions"
|
|
23
|
-
>
|
|
24
|
-
<option>Select an action...</option>
|
|
25
|
-
</select>
|
|
26
|
-
</stage-config-field>
|
|
27
|
-
<div ng-if="stage.action !== 'scale_exact'">
|
|
28
|
-
<stage-config-field label="{{stage.action === 'scale_to_cluster' ? 'Additional Capacity' : 'Type'}}">
|
|
29
|
-
<select
|
|
30
|
-
class="form-control input-sm"
|
|
31
|
-
required
|
|
32
|
-
ng-model="stage.resizeType"
|
|
33
|
-
ng-change="resizeAsgStageCtrl.updateResizeType()"
|
|
34
|
-
ng-options="t.val as t.label for t in resizeTypes"
|
|
35
|
-
>
|
|
36
|
-
<option>Select an action...</option>
|
|
37
|
-
</select>
|
|
38
|
-
</stage-config-field>
|
|
39
|
-
<div ng-if="stage.resizeType === 'pct'">
|
|
40
|
-
<stage-config-field label="Resize Percentage">
|
|
41
|
-
<input type="number" min="0" ng-model="stage.scalePct" class="form-control input-sm" style="width: 80px" />
|
|
42
|
-
<div>
|
|
43
|
-
<em class="subinput-note"
|
|
44
|
-
>This is the percentage by which the target server group's capacity will be increased</em
|
|
45
|
-
>
|
|
46
|
-
</div>
|
|
47
|
-
</stage-config-field>
|
|
48
|
-
</div>
|
|
49
|
-
<div ng-if="stage.resizeType === 'incr'">
|
|
50
|
-
<stage-config-field label="Resize-by Amount">
|
|
51
|
-
<input type="number" min="0" ng-model="stage.scaleNum" class="form-control input-sm" style="width: 80px" />
|
|
52
|
-
<div>
|
|
53
|
-
<em class="subinput-note"
|
|
54
|
-
>This is the exact amount by which the target server group's capacity will be increased</em
|
|
55
|
-
>
|
|
56
|
-
</div>
|
|
57
|
-
</stage-config-field>
|
|
58
|
-
</div>
|
|
59
|
-
</div>
|
|
60
|
-
<div ng-if="stage.action === 'scale_exact'">
|
|
61
|
-
<stage-config-field class="small">
|
|
62
|
-
<div class="row">
|
|
63
|
-
<div class="col-md-3">Min</div>
|
|
64
|
-
<div class="col-md-3">Max</div>
|
|
65
|
-
<div class="col-md-3">Desired</div>
|
|
66
|
-
</div>
|
|
67
|
-
</stage-config-field>
|
|
68
|
-
<stage-config-field label="Match Capacity">
|
|
69
|
-
<div class="row">
|
|
70
|
-
<div class="col-md-3">
|
|
71
|
-
<input type="number" ng-model="stage.capacity.min" class="form-control input-sm" />
|
|
72
|
-
</div>
|
|
73
|
-
<div class="col-md-3">
|
|
74
|
-
<input type="number" ng-model="stage.capacity.max" class="form-control input-sm" />
|
|
75
|
-
</div>
|
|
76
|
-
<div class="col-md-3">
|
|
77
|
-
<input type="number" ng-model="stage.capacity.desired" class="form-control input-sm" />
|
|
78
|
-
</div>
|
|
79
|
-
</div>
|
|
80
|
-
</stage-config-field>
|
|
81
|
-
<stage-config-field>
|
|
82
|
-
<em class="subinput-note">This is the exact amount to which the target server group will be scaled</em>
|
|
83
|
-
</stage-config-field>
|
|
84
|
-
</div>
|
|
85
|
-
<stage-platform-health-override application="application" stage="stage" platform-health-type="'Ecs'">
|
|
86
|
-
</stage-platform-health-override>
|
|
87
|
-
</div>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<span class="task-label"> Resize Server Group: {{step.context.serverGroupName}} ({{step.context.region}}) </span>
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
<div ng-controller="ecsScaleDownClusterStageCtrl as scaleDownClusterStageCtrl" class="form-horizontal">
|
|
2
|
-
<div ng-if="!pipeline.strategy">
|
|
3
|
-
<account-region-cluster-selector application="application" component="stage" accounts="accounts">
|
|
4
|
-
</account-region-cluster-selector>
|
|
5
|
-
</div>
|
|
6
|
-
<stage-config-field label="Scale Down Options">
|
|
7
|
-
<div class="form-inline">
|
|
8
|
-
<p>
|
|
9
|
-
Keep the
|
|
10
|
-
<input
|
|
11
|
-
type="number"
|
|
12
|
-
min="0"
|
|
13
|
-
required
|
|
14
|
-
ng-model="stage.remainingFullSizeServerGroups"
|
|
15
|
-
class="form-control input-sm"
|
|
16
|
-
style="width: 50px"
|
|
17
|
-
/>
|
|
18
|
-
<select class="form-control input-sm" ng-model="stage.preferLargerOverNewer" style="width: 100px">
|
|
19
|
-
<option value="true">largest</option>
|
|
20
|
-
<option value="false">newest</option>
|
|
21
|
-
</select>
|
|
22
|
-
{{scaleDownClusterStageCtrl.pluralize('server group', stage.remainingFullSizeServerGroups)}} at current size.
|
|
23
|
-
</p>
|
|
24
|
-
<p>The remaining server groups will be scaled down to zero instances.</p>
|
|
25
|
-
</div>
|
|
26
|
-
</stage-config-field>
|
|
27
|
-
<div class="form-group">
|
|
28
|
-
<div class="col-md-offset-3 col-md-6 checkbox">
|
|
29
|
-
<label>
|
|
30
|
-
<input type="checkbox" ng-model="stage.allowScaleDownActive" />
|
|
31
|
-
Allow scale down of active server groups
|
|
32
|
-
</label>
|
|
33
|
-
</div>
|
|
34
|
-
</div>
|
|
35
|
-
</div>
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
<div ng-controller="ecsShrinkClusterStageCtrl as shrinkClusterStageCtrl" class="form-horizontal">
|
|
2
|
-
<div ng-if="!pipeline.strategy">
|
|
3
|
-
<account-region-cluster-selector application="application" component="stage" accounts="accounts">
|
|
4
|
-
</account-region-cluster-selector>
|
|
5
|
-
</div>
|
|
6
|
-
<stage-config-field label="Shrink Options">
|
|
7
|
-
<div class="form-inline">
|
|
8
|
-
Shrink to
|
|
9
|
-
<input
|
|
10
|
-
type="number"
|
|
11
|
-
min="0"
|
|
12
|
-
required
|
|
13
|
-
ng-model="stage.shrinkToSize"
|
|
14
|
-
class="form-control input-sm"
|
|
15
|
-
style="width: 50px"
|
|
16
|
-
/>
|
|
17
|
-
{{shrinkClusterStageCtrl.pluralize('server group', stage.shrinkToSize)}}, keeping the
|
|
18
|
-
<select class="form-control input-sm" ng-model="stage.retainLargerOverNewer" style="width: 100px">
|
|
19
|
-
<option value="true">largest</option>
|
|
20
|
-
<option value="false">newest</option>
|
|
21
|
-
</select>
|
|
22
|
-
</div>
|
|
23
|
-
</stage-config-field>
|
|
24
|
-
<div class="form-group">
|
|
25
|
-
<div class="col-md-offset-3 col-md-6 checkbox">
|
|
26
|
-
<label>
|
|
27
|
-
<input type="checkbox" ng-model="stage.allowDeleteActive" />
|
|
28
|
-
Allow deletion of active server groups
|
|
29
|
-
</label>
|
|
30
|
-
</div>
|
|
31
|
-
</div>
|
|
32
|
-
<stage-platform-health-override application="application" stage="stage" platform-health-type="'Ecs'">
|
|
33
|
-
</stage-platform-health-override>
|
|
34
|
-
</div>
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
import UIROUTER_ANGULARJS from '@uirouter/angularjs';
|
|
4
|
-
import * as angular from 'angular';
|
|
5
|
-
import _ from 'lodash';
|
|
6
|
-
|
|
7
|
-
import { VpcReader } from '@spinnaker/amazon';
|
|
8
|
-
import {
|
|
9
|
-
CloudProviderRegistry,
|
|
10
|
-
FirewallLabels,
|
|
11
|
-
MANAGED_RESOURCE_DETAILS_INDICATOR,
|
|
12
|
-
RecentHistoryService,
|
|
13
|
-
SECURITY_GROUP_READER,
|
|
14
|
-
} from '@spinnaker/core';
|
|
15
|
-
|
|
16
|
-
export const ECS_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER =
|
|
17
|
-
'spinnaker.ecs.securityGroup.details.controller';
|
|
18
|
-
export const name = ECS_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER; // for backwards compatibility
|
|
19
|
-
angular
|
|
20
|
-
.module(ECS_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER, [
|
|
21
|
-
UIROUTER_ANGULARJS,
|
|
22
|
-
SECURITY_GROUP_READER,
|
|
23
|
-
MANAGED_RESOURCE_DETAILS_INDICATOR,
|
|
24
|
-
])
|
|
25
|
-
.controller('ecsSecurityGroupDetailsCtrl', [
|
|
26
|
-
'$scope',
|
|
27
|
-
'$state',
|
|
28
|
-
'resolvedSecurityGroup',
|
|
29
|
-
'app',
|
|
30
|
-
'securityGroupReader',
|
|
31
|
-
function ($scope, $state, resolvedSecurityGroup, app, securityGroupReader) {
|
|
32
|
-
this.application = app;
|
|
33
|
-
const application = app;
|
|
34
|
-
const securityGroup = resolvedSecurityGroup;
|
|
35
|
-
this.firewallLabel = FirewallLabels.get('Firewall');
|
|
36
|
-
|
|
37
|
-
// needed for standalone instances
|
|
38
|
-
$scope.detailsTemplateUrl = CloudProviderRegistry.getValue('ecs', 'securityGroup.detailsTemplateUrl');
|
|
39
|
-
|
|
40
|
-
$scope.state = {
|
|
41
|
-
loading: true,
|
|
42
|
-
standalone: app.isStandalone,
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
function extractSecurityGroup() {
|
|
46
|
-
return securityGroupReader
|
|
47
|
-
.getSecurityGroupDetails(
|
|
48
|
-
application,
|
|
49
|
-
securityGroup.accountId,
|
|
50
|
-
securityGroup.provider,
|
|
51
|
-
securityGroup.region,
|
|
52
|
-
securityGroup.vpcId,
|
|
53
|
-
securityGroup.name,
|
|
54
|
-
)
|
|
55
|
-
.then(function (details) {
|
|
56
|
-
return VpcReader.getVpcName(details.vpcId).then((name) => {
|
|
57
|
-
details.vpcName = name;
|
|
58
|
-
return details;
|
|
59
|
-
});
|
|
60
|
-
})
|
|
61
|
-
.then(function (details) {
|
|
62
|
-
$scope.state.loading = false;
|
|
63
|
-
|
|
64
|
-
if (!details || _.isEmpty(details)) {
|
|
65
|
-
fourOhFour();
|
|
66
|
-
} else {
|
|
67
|
-
const applicationSecurityGroup = securityGroupReader.getApplicationSecurityGroup(
|
|
68
|
-
application,
|
|
69
|
-
securityGroup.accountId,
|
|
70
|
-
securityGroup.region,
|
|
71
|
-
securityGroup.name,
|
|
72
|
-
);
|
|
73
|
-
|
|
74
|
-
angular.extend(securityGroup, applicationSecurityGroup, details);
|
|
75
|
-
$scope.securityGroup = securityGroup;
|
|
76
|
-
$scope.ipRules = buildIpRulesModel(securityGroup);
|
|
77
|
-
$scope.securityGroupRules = buildSecurityGroupRulesModel(securityGroup);
|
|
78
|
-
}
|
|
79
|
-
}, fourOhFour);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
function buildIpRulesModel(details) {
|
|
83
|
-
const groupedRangeRules = _.groupBy(details.ipRangeRules, (rule) => rule.range.ip + rule.range.cidr);
|
|
84
|
-
return Object.keys(groupedRangeRules)
|
|
85
|
-
.map((addr) => {
|
|
86
|
-
return {
|
|
87
|
-
address: addr,
|
|
88
|
-
rules: buildRuleModel(groupedRangeRules, addr),
|
|
89
|
-
};
|
|
90
|
-
})
|
|
91
|
-
.filter((rule) => rule.rules.length);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
function buildSecurityGroupRulesModel(details) {
|
|
95
|
-
const groupedRangeRules = _.groupBy(details.securityGroupRules, (rule) => rule.securityGroup.id);
|
|
96
|
-
return Object.keys(groupedRangeRules)
|
|
97
|
-
.map((addr) => {
|
|
98
|
-
return {
|
|
99
|
-
securityGroup: groupedRangeRules[addr][0].securityGroup,
|
|
100
|
-
rules: buildRuleModel(groupedRangeRules, addr),
|
|
101
|
-
};
|
|
102
|
-
})
|
|
103
|
-
.filter((rule) => rule.rules.length);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
function buildRuleModel(groupedRangeRules, addr) {
|
|
107
|
-
const rules = [];
|
|
108
|
-
groupedRangeRules[addr].forEach((rule) => {
|
|
109
|
-
(rule.portRanges || []).forEach((range) => {
|
|
110
|
-
if (rule.protocol === '-1' || (range.startPort !== undefined && range.endPort !== undefined)) {
|
|
111
|
-
rules.push({ startPort: range.startPort, endPort: range.endPort, protocol: rule.protocol });
|
|
112
|
-
}
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
return rules;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
function fourOhFour() {
|
|
119
|
-
if ($scope.$$destroyed) {
|
|
120
|
-
return;
|
|
121
|
-
}
|
|
122
|
-
if (app.isStandalone) {
|
|
123
|
-
$scope.group = securityGroup.name;
|
|
124
|
-
$scope.state.notFound = true;
|
|
125
|
-
$scope.state.loading = false;
|
|
126
|
-
RecentHistoryService.removeLastItem('securityGroups');
|
|
127
|
-
} else {
|
|
128
|
-
$state.go('^', { allowModalToStayOpen: true }, { location: 'replace' });
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
extractSecurityGroup().then(() => {
|
|
133
|
-
// If the user navigates away from the view before the initial extractSecurityGroup call completes,
|
|
134
|
-
// do not bother subscribing to the refresh
|
|
135
|
-
if (!$scope.$$destroyed && !app.isStandalone) {
|
|
136
|
-
app.securityGroups.onRefresh($scope, extractSecurityGroup);
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
if (app.isStandalone) {
|
|
141
|
-
// we still want the edit to refresh the firewall details when the modal closes
|
|
142
|
-
app.securityGroups = {
|
|
143
|
-
refresh: extractSecurityGroup,
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
},
|
|
147
|
-
]);
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
<div class="text-center" ng-if="state.notFound">
|
|
2
|
-
<h3>Could not find <firewall-label label="firewall"></firewall-label> {{group}}.</h3>
|
|
3
|
-
<a ui-sref="home.infrastructure">Back to search results</a>
|
|
4
|
-
</div>
|
|
5
|
-
<div class="details-panel" ng-if="!state.notFound">
|
|
6
|
-
<div class="header">
|
|
7
|
-
<div class="close-button" ng-if="!state.standalone">
|
|
8
|
-
<a class="btn btn-link" ui-sref="^">
|
|
9
|
-
<span class="glyphicon glyphicon-remove"></span>
|
|
10
|
-
</a>
|
|
11
|
-
</div>
|
|
12
|
-
<div ng-if="state.loading" class="horizontal center middle">
|
|
13
|
-
<loading-spinner size="'small'"></loading-spinner>
|
|
14
|
-
</div>
|
|
15
|
-
<div class="header-text horizontal middle" ng-if="!state.loading">
|
|
16
|
-
<span class="glyphicon glyphicon-transfer"></span>
|
|
17
|
-
<h3 class="horizontal middle space-between flex-1" select-on-dbl-click>
|
|
18
|
-
{{securityGroup.name || '(not found)'}}
|
|
19
|
-
<render-if-feature feature="entityTags">
|
|
20
|
-
<entity-notifications
|
|
21
|
-
entity="securityGroup"
|
|
22
|
-
application="ctrl.application"
|
|
23
|
-
placement="bottom"
|
|
24
|
-
h-offset-percent="90%"
|
|
25
|
-
entity-type="securityGroup"
|
|
26
|
-
page-location="details"
|
|
27
|
-
on-update="ctrl.application.securityGroups.refresh()"
|
|
28
|
-
></entity-notifications>
|
|
29
|
-
</render-if-feature>
|
|
30
|
-
</h3>
|
|
31
|
-
</div>
|
|
32
|
-
</div>
|
|
33
|
-
<div class="content" ng-if="!state.loading">
|
|
34
|
-
<collapsible-section heading="{{ctrl.firewallLabel}} Details" expanded="true">
|
|
35
|
-
<dl class="dl-horizontal dl-medium">
|
|
36
|
-
<dt>ID</dt>
|
|
37
|
-
<dd>{{securityGroup.id}}</dd>
|
|
38
|
-
<dt>Account</dt>
|
|
39
|
-
<dd>
|
|
40
|
-
<account-tag account="securityGroup.accountName"></account-tag>
|
|
41
|
-
</dd>
|
|
42
|
-
<dt>Region</dt>
|
|
43
|
-
<dd>{{securityGroup.region}}</dd>
|
|
44
|
-
<dt>VPC</dt>
|
|
45
|
-
<dd>
|
|
46
|
-
<vpc-tag vpc-id="securityGroup.vpcId"></vpc-tag>
|
|
47
|
-
</dd>
|
|
48
|
-
<dt>Description</dt>
|
|
49
|
-
<dd>{{securityGroup.description}}</dd>
|
|
50
|
-
</dl>
|
|
51
|
-
</collapsible-section>
|
|
52
|
-
<collapsible-section heading="IP Range Rules ({{ipRules.length}})" expanded="{{ipRules.length > 0}}">
|
|
53
|
-
<div ng-if="!ipRules.length">None</div>
|
|
54
|
-
|
|
55
|
-
<dl
|
|
56
|
-
ng-class="insightCtrl.vm.filtersExpanded ? '' : 'dl-horizontal dl-medium'"
|
|
57
|
-
ng-repeat="ipRangeRule in ipRules | orderBy: 'range.address'"
|
|
58
|
-
>
|
|
59
|
-
<dt>IP Range</dt>
|
|
60
|
-
<dd>{{ipRangeRule.address}}</dd>
|
|
61
|
-
<dt>Port Ranges</dt>
|
|
62
|
-
<dd ng-repeat="rule in ipRangeRule.rules">
|
|
63
|
-
<span ng-if="rule.protocol === '-1'">
|
|
64
|
-
All ports and protocols
|
|
65
|
-
<div ng-if="ipRangeRule.rules.length > 1">
|
|
66
|
-
<em>Additional port ranges are specified, but redundant:</em>
|
|
67
|
-
</div>
|
|
68
|
-
</span>
|
|
69
|
-
<span ng-if="rule.protocol !== '-1'"> {{rule.protocol}}: {{rule.startPort}} → {{rule.endPort}} </span>
|
|
70
|
-
</dd>
|
|
71
|
-
</dl>
|
|
72
|
-
</collapsible-section>
|
|
73
|
-
<collapsible-section
|
|
74
|
-
heading="{{ctrl.firewallLabel}} Rules ({{securityGroupRules.length || 0}})"
|
|
75
|
-
expanded="{{securityGroupRules.length > 0}}"
|
|
76
|
-
>
|
|
77
|
-
<div ng-if="!securityGroupRules.length">None</div>
|
|
78
|
-
|
|
79
|
-
<dl
|
|
80
|
-
ng-class="insightCtrl.vm.filtersExpanded ? '' : 'dl-horizontal dl-medium'"
|
|
81
|
-
ng-repeat="rule in securityGroupRules | orderBy: 'securityGroup.name' "
|
|
82
|
-
>
|
|
83
|
-
<dt>
|
|
84
|
-
<firewall-label label="Firewall"></firewall-label>
|
|
85
|
-
</dt>
|
|
86
|
-
<dd ng-if="rule.securityGroup.name">
|
|
87
|
-
<a
|
|
88
|
-
ui-sref="^.firewallDetails({name: rule.securityGroup.name, accountId: rule.securityGroup.accountName, region: rule.securityGroup.region, vpcId: rule.securityGroup.vpcId, provider: 'ecs'})"
|
|
89
|
-
>
|
|
90
|
-
<account-tag
|
|
91
|
-
account="rule.securityGroup.accountName || rule.securityGroup.accountId"
|
|
92
|
-
ng-if="rule.securityGroup.accountName !== securityGroup.accountName"
|
|
93
|
-
></account-tag>
|
|
94
|
-
{{rule.securityGroup.name}} ({{rule.securityGroup.id}})
|
|
95
|
-
</a>
|
|
96
|
-
</dd>
|
|
97
|
-
<dt>Port Ranges</dt>
|
|
98
|
-
<dd ng-repeat="portRange in rule.rules">
|
|
99
|
-
{{portRange.protocol}}: {{portRange.startPort}} → {{portRange.endPort}}
|
|
100
|
-
</dd>
|
|
101
|
-
</dl>
|
|
102
|
-
</collapsible-section>
|
|
103
|
-
</div>
|
|
104
|
-
</div>
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { module } from 'angular';
|
|
2
|
-
|
|
3
|
-
import { ECS_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER } from './details/securityGroupDetail.controller';
|
|
4
|
-
import { ECS_SECURITY_GROUP_READER } from './securityGroup.reader';
|
|
5
|
-
import { ECS_SECURITYGROUP_SECURITYGROUP_TRANSFORMER } from './securityGroup.transformer';
|
|
6
|
-
|
|
7
|
-
export const ECS_SECURITY_GROUP_MODULE = 'spinnaker.ecs.securityGroup';
|
|
8
|
-
module(ECS_SECURITY_GROUP_MODULE, [
|
|
9
|
-
ECS_SECURITY_GROUP_READER,
|
|
10
|
-
ECS_SECURITYGROUP_SECURITYGROUP_TRANSFORMER,
|
|
11
|
-
ECS_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER,
|
|
12
|
-
]);
|