@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 @@
1
+ {"version":3,"file":"index.js","sources":["../src/common/footer.component.ts","../src/common/common.module.ts","../src/ecs.help.ts","../src/ecs.settings.ts","../src/ecsCluster/ecsCluster.read.service.ts","../src/iamRoles/iamRole.read.service.ts","../src/instance/details/instance.details.controller.js","../src/loadBalancer/TargetGroup.tsx","../src/loadBalancer/EcsLoadBalancerClusterContainer.tsx","../src/loadBalancer/listener.tsx","../src/loadBalancer/details/loadBalancerDetails.tsx","../src/loadBalancer/details/targetGroupDetails.tsx","../src/loadBalancer/loadBalancer.transformer.ts","../src/loadBalancer/targetGroup.states.ts","../src/logo/ecs.logo.svg","../src/metricAlarm/metricAlarm.read.service.ts","../src/pipeline/stages/destroyAsg/ecsDestroyAsgStage.js","../src/pipeline/stages/disableAsg/ecsDisableAsgStage.js","../src/pipeline/stages/disableCluster/ecsDisableClusterStage.js","../src/pipeline/stages/enableAsg/ecsEnableAsgStage.js","../src/pipeline/stages/findImageFromTags/ecsFindImageFromTagStage.js","../src/pipeline/stages/resizeAsg/ecsResizeAsgStage.js","../src/pipeline/stages/scaleDownCluster/ecsScaleDownClusterStage.js","../src/pipeline/stages/shrinkCluster/ecsShrinkClusterStage.js","../src/placementStrategy/placementStrategy.service.ts","../src/secrets/secret.read.service.ts","../src/securityGroup/details/securityGroupDetail.controller.js","../src/securityGroup/securityGroup.reader.ts","../src/securityGroup/securityGroup.transformer.js","../src/securityGroup/securityGroup.module.ts","../src/serviceDiscovery/serviceDiscovery.read.service.ts","../src/serverGroup/configure/serverGroupConfiguration.service.ts","../src/serverGroup/configure/serverGroupCommandBuilder.service.js","../src/serverGroup/configure/wizard/CloneServerGroup.ecs.controller.js","../src/serverGroup/configure/wizard/advancedSettings/advancedSettings.component.js","../src/serverGroup/configure/wizard/capacityProvider/CapacityProvider.tsx","../src/serverGroup/configure/wizard/container/Container.tsx","../src/serverGroup/configure/wizard/horizontalScaling/horizontalScaling.component.js","../src/serverGroup/configure/wizard/location/ServerGroupBasicSettings.controller.js","../src/serverGroup/configure/wizard/logging/logging.component.ts","../src/serverGroup/configure/wizard/networking/Networking.tsx","../src/serverGroup/configure/wizard/serviceDiscovery/ServiceDiscovery.tsx","../src/serverGroup/configure/wizard/taskDefinition/TaskDefinition.tsx","../src/serverGroup/details/resize/resizeCapacity.component.ts","../src/serverGroup/details/resize/resizeServerGroup.controller.js","../src/serverGroup/details/rollback/rollbackServerGroup.controller.js","../src/serverGroup/serverGroup.transformer.ts","../src/serverGroup/details/serverGroupDetails.ecs.controller.js","../src/serverGroup/details/serverGroupDetails.module.ts","../src/serverGroup/events/serverGroupEventsReader.service.ts","../src/serverGroup/events/events.controller.ts","../src/serverGroup/events/events.component.ts","../src/serverGroup/serverGroup.module.ts","../../../node_modules/style-inject/dist/style-inject.es.js","../src/ecs.module.ts"],"sourcesContent":["import type { IComponentOptions } from 'angular';\nimport { module } from 'angular';\n\nconst footerComponent: IComponentOptions = {\n bindings: {\n action: '&',\n isValid: '&',\n cancel: '&',\n account: '=?',\n verification: '=?',\n },\n template: `\n <div class=\"modal-footer\">\n <user-verification account=\"$ctrl.account\" verification=\"$ctrl.verification\"></user-verification>\n <button type=\"submit\" ng-click=\"$ctrl.action()\" style=\"display:none\"></button> <!-- Allows form submission via enter keypress-->\n <button class=\"btn btn-default\" ng-click=\"$ctrl.cancel()\">Cancel</button>\n <button type=\"submit\"\n class=\"btn btn-primary\"\n ng-click=\"$ctrl.action()\"\n ng-disabled=\"!$ctrl.isValid()\">\n Submit\n </button>\n </div>\n `,\n controller: () => {},\n};\n\nexport const ECS_FOOTER_COMPONENT = 'spinnaker.ecs.footer';\nmodule(ECS_FOOTER_COMPONENT, []).component('ecsFooter', footerComponent);\n","import { module } from 'angular';\n\nimport { ECS_FOOTER_COMPONENT } from './footer.component';\n\nexport const COMMON_MODULE = 'spinnaker.ecs.common';\nmodule(COMMON_MODULE, [ECS_FOOTER_COMPONENT]);\n","import { HelpContentsRegistry } from '@spinnaker/core';\n\nconst helpContents: { [key: string]: string } = {\n 'ecs.loadBalancer.targetGroup':\n '<p>A <em>target group</em> is attached to an application / network load balancer and is a target for load balancer traffic.</p> <p> You need to create both the application load balancer and target groups prior to being able to use them in your pipeline.</p>',\n 'ecs.serverGroup.clusterName':\n '<p>The name of the ECS cluster (group of underlying EC2 hosts) onto which your application will be deployed.</p><p>Note that suggestions here are dependent on the selected account and region combination.</p>',\n 'ecs.stage.findImageByTags.labelOrSha':\n \"<p>As of now, only Amazon's ECR is supported as a source docker repository.</p>\",\n 'ecs.serverGroup.stack':\n '<p>An environment variable available within your container, and on which you should base your application configuration at runtime.</p> <p>Typical values for this parameter are <i>staging</i>, <i>prod</i>, etc. Keep this parameter short!</p>',\n 'ecs.serverGroup.detail':\n '<p>An environment variable available within your container, and on which you should base your application configuration at runtime.</p> <p>Typical values for this parameter are <i>app</i>, <i>worker</i>, <i>migrator</i>, etc. Keep this parameter short!</p>',\n 'ecs.capacity.overwrite':\n \"<p>Checking this box will have the previous server group's capacity overwrite the new <i>min</i>, <i>max</i> and <i>desired capacity</i> parameters if a previous server group exists.</p>\",\n 'ecs.capacity.desired': '<p>The starting number of containers, before any autoscaling happens.</p>',\n 'ecs.capacity.minimum':\n '<p>The minimum number of containers you can reach as a result of autoscaling.</p> <p>Typically, this represents the bare minimum you can afford to run without impacting your capacity to meet your SLA (Service Level Agreement) objectives</p>',\n 'ecs.capacity.maximum': '<p>The maximal number of containers you can reach as a result of autoscaling.</p>',\n 'ecs.capacity.reserved.computeUnits':\n '<p>The assured minimal amount of computing capacity your container will be able to use. 1024 units are equal to 1 AWS virtual CPU</p> <p>If other containers on your underlying host are not using their reserved compute capacity, this container will be able to use it.</p>',\n 'ecs.capacity.reserved.memory':\n '<p>The maximal amount of memory that your container can use, in megabytes. Exceeding this amount may result in termination of your container.</p><p>1024 mb = 1 gb</p>',\n 'ecs.loadbalancing.targetPort': '<p>The port on which your application is listening for incoming traffic</p>',\n 'ecs.iamrole':\n '<p>The IAM role that your container (task, in AWS wording) will inherit. </p><p>Define a role only if your application needs to access AWS APIs</p>',\n 'ecs.dockerimage': 'Docker image for your container, such as nginx:latest',\n 'ecs.dockerimagecredentials':\n '<p>The AWS Secrets Manager secret that contains private registry credentials.</p><p>Define credentials only for private registries other than Amazon ECR.</p>',\n 'ecs.placementConstraints':\n '<p>Rules for task placement. See <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-placement-constraints.html\" target=\"_blank\">AWS documentation</a> for more details. </p>',\n 'ecs.placementConstraintType':\n '<p>To ensure that each task in a particular group is running on a different container instance, use distinctInstance. To restrict the selection to a group of valid candidates, use memberOf. </p>',\n 'ecs.placementConstraintExpression':\n '<p>A cluster query language expression to apply to memberOf constraints. See <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cluster-query-language.html\" target=\"_blank\">AWS documentation</a> for more details.</p>',\n 'ecs.placementStrategy':\n '<p>The strategy the container scheduler will be using. See <a href=\"http://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-placement-strategies.html\" target=\"_blank\">AWS documentation</a> for more details. </p><p>You should at least balance across availability zones</p><p>Custom placement strategies have not been implemented yet.</p>',\n 'ecs.platformVersion': '<p>Defaults to the latest platform version.</p>',\n 'ecs.enableDeploymentCircuitBreaker': '<p>Enable circuit breaker for the ECS service.</p>',\n 'ecs.capacity.copySourceScalingPoliciesAndActions':\n '<p>Copy Application Autoscaling policies and their associated alarms from the previous ECS service.</p>',\n 'ecs.launchtype': '<p>Launch service tasks on your own EC2 instances or on Fargate.</p>',\n 'ecs.healthgraceperiod':\n '<p>How long a container will be kept alive despite the load balancer health checks, in seconds.</p>',\n 'ecs.publicip': '<p>Assign a public IP address to each task.</p>',\n 'ecs.networkMode':\n '<p>awsvpc is the only networking mode that allows you to use Elastic Network Interfaces (ENI). The default value converts to Bridge on Linux, and NAT on Windows.</p>',\n 'ecs.subnet':\n '<p>The subnet group(s) on which your server group will be deployed. All subnet groups selected must exist within the same VPC.</p>',\n 'ecs.securityGroups': '<p>The security group(s) name(s) your containers are deployed with.</p>',\n 'ecs.dockerLabels':\n '<p>Additional labels applied to your Docker container. This metadata can be used to identify your containers, or in conjunction with logging options. Maps directly to the <a href=\"https://docs.docker.com/engine/reference/commandline/run/#set-metadata-on-container--l---label---label-file\"><b>--label</b> Docker flag</a>.</p> <p>Spinnaker will automatically add the spinnaker.servergroup, spinnaker.stack, spinnaker.detail labels for non-null values.</p>',\n 'ecs.logDriver':\n '<p>The container\\'s logging driver. This directly maps to the <a href=\"https://docs.docker.com/config/containers/logging/configure/#configure-the-default-logging-driver\"><b>--log-driver</b> Docker flag.</a></p>',\n 'ecs.logOptions':\n '<p>A map of log options. This directly maps with the <a href=\"https://docs.docker.com/config/containers/logging/log_tags/\"><b>--log-opt</b> Docker flag </a></p>',\n 'ecs.taskDefinition':\n '<p>The source of the ECS Task Definition. Task Definition contents can either be entered manually via input fields or from a selected JSON file artifact. Artifact file contents should be structured as an ECS \"RegisterTaskDefinition\" request.</p>',\n 'ecs.taskDefinitionArtifact': '<p>The artifact containing the ECS Task Definition.</p>',\n 'ecs.containerMappings':\n '<p>The list of expected containers within the Task Definition and which container image they should use. Containers in the Task Definition which are not specified here will be registered as they appear in the artifact.</p>',\n 'ecs.containerMappingName':\n '<p>The name of the container. Name should match the <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ContainerDefinition.html#ECS-Type-ContainerDefinition-name\"><b>containerDefinition.name</b></a> field as it appears in the Task Definition.</p>',\n 'ecs.containerMappingImage': '<p>The container image the named container should run.</p>',\n 'ecs.targetGroupMappings':\n '<p>The list of target groups through which the ECS service will receive load balancer traffic. Each target group is mapped to a container name and port within the Task Definition to specify which container should be registered to the target group.</p>',\n 'ecs.loadBalancedContainer':\n '<p>The container in the Task Definition that should receive traffic from the load balancer. Required if a load balancer target group has been specified.</p>',\n 'ecs.tags': '<p>The tags to apply to the task definition and the service',\n 'ecs.environmentVariables':\n '<p>The environment variable(s) your container are deployed with. SERVER_GROUP, CLOUD_STACK and CLOUD_DETAIL environment variables are used during deployment to identify the task and cannot be set here.</p>',\n 'ecs.serviceDiscovery': '<p>The AWS Cloud Map service discovery registries to assign to this service</p>',\n 'ecs.serviceDiscoveryRegistry': '<p>The AWS Cloud Map service to use for service discovery registration</p>',\n 'ecs.serviceDiscoveryContainerPort':\n '<p>The port to be used for your service discovery service. Required only for services using bridge or host network mode, and for services using awsvpc network mode and a type SRV DNS record',\n 'ecs.serviceDiscoveryContainerName':\n '<p>The container name value, already specified in the task definition, to be used for your service discovery service.</p>',\n 'ecs.computeOptions':\n '<p>Specify either a <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html\" target=\"_blank\">launch type</a> (default) or <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cluster-capacity-providers.html\" target=\"_blank\">capacity providers</a> for running your ECS service.</p>',\n 'ecs.capacityProviderStrategy':\n '<p>A capacity provider strategy gives you control over how your tasks use one or more capacity providers. See <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cluster-capacity-providers.html#capacity-providers-concepts\" target=\"_blank\">AWS documentation</a> for more details. </p>',\n 'ecs.capacityProviderName': '<p>The short name of the capacity provider.</p>',\n 'ecs.capacityProviderBase':\n '<p>Designates how many tasks, at a minimum, to run on the specified capacity provider. Only one capacity provider in a capacity provider strategy can have a <em>base</em> defined.</p>',\n 'ecs.capacityProviderWeight':\n '<p>Designates the relative percentage of the total number of tasks launched that should use the specified capacity provider.</p>',\n 'ecs.evaluateExpression':\n '<p>Whether to evaluate <a href=\"https://spinnaker.io/guides/user/pipeline/expressions/\" target=\"_blank\"><b>pipeline expressions</b></a> within the task definition artifact in this stage. Checking this box let\\'s you evaluate your task definition artifact coming from external sources.(e.g. GitHub) </p>',\n};\n\nObject.keys(helpContents).forEach((key) => HelpContentsRegistry.register(key, helpContents[key]));\n","import type { IProviderSettings } from '@spinnaker/core';\nimport { SETTINGS } from '@spinnaker/core';\n\nexport interface IECSProviderSettings extends IProviderSettings {\n defaults: {\n account?: string;\n region?: string;\n zone?: string;\n };\n}\n\nexport const IECSProviderSettings: IECSProviderSettings = (SETTINGS.providers.ecs as IECSProviderSettings) || {\n defaults: {},\n};\nif (IECSProviderSettings) {\n IECSProviderSettings.resetToOriginal = SETTINGS.resetProvider('ecs');\n}\n","import { module } from 'angular';\n\nimport { REST } from '@spinnaker/core';\n\nimport type { IEcsCapacityProviderDetails } from './IEcsCapacityProviderDetails';\nimport type { IEcsClusterDescriptor } from './IEcsCluster';\n\nexport class EcsClusterReader {\n public listClusters(): PromiseLike<IEcsClusterDescriptor[]> {\n return REST('/ecs/ecsClusters').get();\n }\n\n public describeClusters(account: string, region: string): PromiseLike<IEcsCapacityProviderDetails[]> {\n if (account != null && region != null) {\n return REST('/ecs/ecsClusterDescriptions').path(account).path(region).get();\n }\n return {} as PromiseLike<IEcsCapacityProviderDetails[]>;\n }\n}\n\nexport const ECS_CLUSTER_READ_SERVICE = 'spinnaker.ecs.ecsCluster.read.service';\n\nmodule(ECS_CLUSTER_READ_SERVICE, []).service('ecsClusterReader', EcsClusterReader);\n","import { module } from 'angular';\n\nimport { REST } from '@spinnaker/core';\nimport type { IRoleDescriptor } from './IRole';\n\nexport class IamRoleReader {\n public listRoles(provider: string): PromiseLike<IRoleDescriptor[]> {\n return REST('/roles').path(provider).get();\n }\n}\n\nexport const IAM_ROLE_READ_SERVICE = 'spinnaker.ecs.iamRole.read.service';\n\nmodule(IAM_ROLE_READ_SERVICE, []).service('iamRoleReader', IamRoleReader);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\nimport _ from 'lodash';\n\nimport { applyHealthCheckInfoToTargetGroups, getAllTargetGroups } from '@spinnaker/amazon';\nimport {\n CloudProviderRegistry,\n ConfirmationModalService,\n InstanceReader,\n InstanceWriter,\n RecentHistoryService,\n SETTINGS,\n} from '@spinnaker/core';\n\nexport const ECS_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER = 'spinnaker.ecs.instance.details.controller';\nexport const name = ECS_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER; // for backwards compatibility\nmodule(ECS_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER, [UIROUTER_ANGULARJS, ANGULAR_UI_BOOTSTRAP]).controller(\n 'ecsInstanceDetailsCtrl',\n [\n '$scope',\n '$state',\n '$uibModal',\n 'instance',\n 'app',\n 'moniker',\n 'environment',\n '$q',\n 'overrides',\n function ($scope, $state, $uibModal, instance, app, moniker, environment, $q, overrides) {\n // needed for standalone instances\n $scope.detailsTemplateUrl = CloudProviderRegistry.getValue('ecs', 'instance.detailsTemplateUrl');\n\n $scope.state = {\n loading: true,\n standalone: app.isStandalone,\n instancePort: _.get(app, 'attributes.instancePort') || SETTINGS.defaultInstancePort || 80,\n };\n\n $scope.application = app;\n $scope.moniker = moniker;\n $scope.environment = environment;\n\n const cloudProvider = 'ecs';\n const defaultRequestParams = { cloudProvider: cloudProvider };\n\n function extractHealthMetrics(instance, latest) {\n // do not backfill on standalone instances\n if (app.isStandalone) {\n instance.health = latest.health;\n }\n\n instance.health = instance.health || [];\n const displayableMetrics = instance.health.filter(function (metric) {\n return metric.type !== 'Ecs' || metric.state !== 'Unknown';\n });\n\n // augment with target group healthcheck data\n const targetGroups = getAllTargetGroups(app.loadBalancers.data);\n applyHealthCheckInfoToTargetGroups(displayableMetrics, targetGroups, instance.account);\n\n // backfill details where applicable\n if (latest.health) {\n displayableMetrics.forEach(function (metric) {\n const detailsMatch = latest.health.filter(function (latestHealth) {\n return latestHealth.type === metric.type;\n });\n if (detailsMatch.length) {\n _.defaults(metric, detailsMatch[0]);\n }\n });\n }\n $scope.healthMetrics = displayableMetrics;\n }\n\n function retrieveInstance() {\n const extraData = {};\n let instanceSummary, loadBalancers, targetGroup, account, region, vpcId;\n if (!app.serverGroups) {\n // standalone instance\n instanceSummary = {};\n loadBalancers = [];\n targetGroup = [];\n account = instance.account;\n region = instance.region;\n } else {\n app.serverGroups.data.some(function (serverGroup) {\n return serverGroup.instances.some(function (possibleInstance) {\n if (possibleInstance.id === instance.instanceId) {\n instanceSummary = possibleInstance;\n loadBalancers = serverGroup.loadBalancers;\n targetGroup = serverGroup.targetGroup;\n account = serverGroup.account;\n region = serverGroup.region;\n vpcId = serverGroup.vpcId;\n extraData.serverGroup = serverGroup.name;\n extraData.vpcId = serverGroup.vpcId;\n return true;\n }\n });\n });\n if (!instanceSummary) {\n // perhaps it is in a server group that is part of another app\n app.loadBalancers.data.some(function (loadBalancer) {\n return (\n loadBalancer.instances.some(function (possibleInstance) {\n if (possibleInstance.id === instance.instanceId) {\n instanceSummary = possibleInstance;\n loadBalancers = [loadBalancer.name];\n account = loadBalancer.account;\n region = loadBalancer.region;\n vpcId = loadBalancer.vpcId;\n return true;\n }\n }) ||\n loadBalancer.targetGroup.some(function (targetGroup) {\n return targetGroup.instances.some(function (possibleInstance) {\n if (possibleInstance.id === instance.instanceId) {\n instanceSummary = possibleInstance;\n targetGroup = targetGroup.name;\n account = loadBalancer.account;\n region = loadBalancer.region;\n vpcId = loadBalancer.vpcId;\n return true;\n }\n });\n })\n );\n });\n if (!instanceSummary) {\n // perhaps it is in a disabled server group via a load balancer\n app.loadBalancers.data.some(function (loadBalancer) {\n return (\n loadBalancer.serverGroups.some(function (serverGroup) {\n if (!serverGroup.isDisabled) {\n return false;\n }\n return serverGroup.instances.some(function (possibleInstance) {\n if (possibleInstance.id === instance.instanceId) {\n instanceSummary = possibleInstance;\n loadBalancers = [loadBalancer.name];\n account = loadBalancer.account;\n region = loadBalancer.region;\n vpcId = loadBalancer.vpcId;\n return true;\n }\n });\n }) ||\n loadBalancer.targetGroup.some(function (targetGroup) {\n targetGroup.serverGroups.some(function (serverGroup) {\n if (!serverGroup.isDisabled) {\n return false;\n }\n return serverGroup.instances.some(function (possibleInstance) {\n if (possibleInstance.id === instance.instanceId) {\n instanceSummary = possibleInstance;\n loadBalancers = [loadBalancer.name];\n account = loadBalancer.account;\n region = loadBalancer.region;\n vpcId = loadBalancer.vpcId;\n return true;\n }\n });\n });\n })\n );\n });\n }\n }\n }\n\n if (instanceSummary && account && region) {\n instanceSummary.account = account;\n extraData.account = account;\n extraData.region = region;\n RecentHistoryService.addExtraDataToLatest('instances', extraData);\n return InstanceReader.getInstanceDetails(account, region, instance.instanceId).then((details) => {\n if ($scope.$$destroyed) {\n return;\n }\n $scope.state.loading = false;\n extractHealthMetrics(instanceSummary, details);\n $scope.instance = _.defaults(details, instanceSummary);\n $scope.instance.account = account;\n $scope.instance.region = region;\n $scope.instance.vpcId = vpcId;\n $scope.instance.loadBalancers = loadBalancers;\n $scope.instance.targetGroup = targetGroup;\n if ($scope.instance.networkInterfaces) {\n const permanentNetworkInterfaces = $scope.instance.networkInterfaces.filter(\n (f) => f.attachment.deleteOnTermination === false,\n );\n if (permanentNetworkInterfaces.length) {\n $scope.instance.permanentIps = permanentNetworkInterfaces.map((f) => f.privateIpAddress);\n }\n }\n $scope.baseIpAddress = details.publicDnsName || details.privateIpAddress;\n if (overrides.instanceDetailsLoaded) {\n overrides.instanceDetailsLoaded();\n }\n }, autoClose);\n }\n\n if (!instanceSummary) {\n $scope.instanceIdNotFound = instance.instanceId;\n $scope.state.loading = false;\n }\n\n return $q.when(null);\n }\n\n function autoClose() {\n if ($scope.$$destroyed) {\n return;\n }\n if (app.isStandalone) {\n $scope.state.loading = false;\n $scope.instanceIdNotFound = instance.instanceId;\n $scope.state.notFoundStandalone = true;\n RecentHistoryService.removeLastItem('instances');\n } else {\n $state.go('^', { allowModalToStayOpen: true }, { location: 'replace' });\n }\n }\n\n this.canRegisterWithDiscovery = function () {\n const instance = $scope.instance;\n const healthMetrics = instance.health || [];\n const discoveryHealth = healthMetrics.filter(function (health) {\n return health.type === 'Discovery';\n });\n return discoveryHealth.length ? discoveryHealth[0].state === 'OutOfService' : false;\n };\n\n this.terminateInstance = function terminateInstance() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Terminating ' + instance.instanceId,\n onTaskComplete: function () {\n if ($state.includes('**.instanceDetails', { instanceId: instance.instanceId })) {\n $state.go('^');\n }\n },\n };\n\n const submitMethod = function () {\n return InstanceWriter.terminateInstance(instance, app, defaultRequestParams);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really terminate ' + instance.instanceId + '?',\n buttonText: 'Terminate ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.terminateInstanceAndShrinkServerGroup = function terminateInstanceAndShrinkServerGroup() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Terminating ' + instance.instanceId + ' and shrinking server group',\n onTaskComplete: function () {\n if ($state.includes('**.instanceDetails', { instanceId: instance.instanceId })) {\n $state.go('^');\n }\n },\n };\n\n const submitMethod = function () {\n return InstanceWriter.terminateInstanceAndShrinkServerGroup(instance, app, defaultRequestParams);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really terminate ' + instance.instanceId + ' and shrink ' + instance.serverGroup + '?',\n buttonText: 'Terminate ' + instance.instanceId + ' and shrink ' + instance.serverGroup,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.enableInstanceInDiscovery = function enableInstanceInDiscovery() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Enabling ' + instance.instanceId + ' in discovery',\n };\n\n const submitMethod = function () {\n return InstanceWriter.enableInstanceInDiscovery(instance, app, defaultRequestParams);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really enable ' + instance.instanceId + ' in discovery?',\n buttonText: 'Enable ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.disableInstanceInDiscovery = function disableInstanceInDiscovery() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Disabling ' + instance.instanceId + ' in discovery',\n };\n\n const submitMethod = function () {\n return InstanceWriter.disableInstanceInDiscovery(instance, app, defaultRequestParams);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really disable ' + instance.instanceId + ' in discovery?',\n buttonText: 'Disable ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.hasHealthState = function hasHealthState(healthProviderType, state) {\n const instance = $scope.instance;\n const healthMetrics = instance.health || [];\n return healthMetrics.some(function (health) {\n return health.type === healthProviderType && health.state === state;\n });\n };\n\n const initialize = app.isStandalone\n ? retrieveInstance()\n : $q.all([app.serverGroups.ready(), app.loadBalancers.ready()]).then(retrieveInstance);\n\n initialize.then(() => {\n // Two things to look out for here:\n // 1. If the retrieveInstance call completes *after* the user has navigated away from the view, there\n // is no point in subscribing to the refresh\n // 2. If this is a standalone instance, there is no application that will refresh\n if (!$scope.$$destroyed && !app.isStandalone) {\n app.serverGroups.onRefresh($scope, retrieveInstance);\n }\n });\n\n $scope.account = instance.account;\n },\n ],\n);\n","import { UISref, UISrefActive } from '@uirouter/react';\nimport React from 'react';\n\nimport type { IInstanceCounts } from '@spinnaker/core';\nimport { LoadBalancerServerGroup } from '@spinnaker/core';\n\nimport type { IEcsLoadBalancer, IEcsTargetGroup } from '../domain/IEcsLoadBalancer';\n\nexport interface IEcsTargetGroupProps {\n loadBalancer: IEcsLoadBalancer;\n targetGroup: IEcsTargetGroup;\n showServerGroups: boolean;\n showInstances: boolean;\n}\n\nexport class EcsTargetGroup extends React.Component<IEcsTargetGroupProps> {\n public render(): React.ReactElement<EcsTargetGroup> {\n const { targetGroup, loadBalancer, showServerGroups } = this.props;\n\n const params = {\n loadBalancerName: loadBalancer.name,\n region: targetGroup.region,\n accountId: targetGroup.account,\n name: targetGroup.targetGroupName,\n vpcId: targetGroup.vpcId,\n provider: targetGroup.cloudProvider,\n };\n\n // info not yet available; HealthCounts component requires it,\n // but will not render if no values are defined.\n const emptyInstanceCounts: IInstanceCounts = {\n up: undefined,\n down: undefined,\n starting: undefined,\n succeeded: undefined,\n failed: undefined,\n unknown: undefined,\n outOfService: undefined,\n };\n\n return (\n <div className=\"target-group-container container-fluid no-padding\">\n <UISrefActive class=\"active\">\n <UISref to=\".ecsTargetGroupDetails\" params={params}>\n <div className={`clickable clickable-row row no-margin-y target-group-header`}>\n <div className=\"col-md-8 target-group-title\">{targetGroup.targetGroupName}</div>\n </div>\n </UISref>\n </UISrefActive>\n {showServerGroups &&\n targetGroup.serverGroups.map((sgName) => {\n return (\n <LoadBalancerServerGroup\n key={sgName}\n account={targetGroup.account}\n region={targetGroup.region}\n serverGroup={{\n account: targetGroup.account,\n cloudProvider: targetGroup.cloudProvider,\n cluster: sgName,\n instanceCounts: emptyInstanceCounts,\n instances: targetGroup.instances,\n name: sgName,\n type: targetGroup.type,\n region: targetGroup.region,\n }}\n showInstances={false} // TODO: use prop when instanceCounts available\n />\n );\n })}\n </div>\n );\n }\n}\n","import { isEqual } from 'lodash';\nimport React from 'react';\n\nimport type { ILoadBalancerClusterContainerProps } from '@spinnaker/core';\n\nimport { EcsTargetGroup } from './TargetGroup';\nimport type { IEcsLoadBalancer } from '../domain/IEcsLoadBalancer';\n\nexport class EcsLoadBalancerClusterContainer extends React.Component<ILoadBalancerClusterContainerProps> {\n public shouldComponentUpdate(nextProps: ILoadBalancerClusterContainerProps) {\n const serverGroupsDiffer = () =>\n !isEqual(\n (nextProps.serverGroups || []).map((g) => g.name),\n (this.props.serverGroups || []).map((g) => g.name),\n );\n const targetGroupsDiffer = () =>\n !isEqual(\n ((nextProps.loadBalancer as IEcsLoadBalancer).targetGroups || []).map((t) => t.targetGroupName),\n ((this.props.loadBalancer as IEcsLoadBalancer).targetGroups || []).map((t) => t.targetGroupName),\n );\n return (\n nextProps.showInstances !== this.props.showInstances ||\n nextProps.showServerGroups !== this.props.showServerGroups ||\n nextProps.loadBalancer !== this.props.loadBalancer ||\n serverGroupsDiffer() ||\n targetGroupsDiffer()\n );\n }\n\n public render(): React.ReactElement<EcsLoadBalancerClusterContainer> {\n const { loadBalancer, showInstances, showServerGroups } = this.props;\n const lb = loadBalancer as IEcsLoadBalancer;\n\n const TargetGroups = lb.targetGroups.map((targetGroup) => {\n return (\n <EcsTargetGroup\n key={targetGroup.targetGroupName}\n loadBalancer={loadBalancer as IEcsLoadBalancer}\n targetGroup={targetGroup}\n showInstances={showInstances}\n showServerGroups={showServerGroups}\n />\n );\n });\n\n return <div className=\"cluster-container\">{TargetGroups}</div>;\n }\n}\n","import React from 'react';\n\nimport type { IEcsListener } from '../domain/IEcsLoadBalancer';\n\nexport interface IEcsListenerProps {\n listener: IEcsListener;\n}\n\nexport class EcsListener extends React.Component<IEcsListenerProps> {\n constructor(props: IEcsListenerProps) {\n super(props);\n }\n\n private getTargetGroupNameFromArn(arn: string): string {\n const parts = arn.split('/');\n if (parts.length < 0) {\n return arn;\n }\n return parts[1];\n }\n\n public render(): React.ReactElement<EcsListener> {\n const { port, protocol, defaultActions } = this.props.listener;\n\n // TODO: retrieve and display 'rules' in addition to default actions\n return (\n <div>\n <h4>\n {protocol}:{port}\n </h4>\n <div style={{ paddingLeft: 10 }}>\n <i>default actions</i>\n <ul>\n {defaultActions.map((action, i) => {\n if (action.type == 'forward') {\n return (\n <li key={i}>\n &rarr;\n <i className=\"fa fa-fw fa-crosshairs icon\" aria-hidden=\"true\"></i>\n <span>\n {action.targetGroupArn ||\n action.forwardConfig.targetGroups.map((tg) => {\n return this.getTargetGroupNameFromArn(tg.targetGroupArn);\n })}\n </span>\n </li>\n );\n } else {\n return (\n <li key={i}>\n {action.type}:{' '}\n {action.redirectConfig.statusCode ||\n action.fixedResponseConfig.statusCode ||\n action.authenticateOidcConfig.clientId ||\n action.authenticateCognitoActionConfig.userPoolDomain}\n </li>\n );\n }\n })}\n </ul>\n </div>\n </div>\n );\n }\n}\n","import { UISref, UISrefActive } from '@uirouter/react';\nimport React from 'react';\n\nimport type { Application } from '@spinnaker/core';\nimport { AccountTag, CollapsibleSection, Spinner, timestamp } from '@spinnaker/core';\n\nimport type { IEcsLoadBalancer } from '../../domain/IEcsLoadBalancer';\nimport { EcsListener } from '../listener';\n\ninterface IEcsLoadBalancerFromStateParams {\n accountId: string;\n region: string;\n name: string;\n vpcId: string;\n}\n\ninterface IEcsLoadBalancerDetailsState {\n loadBalancer: IEcsLoadBalancer;\n loadBalancerNotFound?: string;\n loading: boolean;\n refreshListenerUnsubscribe: () => void;\n}\n\nexport interface IEcsLoadBalancerDetailsProps {\n app: Application;\n accountId: string;\n loadBalancer: IEcsLoadBalancerFromStateParams;\n}\n\nexport class EcsLoadBalancerDetails extends React.Component<\n IEcsLoadBalancerDetailsProps,\n IEcsLoadBalancerDetailsState\n> {\n constructor(props: IEcsLoadBalancerDetailsProps) {\n super(props);\n this.state = {\n loading: true,\n loadBalancer: undefined,\n refreshListenerUnsubscribe: () => {},\n };\n\n props.app\n .getDataSource('loadBalancers')\n .ready()\n .then(() => this.extractLoadBalancer());\n }\n\n public componentWillUnmount(): void {\n this.state.refreshListenerUnsubscribe();\n }\n\n private extractLoadBalancer(): void {\n const { name, region } = this.props.loadBalancer;\n const loadBalancer: IEcsLoadBalancer = this.props.app\n .getDataSource('loadBalancers')\n .data.find((test: IEcsLoadBalancer) => {\n return test.name === name && test.account === this.props.loadBalancer.accountId && test.region === region;\n });\n\n this.setState({\n loading: false,\n loadBalancer,\n });\n this.state.refreshListenerUnsubscribe();\n\n if (loadBalancer) {\n this.setState({\n refreshListenerUnsubscribe: this.props.app\n .getDataSource('loadBalancers')\n .onRefresh(null, () => this.extractLoadBalancer()),\n });\n } else {\n this.setState({\n refreshListenerUnsubscribe: () => {},\n });\n }\n }\n\n public render(): React.ReactElement<EcsLoadBalancerDetails> {\n const loadBalancerName = this.props.loadBalancer.name;\n const { loadBalancer, loading } = this.state;\n const { accountId } = this.props;\n\n const CloseButton = (\n <div className=\"close-button\">\n <UISref to=\"^\">\n <span className=\"glyphicon glyphicon-remove\" />\n </UISref>\n </div>\n );\n\n const loadingHeader = () => (\n <div className=\"header\">\n {CloseButton}\n <div className=\"horizontal center middle\">\n <Spinner size=\"small\" />\n </div>\n </div>\n );\n\n const notFoundContent = () => (\n <div className=\"content\">\n <div className=\"content-section\">\n <div className=\"content-body text-center\">\n <h3>Load balancer not found.</h3>\n </div>\n </div>\n </div>\n );\n\n const loadBalancerHeader = () => (\n <div className=\"header\">\n {CloseButton}\n <div className=\"header-text horizontal middle\">\n <i className=\"fa icon-sitemap\" />\n <h3 className=\"horizontal middle space-between flex-1\">{loadBalancerName}</h3>\n </div>\n </div>\n );\n\n const loadBalancerContent = () => (\n <div className=\"content\">\n <CollapsibleSection heading=\"Load Balancer Details\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n <dt>Created</dt>\n <dd>{timestamp(loadBalancer.createdTime)}</dd>\n <dt>In</dt>\n <dd>\n <AccountTag account={accountId} />\n <br />\n {loadBalancer.region}\n </dd>\n <dt>VPC</dt>\n <dd>{loadBalancer.vpcId}</dd>\n <dt>Type</dt>\n <dd>{loadBalancer.loadBalancerType}</dd>\n <dt>IP Type</dt>\n <dd>{loadBalancer.ipAddressType}</dd>\n </dl>\n <dl className=\"horizontal-when-filters-collapsed\">\n <dt>Availability Zones</dt>\n <dd>\n <ul>\n {loadBalancer.availabilityZones.map((az) => {\n return <li key={az}>{az}</li>;\n })}\n </ul>\n </dd>\n </dl>\n <dl className=\"horizontal-when-filters-collapsed\">\n <dt>Target Groups</dt>\n <dd>\n <ul>\n {loadBalancer.targetGroups.map((tg) => {\n return (\n <li key={tg.targetGroupName}>\n <UISrefActive class=\"active\">\n <UISref\n to=\"^.ecsTargetGroupDetails\"\n params={{\n loadBalancerName: loadBalancer.name,\n region: loadBalancer.region,\n accountId: loadBalancer.account,\n name: tg.targetGroupName,\n vpcId: tg.vpcId,\n provider: loadBalancer.cloudProvider,\n }}\n >\n <a>{tg.targetGroupName}</a>\n </UISref>\n </UISrefActive>\n </li>\n );\n })}\n </ul>\n </dd>\n </dl>\n <dl className=\"horizontal-when-filters-collapsed\">\n <dt>DNS Name</dt>\n <dd>\n <a target=\"_blank\" href={'http://' + loadBalancer.dnsname}>\n {loadBalancer.dnsname}\n </a>\n </dd>\n </dl>\n </CollapsibleSection>\n <CollapsibleSection heading=\"Status\" defaultExpanded={false}>\n <span>Select a target group to check the instance health status from the view of its server groups.</span>\n </CollapsibleSection>\n <CollapsibleSection heading=\"Listeners\" defaultExpanded={false}>\n {loadBalancer.listeners ? (\n loadBalancer.listeners.map((listener, index) => {\n return (\n <div key={index}>\n <span>\n <EcsListener listener={listener}></EcsListener>\n </span>\n </div>\n );\n })\n ) : (\n <li>No listeners provided.</li>\n )}\n </CollapsibleSection>\n <CollapsibleSection heading=\"Firewalls\" defaultExpanded={false}>\n <ul>\n {loadBalancer.securityGroups ? (\n loadBalancer.securityGroups.map((sg) => {\n return <li key={sg}>{sg}</li>;\n })\n ) : (\n <li>No security groups provided.</li>\n )}\n </ul>\n </CollapsibleSection>\n <CollapsibleSection heading=\"Subnets\" defaultExpanded={false}>\n <ul>\n {loadBalancer.subnets.map((subnet) => {\n return <li key={subnet}>{subnet}</li>;\n })}\n </ul>\n </CollapsibleSection>\n </div>\n );\n\n return (\n <div className=\"details-panel\">\n {loading && loadingHeader()}\n {!loading && loadBalancerHeader()}\n {!loading && !loadBalancer && notFoundContent()}\n {!loading && loadBalancer && loadBalancerContent()}\n </div>\n );\n }\n}\n","import { UISref, UISrefActive } from '@uirouter/react';\nimport React from 'react';\n\nimport type { Application } from '@spinnaker/core';\nimport { AccountTag, CollapsibleSection, Spinner } from '@spinnaker/core';\n\nimport type { IEcsLoadBalancer, IEcsTargetGroup } from '../../domain/IEcsLoadBalancer';\n\ninterface IEcsTargetGroupFromStateParams {\n loadBalancerName: string;\n targetGroupName: string;\n region: string;\n vpcId: string;\n}\n\ninterface IEcsTargetGroupDetailsState {\n loadBalancer: IEcsLoadBalancer;\n targetGroup: IEcsTargetGroup;\n targetGroupNotFound?: string;\n loading: boolean;\n refreshListenerUnsubscribe: () => void;\n}\n\nexport interface IEcsTargetGroupProps {\n app: Application;\n accountId: string;\n name: string;\n targetGroup: IEcsTargetGroupFromStateParams;\n provider: string;\n}\n\nexport class EcsTargetGroupDetails extends React.Component<IEcsTargetGroupProps, IEcsTargetGroupDetailsState> {\n constructor(props: IEcsTargetGroupProps) {\n super(props);\n this.state = {\n loading: true,\n targetGroup: undefined,\n loadBalancer: undefined,\n refreshListenerUnsubscribe: () => {},\n };\n\n props.app\n .getDataSource('loadBalancers')\n .ready()\n .then(() => this.extractTargetGroup());\n }\n\n public componentWillUnmount(): void {\n this.state.refreshListenerUnsubscribe();\n }\n\n private extractTargetGroup(): void {\n const { loadBalancerName, region, targetGroupName } = this.props.targetGroup;\n const loadBalancer: IEcsLoadBalancer = this.props.app\n .getDataSource('loadBalancers')\n .data.find((test: IEcsLoadBalancer) => {\n return test.name === loadBalancerName && test.account === this.props.accountId && test.region === region;\n });\n\n this.setState({\n loadBalancer,\n });\n this.state.refreshListenerUnsubscribe();\n\n if (!loadBalancer) {\n this.setState({\n loading: false,\n targetGroup: null,\n });\n } else {\n const targetGroup: IEcsTargetGroup = loadBalancer.targetGroups.find(\n (tg) => tg.targetGroupName === targetGroupName,\n );\n if (!targetGroup) {\n this.setState({\n loading: false,\n targetGroup: null,\n });\n }\n\n if (targetGroup) {\n this.setState({\n loading: false,\n targetGroup,\n });\n\n if (targetGroup) {\n this.setState({\n refreshListenerUnsubscribe: this.props.app\n .getDataSource('loadBalancers')\n .onRefresh(null, () => this.extractTargetGroup()),\n });\n } else {\n this.setState({\n refreshListenerUnsubscribe: () => {},\n });\n }\n }\n }\n }\n\n public render(): React.ReactElement<EcsTargetGroupDetails> {\n const { name, accountId } = this.props;\n const region = this.props.targetGroup.region;\n const { targetGroup, loadBalancer, loading } = this.state;\n\n const CloseButton = (\n <div className=\"close-button\">\n <UISref to=\"^\">\n <span className=\"glyphicon glyphicon-remove\" />\n </UISref>\n </div>\n );\n\n const loadingHeader = () => (\n <div className=\"header\">\n {CloseButton}\n <div className=\"horizontal center middle\">\n <Spinner size=\"small\" />\n </div>\n </div>\n );\n\n const notFoundContent = () => (\n <div className=\"content\">\n <div className=\"content-section\">\n <div className=\"content-body text-center\">\n <h3>Target group not found.</h3>\n </div>\n </div>\n </div>\n );\n\n const targetGroupHeader = () => (\n <div className=\"header\">\n <div className=\"header-text horizontal middle\">\n <i className=\"fa fa-crosshairs icon\" aria-hidden=\"true\"></i>\n <h3 className=\"horizontal middle space-between flex-1\">{name}</h3>\n </div>\n </div>\n );\n\n const targetGroupContent = () => (\n <div className=\"content\">\n <CollapsibleSection heading=\"Target Group Details\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n <dt>In</dt>\n <dd>\n <AccountTag account={accountId}></AccountTag>\n <br />\n {targetGroup.region}\n </dd>\n <dt>VPC</dt>\n <dd>{targetGroup.vpcId}</dd>\n <dt>Protocol</dt>\n <dd>{targetGroup.protocol}</dd>\n <dt>Port</dt>\n <dd>{targetGroup.port}</dd>\n <dt>Target Type</dt>\n <dd>{targetGroup.targetType.toUpperCase()}</dd>\n </dl>\n <dl className=\"horizontal-when-filters-collapsed\">\n <dt>Load Balancers</dt>\n <dd>\n {/* TODO: use UISref to display/highlight LBs in this app. See core/.../LoadBalancer.tsx */}\n <ul className=\"collapse-margin-on-filter-collapse\">\n {targetGroup.loadBalancerNames ? (\n targetGroup.loadBalancerNames.map((lb, i) => {\n return <li key={i}>{lb}</li>;\n })\n ) : (\n <li>No load balncers provided.</li>\n )}\n </ul>\n </dd>\n </dl>\n <dl className=\"horizontal-when-filters-collapsed\">\n <dt>Load Balancer DNS Name</dt>\n <dd>\n <a target=\"_blank\" href={'http://' + loadBalancer.dnsname}>\n {loadBalancer.dnsname}\n </a>\n </dd>\n </dl>\n <dl className=\"horizontal-when-filters-collapsed\">\n <dt>Server Groups</dt>\n <dd>\n <ul className=\"collapse-margin-on-filter-collapse\">\n {targetGroup.serverGroups.map((sg, i) => {\n return (\n <li key={i}>\n <UISrefActive class=\"active\">\n <UISref\n to=\"^.serverGroup\"\n params={{\n region: region,\n accountId: accountId,\n serverGroup: sg,\n provider: 'ecs',\n }}\n >\n <a>{sg}</a>\n </UISref>\n </UISrefActive>\n </li>\n );\n })}\n </ul>\n </dd>\n </dl>\n </CollapsibleSection>\n <CollapsibleSection heading=\"Health Checks\" defaultExpanded={false}>\n <dl className=\"horizontal-when-filters-collapsed\">\n <dt>Target</dt>\n <dd>\n {targetGroup.healthCheckProtocol}:{targetGroup.healthCheckPort}\n {targetGroup.healthCheckPath}\n </dd>\n <dt>Timeout</dt>\n <dd>{targetGroup.healthCheckTimeoutSeconds} seconds</dd>\n <dt>Interval</dt>\n <dd>{targetGroup.healthCheckIntervalSeconds} seconds</dd>\n <dt>Healthy Threshold</dt>\n <dd>{targetGroup.healthyThresholdCount}</dd>\n <dt>Unhealthy Threshold</dt>\n <dd>{targetGroup.unhealthyThresholdCount}</dd>\n <dt>Matcher</dt>\n <dd>HTTP Code(s): {targetGroup && targetGroup.matcher ? targetGroup.matcher.httpCode : 'None'}</dd>\n </dl>\n </CollapsibleSection>\n <CollapsibleSection heading=\"Attributes\" defaultExpanded={false}>\n <dl>\n <dt>Deregistration Delay Timeout</dt>\n <dd>{targetGroup.attributes['deregistration_delay.timeout_seconds'] || 0} seconds</dd>\n <dt>Stickiness Enabled</dt>\n <dd>{targetGroup.attributes['stickiness.enabled'] || 'N/A'}</dd>\n </dl>\n </CollapsibleSection>\n </div>\n );\n\n return (\n <div className=\"details-panel\">\n {loading && loadingHeader()}\n {!loading && targetGroupHeader()}\n {!loading && !targetGroup && notFoundContent()}\n {!loading && targetGroup && targetGroupContent()}\n </div>\n );\n }\n}\n","import type { IQService } from 'angular';\n\nimport type { IEcsLoadBalancer, IEcsLoadBalancerSourceData, IEcsTargetGroup } from '../domain/IEcsLoadBalancer';\n\nexport class EcsLoadBalancerTransformer {\n public static $inject = ['$q'];\n constructor(private $q: IQService) {}\n\n public normalizeLoadBalancer(loadBalancer: IEcsLoadBalancerSourceData): PromiseLike<IEcsLoadBalancer> {\n loadBalancer.targetGroups.forEach((tg: IEcsTargetGroup) => {\n tg.region = loadBalancer.region;\n tg.account = loadBalancer.account;\n tg.cloudProvider = loadBalancer.cloudProvider;\n if (loadBalancer.targetGroupServices) {\n const tgServiceMap = loadBalancer.targetGroupServices;\n tg.serverGroups = tgServiceMap[tg.targetGroupArn];\n }\n });\n return this.$q.resolve(loadBalancer);\n }\n}\n","import type { StateParams } from '@uirouter/angularjs';\nimport { module } from 'angular';\n\nimport type { ApplicationStateProvider, INestedState } from '@spinnaker/core';\nimport { APPLICATION_STATE_PROVIDER } from '@spinnaker/core';\n\nimport { EcsTargetGroupDetails } from '../loadBalancer/details/targetGroupDetails';\n//import { IEcsTargetGroup } from '../domain/IEcsLoadBalancer';\n\nexport const ECS_TARGET_GROUP_STATES = 'spinnaker.ecs.loadBalancer.targetGroup.states';\nmodule(ECS_TARGET_GROUP_STATES, [APPLICATION_STATE_PROVIDER]).config([\n 'applicationStateProvider',\n (applicationStateProvider: ApplicationStateProvider) => {\n const ecsTargetGroupDetails: INestedState = {\n name: 'ecsTargetGroupDetails',\n url: '/ecsTargetGroupDetails/:provider/:accountId/:region/:vpcId/:loadBalancerName/:name',\n params: {\n vpcId: {\n value: null,\n squash: true,\n },\n },\n views: {\n 'detail@../insight': {\n component: EcsTargetGroupDetails,\n $type: 'react',\n },\n },\n resolve: {\n accountId: ['$stateParams', ($stateParams: StateParams) => $stateParams.accountId],\n name: ['$stateParams', ($stateParams: StateParams) => $stateParams.name],\n provider: ['$stateParams', ($stateParams: StateParams) => $stateParams.provider],\n // resolve flat params into an IEcsTargetGroup\n targetGroup: [\n '$stateParams',\n ($stateParams: StateParams) => {\n return {\n loadBalancerName: $stateParams.loadBalancerName,\n targetGroupName: $stateParams.name,\n accountId: $stateParams.accountId,\n region: $stateParams.region,\n vpcId: $stateParams.vpcId,\n };\n },\n ],\n },\n data: {\n pageTitleDetails: {\n title: 'Target Group Details',\n nameParam: 'name',\n accountParam: 'accountId',\n regionParam: 'region',\n },\n },\n };\n\n applicationStateProvider.addInsightDetailState(ecsTargetGroupDetails);\n },\n]);\n","export default \"data:image/svg+xml,%3Csvg%20id%3D%22Layer_1%22%20data-name%3D%22Layer%201%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22100%22%20height%3D%22100%22%20viewBox%3D%220%200%20100%20100%22%3E%20%20%3Ctitle%3ECompute%3C%2Ftitle%3E%20%20%3Cg%3E%20%20%20%20%3Cpolygon%20points%3D%2219.64%2022.51%2016%2024.32%2016%2075.68%2019.64%2077.49%2033.98%2051.07%2019.64%2022.51%22%20fill%3D%22%239d5025%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2230.72%2031.78%2036.08%2024.19%2060.1%2034.87%2054.5%2035.76%2030.72%2031.78%22%20fill%3D%22%239d5025%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2226.56%2068.77%2032.46%2076.88%2060.1%2064.95%2054.76%2064.12%2026.56%2068.77%22%20fill%3D%22%239d5025%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2228.12%2075.5%2019.64%2077.49%2019.64%2022.51%2028.12%2024.44%2028.12%2075.5%22%20fill%3D%22%23f58536%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2223.66%2020.5%2028.12%2018.27%2036.52%2053.56%2028.12%2081.73%2023.66%2079.5%2023.66%2020.5%22%20fill%3D%22%239d5025%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2254.46%2064.08%2060.1%2064.95%2065.26%2050.58%2060.1%2034.87%2054.46%2035.76%2054.46%2064.08%22%20fill%3D%22%239d5025%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2236.8%2079.28%2028.12%2081.73%2028.12%2018.27%2036.8%2020.73%2036.8%2079.28%22%20fill%3D%22%23f58536%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2266.01%2063.84%2028.12%2070.88%2028.12%2081.73%2066.01%2071.03%2066.01%2063.84%22%20fill%3D%22%23f58536%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2266.08%2036%2028.12%2028.79%2028.12%2018.27%2066.08%2029.04%2066.08%2036%22%20fill%3D%22%23f58536%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2260.1%2027.34%2066.19%2029.02%2066.19%2071.03%2060.1%2072.7%2060.1%2027.34%22%20fill%3D%22%23f58536%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2284%2044.45%2067.7%2045.22%2061.94%2044.83%2078.42%2031.55%2084%2044.45%22%20fill%3D%22%236b3a19%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2261.94%2044.83%2078.42%2043.9%2078.42%2031.55%2061.94%2034.22%2061.94%2044.83%22%20fill%3D%22%239d5025%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2246.43%2043.79%2063.13%2026.96%2071.62%2043.22%2054.31%2044.32%2046.43%2043.79%22%20fill%3D%22%236b3a19%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2246.43%2043.79%2063.13%2042.37%2063.13%2026.96%2046.43%2030.87%2046.43%2043.79%22%20fill%3D%22%239d5025%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2261.94%2055.39%2084%2055.77%2078.42%2068.67%2061.94%2066%2061.94%2055.39%22%20fill%3D%22%239d5025%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2246.43%2056.43%2071.62%2057.01%2063.13%2073.26%2046.43%2069.36%2046.43%2056.43%22%20fill%3D%22%239d5025%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2246.43%2056.43%2063.13%2057.86%2071.62%2057.01%2054.31%2055.9%2046.43%2056.43%22%20fill%3D%22%23fbbf93%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2284%2055.77%2067.7%2055.01%2061.94%2055.39%2078.42%2056.33%2084%2055.77%22%20fill%3D%22%23fbbf93%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2278.42%2043.9%2084%2044.45%2084%2033.22%2078.42%2031.55%2078.42%2043.9%22%20fill%3D%22%23f58536%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2271.62%2043.22%2063.13%2042.37%2063.13%2026.96%2071.62%2029.51%2071.62%2043.22%22%20fill%3D%22%23f58536%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2278.42%2056.33%2084%2055.77%2084%2067%2078.42%2068.67%2078.42%2056.33%22%20fill%3D%22%23f58536%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2271.62%2057.01%2063.13%2057.86%2063.13%2073.26%2071.62%2070.72%2071.62%2057.01%22%20fill%3D%22%23f58536%22%2F%3E%20%20%3C%2Fg%3E%3C%2Fsvg%3E\"","import { module } from 'angular';\n\nimport { REST } from '@spinnaker/core';\nimport type { IMetricAlarmDescriptor } from './MetricAlarm';\n\nexport class MetricAlarmReader {\n public listMetricAlarms(): PromiseLike<IMetricAlarmDescriptor[]> {\n return REST('/ecs/cloudMetrics/alarms').get();\n }\n}\n\nexport const METRIC_ALARM_READ_SERVICE = 'spinnaker.ecs.metricAlarm.read.service';\n\nmodule(METRIC_ALARM_READ_SERVICE, []).service('metricAlarmReader', MetricAlarmReader);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const ECS_PIPELINE_STAGES_DESTROYASG_ECSDESTROYASGSTAGE = 'spinnaker.ecs.pipeline.stage.ecs.destroyAsgStage';\nexport const name = ECS_PIPELINE_STAGES_DESTROYASG_ECSDESTROYASGSTAGE; // for backwards compatibility\nmodule(ECS_PIPELINE_STAGES_DESTROYASG_ECSDESTROYASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'destroyServerGroup',\n alias: 'destroyAsg',\n cloudProvider: 'ecs',\n templateUrl: require('./destroyAsgStage.html'),\n executionStepLabelUrl: require('./destroyAsgStepLabel.html'),\n accountExtractor: (stage) => [stage.context.credentials],\n configAccountExtractor: (stage) => [stage.credentials],\n validators: [\n {\n type: 'targetImpedance',\n message:\n 'This pipeline will attempt to destroy a server group without deploying a new version into the same cluster.',\n },\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('ecsDestroyAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('ecs').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n $scope.regions = ['us-east-1', 'us-west-1', 'eu-west-1', 'us-west-2'];\n\n $scope.targets = StageConstants.TARGET_LIST;\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'ecs';\n\n if (!stage.credentials && $scope.application.defaultCredentials.ecs) {\n stage.credentials = $scope.application.defaultCredentials.ecs;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.ecs) {\n stage.regions.push($scope.application.defaultRegions.ecs);\n }\n\n if (!stage.target) {\n stage.target = $scope.targets[0].val;\n }\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, PipelineTemplates, Registry, StageConstants } from '@spinnaker/core';\n\nexport const ECS_PIPELINE_STAGES_DISABLEASG_ECSDISABLEASGSTAGE = 'spinnaker.ecs.pipeline.stage.disableAsgStage';\nexport const name = ECS_PIPELINE_STAGES_DISABLEASG_ECSDISABLEASGSTAGE; // for backwards compatibility\nmodule(ECS_PIPELINE_STAGES_DISABLEASG_ECSDISABLEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'disableServerGroup',\n alias: 'disableAsg',\n cloudProvider: 'ecs',\n templateUrl: require('./disableAsgStage.html'),\n executionDetailsUrl: PipelineTemplates.disableAsgExecutionDetails,\n executionStepLabelUrl: require('./disableAsgStepLabel.html'),\n validators: [\n {\n type: 'targetImpedance',\n message:\n 'This pipeline will attempt to disable a server group without deploying a new version into the same cluster.',\n },\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('ecsDisableAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('ecs').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n $scope.targets = StageConstants.TARGET_LIST;\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'ecs';\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Ecs'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.ecs) {\n stage.credentials = $scope.application.defaultCredentials.ecs;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.ecs) {\n stage.regions.push($scope.application.defaultRegions.ecs);\n }\n\n if (!stage.target) {\n stage.target = $scope.targets[0].val;\n }\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry } from '@spinnaker/core';\n\nexport const ECS_PIPELINE_STAGES_DISABLECLUSTER_ECSDISABLECLUSTERSTAGE =\n 'spinnaker.ecs.pipeline.stage.disableClusterStage';\nexport const name = ECS_PIPELINE_STAGES_DISABLECLUSTER_ECSDISABLECLUSTERSTAGE; // for backwards compatibility\nmodule(ECS_PIPELINE_STAGES_DISABLECLUSTER_ECSDISABLECLUSTERSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'disableCluster',\n cloudProvider: 'ecs',\n templateUrl: require('./disableClusterStage.html'),\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n {\n type: 'requiredField',\n fieldName: 'remainingEnabledServerGroups',\n fieldLabel: 'Keep [X] enabled Server Groups',\n },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('ecsDisableClusterStageCtrl', [\n '$scope',\n function ($scope) {\n const ctrl = this;\n\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('ecs').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n ctrl.reset = () => {\n ctrl.accountUpdated();\n ctrl.resetSelectedCluster();\n };\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'ecs';\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Ecs'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.ecs) {\n stage.credentials = $scope.application.defaultCredentials.ecs;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.ecs) {\n stage.regions.push($scope.application.defaultRegions.ecs);\n }\n\n if (stage.remainingEnabledServerGroups === undefined) {\n stage.remainingEnabledServerGroups = 1;\n }\n\n ctrl.pluralize = function (str, val) {\n if (val === 1) {\n return str;\n }\n return str + 's';\n };\n\n if (stage.preferLargerOverNewer === undefined) {\n stage.preferLargerOverNewer = 'false';\n }\n stage.preferLargerOverNewer = stage.preferLargerOverNewer.toString();\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const ECS_PIPELINE_STAGES_ENABLEASG_ECSENABLEASGSTAGE = 'spinnaker.ecs.pipeline.stage.enableAsgStage';\nexport const name = ECS_PIPELINE_STAGES_ENABLEASG_ECSENABLEASGSTAGE; // for backwards compatibility\nmodule(ECS_PIPELINE_STAGES_ENABLEASG_ECSENABLEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'enableServerGroup',\n alias: 'enableAsg',\n cloudProvider: 'ecs',\n templateUrl: require('./enableAsgStage.html'),\n executionStepLabelUrl: require('./enableAsgStepLabel.html'),\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('ecsEnableAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const ctrl = this;\n\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('ecs').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n ctrl.reset = () => {\n ctrl.accountUpdated();\n ctrl.resetSelectedCluster();\n };\n\n $scope.targets = StageConstants.TARGET_LIST;\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'ecs';\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Ecs'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.ecs) {\n stage.credentials = $scope.application.defaultCredentials.ecs;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.ecs) {\n stage.regions.push($scope.application.defaultRegions.ecs);\n }\n\n if (!stage.target) {\n stage.target = $scope.targets[0].val;\n }\n\n $scope.$watch('stage.credentials', $scope.accountUpdated);\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { Registry } from '@spinnaker/core';\n\nexport const ECS_PIPELINE_STAGES_FINDIMAGEFROMTAGS_ECSFINDIMAGEFROMTAGSTAGE =\n 'spinnaker.ecs.pipeline.stage.findImageFromTagsStage';\nexport const name = ECS_PIPELINE_STAGES_FINDIMAGEFROMTAGS_ECSFINDIMAGEFROMTAGSTAGE; // for backwards compatibility\nmodule(ECS_PIPELINE_STAGES_FINDIMAGEFROMTAGS_ECSFINDIMAGEFROMTAGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'findImageFromTags',\n cloudProvider: 'ecs',\n templateUrl: require('./findImageFromTagsStage.html'),\n executionDetailsUrl: require('./findImageFromTagsExecutionDetails.html'),\n executionConfigSections: ['findImageConfig', 'taskStatus'],\n validators: [{ type: 'requiredField', fieldName: 'imageLabelOrSha' }],\n });\n })\n .controller('ecsFindImageFromTagsStageCtrl', [\n '$scope',\n function ($scope) {\n $scope.stage.cloudProvider = $scope.stage.cloudProvider || 'ecs';\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const ECS_PIPELINE_STAGES_RESIZEASG_ECSRESIZEASGSTAGE = 'spinnaker.ecs.pipeline.stage.ecs.resizeAsgStage';\nexport const name = ECS_PIPELINE_STAGES_RESIZEASG_ECSRESIZEASGSTAGE; // for backwards compatibility\nmodule(ECS_PIPELINE_STAGES_RESIZEASG_ECSRESIZEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'resizeServerGroup',\n alias: 'resizeAsg',\n cloudProvider: 'ecs',\n templateUrl: require('./resizeAsgStage.html'),\n executionConfigSections: ['resizeServerGroupConfig', 'taskStatus'],\n executionStepLabelUrl: require('./resizeAsgStepLabel.html'),\n accountExtractor: (stage) => [stage.context.credentials],\n configAccountExtractor: (stage) => [stage.credentials],\n validators: [\n {\n type: 'targetImpedance',\n message:\n 'This pipeline will attempt to resize a server group without deploying a new version into the same cluster.',\n },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'action' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('ecsResizeAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const ctrl = this;\n\n const stage = $scope.stage;\n\n $scope.viewState = {\n accountsLoaded: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('ecs').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.viewState.accountsLoaded = true;\n });\n\n $scope.resizeTargets = StageConstants.TARGET_LIST;\n\n $scope.scaleActions = [\n {\n label: 'Scale Up',\n val: 'scale_up',\n },\n {\n label: 'Scale Down',\n val: 'scale_down',\n },\n {\n label: 'Scale to Cluster Size',\n val: 'scale_to_cluster',\n },\n {\n label: 'Scale to Exact Size',\n val: 'scale_exact',\n },\n ];\n\n $scope.resizeTypes = [\n {\n label: 'Percentage',\n val: 'pct',\n },\n {\n label: 'Incremental',\n val: 'incr',\n },\n ];\n\n stage.capacity = stage.capacity || {};\n stage.regions = stage.regions || [];\n stage.target = stage.target || $scope.resizeTargets[0].val;\n stage.action = stage.action || $scope.scaleActions[0].val;\n stage.resizeType = stage.resizeType || $scope.resizeTypes[0].val;\n if (stage.targetHealthyDeployPercentage === undefined) {\n stage.targetHealthyDeployPercentage = 100;\n }\n if (!stage.action && stage.resizeType === 'exact') {\n stage.action = 'scale_exact';\n }\n stage.cloudProvider = 'ecs';\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Ecs'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.ecs) {\n stage.credentials = $scope.application.defaultCredentials.ecs;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.ecs) {\n stage.regions.push($scope.application.defaultRegions.ecs);\n }\n\n ctrl.updateResizeType = function () {\n if (stage.action === 'scale_exact') {\n stage.resizeType = 'exact';\n delete stage.scalePct;\n delete stage.scaleNum;\n } else {\n stage.capacity = {};\n if (stage.resizeType === 'pct') {\n delete stage.scaleNum;\n } else {\n stage.resizeType = 'incr';\n delete stage.scalePct;\n stage.scaleNum = stage.scaleNum || 0;\n }\n }\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry } from '@spinnaker/core';\n\nexport const ECS_PIPELINE_STAGES_SCALEDOWNCLUSTER_ECSSCALEDOWNCLUSTERSTAGE =\n 'spinnaker.ecs.pipeline.stage.scaleDownClusterStage';\nexport const name = ECS_PIPELINE_STAGES_SCALEDOWNCLUSTER_ECSSCALEDOWNCLUSTERSTAGE; // for backwards compatibility\nmodule(ECS_PIPELINE_STAGES_SCALEDOWNCLUSTER_ECSSCALEDOWNCLUSTERSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'scaleDownCluster',\n cloudProvider: 'ecs',\n templateUrl: require('./scaleDownClusterStage.html'),\n accountExtractor: (stage) => [stage.context.credentials],\n configAccountExtractor: (stage) => [stage.credentials],\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n {\n type: 'requiredField',\n fieldName: 'remainingFullSizeServerGroups',\n fieldLabel: 'Keep [X] full size Server Groups',\n },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n strategy: true,\n });\n })\n .controller('ecsScaleDownClusterStageCtrl', [\n '$scope',\n function ($scope) {\n const ctrl = this;\n\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('ecs').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'ecs';\n\n if (!stage.credentials && $scope.application.defaultCredentials.ecs) {\n stage.credentials = $scope.application.defaultCredentials.ecs;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.ecs) {\n stage.regions.push($scope.application.defaultRegions.ecs);\n }\n\n if (stage.remainingFullSizeServerGroups === undefined) {\n stage.remainingFullSizeServerGroups = 1;\n }\n\n if (stage.allowScaleDownActive === undefined) {\n stage.allowScaleDownActive = false;\n }\n\n ctrl.pluralize = function (str, val) {\n if (val === 1) {\n return str;\n }\n return str + 's';\n };\n\n if (stage.preferLargerOverNewer === undefined) {\n stage.preferLargerOverNewer = 'false';\n }\n stage.preferLargerOverNewer = stage.preferLargerOverNewer.toString();\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry } from '@spinnaker/core';\n\nexport const ECS_PIPELINE_STAGES_SHRINKCLUSTER_ECSSHRINKCLUSTERSTAGE =\n 'spinnaker.ecs.pipeline.stage.ecs.shrinkClusterStage';\nexport const name = ECS_PIPELINE_STAGES_SHRINKCLUSTER_ECSSHRINKCLUSTERSTAGE; // for backwards compatibility\nmodule(ECS_PIPELINE_STAGES_SHRINKCLUSTER_ECSSHRINKCLUSTERSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'shrinkCluster',\n cloudProvider: 'ecs',\n templateUrl: require('./shrinkClusterStage.html'),\n accountExtractor: (stage) => [stage.context.credentials],\n configAccountExtractor: (stage) => [stage.credentials],\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'shrinkToSize', fieldLabel: 'shrink to [X] Server Groups' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('ecsShrinkClusterStageCtrl', [\n '$scope',\n function ($scope) {\n const ctrl = this;\n\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('ecs').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'ecs';\n\n if (!stage.credentials && $scope.application.defaultCredentials.ecs) {\n stage.credentials = $scope.application.defaultCredentials.ecs;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.ecs) {\n stage.regions.push($scope.application.defaultRegions.ecs);\n }\n\n if (stage.shrinkToSize === undefined) {\n stage.shrinkToSize = 1;\n }\n\n if (stage.allowDeleteActive === undefined) {\n stage.allowDeleteActive = false;\n }\n\n ctrl.pluralize = function (str, val) {\n if (val === 1) {\n return str;\n }\n return str + 's';\n };\n\n if (stage.retainLargerOverNewer === undefined) {\n stage.retainLargerOverNewer = 'false';\n }\n stage.retainLargerOverNewer = stage.retainLargerOverNewer.toString();\n },\n ]);\n","import { module } from 'angular';\n\nimport type { IPlacementStrategy } from './IPlacementStrategy';\n\nexport class PlacementStrategyService {\n public getPredefinedStrategy(strategyName: string): IPlacementStrategy[] {\n if (strategyName === 'AZ Balanced Spread') {\n return this.getAzBalancedSpreadStrategy();\n } else if (strategyName === 'AZ Balanced BinPack' || strategyName === 'AZ Balanced BinPack Memory') {\n // Note: 'BinPack' is a misleading term which was replaced later by 'BinPack Memory' as it was more clear\n return this.getAzBalancedMemoryBinPackStrategy();\n } else if (strategyName === 'BinPack' || strategyName === 'BinPack Memory') {\n // Note: 'BinPack' is a misleading term which was replaced later by 'BinPack Memory' as it was more clear\n return this.getBinPackMemoryStrategy();\n } else if (strategyName === 'AZ Balanced BinPack CPU') {\n return this.getAzBalancedCpuBinPackStrategy();\n } else if (strategyName === 'BinPack CPU') {\n return this.getBinPackCpuStrategy();\n } else if (strategyName === 'One Task Per Host') {\n return this.getOneTaskPerHostStrategy();\n } else {\n // TODO: Add support for custom placement strategy.\n return [];\n }\n }\n\n public getAzBalancedSpreadStrategy(): IPlacementStrategy[] {\n return [\n { type: 'spread', field: 'attribute:ecs.availability-zone' },\n { type: 'spread', field: 'instanceId' },\n ];\n }\n\n public getAzBalancedMemoryBinPackStrategy(): IPlacementStrategy[] {\n return [\n { type: 'spread', field: 'attribute:ecs.availability-zone' },\n { type: 'binpack', field: 'memory' },\n ];\n }\n\n public getBinPackMemoryStrategy(): IPlacementStrategy[] {\n return [{ type: 'binpack', field: 'memory' }];\n }\n\n public getAzBalancedCpuBinPackStrategy(): IPlacementStrategy[] {\n return [\n { type: 'spread', field: 'attribute:ecs.availability-zone' },\n { type: 'binpack', field: 'cpu' },\n ];\n }\n\n public getBinPackCpuStrategy(): IPlacementStrategy[] {\n return [{ type: 'binpack', field: 'cpu' }];\n }\n\n public getOneTaskPerHostStrategy(): IPlacementStrategy[] {\n return [{ type: 'spread', field: 'instanceId' }];\n }\n}\n\nexport const PLACEMENT_STRATEGY_SERVICE = 'spinnaker.ecs.placementStrategyService.service';\n\nmodule(PLACEMENT_STRATEGY_SERVICE, []).service('placementStrategyService', PlacementStrategyService);\n","import { module } from 'angular';\n\nimport { REST } from '@spinnaker/core';\nimport type { ISecretDescriptor } from './ISecret';\n\nexport class SecretReader {\n public listSecrets(): PromiseLike<ISecretDescriptor[]> {\n return REST('/ecs/secrets').get();\n }\n}\n\nexport const ECS_SECRET_READ_SERVICE = 'spinnaker.ecs.secret.read.service';\n\nmodule(ECS_SECRET_READ_SERVICE, []).service('secretReader', SecretReader);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { VpcReader } from '@spinnaker/amazon';\nimport {\n CloudProviderRegistry,\n FirewallLabels,\n MANAGED_RESOURCE_DETAILS_INDICATOR,\n RecentHistoryService,\n SECURITY_GROUP_READER,\n} from '@spinnaker/core';\n\nexport const ECS_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER =\n 'spinnaker.ecs.securityGroup.details.controller';\nexport const name = ECS_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER; // for backwards compatibility\nangular\n .module(ECS_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER, [\n UIROUTER_ANGULARJS,\n SECURITY_GROUP_READER,\n MANAGED_RESOURCE_DETAILS_INDICATOR,\n ])\n .controller('ecsSecurityGroupDetailsCtrl', [\n '$scope',\n '$state',\n 'resolvedSecurityGroup',\n 'app',\n 'securityGroupReader',\n function ($scope, $state, resolvedSecurityGroup, app, securityGroupReader) {\n this.application = app;\n const application = app;\n const securityGroup = resolvedSecurityGroup;\n this.firewallLabel = FirewallLabels.get('Firewall');\n\n // needed for standalone instances\n $scope.detailsTemplateUrl = CloudProviderRegistry.getValue('ecs', 'securityGroup.detailsTemplateUrl');\n\n $scope.state = {\n loading: true,\n standalone: app.isStandalone,\n };\n\n function extractSecurityGroup() {\n return securityGroupReader\n .getSecurityGroupDetails(\n application,\n securityGroup.accountId,\n securityGroup.provider,\n securityGroup.region,\n securityGroup.vpcId,\n securityGroup.name,\n )\n .then(function (details) {\n return VpcReader.getVpcName(details.vpcId).then((name) => {\n details.vpcName = name;\n return details;\n });\n })\n .then(function (details) {\n $scope.state.loading = false;\n\n if (!details || _.isEmpty(details)) {\n fourOhFour();\n } else {\n const applicationSecurityGroup = securityGroupReader.getApplicationSecurityGroup(\n application,\n securityGroup.accountId,\n securityGroup.region,\n securityGroup.name,\n );\n\n angular.extend(securityGroup, applicationSecurityGroup, details);\n $scope.securityGroup = securityGroup;\n $scope.ipRules = buildIpRulesModel(securityGroup);\n $scope.securityGroupRules = buildSecurityGroupRulesModel(securityGroup);\n }\n }, fourOhFour);\n }\n\n function buildIpRulesModel(details) {\n const groupedRangeRules = _.groupBy(details.ipRangeRules, (rule) => rule.range.ip + rule.range.cidr);\n return Object.keys(groupedRangeRules)\n .map((addr) => {\n return {\n address: addr,\n rules: buildRuleModel(groupedRangeRules, addr),\n };\n })\n .filter((rule) => rule.rules.length);\n }\n\n function buildSecurityGroupRulesModel(details) {\n const groupedRangeRules = _.groupBy(details.securityGroupRules, (rule) => rule.securityGroup.id);\n return Object.keys(groupedRangeRules)\n .map((addr) => {\n return {\n securityGroup: groupedRangeRules[addr][0].securityGroup,\n rules: buildRuleModel(groupedRangeRules, addr),\n };\n })\n .filter((rule) => rule.rules.length);\n }\n\n function buildRuleModel(groupedRangeRules, addr) {\n const rules = [];\n groupedRangeRules[addr].forEach((rule) => {\n (rule.portRanges || []).forEach((range) => {\n if (rule.protocol === '-1' || (range.startPort !== undefined && range.endPort !== undefined)) {\n rules.push({ startPort: range.startPort, endPort: range.endPort, protocol: rule.protocol });\n }\n });\n });\n return rules;\n }\n\n function fourOhFour() {\n if ($scope.$$destroyed) {\n return;\n }\n if (app.isStandalone) {\n $scope.group = securityGroup.name;\n $scope.state.notFound = true;\n $scope.state.loading = false;\n RecentHistoryService.removeLastItem('securityGroups');\n } else {\n $state.go('^', { allowModalToStayOpen: true }, { location: 'replace' });\n }\n }\n\n extractSecurityGroup().then(() => {\n // If the user navigates away from the view before the initial extractSecurityGroup call completes,\n // do not bother subscribing to the refresh\n if (!$scope.$$destroyed && !app.isStandalone) {\n app.securityGroups.onRefresh($scope, extractSecurityGroup);\n }\n });\n\n if (app.isStandalone) {\n // we still want the edit to refresh the firewall details when the modal closes\n app.securityGroups = {\n refresh: extractSecurityGroup,\n };\n }\n },\n ]);\n","import { module } from 'angular';\n\nimport type { ISecurityGroup, ISecurityGroupsByAccount } from '@spinnaker/core';\n\nexport class EcsSecurityGroupReader {\n public resolveIndexedSecurityGroup(\n indexedSecurityGroups: ISecurityGroupsByAccount,\n container: ISecurityGroup,\n securityGroupId: string,\n ): ISecurityGroup {\n return indexedSecurityGroups[container.account][container.region][securityGroupId];\n }\n}\n\nexport const ECS_SECURITY_GROUP_READER = 'spinnaker.ecs.securityGroup.reader';\nmodule(ECS_SECURITY_GROUP_READER, []).service('ecsSecurityGroupReader', EcsSecurityGroupReader);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const ECS_SECURITYGROUP_SECURITYGROUP_TRANSFORMER = 'spinnaker.ecs.securityGroup.transformer';\nexport const name = ECS_SECURITYGROUP_SECURITYGROUP_TRANSFORMER; // for backwards compatibility\nmodule(ECS_SECURITYGROUP_SECURITYGROUP_TRANSFORMER, []).factory('ecsSecurityGroupTransformer', function () {\n function normalizeSecurityGroup() {}\n\n return {\n normalizeSecurityGroup: normalizeSecurityGroup,\n };\n});\n","import { module } from 'angular';\n\nimport { ECS_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER } from './details/securityGroupDetail.controller';\nimport { ECS_SECURITY_GROUP_READER } from './securityGroup.reader';\nimport { ECS_SECURITYGROUP_SECURITYGROUP_TRANSFORMER } from './securityGroup.transformer';\n\nexport const ECS_SECURITY_GROUP_MODULE = 'spinnaker.ecs.securityGroup';\nmodule(ECS_SECURITY_GROUP_MODULE, [\n ECS_SECURITY_GROUP_READER,\n ECS_SECURITYGROUP_SECURITYGROUP_TRANSFORMER,\n ECS_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER,\n]);\n","import { REST } from '@spinnaker/core';\nimport type { IServiceDiscoveryRegistryDescriptor } from './IServiceDiscovery';\n\nexport class ServiceDiscoveryReader {\n public static listServiceDiscoveryRegistries(): PromiseLike<IServiceDiscoveryRegistryDescriptor[]> {\n return REST('/ecs/serviceDiscoveryRegistries').get();\n }\n}\n","import type { IQService } from 'angular';\nimport { module } from 'angular';\nimport { chain, clone, extend, find, flatten, has, intersection, keys, some, xor } from 'lodash';\n\nimport type { IAmazonLoadBalancer } from '@spinnaker/amazon';\nimport type {\n IAccountDetails,\n IArtifact,\n IDeploymentStrategy,\n IPipeline,\n IRegion,\n IServerGroupCommand,\n IServerGroupCommandBackingData,\n IServerGroupCommandBackingDataFiltered,\n IServerGroupCommandDirty,\n IServerGroupCommandResult,\n IServerGroupCommandViewState,\n IStage,\n ISubnet,\n LoadBalancerReader,\n SecurityGroupReader,\n ServerGroupCommandRegistry,\n} from '@spinnaker/core';\nimport {\n AccountService,\n CACHE_INITIALIZER_SERVICE,\n LOAD_BALANCER_READ_SERVICE,\n NameUtils,\n SECURITY_GROUP_READER,\n SERVER_GROUP_COMMAND_REGISTRY_PROVIDER,\n SubnetReader,\n} from '@spinnaker/core';\nimport type { IDockerImage } from '@spinnaker/docker';\nimport { DockerImageReader } from '@spinnaker/docker';\n\nimport type { IEcsCapacityProviderDetails } from '../../ecsCluster/IEcsCapacityProviderDetails';\nimport type { IEcsClusterDescriptor } from '../../ecsCluster/IEcsCluster';\nimport type { EcsClusterReader } from '../../ecsCluster/ecsCluster.read.service';\nimport type { IRoleDescriptor } from '../../iamRoles/IRole';\nimport type { IamRoleReader } from '../../iamRoles/iamRole.read.service';\nimport type { IMetricAlarmDescriptor } from '../../metricAlarm/MetricAlarm';\nimport type { MetricAlarmReader } from '../../metricAlarm/metricAlarm.read.service';\nimport type { IPlacementStrategy } from '../../placementStrategy/IPlacementStrategy';\nimport type { PlacementStrategyService } from '../../placementStrategy/placementStrategy.service';\nimport type { ISecretDescriptor } from '../../secrets/ISecret';\nimport type { SecretReader } from '../../secrets/secret.read.service';\nimport type { IServiceDiscoveryRegistryDescriptor } from '../../serviceDiscovery/IServiceDiscovery';\nimport { ServiceDiscoveryReader } from '../../serviceDiscovery/serviceDiscovery.read.service';\n\nexport interface IEcsServerGroupCommandDirty extends IServerGroupCommandDirty {\n targetGroups?: string[];\n defaulCapacityProviders?: string[];\n customCapacityProviders?: string[];\n}\n\nexport interface IEcsServerGroupCommandResult extends IServerGroupCommandResult {\n dirty: IEcsServerGroupCommandDirty;\n}\n\nexport interface IEcsDockerImage extends IDockerImage {\n imageId: string;\n message: string;\n fromTrigger: boolean;\n fromContext: boolean;\n stageId: string;\n imageLabelOrSha: string;\n}\n\nexport interface IEcsServerGroupCommandViewState extends IServerGroupCommandViewState {\n contextImages: IEcsDockerImage[];\n pipeline: IPipeline;\n currentStage: IStage;\n dirty: IEcsServerGroupCommandDirty;\n}\n\nexport interface IEcsServerGroupCommandBackingDataFiltered extends IServerGroupCommandBackingDataFiltered {\n targetGroups: string[];\n iamRoles: string[];\n ecsClusters: string[];\n availableCapacityProviders: string[];\n defaultCapacityProviderStrategy: IEcsCapacityProviderStrategyItem[];\n metricAlarms: IMetricAlarmDescriptor[];\n subnetTypes: ISubnet[];\n securityGroupNames: string[];\n secrets: string[];\n serviceDiscoveryRegistries: IServiceDiscoveryRegistryDescriptor[];\n images: IEcsDockerImage[];\n}\n\nexport interface IEcsServerGroupCommandBackingData extends IServerGroupCommandBackingData {\n filtered: IEcsServerGroupCommandBackingDataFiltered;\n targetGroups: string[];\n ecsClusters: IEcsClusterDescriptor[];\n capacityProviderDetails: IEcsCapacityProviderDetails[];\n iamRoles: IRoleDescriptor[];\n metricAlarms: IMetricAlarmDescriptor[];\n launchTypes: string[];\n networkModes: string[];\n secrets: ISecretDescriptor[];\n serviceDiscoveryRegistries: IServiceDiscoveryRegistryDescriptor[];\n images: IEcsDockerImage[];\n}\n\nexport interface IEcsTaskDefinitionArtifact {\n artifact?: IArtifact;\n artifactId?: string;\n}\n\nexport interface IEcsContainerMapping {\n containerName: string;\n imageDescription: IEcsDockerImage;\n}\n\nexport interface IEcsTargetGroupMapping {\n containerName: string;\n containerPort: number;\n targetGroup: string;\n}\n\nexport interface IEcsServiceDiscoveryRegistryAssociation {\n registry: IServiceDiscoveryRegistryDescriptor;\n containerPort: number;\n containerName: string;\n}\n\nexport interface IEcsCapacityProviderStrategyItem {\n capacityProvider: string;\n base: number;\n weight: number;\n}\n\nexport interface IEcsServerGroupCommand extends IServerGroupCommand {\n associatePublicIpAddress: boolean;\n backingData: IEcsServerGroupCommandBackingData;\n computeUnits: number;\n reservedMemory: number;\n targetHealthyDeployPercentage: number;\n targetGroup: string;\n containerPort: number;\n placementStrategyName: string;\n placementStrategySequence: IPlacementStrategy[];\n imageDescription: IEcsDockerImage;\n networkMode: string;\n subnetType: string;\n subnetTypes: string[];\n securityGroups: string[];\n securityGroupNames: string[];\n viewState: IEcsServerGroupCommandViewState;\n taskDefinitionArtifact: IEcsTaskDefinitionArtifact;\n taskDefinitionArtifactAccount: string;\n containerMappings: IEcsContainerMapping[];\n loadBalancedContainer: string;\n targetGroupMappings: IEcsTargetGroupMapping[];\n serviceDiscoveryAssociations: IEcsServiceDiscoveryRegistryAssociation[];\n useTaskDefinitionArtifact: boolean;\n evaluateTaskDefinitionArtifactExpressions: boolean;\n\n capacityProviderStrategy: IEcsCapacityProviderStrategyItem[];\n useDefaultCapacityProviders: boolean;\n ecsClusterName: string;\n subnetTypeChanged: (command: IEcsServerGroupCommand) => IServerGroupCommandResult;\n placementStrategyNameChanged: (command: IEcsServerGroupCommand) => IServerGroupCommandResult;\n regionIsDeprecated: (command: IEcsServerGroupCommand) => boolean;\n\n clusterChanged: (command: IServerGroupCommand) => void;\n}\n\nexport class EcsServerGroupConfigurationService {\n // private enabledMetrics = ['GroupMinSize', 'GroupMaxSize', 'GroupDesiredCapacity', 'GroupInServiceInstances', 'GroupPendingInstances', 'GroupStandbyInstances', 'GroupTerminatingInstances', 'GroupTotalInstances'];\n // private healthCheckTypes = ['EC2', 'ELB'];\n // private terminationPolicies = ['OldestInstance', 'NewestInstance', 'OldestLaunchConfiguration', 'ClosestToNextInstanceHour', 'Default'];\n private launchTypes = ['EC2', 'FARGATE'];\n private networkModes = ['bridge', 'host', 'awsvpc', 'none', 'default'];\n\n public static $inject = [\n '$q',\n 'loadBalancerReader',\n 'serverGroupCommandRegistry',\n 'iamRoleReader',\n 'ecsClusterReader',\n 'metricAlarmReader',\n 'placementStrategyService',\n 'securityGroupReader',\n 'secretReader',\n ];\n constructor(\n private $q: IQService,\n private loadBalancerReader: LoadBalancerReader,\n private serverGroupCommandRegistry: ServerGroupCommandRegistry,\n private iamRoleReader: IamRoleReader,\n private ecsClusterReader: EcsClusterReader,\n private metricAlarmReader: MetricAlarmReader,\n private placementStrategyService: PlacementStrategyService,\n private securityGroupReader: SecurityGroupReader,\n private secretReader: SecretReader,\n ) {}\n\n public configureUpdateCommand(command: IEcsServerGroupCommand): void {\n command.backingData = {\n // terminationPolicies: clone(this.terminationPolicies)\n launchTypes: clone(this.launchTypes),\n networkModes: clone(this.networkModes),\n } as IEcsServerGroupCommandBackingData;\n }\n\n // TODO (Bruno Carrier): Why do we need to inject an Application into this constructor so that the app works? This is strange, and needs investigating\n public configureCommand(cmd: IEcsServerGroupCommand, imageQuery = ''): PromiseLike<void> {\n this.applyOverrides('beforeConfiguration', cmd);\n cmd.toggleSuspendedProcess = (command: IEcsServerGroupCommand, process: string): void => {\n command.suspendedProcesses = command.suspendedProcesses || [];\n const processIndex = command.suspendedProcesses.indexOf(process);\n if (processIndex === -1) {\n command.suspendedProcesses.push(process);\n } else {\n command.suspendedProcesses.splice(processIndex, 1);\n }\n };\n\n cmd.processIsSuspended = (command: IEcsServerGroupCommand, process: string): boolean =>\n command.suspendedProcesses.includes(process);\n\n cmd.onStrategyChange = (command: IEcsServerGroupCommand, strategy: IDeploymentStrategy): void => {\n // Any strategy other than None or Custom should force traffic to be enabled\n if (strategy.key !== '' && strategy.key !== 'custom') {\n command.suspendedProcesses = (command.suspendedProcesses || []).filter((p) => p !== 'AddToLoadBalancer');\n }\n };\n\n cmd.regionIsDeprecated = (command: IEcsServerGroupCommand): boolean => {\n return (\n has(command, 'backingData.filtered.regions') &&\n command.backingData.filtered.regions.some((region) => region.name === command.region && region.deprecated)\n );\n };\n\n const imageQueries = cmd.imageDescription ? [this.grabImageAndTag(cmd.imageDescription.imageId)] : [];\n\n if (imageQuery) {\n imageQueries.push(imageQuery);\n }\n\n let imagesPromise;\n if (imageQueries.length) {\n imagesPromise = this.$q\n .all(\n imageQueries.map((q) =>\n DockerImageReader.findImages({\n provider: 'dockerRegistry',\n count: 50,\n q: q,\n }),\n ),\n )\n .then((promises) => flatten(promises));\n } else {\n imagesPromise = this.$q.when([]);\n }\n\n return this.$q\n .all({\n credentialsKeyedByAccount: AccountService.getCredentialsKeyedByAccount('ecs'),\n loadBalancers: this.loadBalancerReader.listLoadBalancers('ecs'),\n subnets: SubnetReader.listSubnetsByProvider('ecs'),\n iamRoles: this.iamRoleReader.listRoles('ecs'),\n ecsClusters: this.ecsClusterReader.listClusters(),\n capacityProviderDetails: this.ecsClusterReader.describeClusters(cmd.credentials, cmd.region),\n metricAlarms: this.metricAlarmReader.listMetricAlarms(),\n securityGroups: this.securityGroupReader.getAllSecurityGroups(),\n launchTypes: this.$q.when(clone(this.launchTypes)),\n networkModes: this.$q.when(clone(this.networkModes)),\n secrets: this.secretReader.listSecrets(),\n serviceDiscoveryRegistries: ServiceDiscoveryReader.listServiceDiscoveryRegistries(),\n images: imagesPromise,\n })\n .then((backingData: Partial<IEcsServerGroupCommandBackingData>) => {\n backingData.accounts = keys(backingData.credentialsKeyedByAccount);\n backingData.filtered = {} as IEcsServerGroupCommandBackingDataFiltered;\n\n if (cmd.viewState.contextImages) {\n backingData.images = backingData.images.concat(cmd.viewState.contextImages);\n }\n cmd.backingData = backingData as IEcsServerGroupCommandBackingData;\n this.configureVpcId(cmd);\n this.configureAvailableIamRoles(cmd);\n this.configureAvailableSubnetTypes(cmd);\n this.configureAvailableSecurityGroups(cmd);\n this.configureAvailableEcsClusters(cmd);\n this.setCapacityProviderDetails(cmd);\n this.configureAvailableSecrets(cmd);\n this.configureAvailableServiceDiscoveryRegistries(cmd);\n this.configureAvailableImages(cmd);\n this.configureAvailableRegions(cmd);\n this.configureLoadBalancerOptions(cmd);\n this.applyOverrides('afterConfiguration', cmd);\n this.attachEventHandlers(cmd);\n });\n }\n\n public setCapacityProviderDetails(command: IEcsServerGroupCommand): void {\n this.$q\n .all({\n capacityProviderDetails: this.ecsClusterReader.describeClusters(command.credentials, command.region),\n })\n .then((result: Partial<IEcsServerGroupCommandBackingData>) => {\n command.backingData.capacityProviderDetails = chain(result.capacityProviderDetails)\n .map((cluster) => this.mapCapacityProviderDetails(cluster))\n .value();\n });\n\n if (command.ecsClusterName != null && command.ecsClusterName.length > 0) {\n this.configureAvailableCapacityProviders(command);\n } else {\n command.backingData.filtered.availableCapacityProviders = [];\n command.backingData.filtered.defaultCapacityProviderStrategy = [];\n }\n this.checkDirtyCapacityProviders(command);\n }\n\n public configureAvailableCapacityProviders(command: IEcsServerGroupCommand): void {\n command.backingData.filtered.availableCapacityProviders = chain(command.backingData.capacityProviderDetails)\n .filter({\n clusterName: command.ecsClusterName,\n })\n .map((availableCPs) => availableCPs.capacityProviders)\n .flattenDeep<string>()\n .value();\n\n command.backingData.filtered.defaultCapacityProviderStrategy = chain(command.backingData.capacityProviderDetails)\n .filter({\n clusterName: command.ecsClusterName,\n })\n .map((availableCPs) => availableCPs.defaultCapacityProviderStrategy)\n .flattenDeep<IEcsCapacityProviderStrategyItem>()\n .value();\n }\n\n public mapCapacityProviderDetails(describeClusters: IEcsCapacityProviderDetails): IEcsCapacityProviderDetails {\n return {\n capacityProviders: describeClusters.capacityProviders,\n clusterName: describeClusters.clusterName,\n defaultCapacityProviderStrategy: describeClusters.defaultCapacityProviderStrategy,\n };\n }\n\n public applyOverrides(phase: string, command: IEcsServerGroupCommand): void {\n this.serverGroupCommandRegistry.getCommandOverrides('ecs').forEach((override: any) => {\n if (override[phase]) {\n override[phase](command);\n }\n });\n }\n\n public grabImageAndTag(imageId: string): string {\n return imageId.split('/').pop();\n }\n\n public buildImageId(image: IEcsDockerImage): string {\n if (image.fromContext) {\n return `${image.imageLabelOrSha}`;\n } else if (image.fromTrigger && !image.tag) {\n return `${image.registry}/${image.repository} (Tag resolved at runtime)`;\n } else {\n return `${image.registry}/${image.repository}:${image.tag}`;\n }\n }\n\n public mapImage(image: IEcsDockerImage): IEcsDockerImage {\n if (image.message !== undefined) {\n return image;\n }\n\n return {\n repository: image.repository,\n tag: image.tag,\n imageId: this.buildImageId(image),\n registry: image.registry,\n fromContext: image.fromContext,\n fromTrigger: image.fromTrigger,\n account: image.account,\n imageLabelOrSha: image.imageLabelOrSha,\n stageId: image.stageId,\n message: image.message,\n };\n }\n\n public configureAvailableImages(command: IEcsServerGroupCommand): void {\n // No filtering required, but need to decorate with the displayable image ID\n command.backingData.filtered.images = command.backingData.images.map((image) => this.mapImage(image));\n }\n\n public configureAvailabilityZones(command: IEcsServerGroupCommand): void {\n command.backingData.filtered.availabilityZones = find<IRegion>(\n command.backingData.credentialsKeyedByAccount[command.credentials].regions,\n { name: command.region },\n ).availabilityZones;\n command.availabilityZones = command.backingData.filtered.availabilityZones;\n }\n\n public configureAvailableSecurityGroups(command: IEcsServerGroupCommand): void {\n if (command.subnetType == null && (command.subnetTypes == null || command.subnetTypes.length == 0)) {\n command.backingData.filtered.securityGroups = [];\n return;\n }\n\n const vpcId = chain(command.backingData.subnets)\n .filter({\n account: command.credentials,\n region: command.region,\n purpose: command.subnetTypes ? command.subnetTypes[0] : command.subnetType,\n })\n .compact()\n .uniqBy('purpose')\n .map('vpcId')\n .value()[0];\n\n if (\n command.backingData.securityGroups[command.credentials] &&\n command.backingData.securityGroups[command.credentials]['ecs'] &&\n command.backingData.securityGroups[command.credentials]['ecs'][command.region]\n ) {\n const allSecurityGroups = command.backingData.securityGroups[command.credentials]['ecs'][command.region];\n command.backingData.filtered.securityGroupNames = chain(allSecurityGroups)\n .filter({ vpcId: vpcId })\n .map('name')\n .value() as string[];\n }\n }\n\n public configureAvailableSubnetTypes(command: IEcsServerGroupCommand): void {\n command.backingData.filtered.subnetTypes = chain(command.backingData.subnets)\n .filter({\n account: command.credentials,\n region: command.region,\n })\n .compact()\n .uniqBy('purpose')\n .value()\n .filter(function (e: ISubnet) {\n return e.purpose && e.purpose.length > 0;\n });\n }\n\n public configureAvailableEcsClusters(command: IEcsServerGroupCommand): void {\n command.backingData.filtered.ecsClusters = chain(command.backingData.ecsClusters)\n .filter({\n account: command.credentials,\n region: command.region,\n })\n .map('name')\n .value();\n }\n\n public configureAvailableSecrets(command: IEcsServerGroupCommand): void {\n command.backingData.filtered.secrets = chain(command.backingData.secrets)\n .filter({\n account: command.credentials,\n region: command.region,\n })\n .map('name')\n .value();\n }\n\n public buildServiceRegistryDisplayName(registry: IServiceDiscoveryRegistryDescriptor): string {\n return `${registry.name} (${registry.id})`;\n }\n\n public mapServiceRegistry(registry: IServiceDiscoveryRegistryDescriptor): IServiceDiscoveryRegistryDescriptor {\n return {\n account: registry.account,\n region: registry.region,\n name: registry.name,\n id: registry.id,\n arn: registry.arn,\n displayName: this.buildServiceRegistryDisplayName(registry),\n };\n }\n\n public configureAvailableServiceDiscoveryRegistries(command: IEcsServerGroupCommand): void {\n command.backingData.filtered.serviceDiscoveryRegistries = chain(command.backingData.serviceDiscoveryRegistries)\n .filter({\n account: command.credentials,\n region: command.region,\n })\n .map((registry) => this.mapServiceRegistry(registry))\n .value();\n }\n\n public configureAvailableRegions(command: IEcsServerGroupCommand): void {\n const regionsForAccount: IAccountDetails =\n command.backingData.credentialsKeyedByAccount[command.credentials] || ({ regions: [] } as IAccountDetails);\n command.backingData.filtered.regions = regionsForAccount.regions;\n }\n\n public configureAvailableIamRoles(command: IEcsServerGroupCommand): void {\n command.backingData.filtered.iamRoles = chain(command.backingData.iamRoles)\n .filter({ accountName: command.credentials })\n .map('name')\n .value();\n if (command.backingData.filtered.iamRoles.length > 0) {\n command.backingData.filtered.iamRoles.splice(0, 0, 'None (No IAM role)');\n }\n }\n\n public configureSubnetPurposes(command: IEcsServerGroupCommand): IServerGroupCommandResult {\n const result: IEcsServerGroupCommandResult = { dirty: {} };\n const filteredData = command.backingData.filtered;\n if (command.region === null) {\n return result;\n }\n filteredData.subnetPurposes = chain(command.backingData.subnets)\n .filter({ account: command.credentials, region: command.region })\n .reject({ target: 'elb' })\n .reject({ purpose: null })\n .uniqBy('purpose')\n .value();\n\n if (command.subnetTypes) {\n result.dirty.subnetType = !command.subnetTypes.every((subnetType) =>\n chain(filteredData.subnetPurposes).some({ purpose: subnetType }).value(),\n );\n } else if (!chain(filteredData.subnetPurposes).some({ purpose: command.subnetType }).value()) {\n result.dirty.subnetType = true;\n }\n\n if (result.dirty.subnetType) {\n command.subnetTypes = null;\n command.subnetType = null;\n }\n\n return result;\n }\n\n private getLoadBalancerMap(command: IEcsServerGroupCommand): IAmazonLoadBalancer[] {\n return chain(command.backingData.loadBalancers)\n .map('accounts')\n .flattenDeep()\n .filter({ name: command.credentials })\n .map('regions')\n .flattenDeep()\n .filter({ name: command.region })\n .map<IAmazonLoadBalancer>('loadBalancers')\n .flattenDeep<IAmazonLoadBalancer>()\n .value();\n }\n\n public getLoadBalancerNames(command: IEcsServerGroupCommand): string[] {\n const loadBalancers = this.getLoadBalancerMap(command).filter(\n (lb) => (!lb.loadBalancerType || lb.loadBalancerType === 'classic') && lb.vpcId === command.vpcId,\n );\n return loadBalancers.map((lb) => lb.name).sort();\n }\n\n public getVpcLoadBalancerNames(command: IEcsServerGroupCommand): string[] {\n const loadBalancersForVpc = this.getLoadBalancerMap(command).filter(\n (lb) => (!lb.loadBalancerType || lb.loadBalancerType === 'classic') && lb.vpcId,\n );\n return loadBalancersForVpc.map((lb) => lb.name).sort();\n }\n\n public getTargetGroupNames(command: IEcsServerGroupCommand): string[] {\n const loadBalancersV2 = this.getLoadBalancerMap(command).filter((lb) => lb.loadBalancerType !== 'classic') as any[];\n const allTargetGroups = flatten(loadBalancersV2.map<string[]>((lb) => lb.targetGroups));\n return allTargetGroups.sort();\n }\n\n public configureLoadBalancerOptions(command: IEcsServerGroupCommand): IServerGroupCommandResult {\n const result: IEcsServerGroupCommandResult = { dirty: {} };\n const currentLoadBalancers = (command.loadBalancers || []).concat(command.vpcLoadBalancers || []);\n const newLoadBalancers = this.getLoadBalancerNames(command);\n const vpcLoadBalancers = this.getVpcLoadBalancerNames(command);\n const allTargetGroups = this.getTargetGroupNames(command);\n const currentTargetGroups = command.targetGroupMappings.map((tg) => tg.targetGroup);\n if (currentLoadBalancers && command.loadBalancers) {\n const valid = command.vpcId ? newLoadBalancers : newLoadBalancers.concat(vpcLoadBalancers);\n const matched = intersection(valid, currentLoadBalancers);\n const removedLoadBalancers = xor(matched, currentLoadBalancers);\n command.loadBalancers = intersection(newLoadBalancers, matched);\n if (!command.vpcId) {\n command.vpcLoadBalancers = intersection(vpcLoadBalancers, matched);\n } else {\n delete command.vpcLoadBalancers;\n }\n if (removedLoadBalancers.length) {\n result.dirty.loadBalancers = removedLoadBalancers;\n }\n }\n\n if (currentTargetGroups) {\n const matched = intersection(allTargetGroups, currentTargetGroups);\n const removedTargetGroups = xor(matched, currentTargetGroups);\n if (removedTargetGroups && removedTargetGroups.length > 0) {\n command.viewState.dirty.targetGroups = removedTargetGroups;\n } else if (command.viewState.dirty && command.viewState.dirty.targetGroups) {\n command.viewState.dirty.targetGroups = [];\n }\n }\n\n command.backingData.filtered.loadBalancers = newLoadBalancers;\n command.backingData.filtered.vpcLoadBalancers = vpcLoadBalancers;\n command.backingData.filtered.targetGroups = allTargetGroups;\n return result;\n }\n\n public refreshLoadBalancers(command: IEcsServerGroupCommand, skipCommandReconfiguration?: boolean) {\n return this.loadBalancerReader.listLoadBalancers('ecs').then((loadBalancers) => {\n command.backingData.loadBalancers = loadBalancers;\n if (!skipCommandReconfiguration) {\n this.configureLoadBalancerOptions(command);\n }\n });\n }\n\n public configureVpcId(command: IEcsServerGroupCommand): IEcsServerGroupCommandResult {\n const result: IEcsServerGroupCommandResult = { dirty: {} };\n if (command.subnetType == null && (command.subnetTypes == null || command.subnetTypes.length == 0)) {\n command.vpcId = null;\n result.dirty.vpcId = true;\n } else if (command.subnetTypes != null && command.subnetTypes.length > 0) {\n command.subnetTypes.forEach(function (subnetType) {\n const subnet = find<ISubnet>(command.backingData.subnets, {\n purpose: subnetType,\n account: command.credentials,\n region: command.region,\n });\n command.vpcId = subnet ? subnet.vpcId : null;\n });\n } else {\n const subnet = find<ISubnet>(command.backingData.subnets, {\n purpose: command.subnetType,\n account: command.credentials,\n region: command.region,\n });\n command.vpcId = subnet ? subnet.vpcId : null;\n }\n return result;\n }\n\n public checkDirtyCapacityProviders(command: IEcsServerGroupCommand): void {\n if (command.capacityProviderStrategy) {\n const availableCustomCapacityProviders = command.backingData.filtered.availableCapacityProviders;\n const currentCapacityProviders = command.capacityProviderStrategy.map((cp) => cp.capacityProvider);\n const matchedCustomCapacityProviders = intersection(availableCustomCapacityProviders, currentCapacityProviders);\n const removedCustomCapacityProviders = xor(matchedCustomCapacityProviders, currentCapacityProviders);\n\n if (removedCustomCapacityProviders && removedCustomCapacityProviders.length > 0) {\n command.viewState.dirty.customCapacityProviders = removedCustomCapacityProviders;\n } else if (command.viewState.dirty && command.viewState.dirty.customCapacityProviders) {\n command.viewState.dirty.customCapacityProviders = [];\n }\n\n if (command.useDefaultCapacityProviders) {\n const availableDefaultCapacityProvider = command.backingData.filtered.defaultCapacityProviderStrategy.map(\n (cp) => cp.capacityProvider,\n );\n const matchedDefaultCapacityProviders = intersection(\n availableDefaultCapacityProvider,\n currentCapacityProviders,\n );\n const removedDefaultCapacityProviders = xor(matchedDefaultCapacityProviders, currentCapacityProviders);\n\n if (removedDefaultCapacityProviders && removedDefaultCapacityProviders.length > 0) {\n command.viewState.dirty.defaulCapacityProviders = removedDefaultCapacityProviders;\n }\n }\n }\n }\n\n public attachEventHandlers(cmd: IEcsServerGroupCommand): void {\n cmd.subnetChanged = (command: IEcsServerGroupCommand): IServerGroupCommandResult => {\n const result = this.configureVpcId(command);\n extend(result.dirty, this.configureLoadBalancerOptions(command).dirty);\n command.viewState.dirty = command.viewState.dirty || {};\n extend(command.viewState.dirty, result.dirty);\n return result;\n };\n\n cmd.regionChanged = (command: IEcsServerGroupCommand): IServerGroupCommandResult => {\n const result: IEcsServerGroupCommandResult = { dirty: {} };\n extend(result.dirty, this.configureSubnetPurposes(command).dirty);\n if (command.region) {\n extend(result.dirty, command.subnetChanged(command).dirty);\n this.configureAvailabilityZones(command);\n this.configureAvailableEcsClusters(command);\n this.configureAvailableSubnetTypes(command);\n this.configureAvailableSecurityGroups(command);\n this.configureAvailableSecrets(command);\n this.configureAvailableServiceDiscoveryRegistries(command);\n this.setCapacityProviderDetails(command);\n }\n\n return result;\n };\n\n cmd.subnetTypeChanged = (command: IEcsServerGroupCommand): IServerGroupCommandResult => {\n const result: IEcsServerGroupCommandResult = { dirty: {} };\n this.configureAvailableSecurityGroups(command);\n return result;\n };\n\n cmd.clusterChanged = (command: IEcsServerGroupCommand): void => {\n command.moniker = NameUtils.getMoniker(command.application, command.stack, command.freeFormDetails);\n };\n\n cmd.credentialsChanged = (command: IEcsServerGroupCommand): IServerGroupCommandResult => {\n const result: IEcsServerGroupCommandResult = { dirty: {} };\n const backingData = command.backingData;\n if (command.credentials) {\n this.configureAvailableIamRoles(command);\n this.configureAvailableEcsClusters(command);\n this.configureAvailableSubnetTypes(command);\n this.configureAvailableSecurityGroups(command);\n this.configureAvailableSecrets(command);\n this.configureAvailableServiceDiscoveryRegistries(command);\n this.configureAvailableRegions(command);\n this.setCapacityProviderDetails(command);\n\n if (!some(backingData.filtered.regions, { name: command.region })) {\n command.region = null;\n result.dirty.region = true;\n } else {\n extend(result.dirty, command.regionChanged(command).dirty);\n }\n } else {\n command.region = null;\n }\n return result;\n };\n\n cmd.placementStrategyNameChanged = (command: IEcsServerGroupCommand): IServerGroupCommandResult => {\n const result: IEcsServerGroupCommandResult = { dirty: {} };\n command.placementStrategySequence = this.placementStrategyService.getPredefinedStrategy(\n command.placementStrategyName,\n );\n return result;\n };\n\n this.applyOverrides('attachEventHandlers', cmd);\n }\n}\n\nexport const ECS_SERVER_GROUP_CONFIGURATION_SERVICE = 'spinnaker.ecs.serverGroup.configure.service';\nmodule(ECS_SERVER_GROUP_CONFIGURATION_SERVICE, [\n LOAD_BALANCER_READ_SERVICE,\n SECURITY_GROUP_READER,\n CACHE_INITIALIZER_SERVICE,\n SERVER_GROUP_COMMAND_REGISTRY_PROVIDER,\n]).service('ecsServerGroupConfigurationService', EcsServerGroupConfigurationService);\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, INSTANCE_TYPE_SERVICE } from '@spinnaker/core';\n\nimport { ECS_SERVER_GROUP_CONFIGURATION_SERVICE } from './serverGroupConfiguration.service';\n\nexport const ECS_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE =\n 'spinnaker.ecs.serverGroupCommandBuilder.service';\nexport const name = ECS_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE; // for backwards compatibility\nangular\n .module(ECS_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE, [\n INSTANCE_TYPE_SERVICE,\n ECS_SERVER_GROUP_CONFIGURATION_SERVICE,\n ])\n .factory('ecsServerGroupCommandBuilder', [\n '$q',\n 'instanceTypeService',\n 'ecsServerGroupConfigurationService',\n function ($q, instanceTypeService, ecsServerGroupConfigurationService) {\n function reconcileUpstreamImages(image, upstreamImages) {\n if (image.fromContext) {\n const matchingImage = upstreamImages.find((otherImage) => image.stageId === otherImage.stageId);\n\n if (matchingImage) {\n image.cluster = matchingImage.cluster;\n image.pattern = matchingImage.pattern;\n image.repository = matchingImage.repository;\n return image;\n } else {\n return null;\n }\n } else if (image.fromTrigger) {\n const matchingImage = upstreamImages.find((otherImage) => {\n return (\n image.registry === otherImage.registry &&\n image.repository === otherImage.repository &&\n image.tag === otherImage.tag\n );\n });\n\n if (matchingImage) {\n return image;\n } else {\n return null;\n }\n } else {\n return image;\n }\n }\n\n function findUpstreamImages(current, all, visited = {}) {\n // This actually indicates a loop in the stage dependencies.\n if (visited[current.refId]) {\n return [];\n } else {\n visited[current.refId] = true;\n }\n let result = [];\n if (current.type === 'findImageFromTags') {\n result.push({\n fromContext: true,\n imageLabelOrSha: current.imageLabelOrSha,\n stageId: current.refId,\n });\n }\n current.requisiteStageRefIds.forEach(function (id) {\n const next = all.find((stage) => stage.refId === id);\n if (next) {\n result = result.concat(findUpstreamImages(next, all, visited));\n }\n });\n\n return result;\n }\n\n function findTriggerImages(triggers) {\n const result = triggers\n .filter((trigger) => {\n return trigger.type === 'docker';\n })\n .map((trigger) => {\n return {\n fromTrigger: true,\n repository: trigger.repository,\n account: trigger.account,\n organization: trigger.organization,\n registry: trigger.registry,\n tag: trigger.tag,\n };\n });\n\n return result;\n }\n\n function buildNewServerGroupCommand(application, defaults) {\n defaults = defaults || {};\n const credentialsLoader = AccountService.getCredentialsKeyedByAccount('ecs');\n\n const defaultCredentials = defaults.account || application.defaultCredentials.ecs;\n const defaultRegion = defaults.region || application.defaultRegions.ecs;\n\n const preferredZonesLoader = AccountService.getAvailabilityZonesForAccountAndRegion(\n 'ecs',\n defaultCredentials,\n defaultRegion,\n );\n\n return $q\n .all({\n preferredZones: preferredZonesLoader,\n credentialsKeyedByAccount: credentialsLoader,\n })\n .then(function (asyncData) {\n const availabilityZones = asyncData.preferredZones;\n\n let defaultIamRole = 'None (No IAM role)';\n defaultIamRole = defaultIamRole.replace('{{application}}', application.name);\n\n const defaultImageCredentials = 'None (No registry credentials)';\n\n const command = {\n application: application.name,\n credentials: defaultCredentials,\n region: defaultRegion,\n strategy: '',\n capacity: {\n min: 1,\n max: 1,\n desired: 1,\n },\n launchType: 'EC2',\n healthCheckType: 'EC2',\n selectedProvider: 'ecs',\n iamRole: defaultIamRole,\n dockerImageCredentialsSecret: defaultImageCredentials,\n availabilityZones: availabilityZones,\n subnetType: '',\n securityGroupNames: [],\n healthCheckGracePeriodSeconds: '',\n placementConstraints: [],\n placementStrategyName: '',\n taskDefinitionArtifact: {},\n useTaskDefinitionArtifact: false,\n placementStrategySequence: [],\n serviceDiscoveryAssociations: [],\n ecsClusterName: '',\n targetGroup: '',\n copySourceScalingPoliciesAndActions: true,\n preferSourceCapacity: true,\n useSourceCapacity: true,\n enableDeploymentCircuitBreaker: false,\n viewState: {\n useAllImageSelection: false,\n useSimpleCapacity: true,\n usePreferredZones: true,\n mode: defaults.mode || 'create',\n disableStrategySelection: true,\n dirty: {},\n },\n };\n\n if (\n application.attributes &&\n application.attributes.platformHealthOnlyShowOverride &&\n application.attributes.platformHealthOnly\n ) {\n command.interestingHealthProviderNames = ['ecs'];\n }\n\n return command;\n });\n }\n\n function buildServerGroupCommandFromPipeline(application, originalCluster, current, pipeline) {\n const pipelineCluster = _.cloneDeep(originalCluster);\n const region = Object.keys(pipelineCluster.availabilityZones)[0];\n // var instanceTypeCategoryLoader = instanceTypeService.getCategoryForInstanceType('ecs', pipelineCluster.instanceType);\n\n const commandOptions = { account: pipelineCluster.account, region: region };\n return buildNewServerGroupCommand(application, commandOptions).then(function (command) {\n const zones = pipelineCluster.availabilityZones[region];\n const usePreferredZones = zones.join(',') === command.availabilityZones.join(',');\n\n let contextImages = findUpstreamImages(current, pipeline.stages) || [];\n contextImages = contextImages.concat(findTriggerImages(pipeline.triggers));\n\n if (command.docker && command.docker.image) {\n command.docker.image = reconcileUpstreamImages(command.docker.image, contextImages);\n }\n\n const viewState = {\n instanceProfile: undefined,\n disableImageSelection: true,\n useSimpleCapacity:\n pipelineCluster.capacity.min === pipelineCluster.capacity.max &&\n pipelineCluster.useSourceCapacity !== true,\n usePreferredZones: usePreferredZones,\n mode: 'editPipeline',\n submitButtonLabel: 'Done',\n templatingEnabled: true,\n existingPipelineCluster: true,\n dirty: {},\n contextImages: contextImages,\n pipeline: pipeline,\n currentStage: current,\n };\n\n const viewOverrides = {\n region: region,\n credentials: pipelineCluster.account,\n availabilityZones: pipelineCluster.availabilityZones[region],\n viewState: viewState,\n };\n\n pipelineCluster.strategy = pipelineCluster.strategy || '';\n\n return angular.extend({}, command, pipelineCluster, viewOverrides);\n });\n }\n\n // Only used to prepare view requiring template selecting\n function buildNewServerGroupCommandForPipeline(current, pipeline) {\n let contextImages = findUpstreamImages(current, pipeline.stages) || [];\n contextImages = contextImages.concat(findTriggerImages(pipeline.triggers));\n\n return $q.when({\n viewState: {\n requiresTemplateSelection: true,\n // applies viewState overrides after template selection\n overrides: {\n viewState: {\n mode: 'editPipeline',\n contextImages: contextImages,\n pipeline: pipeline,\n currentStage: current,\n },\n },\n },\n });\n }\n\n function buildUpdateServerGroupCommand(serverGroup) {\n const command = {\n type: 'modifyAsg',\n asgs: [{ asgName: serverGroup.name, region: serverGroup.region }],\n healthCheckType: serverGroup.asg.healthCheckType,\n credentials: serverGroup.account,\n };\n ecsServerGroupConfigurationService.configureUpdateCommand(command);\n return command;\n }\n\n function buildServerGroupCommandFromExisting(application, serverGroup, mode = 'clone') {\n // do NOT copy: deployment strategy. DO copy: account, region, cluster name, stack\n // TODO: query for & pull in ECS-specific data that would be useful, e.g, network mode, launch type\n const commandOptions = { account: serverGroup.account, region: serverGroup.region };\n return buildNewServerGroupCommand(application, commandOptions).then(function (command) {\n command.credentials = serverGroup.account;\n command.app = serverGroup.moniker.app;\n command.stack = serverGroup.moniker.stack;\n command.region = serverGroup.region;\n command.ecsClusterName = serverGroup.ecsCluster;\n command.capacity = serverGroup.capacity;\n command.viewState.mode = mode;\n\n return command;\n });\n }\n\n return {\n buildNewServerGroupCommand: buildNewServerGroupCommand,\n buildServerGroupCommandFromExisting: buildServerGroupCommandFromExisting,\n buildNewServerGroupCommandForPipeline: buildNewServerGroupCommandForPipeline,\n buildServerGroupCommandFromPipeline: buildServerGroupCommandFromPipeline,\n buildUpdateServerGroupCommand: buildUpdateServerGroupCommand,\n };\n },\n ]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\n\nimport {\n ModalWizard,\n OVERRIDE_REGISTRY,\n SERVER_GROUP_COMMAND_REGISTRY_PROVIDER,\n SERVER_GROUP_WRITER,\n STAGE_ARTIFACT_SELECTOR_COMPONENT_REACT,\n TaskMonitor,\n} from '@spinnaker/core';\n\nimport { ECS_CLUSTER_READ_SERVICE } from '../../../ecsCluster/ecsCluster.read.service';\nimport { IAM_ROLE_READ_SERVICE } from '../../../iamRoles/iamRole.read.service';\nimport { ECS_SECRET_READ_SERVICE } from '../../../secrets/secret.read.service';\nimport { ECS_SERVER_GROUP_CONFIGURATION_SERVICE } from '../serverGroupConfiguration.service';\n\nexport const ECS_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_ECS_CONTROLLER =\n 'spinnaker.ecs.cloneServerGroup.controller';\nexport const name = ECS_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_ECS_CONTROLLER; // for backwards compatibility\nmodule(ECS_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_ECS_CONTROLLER, [\n UIROUTER_ANGULARJS,\n ECS_SERVER_GROUP_CONFIGURATION_SERVICE,\n SERVER_GROUP_WRITER,\n OVERRIDE_REGISTRY,\n SERVER_GROUP_COMMAND_REGISTRY_PROVIDER,\n IAM_ROLE_READ_SERVICE,\n ECS_CLUSTER_READ_SERVICE,\n ECS_SECRET_READ_SERVICE,\n STAGE_ARTIFACT_SELECTOR_COMPONENT_REACT,\n]).controller('ecsCloneServerGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n '$q',\n '$state',\n 'serverGroupWriter',\n 'overrideRegistry',\n 'ecsServerGroupConfigurationService',\n 'serverGroupCommandRegistry',\n 'serverGroupCommand',\n 'iamRoleReader',\n 'ecsClusterReader',\n 'secretReader',\n 'application',\n 'title',\n function (\n $scope,\n $uibModalInstance,\n $q,\n $state,\n serverGroupWriter,\n overrideRegistry,\n ecsServerGroupConfigurationService,\n serverGroupCommandRegistry,\n serverGroupCommand,\n iamRoleReader,\n ecsClusterReader,\n secretReader,\n application,\n title,\n ) {\n $scope.pages = {\n templateSelection: overrideRegistry.getTemplate(\n 'ecs.serverGroup.templateSelection',\n require('./templateSelection/templateSelection.html'),\n ),\n basicSettings: overrideRegistry.getTemplate(\n 'ecs.serverGroup.basicSettings',\n require('./location/basicSettings.html'),\n ),\n container: overrideRegistry.getTemplate('ecs.serverGroup.container', require('./container/container.html')),\n horizontalScaling: overrideRegistry.getTemplate(\n 'ecs.serverGroup.horizontalScaling',\n require('./horizontalScaling/horizontalScaling.html'),\n ),\n networking: overrideRegistry.getTemplate('ecs.serverGroup.networking', require('./networking/networking.html')),\n logging: overrideRegistry.getTemplate('ecs.serverGroup.logging', require('./logging/logging.html')),\n serviceDiscovery: overrideRegistry.getTemplate(\n 'ecs.serverGroup.serviceDiscovery',\n require('./serviceDiscovery/serviceDiscovery.html'),\n ),\n advancedSettings: overrideRegistry.getTemplate(\n 'ecs.serverGroup.advancedSettings',\n require('./advancedSettings/advancedSettings.html'),\n ),\n taskDefinition: overrideRegistry.getTemplate(\n 'ecs.taskDefinition',\n require('./taskDefinition/taskDefinition.html'),\n ),\n };\n\n $scope.title = title;\n\n $scope.applicationName = application.name;\n $scope.application = application;\n\n $scope.command = serverGroupCommand;\n\n $scope.state = {\n loaded: false,\n requiresTemplateSelection: !!serverGroupCommand.viewState.requiresTemplateSelection,\n };\n\n this.templateSelectionText = {\n copied: ['account, region, ecs cluster, stack', 'capacity'],\n notCopied: ['launch type, target group, network mode'],\n };\n if (!$scope.command.viewState.disableStrategySelection) {\n this.templateSelectionText.notCopied.push(\n 'the deployment strategy (if any) used to deploy the most recent server group',\n );\n }\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n const cloneStage = $scope.taskMonitor.task.execution.stages.find((stage) => stage.type === 'cloneServerGroup');\n if (cloneStage && cloneStage.context['deploy.server.groups']) {\n const newServerGroupName = cloneStage.context['deploy.server.groups'][$scope.command.region];\n if (newServerGroupName) {\n const newStateParams = {\n serverGroup: newServerGroupName,\n accountId: $scope.command.credentials,\n region: $scope.command.region,\n provider: 'ecs',\n };\n let transitionTo = '^.^.^.clusters.serverGroup';\n if ($state.includes('**.clusters.serverGroup')) {\n // clone via details, all view\n transitionTo = '^.serverGroup';\n }\n if ($state.includes('**.clusters.cluster.serverGroup')) {\n // clone or create with details open\n transitionTo = '^.^.serverGroup';\n }\n if ($state.includes('**.clusters')) {\n // create new, no details open\n transitionTo = '.serverGroup';\n }\n $state.go(transitionTo, newStateParams);\n }\n }\n }\n\n function onTaskComplete() {\n application.serverGroups.refresh();\n application.serverGroups.onNextRefresh($scope, onApplicationRefresh);\n }\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: 'Creating your server group',\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n function configureCommand() {\n ecsServerGroupConfigurationService.configureCommand($scope.command).then(function () {\n $scope.state.loaded = true;\n initializeCommand();\n initializeSelectOptions();\n initializeWatches();\n });\n }\n\n function initializeWatches() {\n $scope.$watch('command.subnetType', createResultProcessor($scope.command.subnetTypeChanged));\n $scope.$watch('command.credentials', createResultProcessor($scope.command.credentialsChanged));\n $scope.$watch('command.region', createResultProcessor($scope.command.regionChanged));\n $scope.$watch(\n 'command.placementStrategyName',\n createResultProcessor($scope.command.placementStrategyNameChanged),\n );\n $scope.$watch('command.stack', () => $scope.command.clusterChanged($scope.command));\n $scope.$watch('command.freeFormDetails', () => $scope.command.clusterChanged($scope.command));\n }\n\n function initializeSelectOptions() {\n processCommandUpdateResult($scope.command.credentialsChanged(serverGroupCommand));\n processCommandUpdateResult($scope.command.regionChanged(serverGroupCommand));\n }\n\n function createResultProcessor(method) {\n return function () {\n processCommandUpdateResult(method(serverGroupCommand));\n };\n }\n\n function processCommandUpdateResult() {\n // TODO(Bruno Carrier) - Implement marking sections either dirty or complete\n }\n\n function initializeCommand() {}\n\n this.isValid = function () {\n return true; // TODO(Bruno Carrier) - Implement validation of the form\n };\n\n this.showSubmitButton = function () {\n return ModalWizard.allPagesVisited();\n };\n\n this.submit = function () {\n if ($scope.command.viewState.mode === 'editPipeline' || $scope.command.viewState.mode === 'createPipeline') {\n return $uibModalInstance.close($scope.command);\n }\n $scope.taskMonitor.submit(function () {\n return serverGroupWriter.cloneServerGroup($scope.command, application);\n });\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n\n if (!$scope.state.requiresTemplateSelection) {\n configureCommand();\n } else {\n $scope.state.loaded = true;\n }\n\n this.templateSelected = () => {\n $scope.state.requiresTemplateSelection = false;\n configureCommand();\n };\n\n // used by react components to update command fields in parent (angular) scope\n $scope.notifyAngular = function (commandKey, value) {\n if (commandKey == 'pipeline') {\n $scope.command.viewState.pipeline = value;\n } else {\n $scope.command[commandKey] = value;\n }\n };\n\n // used by react components to configure command for image queries\n $scope.configureCommand = function (query) {\n return ecsServerGroupConfigurationService.configureCommand($scope.command, query);\n };\n\n // TODO: Migrate horizontalScaling component to react and move this logic there\n $scope.capacityProviderState = {\n useCapacityProviders:\n $scope.command.capacityProviderStrategy && $scope.command.capacityProviderStrategy.length > 0,\n updateComputeOption: function (chosenOption) {\n if (chosenOption == 'launchType') {\n $scope.command.capacityProviderStrategy = [];\n } else if (chosenOption == 'capacityProviders') {\n $scope.command.launchType = '';\n $scope.command.capacityProviderStrategy = $scope.command.capacityProviderStrategy || [];\n }\n },\n };\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const ECS_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGS_COMPONENT =\n 'spinnaker.ecs.serverGroup.configure.wizard.advancedSettings.component';\nexport const name = ECS_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGS_COMPONENT; // for backwards compatibility\nmodule(ECS_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGS_COMPONENT, []).component(\n 'ecsServerGroupAdvancedSettings',\n {\n bindings: {\n command: '=',\n application: '=',\n },\n templateUrl: require('./advancedSettings.component.html'),\n },\n);\n","import { module } from 'angular';\nimport React from 'react';\nimport { Alert } from 'react-bootstrap';\nimport type { Option } from 'react-select';\nimport { react2angular } from 'react2angular';\n\nimport { HelpField, TetheredSelect, withErrorBoundary } from '@spinnaker/core';\n\nimport type { IEcsCapacityProviderStrategyItem, IEcsServerGroupCommand } from '../../serverGroupConfiguration.service';\n\nexport interface IEcsCapacityProviderProps {\n command: IEcsServerGroupCommand;\n notifyAngular: (key: string, value: any) => void;\n configureCommand: (query: string) => PromiseLike<void>;\n}\n\ninterface IEcsCapacityProviderState {\n capacityProviderStrategy: IEcsCapacityProviderStrategyItem[];\n defaultCapacityProviderStrategy: IEcsCapacityProviderStrategyItem[];\n availableCapacityProviders: string[];\n ecsClusterName: string;\n useDefaultCapacityProviders: boolean;\n capacityProviderLoadedFlag: boolean;\n}\n\nclass EcsCapacityProvider extends React.Component<IEcsCapacityProviderProps, IEcsCapacityProviderState> {\n constructor(props: IEcsCapacityProviderProps) {\n super(props);\n const cmd = this.props.command;\n\n this.state = {\n availableCapacityProviders: this.getAvailableCapacityProviders(cmd),\n defaultCapacityProviderStrategy: this.getDefaultCapacityProviderStrategy(cmd),\n ecsClusterName: cmd.ecsClusterName,\n useDefaultCapacityProviders:\n cmd.useDefaultCapacityProviders || (cmd.capacityProviderStrategy && cmd.capacityProviderStrategy.length == 0),\n capacityProviderStrategy:\n cmd.capacityProviderStrategy && cmd.capacityProviderStrategy.length > 0 ? cmd.capacityProviderStrategy : [],\n capacityProviderLoadedFlag: false,\n };\n }\n\n public componentDidMount() {\n this.props.configureCommand('1').then(() => {\n const cmd = this.props.command;\n const useDefaultCapacityProviders = this.state.useDefaultCapacityProviders;\n this.setState({\n availableCapacityProviders: this.getAvailableCapacityProviders(cmd),\n defaultCapacityProviderStrategy: this.getDefaultCapacityProviderStrategy(cmd),\n capacityProviderStrategy: this.getCapacityProviderStrategy(useDefaultCapacityProviders, cmd),\n capacityProviderLoadedFlag: true,\n });\n this.props.notifyAngular('useDefaultCapacityProviders', this.state.useDefaultCapacityProviders);\n this.props.notifyAngular('capacityProviderStrategy', this.state.capacityProviderStrategy);\n });\n }\n\n private getAvailableCapacityProviders = (cmd: IEcsServerGroupCommand) => {\n return cmd.backingData && cmd.backingData.filtered && cmd.backingData.filtered.availableCapacityProviders\n ? cmd.backingData.filtered.availableCapacityProviders\n : [];\n };\n\n private getDefaultCapacityProviderStrategy = (cmd: IEcsServerGroupCommand) => {\n return cmd.backingData && cmd.backingData.filtered && cmd.backingData.filtered.defaultCapacityProviderStrategy\n ? cmd.backingData.filtered.defaultCapacityProviderStrategy\n : [];\n };\n\n private getCapacityProviderStrategy = (useDefaultCapacityProviders: boolean, cmd: IEcsServerGroupCommand) => {\n return useDefaultCapacityProviders &&\n cmd.backingData &&\n cmd.backingData.filtered &&\n cmd.backingData.filtered.defaultCapacityProviderStrategy\n ? cmd.backingData.filtered.defaultCapacityProviderStrategy\n : this.state.capacityProviderStrategy;\n };\n\n private addCapacityProviderStrategy = () => {\n const capacityProviderStrategy = this.state.capacityProviderStrategy;\n capacityProviderStrategy.push({ capacityProvider: '', base: null, weight: null });\n this.props.notifyAngular('capacityProviderStrategy', capacityProviderStrategy);\n this.setState({ capacityProviderStrategy: capacityProviderStrategy });\n };\n\n private removeCapacityProviderStrategy = (index: number) => {\n const capacityProviderStrategy = this.state.capacityProviderStrategy;\n capacityProviderStrategy.splice(index, 1);\n this.props.notifyAngular('capacityProviderStrategy', capacityProviderStrategy);\n this.setState({ capacityProviderStrategy: capacityProviderStrategy });\n };\n\n private updateCapacityProviderName = (index: number, targetCapacityProviderName: string) => {\n const capacityProviderStrategy = this.state.capacityProviderStrategy;\n const targetCapacityProviderStrategy = capacityProviderStrategy[index];\n targetCapacityProviderStrategy.capacityProvider = targetCapacityProviderName;\n this.props.notifyAngular('capacityProviderStrategy', capacityProviderStrategy);\n this.setState({ capacityProviderStrategy: capacityProviderStrategy });\n this.props.command.viewState.dirty.customCapacityProviders = [];\n };\n\n private updateCapacityProviderBase = (index: number, targetCapacityProviderBase: number) => {\n const capacityProviderStrategy = this.state.capacityProviderStrategy;\n const targetCapacityProviderStrategy = capacityProviderStrategy[index];\n targetCapacityProviderStrategy.base = targetCapacityProviderBase;\n this.props.notifyAngular('capacityProviderStrategy', capacityProviderStrategy);\n this.setState({ capacityProviderStrategy: capacityProviderStrategy });\n };\n\n private updateCapacityProviderWeight = (index: number, targetCapacityProviderWeight: number) => {\n const capacityProviderStrategy = this.state.capacityProviderStrategy;\n const targetCapacityProviderStrategy = capacityProviderStrategy[index];\n targetCapacityProviderStrategy.weight = targetCapacityProviderWeight;\n this.props.notifyAngular('capacityProviderStrategy', capacityProviderStrategy);\n this.setState({ capacityProviderStrategy: capacityProviderStrategy });\n };\n\n private updateCapacityProviderType = (targetCapacityProviderType: boolean) => {\n this.setState({ useDefaultCapacityProviders: targetCapacityProviderType });\n this.props.notifyAngular('useDefaultCapacityProviders', targetCapacityProviderType);\n this.props.command.viewState.dirty.customCapacityProviders = [];\n\n const capacityProviderStrategy =\n targetCapacityProviderType && this.state.defaultCapacityProviderStrategy.length > 0\n ? this.state.defaultCapacityProviderStrategy\n : [];\n this.setState({ capacityProviderStrategy: capacityProviderStrategy });\n this.props.notifyAngular('capacityProviderStrategy', capacityProviderStrategy);\n };\n\n render(): React.ReactElement<EcsCapacityProvider> {\n const updateCapacityProviderName = this.updateCapacityProviderName;\n const updateCapacityProviderBase = this.updateCapacityProviderBase;\n const updateCapacityProviderWeight = this.updateCapacityProviderWeight;\n const addCapacityProviderStrategy = this.addCapacityProviderStrategy;\n const removeCapacityProviderStrategy = this.removeCapacityProviderStrategy;\n const updateCapacityProviderType = this.updateCapacityProviderType;\n const capacityProviderStrategy = this.state.capacityProviderStrategy;\n const useDefaultCapacityProviders = this.state.useDefaultCapacityProviders;\n const capacityProviderLoadedFlag = this.state.capacityProviderLoadedFlag;\n const customDirtyCapacityProviders =\n this.props.command.viewState.dirty && this.props.command.viewState.dirty.customCapacityProviders\n ? this.props.command.viewState.dirty.customCapacityProviders\n : [];\n const defaultDirtyCapacityProviders =\n this.props.command.viewState.dirty && this.props.command.viewState.dirty.defaulCapacityProviders\n ? this.props.command.viewState.dirty.defaulCapacityProviders\n : [];\n\n const capacityProviderNames =\n this.state.availableCapacityProviders && this.state.availableCapacityProviders.length > 0\n ? this.state.availableCapacityProviders.map((capacityProviderNames) => {\n return { label: `${capacityProviderNames}`, value: capacityProviderNames };\n })\n : [];\n\n const defaultCPError =\n useDefaultCapacityProviders && defaultDirtyCapacityProviders ? (\n <div className=\"alert alert-warning\">\n <p className=\"text-left\">\n <i className=\"fa fa-exclamation-triangle\"></i>\n Invalid capacity providers are a part of default capacity provider strategy.\n <br />\n Please click 'Done' to use current default capacity provider strategy (shown below) or switch to using a\n custom strategy.\n </p>\n </div>\n ) : (\n ''\n );\n\n const dirtyCapacityProviderList = customDirtyCapacityProviders\n ? customDirtyCapacityProviders.map(function (capacityProvider, index) {\n return <li key={index}>{capacityProvider}</li>;\n })\n : '';\n\n const dirtyCapacityProviderSection =\n useDefaultCapacityProviders && defaultDirtyCapacityProviders.length > 0 ? (\n defaultCPError\n ) : customDirtyCapacityProviders.length > 0 && !useDefaultCapacityProviders ? (\n <div className=\"alert alert-warning\">\n <p>\n <i className=\"fa fa-exclamation-triangle\"></i>\n The following capacity providers could not be found in the selected account/region/cluster and were removed:\n </p>\n <ul>{dirtyCapacityProviderList}</ul>\n <br />\n <p className=\"text-left\">Please select the capacity provider(s) from the dropdown to resolve this error.</p>\n </div>\n ) : (\n ''\n );\n\n const capacityProviderInputs =\n capacityProviderStrategy.length > 0 ? (\n capacityProviderStrategy.map(function (mapping, index) {\n return (\n <tr key={index}>\n {useDefaultCapacityProviders ? (\n <td>\n <input\n data-test-id={'ServerGroup.defaultCapacityProvider.name.' + index}\n type=\"string\"\n className=\"form-control input-sm no-spel\"\n required={true}\n value={mapping.capacityProvider}\n disabled={true}\n />\n </td>\n ) : (\n <td data-test-id={'ServerGroup.customCapacityProvider.name.' + index}>\n <TetheredSelect\n placeholder=\"Select capacity provider\"\n options={capacityProviderNames}\n value={mapping.capacityProvider}\n onChange={(e: Option) => {\n updateCapacityProviderName(index, e.label as string);\n }}\n clearable={false}\n />\n </td>\n )}\n <td>\n <input\n data-test-id={'ServerGroup.capacityProvider.base.' + index}\n disabled={useDefaultCapacityProviders}\n type=\"number\"\n className=\"form-control input-sm no-spel\"\n value={mapping.base}\n onChange={(e) => updateCapacityProviderBase(index, e.target.valueAsNumber)}\n />\n </td>\n <td>\n <input\n data-test-id={'ServerGroup.capacityProvider.weight.' + index}\n disabled={useDefaultCapacityProviders}\n type=\"number\"\n className=\"form-control input-sm no-spel\"\n required={true}\n value={mapping.weight}\n onChange={(e) => updateCapacityProviderWeight(index, e.target.valueAsNumber)}\n />\n </td>\n {!useDefaultCapacityProviders ? (\n <td>\n <div className=\"form-control-static\">\n <a className=\"btn-link sm-label\" onClick={() => removeCapacityProviderStrategy(index)}>\n <span className=\"glyphicon glyphicon-trash\" />\n <span className=\"sr-only\">Remove</span>\n </a>\n </div>\n </td>\n ) : (\n ''\n )}\n </tr>\n );\n })\n ) : useDefaultCapacityProviders && this.state.capacityProviderStrategy.length == 0 ? (\n <tr>\n <div className=\"sm-label-left\" style={{ width: '200%' }}>\n <Alert color=\"warning\">\n {' '}\n The cluster does not have a default capacity provider strategy defined. Set a default capacity provider\n strategy or use a custom strategy.\n </Alert>\n </div>\n </tr>\n ) : (\n ''\n );\n\n const newCapacityProviderStrategy =\n this.state.ecsClusterName &&\n this.props.command.credentials &&\n this.props.command.region &&\n !useDefaultCapacityProviders &&\n capacityProviderNames.length > 0 ? (\n <button\n data-test-id=\"ServerGroup.addCapacityProvider\"\n className=\"btn btn-block btn-sm add-new\"\n onClick={addCapacityProviderStrategy}\n >\n <span className=\"glyphicon glyphicon-plus-sign\" />\n Add New Capacity Provider\n </button>\n ) : !useDefaultCapacityProviders && capacityProviderLoadedFlag && capacityProviderNames.length == 0 ? (\n <div className=\"sm-label-left\" style={{ width: '200%' }}>\n <Alert color=\"warning\"> The cluster does not have capacity providers defined. </Alert>\n </div>\n ) : (\n ''\n );\n\n return (\n <div>\n {(customDirtyCapacityProviders.length > 0 || defaultDirtyCapacityProviders.length > 0) &&\n capacityProviderLoadedFlag ? (\n <div>{dirtyCapacityProviderSection}</div>\n ) : (\n ''\n )}\n <div className=\"sm-label-left\">\n <b>Capacity Provider Strategy</b>\n <HelpField id=\"ecs.capacityProviderStrategy\" /> <br />\n <span>({this.state.ecsClusterName})</span>\n </div>\n <div className=\"radio\">\n <label>\n <input\n data-test-id=\"ServerGroup.capacityProviders.default\"\n type=\"radio\"\n checked={useDefaultCapacityProviders}\n onClick={() => updateCapacityProviderType(true)}\n id=\"computeOptionsLaunchType1\"\n />\n Use cluster default\n </label>\n </div>\n <div className=\"radio\">\n <label>\n <input\n data-test-id=\"ServerGroup.capacityProviders.custom\"\n type=\"radio\"\n checked={!useDefaultCapacityProviders}\n onClick={() => updateCapacityProviderType(false)}\n id=\"computeOptionsCapacityProviders2\"\n />\n Use custom (Advanced)\n </label>\n </div>\n {capacityProviderLoadedFlag ? (\n <table className=\"table table-condensed packed tags\">\n <thead>\n <tr>\n <th style={{ width: '50%' }}>\n Provider name\n <HelpField id=\"ecs.capacityProviderName\" />\n </th>\n <th style={{ width: '25%' }}>\n Base\n <HelpField id=\"ecs.capacityProviderBase\" />\n </th>\n <th style={{ width: '25%' }}>\n Weight\n <HelpField id=\"ecs.capacityProviderWeight\" />\n </th>\n </tr>\n </thead>\n <tbody>{capacityProviderInputs}</tbody>\n <tfoot>\n <tr>\n <td colSpan={4}>{newCapacityProviderStrategy}</td>\n </tr>\n </tfoot>\n </table>\n ) : (\n <div className=\"load medium\">\n <div className=\"message\">Loading capacity providers...</div>\n <div className=\"bars\">\n <div className=\"bar\"></div>\n <div className=\"bar\"></div>\n <div className=\"bar\"></div>\n </div>\n </div>\n )}\n </div>\n );\n }\n}\n\nexport const ECS_CAPACITY_PROVIDER_REACT = 'spinnaker.ecs.serverGroup.configure.wizard.capacityProvider.react';\nmodule(ECS_CAPACITY_PROVIDER_REACT, []).component(\n 'ecsCapacityProviderReact',\n react2angular(withErrorBoundary(EcsCapacityProvider, 'ecsCapacityProviderReact'), [\n 'command',\n 'notifyAngular',\n 'configureCommand',\n ]),\n);\n","import { module } from 'angular';\nimport { isEqual, uniqWith } from 'lodash';\nimport * as React from 'react';\nimport { Alert } from 'react-bootstrap';\nimport type { Option } from 'react-select';\nimport { react2angular } from 'react2angular';\n\nimport { HelpField, TetheredSelect, withErrorBoundary } from '@spinnaker/core';\n\nimport type {\n IEcsDockerImage,\n IEcsServerGroupCommand,\n IEcsTargetGroupMapping,\n} from '../../serverGroupConfiguration.service';\n\nexport interface IContainerProps {\n command: IEcsServerGroupCommand;\n notifyAngular: (key: string, value: any) => void;\n configureCommand: (query: string) => PromiseLike<void>;\n}\n\ninterface IContainerState {\n imageDescription: IEcsDockerImage;\n computeUnits: number;\n reservedMemory: number;\n dockerImages: IEcsDockerImage[];\n targetGroupsAvailable: string[];\n targetGroupMappings: IEcsTargetGroupMapping[];\n}\n\nexport class Container extends React.Component<IContainerProps, IContainerState> {\n constructor(props: IContainerProps) {\n super(props);\n const cmd = this.props.command;\n let defaultContainer = '';\n if (cmd.containerMappings && cmd.containerMappings.length > 0) {\n defaultContainer = cmd.containerMappings[0].containerName;\n }\n\n let defaultTargetGroup: IEcsTargetGroupMapping[] = [];\n if (cmd.targetGroupMappings && cmd.targetGroupMappings.length > 0) {\n defaultTargetGroup = cmd.targetGroupMappings;\n }\n\n if (cmd.targetGroup && cmd.targetGroup.length > 0) {\n defaultTargetGroup.push({\n containerName: cmd.loadBalancedContainer || defaultContainer,\n targetGroup: cmd.targetGroup,\n containerPort: cmd.containerPort,\n });\n cmd.targetGroup = '';\n cmd.loadBalancedContainer = '';\n }\n\n cmd.targetGroupMappings = uniqWith(defaultTargetGroup, isEqual);\n cmd.containerMappings = null;\n\n this.state = {\n imageDescription: cmd.imageDescription ? cmd.imageDescription : this.getEmptyImageDescription(),\n computeUnits: cmd.computeUnits,\n reservedMemory: cmd.reservedMemory,\n dockerImages: cmd.backingData && cmd.backingData.filtered ? cmd.backingData.filtered.images : [],\n targetGroupMappings: cmd.targetGroupMappings,\n targetGroupsAvailable: cmd.backingData && cmd.backingData.filtered ? cmd.backingData.filtered.targetGroups : [],\n };\n\n this.state.targetGroupMappings.forEach((targetGroupMapping) => {\n targetGroupMapping.containerName = '';\n });\n }\n\n public componentDidMount() {\n this.props.configureCommand('1').then(() => {\n this.setState({\n dockerImages: this.props.command.backingData.filtered.images,\n targetGroupsAvailable: this.props.command.backingData.filtered.targetGroups,\n });\n });\n }\n\n // TODO: Separate docker image component used by both TaskDefinition and Container\n\n private getIdToImageMap = (): Map<string, IEcsDockerImage> => {\n const imageIdToDescription = new Map<string, IEcsDockerImage>();\n this.props.command.backingData.filtered.images.forEach((e) => {\n imageIdToDescription.set(e.imageId, e);\n });\n\n return imageIdToDescription;\n };\n\n private getEmptyImageDescription = (): IEcsDockerImage => {\n return {\n imageId: '',\n message: '',\n fromTrigger: false,\n fromContext: false,\n stageId: '',\n imageLabelOrSha: '',\n account: '',\n registry: '',\n repository: '',\n tag: '',\n };\n };\n\n private pushTargetGroupMapping = () => {\n const targetMaps = this.state.targetGroupMappings;\n targetMaps.push({ containerName: '', targetGroup: '', containerPort: 80 });\n this.setState({ targetGroupMappings: targetMaps });\n };\n\n private updateContainerMappingImage = (newImage: Option<string>) => {\n const imageMap = this.getIdToImageMap();\n let newImageDescription = imageMap.get(newImage.value);\n if (!newImageDescription) {\n newImageDescription = this.getEmptyImageDescription();\n }\n\n this.props.notifyAngular('imageDescription', newImageDescription);\n this.setState({ imageDescription: newImageDescription });\n };\n\n private updateComputeUnits = (newComputeUnits: number) => {\n this.props.notifyAngular('computeUnits', newComputeUnits);\n this.setState({ computeUnits: newComputeUnits });\n };\n\n private updateReservedMemory = (newReservedMemory: number) => {\n this.props.notifyAngular('reservedMemory', newReservedMemory);\n this.setState({ reservedMemory: newReservedMemory });\n };\n\n private updateTargetGroupMappingTargetGroup = (index: number, newTargetGroup: Option<string>) => {\n const currentMappings = this.state.targetGroupMappings;\n const targetMapping = currentMappings[index];\n targetMapping.targetGroup = newTargetGroup.value;\n this.props.notifyAngular('targetGroupMappings', currentMappings);\n this.setState({ targetGroupMappings: currentMappings });\n this.updateDirtyTargetGroups();\n };\n\n private updateTargetGroupMappingPort = (index: number, targetPort: number) => {\n const currentMappings = this.state.targetGroupMappings;\n const targetMapping = currentMappings[index];\n targetMapping.containerPort = targetPort;\n this.props.notifyAngular('targetGroupMappings', currentMappings);\n this.setState({ targetGroupMappings: currentMappings });\n };\n\n private removeTargetGroupMapping = (index: number) => {\n const currentMappings = this.state.targetGroupMappings;\n currentMappings.splice(index, 1);\n this.props.notifyAngular('targetGroupMappings', currentMappings);\n this.setState({ targetGroupMappings: currentMappings });\n };\n\n private updateDirtyTargetGroups = () => {\n this.props.command.viewState.dirty.targetGroups = [];\n };\n\n public render(): React.ReactElement<Container> {\n const removeTargetGroupMapping = this.removeTargetGroupMapping;\n const updateContainerMappingImage = this.updateContainerMappingImage;\n const updateTargetGroupMappingTargetGroup = this.updateTargetGroupMappingTargetGroup;\n const updateTargetGroupMappingPort = this.updateTargetGroupMappingPort;\n const updateComputeUnits = this.updateComputeUnits;\n const updateReservedMemory = this.updateReservedMemory;\n const dirtyTagetGroups =\n this.props.command.viewState.dirty && this.props.command.viewState.dirty.targetGroups\n ? this.props.command.viewState.dirty.targetGroups\n : [];\n\n const dockerImageOptions = this.state.dockerImages.map(function (image) {\n let msg = '';\n if (image.fromTrigger || image.fromContext) {\n msg = image.fromTrigger ? '(TRIGGER) ' : '(FIND IMAGE RESULT) ';\n }\n return { label: `${msg} (${image.imageId})`, value: image.imageId };\n });\n\n const dirtyTargetGroupList = dirtyTagetGroups\n ? dirtyTagetGroups.map(function (targetGroup, index) {\n return <li key={index}>{targetGroup}</li>;\n })\n : '';\n\n const dirtyTargetGroupSection = (\n <div className=\"alert alert-warning\">\n <p>\n <i className=\"fa fa-exclamation-triangle\"></i>\n The following target groups could not be found in the selected account/region/VPC and were removed:\n </p>\n <ul>{dirtyTargetGroupList}</ul>\n <br />\n <p className=\"text-left\">Please select the target group(s) from the dropdown to resolve this error.</p>\n </div>\n );\n\n const newTargetGroupMapping = this.state.targetGroupsAvailable.length ? (\n <button\n className=\"btn btn-block btn-sm add-new\"\n data-test-id=\"ContainerInputs.targetGroupAdd\"\n onClick={this.pushTargetGroupMapping}\n >\n <span className=\"glyphicon glyphicon-plus-sign\" />\n Add New Target Group Mapping\n </button>\n ) : (\n <div className=\"sm-label-left\">\n <Alert color=\"warning\">No target groups found in the selected account/region/VPC</Alert>\n </div>\n );\n\n const targetGroupsAvailable = this.state.targetGroupsAvailable.map(function (targetGroup) {\n return { label: `${targetGroup}`, value: targetGroup };\n });\n\n const targetGroupInputs = this.state.targetGroupMappings.map(function (mapping, index) {\n return (\n <tr key={index}>\n <td data-test-id=\"ContainerInputs.targetGroup\">\n <TetheredSelect\n placeholder=\"Select a target group to use...\"\n options={targetGroupsAvailable}\n value={mapping.targetGroup.toString()}\n onChange={(e: Option) => updateTargetGroupMappingTargetGroup(index, e as Option<string>)}\n clearable={false}\n />\n </td>\n <td>\n <input\n data-test-id=\"ContainerInputs.targetGroupPort\"\n type=\"number\"\n className=\"form-control input-sm no-spel\"\n required={true}\n value={mapping.containerPort.toString()}\n onChange={(e) => updateTargetGroupMappingPort(index, e.target.valueAsNumber)}\n />\n </td>\n <td>\n <div className=\"form-control-static\">\n <a\n className=\"btn-link sm-label\"\n data-test-id=\"ContainerInputs.targetGroupRemove\"\n onClick={() => removeTargetGroupMapping(index)}\n >\n <span className=\"glyphicon glyphicon-trash\" />\n <span className=\"sr-only\">Remove</span>\n </a>\n </div>\n </td>\n </tr>\n );\n });\n\n return (\n <div className=\"container-fluid form-horizontal\">\n {dirtyTagetGroups.length > 0 ? <div>{dirtyTargetGroupSection}</div> : ''}\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">\n <b>Container Image</b>\n <HelpField id=\"ecs.containerMappingImage\" />\n </div>\n <div className=\"col-md-9\" data-test-id=\"ContainerInputs.containerImage\">\n <TetheredSelect\n placeholder=\"Select an image to use...\"\n options={dockerImageOptions}\n value={this.state.imageDescription.imageId}\n onChange={(e: Option) => {\n updateContainerMappingImage(e as Option<string>);\n }}\n clearable={false}\n />\n </div>\n </div>\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">\n <b>Compute Units</b>\n <HelpField id=\"ecs.capacity.reserved.computeUnits\" />\n </div>\n <div className=\"col-md-9\" style={{ width: '100px' }}>\n <input\n data-test-id=\"ContainerInputs.computeUnits\"\n type=\"number\"\n className=\"form-control input-sm no-spel\"\n required={false}\n value={this.state.computeUnits}\n onChange={(e) => updateComputeUnits(e.target.valueAsNumber)}\n />\n </div>\n </div>\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">\n <b>Reserved Memory</b>\n <HelpField id=\"ecs.capacity.reserved.memory\" />\n </div>\n <div className=\"col-md-9\" style={{ width: '100px' }}>\n <input\n data-test-id=\"ContainerInputs.reservedMemory\"\n type=\"number\"\n className=\"form-control input-sm no-spel\"\n required={false}\n value={this.state.reservedMemory}\n onChange={(e) => updateReservedMemory(e.target.valueAsNumber)}\n />\n </div>\n </div>\n <div className=\"form-group\">\n <div className=\"sm-label-left\">\n <b>Target Group Mappings</b>\n <HelpField id=\"ecs.targetGroupMappings\" />\n </div>\n <form name=\"ecsContainerTargetGroupMappings\">\n <table className=\"table table-condensed packed tags\">\n <thead>\n <tr key=\"header\">\n <th style={{ width: '80%' }}>\n Target group\n <HelpField id=\"ecs.loadBalancer.targetGroup\" />\n </th>\n <th style={{ width: '20%' }}>\n Target port\n <HelpField id=\"ecs.loadbalancing.targetPort\" />\n </th>\n <th />\n </tr>\n </thead>\n <tbody>{targetGroupInputs}</tbody>\n <tfoot>\n <tr>\n <td colSpan={4}>{newTargetGroupMapping}</td>\n </tr>\n </tfoot>\n </table>\n </form>\n </div>\n </div>\n );\n }\n}\n\nexport const CONTAINER_REACT = 'spinnaker.ecs.serverGroup.configure.wizard.container.react';\nmodule(CONTAINER_REACT, []).component(\n 'containerReact',\n react2angular(withErrorBoundary(Container, 'containerReact'), ['command', 'notifyAngular', 'configureCommand']),\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const ECS_SERVERGROUP_CONFIGURE_WIZARD_HORIZONTALSCALING_HORIZONTALSCALING_COMPONENT =\n 'spinnaker.ecs.serverGroup.configure.wizard.horizontalScaling.component';\nexport const name = ECS_SERVERGROUP_CONFIGURE_WIZARD_HORIZONTALSCALING_HORIZONTALSCALING_COMPONENT; // for backwards compatibility\nmodule(ECS_SERVERGROUP_CONFIGURE_WIZARD_HORIZONTALSCALING_HORIZONTALSCALING_COMPONENT, []).component(\n 'ecsServerGroupHorizontalScaling',\n {\n bindings: {\n command: '=',\n application: '=',\n capacityProviderState: '=',\n notifyAngular: '=',\n configureCommand: '=',\n },\n templateUrl: require('./horizontalScaling.component.html'),\n },\n);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\n\nimport { ModalWizard } from '@spinnaker/core';\n\nexport const ECS_SERVERGROUP_CONFIGURE_WIZARD_LOCATION_SERVERGROUPBASICSETTINGS_CONTROLLER =\n 'spinnaker.ecs.serverGroup.configure.basicSettings';\nexport const name = ECS_SERVERGROUP_CONFIGURE_WIZARD_LOCATION_SERVERGROUPBASICSETTINGS_CONTROLLER; // for backwards compatibility\nangular\n .module(ECS_SERVERGROUP_CONFIGURE_WIZARD_LOCATION_SERVERGROUPBASICSETTINGS_CONTROLLER, [\n UIROUTER_ANGULARJS,\n ANGULAR_UI_BOOTSTRAP,\n ])\n .controller('ecsServerGroupBasicSettingsCtrl', [\n '$scope',\n '$controller',\n '$uibModalStack',\n '$state',\n function ($scope, $controller, $uibModalStack, $state) {\n angular.extend(\n this,\n $controller('BasicSettingsMixin', {\n $scope: $scope,\n $uibModalStack: $uibModalStack,\n $state: $state,\n }),\n );\n\n $scope.$watch('form.$valid', function (newVal) {\n if (newVal) {\n ModalWizard.markClean('basicSettings');\n ModalWizard.markComplete('basicSettings');\n } else {\n ModalWizard.markIncomplete('basicSettings');\n }\n });\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const ECS_SERVER_GROUP_LOGGING = 'spinnaker.ecs.serverGroup.configure.wizard.logging.component';\nmodule(ECS_SERVER_GROUP_LOGGING, []).component('ecsServerGroupLogging', {\n bindings: {\n command: '=',\n application: '=',\n },\n templateUrl: require('./logging.component.html'),\n});\n","import { module } from 'angular';\nimport { isEqual, uniqWith } from 'lodash';\nimport * as React from 'react';\nimport { Alert } from 'react-bootstrap';\nimport type { Option } from 'react-select';\nimport { react2angular } from 'react2angular';\n\nimport type { ISubnet } from '@spinnaker/core';\nimport { HelpField, TetheredSelect, withErrorBoundary } from '@spinnaker/core';\n\nimport type { IEcsServerGroupCommand } from '../../serverGroupConfiguration.service';\n\nexport interface IEcsNetworkingProps {\n command: IEcsServerGroupCommand;\n notifyAngular: (key: string, value: any) => void;\n configureCommand: (query: string) => PromiseLike<void>;\n}\n\ninterface IEcsNetworkingState {\n associatePublicIpAddress: boolean;\n networkMode: string;\n networkModesAvailable: string[];\n securityGroupNames: string[];\n securityGroupsAvailable: string[];\n subnetTypes: string[];\n subnetTypesAvailable: ISubnet[];\n}\n\nexport class EcsNetworking extends React.Component<IEcsNetworkingProps, IEcsNetworkingState> {\n constructor(props: IEcsNetworkingProps) {\n super(props);\n const cmd = this.props.command;\n\n let defaultSubnetTypes: string[] = [];\n if (cmd.subnetTypes && cmd.subnetTypes.length > 0) {\n defaultSubnetTypes = cmd.subnetTypes;\n }\n\n if (cmd.subnetType && cmd.subnetType.length > 0) {\n defaultSubnetTypes.push(cmd.subnetType);\n cmd.subnetType = '';\n }\n\n cmd.subnetTypes = uniqWith(defaultSubnetTypes, isEqual);\n\n this.state = {\n associatePublicIpAddress: cmd.associatePublicIpAddress,\n networkMode: cmd.networkMode,\n networkModesAvailable: cmd.backingData && cmd.backingData.networkModes ? cmd.backingData.networkModes : [],\n securityGroupNames: cmd.securityGroupNames,\n securityGroupsAvailable:\n cmd.backingData && cmd.backingData.filtered && cmd.backingData.filtered.securityGroupNames\n ? cmd.backingData.filtered.securityGroupNames\n : [],\n subnetTypes: cmd.subnetTypes,\n subnetTypesAvailable:\n cmd.backingData && cmd.backingData.filtered && cmd.backingData.filtered.subnetTypes\n ? cmd.backingData.filtered.subnetTypes\n : [],\n };\n }\n\n public componentDidMount() {\n const cmd = this.props.command;\n\n this.props.configureCommand('1').then(() => {\n this.setState({\n networkModesAvailable: cmd.backingData && cmd.backingData.networkModes ? cmd.backingData.networkModes : [],\n securityGroupsAvailable:\n cmd.backingData && cmd.backingData.filtered && cmd.backingData.filtered.securityGroupNames\n ? cmd.backingData.filtered.securityGroupNames\n : [],\n subnetTypesAvailable:\n cmd.backingData && cmd.backingData.filtered && cmd.backingData.filtered.subnetTypes\n ? cmd.backingData.filtered.subnetTypes\n : [],\n });\n });\n }\n\n private updateNetworkMode = (newNetworkMode: Option<string>) => {\n const updatedNetworkMode = newNetworkMode.value;\n const cmd = this.props.command;\n this.props.notifyAngular('networkMode', updatedNetworkMode);\n this.setState({\n networkMode: updatedNetworkMode,\n subnetTypesAvailable:\n cmd.backingData && cmd.backingData.filtered && cmd.backingData.filtered.subnetTypes\n ? cmd.backingData.filtered.subnetTypes\n : [],\n });\n };\n\n private updateSecurityGroups = (newSecurityGroups: Option<string>) => {\n const updatedSecurityGroups = Array.isArray(newSecurityGroups)\n ? newSecurityGroups.map((securityGroups) => securityGroups.value)\n : [];\n this.props.notifyAngular('securityGroupNames', updatedSecurityGroups);\n this.setState({ securityGroupNames: updatedSecurityGroups });\n };\n\n private updateSubnetTypes = (newSubnetTypes: Option<string>) => {\n const cmd = this.props.command;\n const updatedSubnetTypes = Array.isArray(newSubnetTypes)\n ? newSubnetTypes.map((subnetType) => subnetType.value)\n : [];\n this.props.notifyAngular('subnetTypes', updatedSubnetTypes);\n cmd.subnetTypeChanged(cmd);\n this.setState({\n subnetTypes: updatedSubnetTypes,\n securityGroupsAvailable:\n cmd.backingData && cmd.backingData.filtered && cmd.backingData.filtered.securityGroupNames\n ? cmd.backingData.filtered.securityGroupNames\n : [],\n });\n };\n\n private updateAssociatePublicIpAddress = (usePublicIp: boolean) => {\n this.props.notifyAngular('associatePublicIpAddress', usePublicIp);\n this.setState({ associatePublicIpAddress: usePublicIp });\n };\n\n public render(): React.ReactElement<EcsNetworking> {\n const updateAssociatePublicIpAddress = this.updateAssociatePublicIpAddress;\n const updateNetworkMode = this.updateNetworkMode;\n const updateSecurityGroups = this.updateSecurityGroups;\n const updateSubnetTypes = this.updateSubnetTypes;\n\n const networkModesAvailable = this.state.networkModesAvailable.map(function (networkMode) {\n return { label: `${networkMode}`, value: networkMode };\n });\n\n const securityGroupsAvailable = this.state.securityGroupsAvailable.map(function (securityGroup) {\n return { label: `${securityGroup}`, value: securityGroup };\n });\n\n const subnetTypesAvailable = this.state.subnetTypesAvailable.map(function (subnetType) {\n return { label: `${subnetType.purpose} (${subnetType.vpcId})`, value: subnetType.purpose };\n });\n\n const subnetTypeOptions = this.state.subnetTypesAvailable.length ? (\n <TetheredSelect\n multi={true}\n options={subnetTypesAvailable}\n value={this.state.subnetTypes}\n onChange={(e: Option) => {\n updateSubnetTypes(e as Option<string>);\n }}\n />\n ) : (\n <Alert color=\"warning\">No account was selected, or no subnet types are available for this account</Alert>\n );\n\n const securityGroupsOptions = this.state.securityGroupsAvailable.length ? (\n <TetheredSelect\n multi={true}\n options={securityGroupsAvailable}\n value={this.state.securityGroupNames}\n onChange={(e: Option) => {\n updateSecurityGroups(e as Option<string>);\n }}\n />\n ) : (\n <Alert color=\"warning\">No security groups found in the selected account/region</Alert>\n );\n\n const awsVpcOptions =\n this.state.networkMode === 'awsvpc' ? (\n <div className=\"form-group\">\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">\n <b>VPC Subnet</b>\n <HelpField key=\"ecs.subnet\" />\n </div>\n <div className=\"col-md-9\" data-test-id=\"Networking.subnetType\">\n {subnetTypeOptions}\n </div>\n </div>\n\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">\n <b>Security Groups</b>\n <HelpField key=\"ecs.securityGroups\" />\n </div>\n <div className=\"col-md-9\" data-test-id=\"Networking.securityGroups\">\n {securityGroupsOptions}\n </div>\n </div>\n\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">\n <b>Associate Public IP Address</b>\n <HelpField key=\"ecs.publicip\" />\n </div>\n <div className=\"col-md-1 radio\">\n <label>\n <input\n data-test-id=\"Networking.associatePublicIpAddressTrue\"\n type=\"radio\"\n value=\"true\"\n id=\"associatePublicIpAddressTrue\"\n checked={this.state.associatePublicIpAddress === true}\n onChange={() => updateAssociatePublicIpAddress(true)}\n />\n Yes\n </label>\n </div>\n <div className=\"col-md-1 radio\">\n <label>\n <input\n data-test-id=\"Networking.associatePublicIpAddressFalse\"\n type=\"radio\"\n value=\"false\"\n id=\"associatePublicIpAddressFalse\"\n checked={this.state.associatePublicIpAddress === false}\n onChange={() => updateAssociatePublicIpAddress(false)}\n />\n No\n </label>\n </div>\n </div>\n </div>\n ) : (\n <div className=\"col-md-3 sm-label-right\"></div>\n );\n\n return (\n <div className=\"networking-fluid form-horizontal\">\n <div className=\"form-group\">\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">\n <b>Network Mode</b>\n <HelpField id=\"ecs.networkMode\" />\n </div>\n <div className=\"col-md-9\" data-test-id=\"Networking.networkMode\">\n <TetheredSelect\n placeholder=\"Select a network mode to use ...\"\n options={networkModesAvailable}\n value={this.state.networkMode}\n onChange={(e: Option) => {\n updateNetworkMode(e as Option<string>);\n }}\n />\n </div>\n </div>\n </div>\n {awsVpcOptions}\n </div>\n );\n }\n}\n\nexport const ECS_NETWORKING_REACT = 'spinnaker.ecs.serverGroup.configure.wizard.networking.react';\nmodule(ECS_NETWORKING_REACT, []).component(\n 'ecsNetworkingReact',\n react2angular(withErrorBoundary(EcsNetworking, 'ecsNetworkingReact'), [\n 'command',\n 'notifyAngular',\n 'configureCommand',\n ]),\n);\n","import { module } from 'angular';\nimport React from 'react';\nimport { Alert } from 'react-bootstrap';\nimport type { Option } from 'react-select';\nimport { react2angular } from 'react2angular';\n\nimport { HelpField, TetheredSelect, withErrorBoundary } from '@spinnaker/core';\n\nimport type {\n IEcsServerGroupCommand,\n IEcsServiceDiscoveryRegistryAssociation,\n} from '../../serverGroupConfiguration.service';\n\nexport interface IServiceDiscoveryProps {\n command: IEcsServerGroupCommand;\n notifyAngular: (key: string, value: any) => void;\n configureCommand: (query: string) => PromiseLike<void>;\n}\n\nexport interface IEcsServiceDiscoveryRegistry {\n account: string;\n region: string;\n name: string;\n id: string;\n arn: string;\n displayName: string;\n}\n\ninterface IServiceDiscoveryState {\n serviceDiscoveryAssociations: IEcsServiceDiscoveryRegistryAssociation[];\n serviceDiscoveryRegistriesAvailable: IEcsServiceDiscoveryRegistry[];\n useTaskDefinitionArtifact: boolean;\n}\n\nexport class ServiceDiscovery extends React.Component<IServiceDiscoveryProps, IServiceDiscoveryState> {\n constructor(props: IServiceDiscoveryProps) {\n super(props);\n const cmd = this.props.command;\n\n this.state = {\n serviceDiscoveryAssociations: cmd.serviceDiscoveryAssociations,\n serviceDiscoveryRegistriesAvailable:\n cmd.backingData && cmd.backingData.filtered ? cmd.backingData.filtered.serviceDiscoveryRegistries : [],\n useTaskDefinitionArtifact: cmd.useTaskDefinitionArtifact,\n };\n\n if (!this.state.useTaskDefinitionArtifact) {\n this.state.serviceDiscoveryAssociations.forEach((serviceDiscoveryRegistryAssociation) => {\n serviceDiscoveryRegistryAssociation.containerName = null;\n });\n }\n }\n\n public componentDidMount() {\n this.props.configureCommand('1').then(() => {\n this.setState({\n serviceDiscoveryRegistriesAvailable: this.props.command.backingData.filtered.serviceDiscoveryRegistries,\n });\n });\n }\n\n private getNameToRegistryMap = (): Map<string, IEcsServiceDiscoveryRegistry> => {\n const displayNameToRegistry = new Map<string, IEcsServiceDiscoveryRegistry>();\n this.props.command.backingData.filtered.serviceDiscoveryRegistries.forEach((e) => {\n displayNameToRegistry.set(e.displayName, e);\n });\n\n return displayNameToRegistry;\n };\n\n private getEmptyRegistry = (): IEcsServiceDiscoveryRegistry => {\n return {\n account: '',\n region: '',\n name: '',\n id: '',\n arn: '',\n displayName: '',\n };\n };\n\n private updateServiceDiscoveryRegistry = (index: number, newRegistry: Option<string>) => {\n const registryMap = this.getNameToRegistryMap();\n let newServiceDiscoveryRegistry = registryMap.get(newRegistry.value);\n\n if (!newServiceDiscoveryRegistry) {\n newServiceDiscoveryRegistry = this.getEmptyRegistry();\n }\n\n const currentAssociations = this.state.serviceDiscoveryAssociations;\n const targetAssociation = currentAssociations[index];\n targetAssociation.registry = newServiceDiscoveryRegistry;\n this.props.notifyAngular('serviceDiscoveryAssociations', currentAssociations);\n this.setState({ serviceDiscoveryAssociations: currentAssociations });\n };\n\n private updateServiceDiscoveryPort = (index: number, targetPort: number) => {\n const currentAssociations = this.state.serviceDiscoveryAssociations;\n const targetAssociations = currentAssociations[index];\n targetAssociations.containerPort = targetPort;\n this.props.notifyAngular('serviceDiscoveryAssociations', currentAssociations);\n this.setState({ serviceDiscoveryAssociations: currentAssociations });\n };\n\n private updateServiceDiscoveryContainerName = (index: number, targetContainerName: string) => {\n const currentAssociations = this.state.serviceDiscoveryAssociations;\n const targetAssociations = currentAssociations[index];\n targetAssociations.containerName = targetContainerName;\n this.props.notifyAngular('serviceDiscoveryAssociations', currentAssociations);\n this.setState({ serviceDiscoveryAssociations: currentAssociations });\n };\n\n private pushServiceDiscoveryAssociation = () => {\n const registryAssociations = this.state.serviceDiscoveryAssociations;\n registryAssociations.push({ registry: this.getEmptyRegistry(), containerPort: 80, containerName: '' });\n this.setState({ serviceDiscoveryAssociations: registryAssociations });\n };\n\n private removeServiceDiscoveryAssociations = (index: number) => {\n const currentAssociations = this.state.serviceDiscoveryAssociations;\n currentAssociations.splice(index, 1);\n this.props.notifyAngular('serviceDiscoveryAssociations', currentAssociations);\n this.setState({ serviceDiscoveryAssociations: currentAssociations });\n };\n\n public render(): React.ReactElement<ServiceDiscovery> {\n const removeServiceDiscoveryAssociation = this.removeServiceDiscoveryAssociations;\n const updateServiceDiscoveryRegistry = this.updateServiceDiscoveryRegistry;\n const updateServiceDiscoveryPort = this.updateServiceDiscoveryPort;\n const updateServiceDiscoveryContainerName = this.updateServiceDiscoveryContainerName;\n\n const registriesAvailable = this.state.serviceDiscoveryRegistriesAvailable.map(function (registry) {\n return { label: `${registry.displayName}`, value: registry.displayName };\n });\n\n const useTaskDefinitionArtifact = this.state.useTaskDefinitionArtifact;\n const serviceDiscoveryInputs = this.state.serviceDiscoveryAssociations.map(function (mapping, index) {\n return (\n <tr key={index}>\n {useTaskDefinitionArtifact && (\n <td>\n <input\n className=\"form-control input-sm\"\n placeholder=\"Enter a container name ...\"\n required={true}\n value={mapping.containerName}\n onChange={(e) => updateServiceDiscoveryContainerName(index, e.target.value)}\n />\n </td>\n )}\n <td>\n <TetheredSelect\n placeholder=\"Select a registry...\"\n options={registriesAvailable}\n value={mapping.registry.displayName.toString()}\n onChange={(e: Option) => updateServiceDiscoveryRegistry(index, e as Option<string>)}\n clearable={false}\n required={true}\n />\n </td>\n <td>\n <input\n type=\"number\"\n className=\"form-control input-sm no-spel\"\n required={true}\n value={mapping.containerPort}\n onChange={(e) => updateServiceDiscoveryPort(index, e.target.valueAsNumber)}\n />\n </td>\n <td>\n <div className=\"form-control-static\">\n <a className=\"btn-link sm-label\" onClick={() => removeServiceDiscoveryAssociation(index)}>\n <span className=\"glyphicon glyphicon-trash\" />\n <span className=\"sr-only\">Remove</span>\n </a>\n </div>\n </td>\n </tr>\n );\n });\n\n const newServiceDiscoveryAssociation = this.state.serviceDiscoveryRegistriesAvailable.length ? (\n <button className=\"btn btn-block btn-sm add-new\" onClick={this.pushServiceDiscoveryAssociation}>\n <span className=\"glyphicon glyphicon-plus-sign\" />\n Add New Service Registry\n </button>\n ) : (\n <div className=\"sm-label-left\">\n <Alert color=\"warning\">No registries found in the selected account/region/VPC</Alert>\n </div>\n );\n\n return (\n <div className=\"container-fluid form-horizontal\">\n <div className=\"form-group\">\n <div className=\"sm-label-left\">\n <b>Service Registries (optional)</b>\n <HelpField id=\"ecs.serviceDiscovery\" />\n </div>\n <form name=\"ecsServiceDiscoveryRegistryMappings\">\n <table className=\"table table-condensed packed tags\">\n <thead>\n <tr>\n {useTaskDefinitionArtifact && (\n <th style={{ width: '30%' }}>\n Container name\n <HelpField id=\"ecs.serviceDiscoveryContainerName\" />\n </th>\n )}\n {useTaskDefinitionArtifact ? (\n <th style={{ width: '55%' }}>\n Registry\n <HelpField id=\"ecs.serviceDiscoveryRegistry\" />\n </th>\n ) : (\n <th style={{ width: '80%' }}>\n Registry\n <HelpField id=\"ecs.serviceDiscoveryRegistry\" />\n </th>\n )}\n <th style={{ width: '15%' }}>\n Port\n <HelpField id=\"ecs.serviceDiscoveryContainerPort\" />\n </th>\n <th />\n </tr>\n </thead>\n <tbody>{serviceDiscoveryInputs}</tbody>\n <tfoot>\n <tr>\n <td colSpan={4}>{newServiceDiscoveryAssociation}</td>\n </tr>\n </tfoot>\n </table>\n </form>\n </div>\n </div>\n );\n }\n}\n\nexport const SERVICE_DISCOVERY_REACT = 'spinnaker.ecs.serverGroup.configure.wizard.serviceDiscovery.react';\nmodule(SERVICE_DISCOVERY_REACT, []).component(\n 'serviceDiscoveryReact',\n react2angular(withErrorBoundary(ServiceDiscovery, 'serviceDiscoveryReact'), [\n 'command',\n 'notifyAngular',\n 'configureCommand',\n ]),\n);\n","import { module } from 'angular';\nimport { isEqual, uniqWith } from 'lodash';\nimport React from 'react';\nimport { Alert } from 'react-bootstrap';\nimport type { Option } from 'react-select';\nimport { react2angular } from 'react2angular';\n\nimport type { IArtifact, IExpectedArtifact } from '@spinnaker/core';\nimport {\n ArtifactTypePatterns,\n CheckboxInput,\n HelpField,\n StageArtifactSelectorDelegate,\n StageConfigField,\n TetheredSelect,\n withErrorBoundary,\n} from '@spinnaker/core';\n\nimport type {\n IEcsContainerMapping,\n IEcsDockerImage,\n IEcsServerGroupCommand,\n IEcsTargetGroupMapping,\n IEcsTaskDefinitionArtifact,\n} from '../../serverGroupConfiguration.service';\n\nexport interface ITaskDefinitionProps {\n command: IEcsServerGroupCommand;\n notifyAngular: (key: string, value: any) => void;\n configureCommand: (query: string) => PromiseLike<void>;\n}\n\ninterface ITaskDefinitionState {\n taskDefArtifact: IEcsTaskDefinitionArtifact;\n taskDefArtifactAccount: string;\n containerMappings: IEcsContainerMapping[];\n targetGroupMappings: IEcsTargetGroupMapping[];\n dockerImages: IEcsDockerImage[];\n targetGroupsAvailable: string[];\n loadBalancedContainer: string;\n evaluateTaskDefinitionArtifactExpressions: boolean;\n}\n\nexport class TaskDefinition extends React.Component<ITaskDefinitionProps, ITaskDefinitionState> {\n constructor(props: ITaskDefinitionProps) {\n super(props);\n const cmd = this.props.command;\n let defaultContainer = '';\n if (cmd.containerMappings && cmd.containerMappings.length > 0) {\n defaultContainer = cmd.containerMappings[0].containerName;\n }\n\n let defaultTargetGroup: IEcsTargetGroupMapping[] = [];\n if (cmd.targetGroupMappings && cmd.targetGroupMappings.length > 0) {\n defaultTargetGroup = cmd.targetGroupMappings;\n }\n\n if (cmd.targetGroup && cmd.targetGroup.length > 0) {\n defaultTargetGroup.push({\n containerName: cmd.loadBalancedContainer || defaultContainer,\n targetGroup: cmd.targetGroup,\n containerPort: cmd.containerPort,\n });\n cmd.targetGroup = '';\n cmd.loadBalancedContainer = '';\n }\n\n cmd.targetGroupMappings = uniqWith(defaultTargetGroup, isEqual);\n\n this.state = {\n taskDefArtifact: cmd.taskDefinitionArtifact,\n containerMappings: cmd.containerMappings ? cmd.containerMappings : [],\n targetGroupMappings: cmd.targetGroupMappings,\n targetGroupsAvailable: cmd.backingData && cmd.backingData.filtered ? cmd.backingData.filtered.targetGroups : [],\n dockerImages: cmd.backingData && cmd.backingData.filtered ? cmd.backingData.filtered.images : [],\n loadBalancedContainer: cmd.loadBalancedContainer || defaultContainer,\n taskDefArtifactAccount: cmd.taskDefinitionArtifactAccount,\n evaluateTaskDefinitionArtifactExpressions: cmd.evaluateTaskDefinitionArtifactExpressions,\n };\n }\n\n // TODO: Separate docker image component used by both TaskDefinition and Container\n public componentDidMount() {\n this.props.configureCommand('1').then(() => {\n this.setState({\n dockerImages: this.props.command.backingData.filtered.images,\n targetGroupsAvailable: this.props.command.backingData.filtered.targetGroups,\n });\n });\n }\n\n private getIdToImageMap = (): Map<string, IEcsDockerImage> => {\n const imageIdToDescription = new Map<string, IEcsDockerImage>();\n this.props.command.backingData.filtered.images.forEach((e) => {\n imageIdToDescription.set(e.imageId, e);\n });\n\n return imageIdToDescription;\n };\n\n private getEmptyImageDescription = (): IEcsDockerImage => {\n return {\n imageId: '',\n message: '',\n fromTrigger: false,\n fromContext: false,\n stageId: '',\n imageLabelOrSha: '',\n account: '',\n registry: '',\n repository: '',\n tag: '',\n };\n };\n\n private excludedArtifactTypePatterns = [\n ArtifactTypePatterns.KUBERNETES,\n ArtifactTypePatterns.DOCKER_IMAGE,\n ArtifactTypePatterns.FRONT50_PIPELINE_TEMPLATE,\n ];\n\n private onExpectedArtifactSelected = (expectedArtifactId: string): void => {\n const selectedArtifact = { artifactId: expectedArtifactId };\n this.props.notifyAngular('taskDefinitionArtifact', selectedArtifact);\n this.setState({ taskDefArtifact: selectedArtifact });\n };\n\n private onArtifactEdited = (artifact: IArtifact): void => {\n const newArtifact = { artifact: artifact };\n this.props.notifyAngular('taskDefinitionArtifact', newArtifact);\n this.setState({ taskDefArtifact: newArtifact });\n };\n\n private pushMapping = () => {\n const conMaps = this.state.containerMappings;\n conMaps.push({ containerName: '', imageDescription: this.getEmptyImageDescription() });\n this.setState({ containerMappings: conMaps });\n };\n\n private pushTargetGroupMapping = () => {\n const targetMaps = this.state.targetGroupMappings;\n targetMaps.push({ containerName: '', targetGroup: '', containerPort: 80 });\n this.setState({ targetGroupMappings: targetMaps });\n };\n\n private updateContainerMappingName = (index: number, newName: string) => {\n const currentMappings = this.state.containerMappings;\n const targetMapping = currentMappings[index];\n targetMapping.containerName = newName;\n this.props.notifyAngular('containerMappings', currentMappings);\n this.setState({ containerMappings: currentMappings });\n };\n\n private updateContainerMappingImage = (index: number, newImage: Option<string>) => {\n const imageMap = this.getIdToImageMap();\n let newImageDescription = imageMap.get(newImage.value);\n\n if (!newImageDescription) {\n newImageDescription = this.getEmptyImageDescription();\n }\n const currentMappings = this.state.containerMappings;\n const targetMapping = currentMappings[index];\n targetMapping.imageDescription = newImageDescription;\n this.props.notifyAngular('containerMappings', currentMappings);\n this.setState({ containerMappings: currentMappings });\n };\n\n private updateTargetGroupMappingTargetGroup = (index: number, newTargetGroup: Option<string>) => {\n const currentMappings = this.state.targetGroupMappings;\n const targetMapping = currentMappings[index];\n targetMapping.targetGroup = newTargetGroup.value;\n this.props.notifyAngular('targetGroupMappings', currentMappings);\n this.setState({ targetGroupMappings: currentMappings });\n };\n\n private updateTargetGroupMappingContainer = (index: number, targetContainer: string) => {\n const currentMappings = this.state.targetGroupMappings;\n const targetMapping = currentMappings[index];\n targetMapping.containerName = targetContainer;\n this.props.notifyAngular('targetGroupMappings', currentMappings);\n this.setState({ targetGroupMappings: currentMappings });\n };\n\n private updateTargetGroupMappingPort = (index: number, targetPort: number) => {\n const currentMappings = this.state.targetGroupMappings;\n const targetMapping = currentMappings[index];\n targetMapping.containerPort = targetPort;\n this.props.notifyAngular('targetGroupMappings', currentMappings);\n this.setState({ targetGroupMappings: currentMappings });\n };\n\n private removeMapping = (index: number) => {\n const currentMappings = this.state.containerMappings;\n currentMappings.splice(index, 1);\n this.props.notifyAngular('containerMappings', currentMappings);\n this.setState({ containerMappings: currentMappings });\n };\n\n private removeTargetGroupMapping = (index: number) => {\n const currentMappings = this.state.targetGroupMappings;\n currentMappings.splice(index, 1);\n this.props.notifyAngular('targetGroupMappings', currentMappings);\n this.setState({ targetGroupMappings: currentMappings });\n };\n\n private updateEvaluateTaskDefArtifactFlag = () => {\n this.props.notifyAngular(\n 'evaluateTaskDefinitionArtifactExpressions',\n !this.props.command.evaluateTaskDefinitionArtifactExpressions,\n );\n this.setState({\n evaluateTaskDefinitionArtifactExpressions: !this.props.command.evaluateTaskDefinitionArtifactExpressions,\n });\n };\n\n public render(): React.ReactElement<TaskDefinition> {\n const { command } = this.props;\n const removeMapping = this.removeMapping;\n const removeTargetGroupMapping = this.removeTargetGroupMapping;\n const updateContainerMappingName = this.updateContainerMappingName;\n const updateContainerMappingImage = this.updateContainerMappingImage;\n const updateTargetGroupMappingContainer = this.updateTargetGroupMappingContainer;\n const updateTargetGroupMappingTargetGroup = this.updateTargetGroupMappingTargetGroup;\n const updateTargetGroupMappingPort = this.updateTargetGroupMappingPort;\n const updateEvaluateTaskDefArtifactFlag = this.updateEvaluateTaskDefArtifactFlag;\n\n const dockerImageOptions = this.state.dockerImages.map(function (image) {\n let msg = '';\n if (image.fromTrigger || image.fromContext) {\n msg = image.fromTrigger ? '(TRIGGER) ' : '(FIND IMAGE RESULT) ';\n }\n return { label: `${msg} (${image.imageId})`, value: image.imageId };\n });\n\n const targetGroupsAvailable = this.state.targetGroupsAvailable.map(function (targetGroup) {\n return { label: `${targetGroup}`, value: targetGroup };\n });\n\n const mappingInputs = this.state.containerMappings.map(function (mapping, index) {\n return (\n <tr key={index}>\n <td>\n <input\n data-test-id=\"Artifacts.containerName\"\n className=\"form-control input-sm\"\n required={true}\n placeholder=\"enter container name...\"\n value={mapping.containerName.toString()}\n onChange={(e) => updateContainerMappingName(index, e.target.value)}\n />\n </td>\n <td data-test-id=\"Artifacts.containerImage\">\n <TetheredSelect\n placeholder=\"Select an image to use...\"\n options={dockerImageOptions}\n value={mapping.imageDescription.imageId}\n onChange={(e: Option) => {\n updateContainerMappingImage(index, e as Option<string>);\n }}\n clearable={false}\n />\n </td>\n <td>\n <div className=\"form-control-static\">\n <a\n className=\"btn-link sm-label\"\n data-test-id=\"Artifacts.containerRemove\"\n onClick={() => removeMapping(index)}\n >\n <span className=\"glyphicon glyphicon-trash\" />\n <span className=\"sr-only\">Remove</span>\n </a>\n </div>\n </td>\n </tr>\n );\n });\n\n const targetGroupInputs = this.state.targetGroupMappings.map(function (mapping, index) {\n return (\n <tr key={index}>\n <td>\n <input\n data-test-id=\"Artifacts.targetGroupContainer\"\n className=\"form-control input-sm\"\n required={true}\n placeholder=\"Enter a container name ...\"\n value={mapping.containerName.toString()}\n onChange={(e) => updateTargetGroupMappingContainer(index, e.target.value)}\n />\n </td>\n <td data-test-id=\"Artifacts.targetGroup\">\n <TetheredSelect\n placeholder=\"Select a target group to use...\"\n options={targetGroupsAvailable}\n value={mapping.targetGroup.toString()}\n onChange={(e: Option) => updateTargetGroupMappingTargetGroup(index, e as Option<string>)}\n clearable={false}\n />\n </td>\n <td>\n <input\n data-test-id=\"Artifacts.targetGroupPort\"\n type=\"number\"\n className=\"form-control input-sm no-spel\"\n required={true}\n value={mapping.containerPort.toString()}\n onChange={(e) => updateTargetGroupMappingPort(index, e.target.valueAsNumber)}\n />\n </td>\n <td>\n <div className=\"form-control-static\">\n <a\n className=\"btn-link sm-label\"\n data-test-id=\"Artifacts.targetGroupRemove\"\n onClick={() => removeTargetGroupMapping(index)}\n >\n <span className=\"glyphicon glyphicon-trash\" />\n <span className=\"sr-only\">Remove</span>\n </a>\n </div>\n </td>\n </tr>\n );\n });\n\n const newTargetGroupMapping = this.state.targetGroupsAvailable.length ? (\n <button\n className=\"btn btn-block btn-sm add-new\"\n data-test-id=\"Artifacts.targetGroupAdd\"\n onClick={this.pushTargetGroupMapping}\n >\n <span className=\"glyphicon glyphicon-plus-sign\" />\n Add New Target Group Mapping\n </button>\n ) : (\n <div className=\"sm-label-left\">\n <Alert color=\"warning\">No target groups found in the selected account/region/VPC</Alert>\n </div>\n );\n\n return (\n <div className=\"container-fluid form-horizontal\">\n <div className=\"form-group\">\n <div className=\"col-md-12\">\n <StageArtifactSelectorDelegate\n artifact={this.state.taskDefArtifact.artifact}\n excludedArtifactTypePatterns={this.excludedArtifactTypePatterns}\n expectedArtifactId={this.state.taskDefArtifact.artifactId}\n label=\"Artifact\"\n helpKey=\"ecs.taskDefinitionArtifact\"\n onExpectedArtifactSelected={(artifact: IExpectedArtifact) => this.onExpectedArtifactSelected(artifact.id)}\n onArtifactEdited={this.onArtifactEdited}\n pipeline={command.viewState.pipeline}\n stage={command.viewState.currentStage}\n />\n </div>\n </div>\n\n <StageConfigField\n groupClassName=\"form-group evaluateTaskDef\"\n label=\"Expression Evaluation\"\n helpKey=\"ecs.evaluateExpression\"\n labelColumns={5}\n fieldColumns={7}\n >\n <CheckboxInput\n checked={command.evaluateTaskDefinitionArtifactExpressions === true}\n onChange={() => {\n updateEvaluateTaskDefArtifactFlag();\n }}\n text=\"Evaluate SpEL expressions in artifact\"\n />\n </StageConfigField>\n\n <div className=\"form-group\">\n <div className=\"sm-label-left\">\n <b>Container Mappings</b>\n <HelpField id=\"ecs.containerMappings\" />\n </div>\n <form name=\"ecsTaskDefinitionContainerMappings\">\n <table className=\"table table-condensed packed tags\">\n <thead>\n <tr key=\"header\">\n <th style={{ width: '30%' }}>\n Container name\n <HelpField id=\"ecs.containerMappingName\" />\n </th>\n <th style={{ width: '70%' }}>\n Container image\n <HelpField id=\"ecs.containerMappingImage\" />\n </th>\n <th />\n </tr>\n </thead>\n <tbody>{mappingInputs}</tbody>\n <tfoot>\n <tr>\n <td colSpan={3}>\n <button\n className=\"btn btn-block btn-sm add-new\"\n data-test-id=\"Artifacts.containerAdd\"\n onClick={this.pushMapping}\n >\n <span className=\"glyphicon glyphicon-plus-sign\" />\n Add New Container Mapping\n </button>\n </td>\n </tr>\n </tfoot>\n </table>\n </form>\n </div>\n <div className=\"form-group\">\n <div className=\"sm-label-left\">\n <b>Target Group Mappings</b>\n <HelpField id=\"ecs.targetGroupMappings\" />\n </div>\n <form name=\"ecsTaskDefinitionTargetGroupMappings\">\n <table className=\"table table-condensed packed tags\">\n <thead>\n <tr key=\"header\">\n <th style={{ width: '30%' }}>\n Container name\n <HelpField id=\"ecs.loadBalancedContainer\" />\n </th>\n <th style={{ width: '55%' }}>\n Target group\n <HelpField id=\"ecs.loadBalancer.targetGroup\" />\n </th>\n <th style={{ width: '15%' }}>\n Target port\n <HelpField id=\"ecs.loadbalancing.targetPort\" />\n </th>\n <th />\n </tr>\n </thead>\n <tbody>{targetGroupInputs}</tbody>\n <tfoot>\n <tr>\n <td colSpan={4}>{newTargetGroupMapping}</td>\n </tr>\n </tfoot>\n </table>\n </form>\n </div>\n </div>\n );\n }\n}\n\nexport const TASK_DEFINITION_REACT = 'spinnaker.ecs.serverGroup.configure.wizard.taskDefinition.react';\nmodule(TASK_DEFINITION_REACT, []).component(\n 'taskDefinitionReact',\n react2angular(withErrorBoundary(TaskDefinition, 'taskDefinitionReact'), [\n 'command',\n 'notifyAngular',\n 'configureCommand',\n ]),\n);\n","import type { IComponentOptions } from 'angular';\nimport { module } from 'angular';\n\nconst resizeCapacityComponent: IComponentOptions = {\n bindings: {\n command: '=',\n currentSize: '=',\n },\n templateUrl: require('./resizeCapacity.component.html'),\n controller: () => {},\n};\n\nexport const ECS_RESIZE_CAPACITY_COMPONENT = 'spinnaker.ecs.serverGroup.resize';\nmodule(ECS_RESIZE_CAPACITY_COMPONENT, []).component('ecsResizeCapacity', resizeCapacityComponent);\n","'use strict';\n\nimport * as angular from 'angular';\n\nimport { SERVER_GROUP_WRITER, TaskMonitor } from '@spinnaker/core';\n\nimport { ECS_RESIZE_CAPACITY_COMPONENT } from './resizeCapacity.component';\n\nexport const ECS_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER =\n 'spinnaker.ecs.serverGroup.details.resize.controller';\nexport const name = ECS_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER; // for backwards compatibility\nangular\n .module(ECS_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER, [\n SERVER_GROUP_WRITER,\n ECS_RESIZE_CAPACITY_COMPONENT,\n ])\n .controller('ecsResizeServerGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n 'serverGroupWriter',\n 'application',\n 'serverGroup',\n function ($scope, $uibModalInstance, serverGroupWriter, application, serverGroup) {\n $scope.serverGroup = serverGroup;\n $scope.currentSize = {\n min: serverGroup.capacity.min,\n max: serverGroup.capacity.max,\n desired: serverGroup.capacity.desired,\n newSize: null,\n };\n\n $scope.verification = {};\n\n $scope.command = angular.copy($scope.currentSize);\n $scope.command.advancedMode = serverGroup.capacity.min !== serverGroup.capacity.max;\n\n if (application && application.attributes) {\n if (application.attributes.platformHealthOnlyShowOverride && application.attributes.platformHealthOnly) {\n $scope.command.interestingHealthProviderNames = ['Ecs'];\n }\n\n $scope.command.platformHealthOnlyShowOverride = application.attributes.platformHealthOnlyShowOverride;\n }\n\n this.isValid = function () {\n const command = $scope.command;\n if (!$scope.verification.verified) {\n return false;\n }\n return command.advancedMode\n ? command.min <= command.max && command.desired >= command.min && command.desired <= command.max\n : command.newSize !== null;\n };\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: 'Resizing ' + serverGroup.name,\n modalInstance: $uibModalInstance,\n });\n\n this.resize = function () {\n if (!this.isValid()) {\n return;\n }\n let capacity = { min: $scope.command.min, max: $scope.command.max, desired: $scope.command.desired };\n if (!$scope.command.advancedMode) {\n capacity = { min: $scope.command.newSize, max: $scope.command.newSize, desired: $scope.command.newSize };\n }\n\n const submitMethod = function () {\n return serverGroupWriter.resizeServerGroup(serverGroup, application, {\n capacity: capacity,\n interestingHealthProviderNames: $scope.command.interestingHealthProviderNames,\n reason: $scope.command.reason,\n });\n };\n\n $scope.taskMonitor.submit(submitMethod);\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { SERVER_GROUP_WRITER, TaskMonitor } from '@spinnaker/core';\n\nexport const ECS_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER =\n 'spinnaker.ecs.serverGroup.details.rollback.controller';\nexport const name = ECS_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER; // for backwards compatibility\nmodule(ECS_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER, [SERVER_GROUP_WRITER]).controller(\n 'ecsRollbackServerGroupCtrl',\n [\n '$scope',\n '$uibModalInstance',\n 'serverGroupWriter',\n 'application',\n 'serverGroup',\n 'disabledServerGroups',\n 'allServerGroups',\n function (\n $scope,\n $uibModalInstance,\n serverGroupWriter,\n application,\n serverGroup,\n disabledServerGroups,\n allServerGroups,\n ) {\n $scope.serverGroup = serverGroup;\n $scope.disabledServerGroups = disabledServerGroups.sort((a, b) => b.name.localeCompare(a.name));\n $scope.allServerGroups = allServerGroups.sort((a, b) => b.name.localeCompare(a.name));\n $scope.verification = {};\n\n $scope.command = {\n rollbackType: 'EXPLICIT',\n rollbackContext: {\n rollbackServerGroupName: serverGroup.name,\n },\n };\n\n if (application && application.attributes) {\n if (application.attributes.platformHealthOnlyShowOverride && application.attributes.platformHealthOnly) {\n $scope.command.interestingHealthProviderNames = ['Ecs'];\n }\n\n $scope.command.platformHealthOnlyShowOverride = application.attributes.platformHealthOnlyShowOverride;\n }\n\n this.isValid = function () {\n const command = $scope.command;\n if (!$scope.verification.verified) {\n return false;\n }\n\n return command.rollbackContext.restoreServerGroupName !== undefined;\n };\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: 'Rollback ' + serverGroup.name,\n modalInstance: $uibModalInstance,\n });\n\n this.rollback = function () {\n if (!this.isValid()) {\n return;\n }\n\n const submitMethod = function () {\n return serverGroupWriter.rollbackServerGroup(serverGroup, application, $scope.command);\n };\n\n $scope.taskMonitor.submit(submitMethod);\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n\n this.label = function (serverGroup) {\n if (!serverGroup) {\n return '';\n }\n\n if (!serverGroup.buildInfo || !serverGroup.buildInfo.jenkins || !serverGroup.buildInfo.jenkins.number) {\n return serverGroup.name;\n }\n\n return serverGroup.name + ' (build #' + serverGroup.buildInfo.jenkins.number + ')';\n };\n\n this.group = function (serverGroup) {\n return serverGroup.isDisabled ? 'Disabled Server Groups' : 'Enabled Server Groups';\n };\n },\n ],\n);\n","import { module } from 'angular';\nimport { defaults } from 'lodash';\n\nimport type {\n IAmazonServerGroup,\n IAmazonServerGroupView,\n IScalingAdjustmentView,\n IScalingPolicyAlarmView,\n IScalingPolicyView,\n IStepAdjustment,\n IStepAdjustmentView,\n} from '@spinnaker/amazon';\nimport { VpcReader } from '@spinnaker/amazon';\nimport type { IInstance, IVpc } from '@spinnaker/core';\n\nexport class EcsServerGroupTransformer {\n private addComparator(alarm: IScalingPolicyAlarmView): void {\n if (!alarm.comparisonOperator) {\n return;\n }\n\n switch (alarm.comparisonOperator) {\n case 'LessThanThreshold':\n alarm.comparator = '&lt;';\n break;\n case 'GreaterThanThreshold':\n alarm.comparator = '&gt;';\n break;\n case 'LessThanOrEqualToThreshold':\n alarm.comparator = '&le;';\n break;\n case 'GreaterThanOrEqualToThreshold':\n alarm.comparator = '&ge;';\n break;\n }\n }\n\n private addAdjustmentAttributes(policyOrStepAdjustment: IScalingAdjustmentView): void {\n policyOrStepAdjustment.operator = policyOrStepAdjustment.scalingAdjustment < 0 ? 'decrease' : 'increase';\n policyOrStepAdjustment.absAdjustment = Math.abs(policyOrStepAdjustment.scalingAdjustment);\n }\n\n private transformScalingPolicy(policy: IScalingPolicyView): IScalingPolicyView {\n const view: IScalingPolicyView = { ...policy };\n const upperBoundSorter = (a: IStepAdjustmentView, b: IStepAdjustmentView) =>\n b.metricIntervalUpperBound - a.metricIntervalUpperBound;\n const lowerBoundSorter = (a: IStepAdjustmentView, b: IStepAdjustmentView) =>\n a.metricIntervalLowerBound - b.metricIntervalLowerBound;\n\n view.alarms = policy.alarms || [];\n view.alarms.forEach((alarm: IScalingPolicyAlarmView) => this.addComparator(alarm));\n this.addAdjustmentAttributes(view); // simple policies\n if (view.stepAdjustments && view.stepAdjustments.length) {\n view.stepAdjustments.forEach((sa: IStepAdjustmentView) => this.addAdjustmentAttributes(sa)); // step policies\n const sorter = policy.stepAdjustments.every((a: IStepAdjustment) => a.metricIntervalUpperBound !== undefined)\n ? upperBoundSorter\n : lowerBoundSorter;\n view.stepAdjustments.sort((a: IStepAdjustmentView, b: IStepAdjustmentView) => sorter(a, b));\n }\n return view;\n }\n\n public normalizeServerGroupDetails(serverGroup: IAmazonServerGroup): IAmazonServerGroupView {\n const view: IAmazonServerGroupView = { ...serverGroup } as IAmazonServerGroupView;\n if (serverGroup.scalingPolicies) {\n view.scalingPolicies = serverGroup.scalingPolicies.map((policy: IScalingPolicyView) =>\n this.transformScalingPolicy(policy),\n );\n }\n return view;\n }\n\n public normalizeServerGroup(serverGroup: IAmazonServerGroup): PromiseLike<IAmazonServerGroup> {\n serverGroup.instances.forEach((instance: IInstance) => {\n instance.vpcId = serverGroup.vpcId;\n });\n return VpcReader.listVpcs().then(\n (vpc: IVpc[]): IAmazonServerGroup => this.addVpcNameToServerGroup(serverGroup)(vpc),\n );\n }\n\n private addVpcNameToServerGroup(serverGroup: IAmazonServerGroup): (vpc: IVpc[]) => IAmazonServerGroup {\n return (vpcs: IVpc[]) => {\n const match = vpcs.find((test) => test.id === serverGroup.vpcId);\n serverGroup.vpcName = match ? match.name : '';\n return serverGroup;\n };\n }\n\n public convertServerGroupCommandToDeployConfiguration(base: any): any {\n // use _.defaults to avoid copying the backingData, which is huge and expensive to copy over\n const command = defaults({ backingData: [], viewState: [] }, base);\n command.cloudProvider = 'ecs';\n command.availabilityZones = {};\n command.availabilityZones[command.region] = base.availabilityZones;\n command.loadBalancers = (base.loadBalancers || []).concat(base.vpcLoadBalancers || []);\n command.targetGroup = base.targetGroup || '';\n command.account = command.credentials;\n command.subnetType = command.subnetType || '';\n\n if (base.viewState.mode !== 'clone') {\n delete command.source;\n }\n\n delete command.region;\n delete command.viewState;\n delete command.backingData;\n delete command.selectedProvider;\n delete command.instanceProfile;\n delete command.vpcId;\n\n return command;\n }\n}\n\nexport const ECS_SERVER_GROUP_TRANSFORMER = 'spinnaker.ecs.serverGroup.transformer';\nmodule(ECS_SERVER_GROUP_TRANSFORMER, []).service('ecsServerGroupTransformer', EcsServerGroupTransformer);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport { chain, filter, find, has, isEmpty } from 'lodash';\n\nimport {\n AccountService,\n ConfirmationModalService,\n FirewallLabels,\n OVERRIDE_REGISTRY,\n SERVER_GROUP_WRITER,\n ServerGroupReader,\n ServerGroupWarningMessageService,\n SubnetReader,\n} from '@spinnaker/core';\n\nimport { ECS_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE } from '../configure/serverGroupCommandBuilder.service';\nimport { ECS_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER } from './resize/resizeServerGroup.controller';\nimport { ECS_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER } from './rollback/rollbackServerGroup.controller';\nimport { ECS_SERVER_GROUP_TRANSFORMER } from '../serverGroup.transformer';\n\nexport const ECS_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_ECS_CONTROLLER = 'spinnaker.ecs.serverGroup.details.controller';\nexport const name = ECS_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_ECS_CONTROLLER; // for backwards compatibility\nangular\n .module(ECS_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_ECS_CONTROLLER, [\n UIROUTER_ANGULARJS,\n ECS_SERVER_GROUP_TRANSFORMER,\n OVERRIDE_REGISTRY,\n SERVER_GROUP_WRITER,\n ECS_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE,\n ECS_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER,\n ECS_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER,\n ])\n .controller('ecsServerGroupDetailsCtrl', [\n '$scope',\n '$state',\n 'app',\n 'serverGroup',\n 'ecsServerGroupCommandBuilder',\n '$uibModal',\n 'serverGroupWriter',\n 'ecsServerGroupTransformer',\n 'overrideRegistry',\n function (\n $scope,\n $state,\n app,\n serverGroup,\n ecsServerGroupCommandBuilder,\n $uibModal,\n serverGroupWriter,\n ecsServerGroupTransformer,\n overrideRegistry,\n ) {\n this.state = {\n loading: true,\n };\n\n this.firewallsLabel = FirewallLabels.get('Firewalls');\n\n this.application = app;\n\n const extractServerGroupSummary = () => {\n return app.ready().then(() => {\n let summary = find(app.serverGroups.data, (toCheck) => {\n return (\n toCheck.name === serverGroup.name &&\n toCheck.account === serverGroup.accountId &&\n toCheck.region === serverGroup.region\n );\n });\n if (!summary) {\n app.loadBalancers.data.some((loadBalancer) => {\n if (loadBalancer.account === serverGroup.accountId && loadBalancer.region === serverGroup.region) {\n return loadBalancer.serverGroups.some((possibleServerGroup) => {\n if (possibleServerGroup.name === serverGroup.name) {\n summary = possibleServerGroup;\n return true;\n }\n });\n }\n });\n }\n return summary;\n });\n };\n\n const autoClose = () => {\n if ($scope.$$destroyed) {\n return;\n }\n $state.go('^', { allowModalToStayOpen: true }, { location: 'replace' });\n };\n\n const cancelLoader = () => {\n this.state.loading = false;\n };\n\n const retrieveServerGroup = () => {\n return extractServerGroupSummary()\n .then((summary) => {\n return ServerGroupReader.getServerGroup(\n app.name,\n serverGroup.accountId,\n serverGroup.region,\n serverGroup.name,\n ).then((details) => {\n cancelLoader();\n\n // it's possible the summary was not found because the clusters are still loading\n angular.extend(details, summary, { account: serverGroup.accountId });\n\n this.serverGroup = ecsServerGroupTransformer.normalizeServerGroupDetails(details);\n this.applyAccountDetails(this.serverGroup);\n\n if (!isEmpty(this.serverGroup)) {\n this.image = details.image ? details.image : undefined;\n\n const vpc = this.serverGroup.asg ? this.serverGroup.asg.vpczoneIdentifier : '';\n\n if (vpc !== '') {\n const subnetId = vpc.split(',')[0];\n SubnetReader.listSubnets().then((subnets) => {\n const subnet = chain(subnets).find({ id: subnetId }).value();\n this.serverGroup.subnetType = subnet.purpose;\n });\n }\n\n if (details.image && details.image.description) {\n const tags = details.image.description.split(', ');\n tags.forEach((tag) => {\n const keyVal = tag.split('=');\n if (keyVal.length === 2 && keyVal[0] === 'ancestor_name') {\n details.image.baseImage = keyVal[1];\n }\n });\n }\n\n if (details.image && details.image.tags) {\n const baseAmiVersionTag = details.image.tags.find((tag) => tag.key === 'base_ami_version');\n if (baseAmiVersionTag) {\n details.baseAmiVersion = baseAmiVersionTag.value;\n }\n }\n\n this.scalingPolicies = this.serverGroup.scalingPolicies;\n // TODO - figure out whether we need the commented out block below, or not. IF we do, then we need to make it stop crashing\n\n if (has(this.serverGroup, 'buildInfo.jenkins')) {\n this.changeConfig.buildInfo = {\n jenkins: this.serverGroup.buildInfo.jenkins,\n };\n }\n\n /*this.scalingPoliciesDisabled = this.scalingPolicies.length && this.autoScalingProcesses\n .filter(p => !p.enabled)\n .some(p => ['Launch','Terminate','AlarmNotification'].includes(p.name));\n this.scheduledActionsDisabled = this.serverGroup.scheduledActions.length && this.autoScalingProcesses\n .filter(p => !p.enabled)\n .some(p => ['Launch','Terminate','ScheduledAction'].includes(p.name));\n configureEntityTagTargets();\n\n this.changeConfig = {\n metadata: get(this.serverGroup.entityTags, 'creationMetadata')\n };\n */\n } else {\n autoClose();\n }\n });\n })\n .catch(autoClose);\n };\n\n retrieveServerGroup().then(() => {\n // If the user navigates away from the view before the initial retrieveServerGroup call completes,\n // do not bother subscribing to the refresh\n if (!$scope.$$destroyed) {\n app.serverGroups.onRefresh($scope, retrieveServerGroup);\n }\n });\n\n this.destroyServerGroup = () => {\n const serverGroup = this.serverGroup;\n\n const taskMonitor = {\n application: app,\n title: 'Destroying ' + serverGroup.name,\n onTaskComplete: () => {\n if ($state.includes('**.serverGroup', stateParams)) {\n $state.go('^');\n }\n },\n };\n\n const submitMethod = (params) => serverGroupWriter.destroyServerGroup(serverGroup, app, params);\n\n const stateParams = {\n name: serverGroup.name,\n accountId: serverGroup.account,\n region: serverGroup.region,\n };\n\n const confirmationModalParams = {\n header: 'Really destroy ' + serverGroup.name + '?',\n buttonText: 'Destroy ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n askForReason: true,\n platformHealthOnlyShowOverride: app.attributes.platformHealthOnlyShowOverride,\n platformHealthType: 'Ecs',\n };\n\n ServerGroupWarningMessageService.addDestroyWarningMessage(app, serverGroup, confirmationModalParams);\n\n if (app.attributes.platformHealthOnlyShowOverride && app.attributes.platformHealthOnly) {\n confirmationModalParams.interestingHealthProviderNames = ['Ecs'];\n }\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n this.disableServerGroup = () => {\n const serverGroup = this.serverGroup;\n\n const taskMonitor = {\n application: app,\n title: 'Disabling ' + serverGroup.name,\n };\n\n const submitMethod = (params) => {\n return serverGroupWriter.disableServerGroup(serverGroup, app, params);\n };\n\n const confirmationModalParams = {\n header: 'Really disable ' + serverGroup.name + '?',\n buttonText: 'Disable ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n platformHealthOnlyShowOverride: app.attributes.platformHealthOnlyShowOverride,\n platformHealthType: 'Ecs',\n submitMethod: submitMethod,\n askForReason: true,\n };\n\n ServerGroupWarningMessageService.addDisableWarningMessage(app, serverGroup, confirmationModalParams);\n\n if (app.attributes.platformHealthOnlyShowOverride && app.attributes.platformHealthOnly) {\n confirmationModalParams.interestingHealthProviderNames = ['Ecs'];\n }\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n this.enableServerGroup = () => {\n const serverGroup = this.serverGroup;\n\n const taskMonitor = {\n application: app,\n title: 'Enabling ' + serverGroup.name,\n };\n\n const submitMethod = (params) => {\n return serverGroupWriter.enableServerGroup(serverGroup, app, params);\n };\n\n const confirmationModalParams = {\n header: 'Really enable ' + serverGroup.name + '?',\n buttonText: 'Enable ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n platformHealthOnlyShowOverride: app.attributes.platformHealthOnlyShowOverride,\n platformHealthType: 'Ecs',\n submitMethod: submitMethod,\n askForReason: true,\n };\n\n if (app.attributes.platformHealthOnlyShowOverride && app.attributes.platformHealthOnly) {\n confirmationModalParams.interestingHealthProviderNames = ['Ecs'];\n }\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n this.rollbackServerGroup = () => {\n $uibModal.open({\n templateUrl: overrideRegistry.getTemplate(\n 'ecs.rollback.modal',\n require('./rollback/rollbackServerGroup.html'),\n ),\n windowClass: 'modal-z-index',\n controller: 'ecsRollbackServerGroupCtrl as ctrl',\n resolve: {\n serverGroup: () => this.serverGroup,\n disabledServerGroups: () => {\n const cluster = find(app.clusters, { name: this.serverGroup.cluster, account: this.serverGroup.account });\n return filter(cluster.serverGroups, { isDisabled: true, region: this.serverGroup.region });\n },\n allServerGroups: () =>\n app\n .getDataSource('serverGroups')\n .data.filter(\n (g) =>\n g.cluster === this.serverGroup.cluster &&\n g.region === this.serverGroup.region &&\n g.account === this.serverGroup.account &&\n g.name !== this.serverGroup.name,\n ),\n application: () => app,\n },\n });\n };\n\n this.resizeServerGroup = () => {\n $uibModal.open({\n templateUrl: overrideRegistry.getTemplate('ecs.resize.modal', require('./resize/resizeServerGroup.html')),\n controller: 'ecsResizeServerGroupCtrl as ctrl',\n windowClass: 'modal-z-index',\n resolve: {\n serverGroup: () => this.serverGroup,\n application: () => app,\n },\n });\n };\n\n this.cloneServerGroup = (serverGroup) => {\n $uibModal.open({\n templateUrl: require('../configure/wizard/serverGroupWizard.html'),\n controller: 'ecsCloneServerGroupCtrl as ctrl',\n size: 'lg',\n windowClass: 'modal-z-index',\n resolve: {\n title: () => 'Clone ' + serverGroup.name,\n application: () => app,\n serverGroupCommand: () =>\n ecsServerGroupCommandBuilder.buildServerGroupCommandFromExisting(app, serverGroup),\n },\n });\n };\n\n this.buildJenkinsLink = () => {\n if (has(this, 'serverGroup.buildInfo.buildInfoUrl')) {\n return this.serverGroup.buildInfo.buildInfoUrl;\n } else if (has(this, 'serverGroup.buildInfo.jenkins')) {\n const jenkins = this.serverGroup.buildInfo.jenkins;\n return jenkins.host + 'job/' + jenkins.name + '/' + jenkins.number;\n }\n return null;\n };\n\n this.truncateCommitHash = () => {\n if (this.serverGroup && this.serverGroup.buildInfo && this.serverGroup.buildInfo.commit) {\n return this.serverGroup.buildInfo.commit.substring(0, 8);\n }\n return null;\n };\n\n this.applyAccountDetails = (serverGroup) => {\n return AccountService.getAccountDetails(serverGroup.account).then((details) => {\n serverGroup.accountDetails = details;\n });\n };\n },\n ]);\n","import { module } from 'angular';\nimport { ECS_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_ECS_CONTROLLER } from './serverGroupDetails.ecs.controller';\n\nexport const SERVER_GROUP_DETAILS_MODULE = 'spinnaker.ecs.serverGroup.details';\nmodule(SERVER_GROUP_DETAILS_MODULE, [ECS_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_ECS_CONTROLLER]);\n","import { $log } from 'ngimport';\n\nimport type { IServerGroup } from '@spinnaker/core';\nimport { REST } from '@spinnaker/core';\n\nexport interface IEventDescription {\n createdAt: number;\n message: string;\n id: string;\n status: string;\n}\n\nexport class ServerGroupEventsReader {\n public static getEvents(serverGroup: IServerGroup): PromiseLike<IEventDescription[]> {\n return REST('/applications')\n .path(serverGroup.app, 'serverGroups', serverGroup.account, serverGroup.name, 'events')\n .query({\n region: serverGroup.region,\n provider: serverGroup.cloudProvider,\n })\n .get()\n .catch((error: any): any[] => {\n $log.error(error, 'error retrieving events');\n return [];\n });\n }\n}\n","import type { IController } from 'angular';\nimport { module } from 'angular';\nimport type { IModalServiceInstance } from 'angular-ui-bootstrap';\n\nimport type { IServerGroup } from '@spinnaker/core';\n\nimport type { IEventDescription } from './serverGroupEventsReader.service';\nimport { ServerGroupEventsReader } from './serverGroupEventsReader.service';\n\nexport interface IScalingActivitiesViewState {\n loading: boolean;\n error: boolean;\n}\n\nexport class EventsController implements IController {\n public viewState: IScalingActivitiesViewState;\n public events: IEventDescription[] = [];\n\n public static $inject = ['$uibModalInstance', 'serverGroup'];\n public constructor(private $uibModalInstance: IModalServiceInstance, public serverGroup: IServerGroup) {}\n\n public $onInit(): void {\n this.viewState = {\n loading: true,\n error: false,\n };\n\n ServerGroupEventsReader.getEvents(this.serverGroup).then(\n (rawEvents: IEventDescription[]) => {\n this.viewState.loading = false;\n this.events = rawEvents;\n },\n () => {\n this.viewState.error = true;\n },\n );\n }\n\n public close(): void {\n this.$uibModalInstance.close();\n }\n}\n\nexport const EVENTS_CTRL = 'spinnaker.ecs.serverGroup.events.controller';\nmodule(EVENTS_CTRL, []).controller('EventsController', EventsController);\n","import type { IComponentOptions, IController } from 'angular';\nimport { module } from 'angular';\nimport type { IModalService } from 'angular-ui-bootstrap';\n\nimport { EVENTS_CTRL, EventsController } from './events.controller';\n\nclass ViewEventsLinkCtrl implements IController {\n public serverGroup: any;\n\n public static $inject = ['$uibModal'];\n public constructor(private $uibModal: IModalService) {}\n\n public showEvents(): void {\n this.$uibModal.open({\n templateUrl: require('./events.html'),\n controller: EventsController,\n controllerAs: '$ctrl',\n windowClass: 'modal-z-index',\n resolve: {\n serverGroup: () => this.serverGroup,\n },\n });\n }\n}\n\nexport const viewEventsLink: IComponentOptions = {\n bindings: {\n serverGroup: '<',\n },\n controller: ViewEventsLinkCtrl,\n template: `<a href ng-click=\"$ctrl.showEvents()\">View Events</a>`,\n};\n\nexport const VIEW_EVENTS_LINK_COMPONENT = 'spinnaker.ecs.serverGroup.details.viewEvents.link';\nmodule(VIEW_EVENTS_LINK_COMPONENT, [EVENTS_CTRL]).component('viewEventsLink', viewEventsLink);\n","import { module } from 'angular';\n\nimport { VIEW_EVENTS_LINK_COMPONENT } from './events/events.component';\n\nexport const ECS_SERVERGROUP_MODULE = 'spinnaker.ecs.serverGroup';\nmodule(ECS_SERVERGROUP_MODULE, [VIEW_EVENTS_LINK_COMPONENT]);\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { CloudProviderRegistry, DeploymentStrategyRegistry } from '@spinnaker/core';\n\nimport { COMMON_MODULE } from './common/common.module';\nimport './ecs.help';\nimport './ecs.settings';\nimport { ECS_CLUSTER_READ_SERVICE } from './ecsCluster/ecsCluster.read.service';\nimport { IAM_ROLE_READ_SERVICE } from './iamRoles/iamRole.read.service';\nimport { ECS_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER } from './instance/details/instance.details.controller';\nimport { EcsLoadBalancerClusterContainer } from './loadBalancer/EcsLoadBalancerClusterContainer';\nimport { EcsLoadBalancerDetails } from './loadBalancer/details/loadBalancerDetails';\nimport { EcsTargetGroupDetails } from './loadBalancer/details/targetGroupDetails';\nimport { EcsLoadBalancerTransformer } from './loadBalancer/loadBalancer.transformer';\nimport { ECS_TARGET_GROUP_STATES } from './loadBalancer/targetGroup.states';\nimport ecsLogo from './logo/ecs.logo.svg';\nimport { METRIC_ALARM_READ_SERVICE } from './metricAlarm/metricAlarm.read.service';\nimport { ECS_PIPELINE_STAGES_DESTROYASG_ECSDESTROYASGSTAGE } from './pipeline/stages/destroyAsg/ecsDestroyAsgStage';\nimport { ECS_PIPELINE_STAGES_DISABLEASG_ECSDISABLEASGSTAGE } from './pipeline/stages/disableAsg/ecsDisableAsgStage';\nimport { ECS_PIPELINE_STAGES_DISABLECLUSTER_ECSDISABLECLUSTERSTAGE } from './pipeline/stages/disableCluster/ecsDisableClusterStage';\nimport { ECS_PIPELINE_STAGES_ENABLEASG_ECSENABLEASGSTAGE } from './pipeline/stages/enableAsg/ecsEnableAsgStage';\nimport { ECS_PIPELINE_STAGES_FINDIMAGEFROMTAGS_ECSFINDIMAGEFROMTAGSTAGE } from './pipeline/stages/findImageFromTags/ecsFindImageFromTagStage';\nimport { ECS_PIPELINE_STAGES_RESIZEASG_ECSRESIZEASGSTAGE } from './pipeline/stages/resizeAsg/ecsResizeAsgStage';\nimport { ECS_PIPELINE_STAGES_SCALEDOWNCLUSTER_ECSSCALEDOWNCLUSTERSTAGE } from './pipeline/stages/scaleDownCluster/ecsScaleDownClusterStage';\nimport { ECS_PIPELINE_STAGES_SHRINKCLUSTER_ECSSHRINKCLUSTERSTAGE } from './pipeline/stages/shrinkCluster/ecsShrinkClusterStage';\nimport { PLACEMENT_STRATEGY_SERVICE } from './placementStrategy/placementStrategy.service';\nimport { ECS_SECRET_READ_SERVICE } from './secrets/secret.read.service';\nimport { ECS_SECURITY_GROUP_MODULE } from './securityGroup/securityGroup.module';\nimport { ECS_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE } from './serverGroup/configure/serverGroupCommandBuilder.service';\nimport { ECS_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_ECS_CONTROLLER } from './serverGroup/configure/wizard/CloneServerGroup.ecs.controller';\nimport { ECS_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGS_COMPONENT } from './serverGroup/configure/wizard/advancedSettings/advancedSettings.component';\nimport { ECS_CAPACITY_PROVIDER_REACT } from './serverGroup/configure/wizard/capacityProvider/CapacityProvider';\nimport { CONTAINER_REACT } from './serverGroup/configure/wizard/container/Container';\nimport { ECS_SERVERGROUP_CONFIGURE_WIZARD_HORIZONTALSCALING_HORIZONTALSCALING_COMPONENT } from './serverGroup/configure/wizard/horizontalScaling/horizontalScaling.component';\nimport { ECS_SERVERGROUP_CONFIGURE_WIZARD_LOCATION_SERVERGROUPBASICSETTINGS_CONTROLLER } from './serverGroup/configure/wizard/location/ServerGroupBasicSettings.controller';\nimport { ECS_SERVER_GROUP_LOGGING } from './serverGroup/configure/wizard/logging/logging.component';\nimport { ECS_NETWORKING_REACT } from './serverGroup/configure/wizard/networking/Networking';\nimport { SERVICE_DISCOVERY_REACT } from './serverGroup/configure/wizard/serviceDiscovery/ServiceDiscovery';\nimport { TASK_DEFINITION_REACT } from './serverGroup/configure/wizard/taskDefinition/TaskDefinition';\nimport { SERVER_GROUP_DETAILS_MODULE } from './serverGroup/details/serverGroupDetails.module';\nimport { ECS_SERVERGROUP_MODULE } from './serverGroup/serverGroup.module';\nimport { ECS_SERVER_GROUP_TRANSFORMER } from './serverGroup/serverGroup.transformer';\n\nimport './logo/ecs.logo.less';\n\nexport const ECS_MODULE = 'spinnaker.ecs';\nmodule(ECS_MODULE, [\n ECS_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_ECS_CONTROLLER,\n SERVER_GROUP_DETAILS_MODULE,\n IAM_ROLE_READ_SERVICE,\n ECS_SERVER_GROUP_TRANSFORMER,\n // require('./pipeline/stages/cloneServerGroup/ecsCloneServerGroupStage').name, // TODO(Bruno Carrier): We should enable this on Clouddriver before revealing this stage\n ECS_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGS_COMPONENT,\n ECS_SERVERGROUP_CONFIGURE_WIZARD_HORIZONTALSCALING_HORIZONTALSCALING_COMPONENT,\n TASK_DEFINITION_REACT,\n CONTAINER_REACT,\n ECS_NETWORKING_REACT,\n SERVICE_DISCOVERY_REACT,\n ECS_CAPACITY_PROVIDER_REACT,\n ECS_SERVER_GROUP_LOGGING,\n ECS_CLUSTER_READ_SERVICE,\n ECS_SECRET_READ_SERVICE,\n METRIC_ALARM_READ_SERVICE,\n PLACEMENT_STRATEGY_SERVICE,\n COMMON_MODULE,\n ECS_SERVERGROUP_CONFIGURE_WIZARD_LOCATION_SERVERGROUPBASICSETTINGS_CONTROLLER,\n ECS_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE,\n ECS_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER,\n ECS_PIPELINE_STAGES_FINDIMAGEFROMTAGS_ECSFINDIMAGEFROMTAGSTAGE,\n ECS_PIPELINE_STAGES_DESTROYASG_ECSDESTROYASGSTAGE,\n ECS_PIPELINE_STAGES_DISABLEASG_ECSDISABLEASGSTAGE,\n ECS_PIPELINE_STAGES_DISABLECLUSTER_ECSDISABLECLUSTERSTAGE,\n ECS_PIPELINE_STAGES_ENABLEASG_ECSENABLEASGSTAGE,\n ECS_PIPELINE_STAGES_RESIZEASG_ECSRESIZEASGSTAGE,\n ECS_PIPELINE_STAGES_SCALEDOWNCLUSTER_ECSSCALEDOWNCLUSTERSTAGE,\n ECS_PIPELINE_STAGES_SHRINKCLUSTER_ECSSHRINKCLUSTERSTAGE,\n ECS_SECURITY_GROUP_MODULE,\n ECS_SERVERGROUP_MODULE,\n ECS_TARGET_GROUP_STATES,\n]).config(function () {\n CloudProviderRegistry.registerProvider('ecs', {\n name: 'EC2 Container Service',\n logo: { path: ecsLogo },\n serverGroup: {\n transformer: 'ecsServerGroupTransformer',\n detailsTemplateUrl: require('./serverGroup/details/serverGroupDetails.html'),\n detailsController: 'ecsServerGroupDetailsCtrl',\n cloneServerGroupTemplateUrl: require('./serverGroup/configure/wizard/serverGroupWizard.html'),\n cloneServerGroupController: 'ecsCloneServerGroupCtrl',\n commandBuilder: 'ecsServerGroupCommandBuilder',\n // configurationService: 'ecsServerGroupConfigurationService',\n scalingActivitiesEnabled: false,\n skipUpstreamStageCheck: true,\n },\n loadBalancer: {\n transformer: EcsLoadBalancerTransformer,\n ClusterContainer: EcsLoadBalancerClusterContainer,\n targetGroupDetails: EcsTargetGroupDetails,\n details: EcsLoadBalancerDetails,\n },\n instance: {\n detailsTemplateUrl: require('./instance/details/instanceDetails.html'),\n detailsController: 'ecsInstanceDetailsCtrl',\n },\n securityGroup: {\n transformer: 'ecsSecurityGroupTransformer',\n reader: 'ecsSecurityGroupReader',\n detailsTemplateUrl: require('./securityGroup/details/securityGroupDetail.html'),\n detailsController: 'ecsSecurityGroupDetailsCtrl',\n },\n });\n});\n\nDeploymentStrategyRegistry.registerProvider('ecs', ['redblack']);\n"],"names":["React"],"mappings":"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"}