@spinnaker/amazon 0.0.0-2025.1-0

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 (685) hide show
  1. package/CHANGELOG.md +4365 -0
  2. package/LICENSE.txt +203 -0
  3. package/dist/amazon.logo352d4e042476837f.svg +503 -0
  4. package/dist/aws.module.d.ts +5 -0
  5. package/dist/aws.settings.d.ts +59 -0
  6. package/dist/aws.validators.d.ts +7 -0
  7. package/dist/certificates/AmazonCertificateReader.d.ts +6 -0
  8. package/dist/certificates/index.d.ts +1 -0
  9. package/dist/common/AwsModalFooter.d.ts +21 -0
  10. package/dist/common/common.module.d.ts +1 -0
  11. package/dist/common/footer.component.d.ts +1 -0
  12. package/dist/common/index.d.ts +1 -0
  13. package/dist/deploymentStrategy/AdditionalFields.d.ts +10 -0
  14. package/dist/deploymentStrategy/rollingPush.strategy.d.ts +10 -0
  15. package/dist/domain/IAmazonBlockDeviceMapping.d.ts +15 -0
  16. package/dist/domain/IAmazonCertificate.d.ts +5 -0
  17. package/dist/domain/IAmazonFunction.d.ts +65 -0
  18. package/dist/domain/IAmazonFunctionSourceData.d.ts +46 -0
  19. package/dist/domain/IAmazonHealth.d.ts +11 -0
  20. package/dist/domain/IAmazonInstance.d.ts +24 -0
  21. package/dist/domain/IAmazonLaunchTemplate.d.ts +91 -0
  22. package/dist/domain/IAmazonLoadBalancer.d.ts +230 -0
  23. package/dist/domain/IAmazonLoadBalancerSourceData.d.ts +170 -0
  24. package/dist/domain/IAmazonScalingPolicy.d.ts +22 -0
  25. package/dist/domain/IAmazonSecurityGroup.d.ts +4 -0
  26. package/dist/domain/IAmazonServerGroup.d.ts +67 -0
  27. package/dist/domain/IKeyPair.d.ts +6 -0
  28. package/dist/domain/IScalingPolicy.d.ts +44 -0
  29. package/dist/domain/IScalingProcess.d.ts +10 -0
  30. package/dist/domain/ITargetTrackingPolicy.d.ts +22 -0
  31. package/dist/domain/index.d.ts +15 -0
  32. package/dist/function/CreateLambdaFunction.d.ts +25 -0
  33. package/dist/function/configure/ExecutionRole.d.ts +15 -0
  34. package/dist/function/configure/FunctionBasicInformation.d.ts +26 -0
  35. package/dist/function/configure/FunctionDebugAndErrorHandling.d.ts +15 -0
  36. package/dist/function/configure/FunctionEnvironmentVariables.d.ts +14 -0
  37. package/dist/function/configure/FunctionSettings.d.ts +14 -0
  38. package/dist/function/configure/FunctionTags.d.ts +14 -0
  39. package/dist/function/configure/Network.d.ts +42 -0
  40. package/dist/function/details/AmazonFunctionDetails.d.ts +19 -0
  41. package/dist/function/details/FunctionActions.d.ts +20 -0
  42. package/dist/function/function.module.d.ts +1 -0
  43. package/dist/function/function.transformer.d.ts +7 -0
  44. package/dist/function/index.d.ts +5 -0
  45. package/dist/help/amazon.help.d.ts +1 -0
  46. package/dist/image/image.reader.d.ts +25 -0
  47. package/dist/image/index.d.ts +1 -0
  48. package/dist/index.d.ts +14 -0
  49. package/dist/index.js +20873 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/instance/amazon.instance.write.service.d.ts +15 -0
  52. package/dist/instance/awsInstanceType.service.d.ts +50 -0
  53. package/dist/instance/awsInstanceTypes.d.ts +10 -0
  54. package/dist/instance/details/AmazonInstanceInformation.d.ts +6 -0
  55. package/dist/instance/details/CostFactor.d.ts +6 -0
  56. package/dist/instance/details/InstanceDns.d.ts +16 -0
  57. package/dist/instance/details/InstanceInformation.d.ts +13 -0
  58. package/dist/instance/details/InstanceSecurityGroups.d.ts +6 -0
  59. package/dist/instance/details/InstanceStatus.d.ts +16 -0
  60. package/dist/instance/details/InstanceTags.d.ts +8 -0
  61. package/dist/instance/details/amazonInstanceInformation.component.d.ts +1 -0
  62. package/dist/instance/details/instance.details.controller.d.ts +2 -0
  63. package/dist/instance/details/instanceDns.component.d.ts +1 -0
  64. package/dist/instance/details/instanceSecurityGroups.component.d.ts +1 -0
  65. package/dist/instance/details/instanceStatus.component.d.ts +1 -0
  66. package/dist/instance/details/instanceTags.component.d.ts +1 -0
  67. package/dist/instance/details/utils.d.ts +3 -0
  68. package/dist/instance/index.d.ts +5 -0
  69. package/dist/keyPairs/KeyPairsReader.d.ts +4 -0
  70. package/dist/keyPairs/index.d.ts +1 -0
  71. package/dist/loadBalancer/AmazonLoadBalancerClusterContainer.d.ts +6 -0
  72. package/dist/loadBalancer/AmazonLoadBalancersTag.d.ts +20 -0
  73. package/dist/loadBalancer/OidcConfigReader.d.ts +16 -0
  74. package/dist/loadBalancer/TargetGroup.d.ts +12 -0
  75. package/dist/loadBalancer/TargetGroupDetails.d.ts +7 -0
  76. package/dist/loadBalancer/amazonLoadBalancerDataUtils.d.ts +6 -0
  77. package/dist/loadBalancer/configure/AmazonLoadBalancerChoiceModal.d.ts +18 -0
  78. package/dist/loadBalancer/configure/LoadBalancerTypes.d.ts +14 -0
  79. package/dist/loadBalancer/configure/application/ALBAdvancedSettings.d.ts +2 -0
  80. package/dist/loadBalancer/configure/application/ALBListeners.d.ts +59 -0
  81. package/dist/loadBalancer/configure/application/ConfigureOidcConfigModal.d.ts +20 -0
  82. package/dist/loadBalancer/configure/application/ConfigureRedirectConfigModal.d.ts +17 -0
  83. package/dist/loadBalancer/configure/application/CreateApplicationLoadBalancer.d.ts +35 -0
  84. package/dist/loadBalancer/configure/application/TargetGroups.d.ts +33 -0
  85. package/dist/loadBalancer/configure/classic/AdvancedSettings.d.ts +10 -0
  86. package/dist/loadBalancer/configure/classic/CreateClassicLoadBalancer.d.ts +33 -0
  87. package/dist/loadBalancer/configure/classic/HealthCheck.d.ts +11 -0
  88. package/dist/loadBalancer/configure/classic/Listeners.d.ts +34 -0
  89. package/dist/loadBalancer/configure/common/AmazonCertificateSelectField.d.ts +15 -0
  90. package/dist/loadBalancer/configure/common/LoadBalancerLocation.d.ts +48 -0
  91. package/dist/loadBalancer/configure/common/SecurityGroups.d.ts +36 -0
  92. package/dist/loadBalancer/configure/common/targetGroupValidators.d.ts +10 -0
  93. package/dist/loadBalancer/configure/network/CertificateSelectors.d.ts +3 -0
  94. package/dist/loadBalancer/configure/network/CreateNetworkLoadBalancer.d.ts +34 -0
  95. package/dist/loadBalancer/configure/network/NLBAdvancedSettings.d.ts +5 -0
  96. package/dist/loadBalancer/configure/network/NLBListeners.d.ts +43 -0
  97. package/dist/loadBalancer/configure/network/TargetGroups.d.ts +34 -0
  98. package/dist/loadBalancer/details/LoadBalancerActions.d.ts +19 -0
  99. package/dist/loadBalancer/details/loadBalancerActions.component.d.ts +1 -0
  100. package/dist/loadBalancer/details/loadBalancerDetails.controller.d.ts +41 -0
  101. package/dist/loadBalancer/details/targetGroupDetails.controller.d.ts +30 -0
  102. package/dist/loadBalancer/index.d.ts +9 -0
  103. package/dist/loadBalancer/loadBalancer.module.d.ts +1 -0
  104. package/dist/loadBalancer/loadBalancer.transformer.d.ts +17 -0
  105. package/dist/loadBalancer/targetGroup.states.d.ts +1 -0
  106. package/dist/pipeline/stages/bake/awsBakeStage.d.ts +2 -0
  107. package/dist/pipeline/stages/bake/bakeExecutionDetails.controller.d.ts +2 -0
  108. package/dist/pipeline/stages/cloneServerGroup/awsCloneServerGroupStage.d.ts +2 -0
  109. package/dist/pipeline/stages/deleteLambda/DeleteLambdaFunctionStageForm.d.ts +3 -0
  110. package/dist/pipeline/stages/deleteLambda/LambdaDeleteStage.d.ts +8 -0
  111. package/dist/pipeline/stages/deleteLambda/constants/deleteVersion.constants.d.ts +6 -0
  112. package/dist/pipeline/stages/deleteLambda/constants/deleteVersion.picker.d.ts +16 -0
  113. package/dist/pipeline/stages/deleteLambda/constants/index.d.ts +2 -0
  114. package/dist/pipeline/stages/deleteLambda/index.d.ts +2 -0
  115. package/dist/pipeline/stages/deployCloudFormation/CloudFormationChangeSetInfo.d.ts +8 -0
  116. package/dist/pipeline/stages/deployCloudFormation/cloudFormationTemplateEntry.component.d.ts +1 -0
  117. package/dist/pipeline/stages/deployCloudFormation/deployCloudFormationExecutionDetails.d.ts +7 -0
  118. package/dist/pipeline/stages/deployCloudFormation/deployCloudFormationStackConfig.controller.d.ts +25 -0
  119. package/dist/pipeline/stages/deployCloudFormation/deployCloudFormationStackStage.d.ts +1 -0
  120. package/dist/pipeline/stages/deployCloudFormation/evaluateCloudFormationChangeSetExecution.service.d.ts +10 -0
  121. package/dist/pipeline/stages/deployCloudFormation/evaluateCloudFormationChangeSetExecutionApproval.d.ts +13 -0
  122. package/dist/pipeline/stages/deployCloudFormation/evaluateCloudFormationChangeSetExecutionDetails.d.ts +7 -0
  123. package/dist/pipeline/stages/deployCloudFormation/evaluateCloudFormationChangeSetExecutionLabel.d.ts +12 -0
  124. package/dist/pipeline/stages/deployCloudFormation/evaluateCloudFormationChangeSetExecutionMarkerIcon.d.ts +6 -0
  125. package/dist/pipeline/stages/deployLambda/components/AwsLambdaFunctionStageForm.d.ts +3 -0
  126. package/dist/pipeline/stages/deployLambda/components/BasicSettingsForm.d.ts +3 -0
  127. package/dist/pipeline/stages/deployLambda/components/EnvironmentForm.d.ts +2 -0
  128. package/dist/pipeline/stages/deployLambda/components/ExecutionRoleForm.d.ts +2 -0
  129. package/dist/pipeline/stages/deployLambda/components/LambdaAtEdgeForm.d.ts +3 -0
  130. package/dist/pipeline/stages/deployLambda/components/NetworkForm.d.ts +3 -0
  131. package/dist/pipeline/stages/deployLambda/components/TriggerEventsForm.d.ts +3 -0
  132. package/dist/pipeline/stages/deployLambda/components/function.constants.d.ts +5 -0
  133. package/dist/pipeline/stages/deployLambda/components/index.d.ts +5 -0
  134. package/dist/pipeline/stages/deployLambda/config/LambdaDeploymentStage.d.ts +3 -0
  135. package/dist/pipeline/stages/deployLambda/config/LambdaDeploymentStageConfig.d.ts +4 -0
  136. package/dist/pipeline/stages/deployLambda/config/LambdaDeploymentStageExecutionDetails.d.ts +6 -0
  137. package/dist/pipeline/stages/deployLambda/config/UpsertDefaults.d.ts +1 -0
  138. package/dist/pipeline/stages/deployLambda/config/function.defaults.d.ts +2 -0
  139. package/dist/pipeline/stages/deployLambda/index.d.ts +2 -0
  140. package/dist/pipeline/stages/destroyAsg/awsDestroyAsgStage.d.ts +2 -0
  141. package/dist/pipeline/stages/disableAsg/awsDisableAsgStage.d.ts +2 -0
  142. package/dist/pipeline/stages/disableCluster/awsDisableClusterStage.d.ts +2 -0
  143. package/dist/pipeline/stages/enableAsg/awsEnableAsgStage.d.ts +2 -0
  144. package/dist/pipeline/stages/findAmi/awsFindAmiStage.d.ts +2 -0
  145. package/dist/pipeline/stages/findImageFromTags/awsFindImageFromTagsStage.d.ts +2 -0
  146. package/dist/pipeline/stages/invokeLambda/InvokeLambdaFunctionStageForm.d.ts +3 -0
  147. package/dist/pipeline/stages/invokeLambda/LambdaInvokeStage.d.ts +8 -0
  148. package/dist/pipeline/stages/invokeLambda/components/InvokeLambdaOperation.d.ts +3 -0
  149. package/dist/pipeline/stages/invokeLambda/components/index.d.ts +1 -0
  150. package/dist/pipeline/stages/invokeLambda/index.d.ts +2 -0
  151. package/dist/pipeline/stages/modifyScalingProcess/modifyScalingProcessStage.d.ts +2 -0
  152. package/dist/pipeline/stages/resizeAsg/awsResizeAsgStage.d.ts +2 -0
  153. package/dist/pipeline/stages/rollbackCluster/awsRollbackClusterStage.d.ts +2 -0
  154. package/dist/pipeline/stages/routeLambda/LambdaRouteStage.d.ts +8 -0
  155. package/dist/pipeline/stages/routeLambda/RouteLambdaFunctionStageForm.d.ts +3 -0
  156. package/dist/pipeline/stages/routeLambda/TriggerEventsForm.d.ts +3 -0
  157. package/dist/pipeline/stages/routeLambda/components/BlueGreenDeployment/BlueGreenDeploymentForm.d.ts +3 -0
  158. package/dist/pipeline/stages/routeLambda/components/BlueGreenDeployment/HealthCheckStrategy.d.ts +3 -0
  159. package/dist/pipeline/stages/routeLambda/components/BlueGreenDeployment/InvocationHealthCheck.d.ts +3 -0
  160. package/dist/pipeline/stages/routeLambda/components/BlueGreenDeployment/health.constants.d.ts +5 -0
  161. package/dist/pipeline/stages/routeLambda/components/BlueGreenDeployment/index.d.ts +1 -0
  162. package/dist/pipeline/stages/routeLambda/components/DeploymentStrategyForm.d.ts +3 -0
  163. package/dist/pipeline/stages/routeLambda/components/RenderStrategy.d.ts +3 -0
  164. package/dist/pipeline/stages/routeLambda/components/SimpleDeploymentForm.d.ts +3 -0
  165. package/dist/pipeline/stages/routeLambda/components/VersionPicker.d.ts +14 -0
  166. package/dist/pipeline/stages/routeLambda/components/WeightedDeploymentForm.d.ts +3 -0
  167. package/dist/pipeline/stages/routeLambda/components/index.d.ts +1 -0
  168. package/dist/pipeline/stages/routeLambda/constants/index.d.ts +3 -0
  169. package/dist/pipeline/stages/routeLambda/constants/strategy.constants.d.ts +6 -0
  170. package/dist/pipeline/stages/routeLambda/constants/strategy.picker.d.ts +16 -0
  171. package/dist/pipeline/stages/routeLambda/constants/versions.constants.d.ts +6 -0
  172. package/dist/pipeline/stages/routeLambda/index.d.ts +2 -0
  173. package/dist/pipeline/stages/scaleDownCluster/awsScaleDownClusterStage.d.ts +2 -0
  174. package/dist/pipeline/stages/shrinkCluster/awsShrinkClusterStage.d.ts +2 -0
  175. package/dist/pipeline/stages/tagImage/awsTagImageStage.d.ts +2 -0
  176. package/dist/pipeline/stages/updateCodeLambda/LambdaUpdateCodeStage.d.ts +3 -0
  177. package/dist/pipeline/stages/updateCodeLambda/LambdaUpdateCodeStageConfig.d.ts +5 -0
  178. package/dist/pipeline/stages/updateCodeLambda/LambdaUpdateCodeStageExecutionDetails.d.ts +6 -0
  179. package/dist/pipeline/stages/updateCodeLambda/components/UpdateCodeStageForm.d.ts +3 -0
  180. package/dist/pipeline/stages/updateCodeLambda/components/index.d.ts +1 -0
  181. package/dist/pipeline/stages/updateCodeLambda/index.d.ts +2 -0
  182. package/dist/reactShims/aws.react.injector.d.ts +18 -0
  183. package/dist/reactShims/aws.react.module.d.ts +1 -0
  184. package/dist/reactShims/index.d.ts +1 -0
  185. package/dist/search/searchResultFormatter.d.ts +2 -0
  186. package/dist/securityGroup/clone/cloneSecurityGroup.controller.d.ts +2 -0
  187. package/dist/securityGroup/configure/CreateSecurityGroupCtrl.d.ts +2 -0
  188. package/dist/securityGroup/configure/EditSecurityGroupCtrl.d.ts +2 -0
  189. package/dist/securityGroup/configure/configSecurityGroup.mixin.controller.d.ts +2 -0
  190. package/dist/securityGroup/configure/ingressRuleGroupSelector.component.d.ts +1 -0
  191. package/dist/securityGroup/configure/securityGroupDetailsCustom.component.d.ts +1 -0
  192. package/dist/securityGroup/configure/securityGroupDetailsCustom.d.ts +10 -0
  193. package/dist/securityGroup/details/IPRangeRules.d.ts +17 -0
  194. package/dist/securityGroup/details/index.d.ts +1 -0
  195. package/dist/securityGroup/details/securityGroupDetail.controller.d.ts +2 -0
  196. package/dist/securityGroup/details/securityGroupIpRangeRules.component.d.ts +1 -0
  197. package/dist/securityGroup/index.d.ts +1 -0
  198. package/dist/securityGroup/securityGroup.module.d.ts +1 -0
  199. package/dist/securityGroup/securityGroup.reader.d.ts +6 -0
  200. package/dist/securityGroup/securityGroup.transformer.d.ts +2 -0
  201. package/dist/serverGroup/AvailabilityZoneSelector.d.ts +21 -0
  202. package/dist/serverGroup/configure/AmazonImageSelectInput.d.ts +44 -0
  203. package/dist/serverGroup/configure/index.d.ts +5 -0
  204. package/dist/serverGroup/configure/serverGroupCommandBuilder.service.d.ts +17 -0
  205. package/dist/serverGroup/configure/serverGroupConfiguration.service.d.ts +126 -0
  206. package/dist/serverGroup/configure/wizard/AmazonCloneServerGroupModal.d.ts +31 -0
  207. package/dist/serverGroup/configure/wizard/ServerGroupTemplateSelection.d.ts +15 -0
  208. package/dist/serverGroup/configure/wizard/capacity/CapacitySelector.d.ts +18 -0
  209. package/dist/serverGroup/configure/wizard/capacity/MinMaxDesired.d.ts +11 -0
  210. package/dist/serverGroup/configure/wizard/instanceType/CpuCreditsToggle.d.ts +8 -0
  211. package/dist/serverGroup/configure/wizard/instanceType/InstanceTypeSelector.d.ts +9 -0
  212. package/dist/serverGroup/configure/wizard/instanceType/InstanceTypeWarning.d.ts +6 -0
  213. package/dist/serverGroup/configure/wizard/instanceType/advancedMode/AdvancedModeSelector.d.ts +14 -0
  214. package/dist/serverGroup/configure/wizard/instanceType/advancedMode/AmazonInstanceTypeInfoRenderer.d.ts +5 -0
  215. package/dist/serverGroup/configure/wizard/instanceType/advancedMode/InstanceProfileSelector.d.ts +9 -0
  216. package/dist/serverGroup/configure/wizard/instanceType/advancedMode/InstanceTypeRow.d.ts +13 -0
  217. package/dist/serverGroup/configure/wizard/instanceType/advancedMode/InstanceTypeSelect.d.ts +7 -0
  218. package/dist/serverGroup/configure/wizard/instanceType/advancedMode/InstanceTypeTable.d.ts +18 -0
  219. package/dist/serverGroup/configure/wizard/instanceType/advancedMode/InstanceTypeTableBody.d.ts +14 -0
  220. package/dist/serverGroup/configure/wizard/instanceType/advancedMode/InstanceTypeTableParts.d.ts +17 -0
  221. package/dist/serverGroup/configure/wizard/instanceType/advancedMode/InstancesDistribution.d.ts +8 -0
  222. package/dist/serverGroup/configure/wizard/instanceType/simpleMode/SimpleModeSelector.d.ts +9 -0
  223. package/dist/serverGroup/configure/wizard/pages/ServerGroupBasicSettings.d.ts +32 -0
  224. package/dist/serverGroup/configure/wizard/pages/ServerGroupCapacity.d.ts +13 -0
  225. package/dist/serverGroup/configure/wizard/pages/ServerGroupInstanceType.d.ts +22 -0
  226. package/dist/serverGroup/configure/wizard/pages/ServerGroupLoadBalancers.d.ts +29 -0
  227. package/dist/serverGroup/configure/wizard/pages/ServerGroupSecurityGroups.d.ts +13 -0
  228. package/dist/serverGroup/configure/wizard/pages/ServerGroupZones.d.ts +13 -0
  229. package/dist/serverGroup/configure/wizard/pages/advancedSettings/ServerGroupAdvancedSettings.d.ts +13 -0
  230. package/dist/serverGroup/configure/wizard/pages/advancedSettings/ServerGroupAdvancedSettingsCommon.d.ts +12 -0
  231. package/dist/serverGroup/configure/wizard/pages/advancedSettings/ServerGroupAdvancedSettingsInner.d.ts +11 -0
  232. package/dist/serverGroup/configure/wizard/pages/index.d.ts +8 -0
  233. package/dist/serverGroup/configure/wizard/securityGroups/SecurityGroupSelector.d.ts +22 -0
  234. package/dist/serverGroup/configure/wizard/securityGroups/ServerGroupSecurityGroupsRemoved.d.ts +11 -0
  235. package/dist/serverGroup/details/AmazonServerGroupActions.d.ts +23 -0
  236. package/dist/serverGroup/details/advancedSettings/editAsgAdvancedSettings.modal.controller.d.ts +2 -0
  237. package/dist/serverGroup/details/amazonServerGroupDetailsGetter.d.ts +4 -0
  238. package/dist/serverGroup/details/resize/AmazonResizeServerGroupModal.d.ts +47 -0
  239. package/dist/serverGroup/details/rollback/rollbackServerGroup.controller.d.ts +2 -0
  240. package/dist/serverGroup/details/scalingPolicy/CreateScalingPolicyButton.d.ts +21 -0
  241. package/dist/serverGroup/details/scalingPolicy/ScalingPolicySummary.d.ts +9 -0
  242. package/dist/serverGroup/details/scalingPolicy/ScalingPolicyWriter.d.ts +55 -0
  243. package/dist/serverGroup/details/scalingPolicy/StepPolicySummary.d.ts +10 -0
  244. package/dist/serverGroup/details/scalingPolicy/chart/DateLineChart.d.ts +15 -0
  245. package/dist/serverGroup/details/scalingPolicy/chart/MetricAlarmChart.d.ts +11 -0
  246. package/dist/serverGroup/details/scalingPolicy/createScalingPolicyButton.component.d.ts +1 -0
  247. package/dist/serverGroup/details/scalingPolicy/index.d.ts +12 -0
  248. package/dist/serverGroup/details/scalingPolicy/popover/AlarmSummary.d.ts +12 -0
  249. package/dist/serverGroup/details/scalingPolicy/popover/StepPolicyPopoverContent.d.ts +7 -0
  250. package/dist/serverGroup/details/scalingPolicy/scalingPolicy.module.d.ts +1 -0
  251. package/dist/serverGroup/details/scalingPolicy/scalingPolicySummary.component.d.ts +1 -0
  252. package/dist/serverGroup/details/scalingPolicy/targetTracking/TargetMetricFields.d.ts +17 -0
  253. package/dist/serverGroup/details/scalingPolicy/targetTracking/TargetTrackingAdditionalSettings.d.ts +10 -0
  254. package/dist/serverGroup/details/scalingPolicy/targetTracking/TargetTrackingChart.d.ts +9 -0
  255. package/dist/serverGroup/details/scalingPolicy/targetTracking/TargetTrackingSummary.d.ts +10 -0
  256. package/dist/serverGroup/details/scalingPolicy/targetTracking/UpsertTargetTrackingModal.d.ts +9 -0
  257. package/dist/serverGroup/details/scalingPolicy/upsert/PolicyTypeSelectionModal.d.ts +7 -0
  258. package/dist/serverGroup/details/scalingPolicy/upsert/ScalingPolicyAdditionalSettings.d.ts +11 -0
  259. package/dist/serverGroup/details/scalingPolicy/upsert/ScalingPolicyCommandBuilderService.d.ts +11 -0
  260. package/dist/serverGroup/details/scalingPolicy/upsert/UpsertScalingPolicyModal.d.ts +9 -0
  261. package/dist/serverGroup/details/scalingPolicy/upsert/alarm/AlarmConfigurer.d.ts +16 -0
  262. package/dist/serverGroup/details/scalingPolicy/upsert/alarm/DimensionsEditor.d.ts +12 -0
  263. package/dist/serverGroup/details/scalingPolicy/upsert/alarm/MetricSelector.d.ts +15 -0
  264. package/dist/serverGroup/details/scalingPolicy/upsert/alarm/namespaces.d.ts +1 -0
  265. package/dist/serverGroup/details/scalingPolicy/upsert/index.d.ts +7 -0
  266. package/dist/serverGroup/details/scalingPolicy/upsert/simple/SimplePolicyAction.d.ts +13 -0
  267. package/dist/serverGroup/details/scalingPolicy/upsert/step/StepPolicyAction.d.ts +18 -0
  268. package/dist/serverGroup/details/scalingProcesses/AutoScalingProcessService.d.ts +6 -0
  269. package/dist/serverGroup/details/scalingProcesses/modifyScalingProcesses.controller.d.ts +2 -0
  270. package/dist/serverGroup/details/scheduledAction/ScheduledAction.d.ts +8 -0
  271. package/dist/serverGroup/details/scheduledAction/editScheduledActions.modal.controller.d.ts +2 -0
  272. package/dist/serverGroup/details/sections/AdvancedSettingsDetailsSection.d.ts +6 -0
  273. package/dist/serverGroup/details/sections/AmazonCapacityDetailsSection.d.ts +5 -0
  274. package/dist/serverGroup/details/sections/AmazonInfoDetailsSection.d.ts +12 -0
  275. package/dist/serverGroup/details/sections/HealthDetailsSection.d.ts +5 -0
  276. package/dist/serverGroup/details/sections/IAmazonServerGroupDetailsSectionProps.d.ts +5 -0
  277. package/dist/serverGroup/details/sections/InstancesDistributionDetailsSection.d.ts +3 -0
  278. package/dist/serverGroup/details/sections/LaunchConfigDetailsSection.d.ts +11 -0
  279. package/dist/serverGroup/details/sections/LaunchTemplateDetailsSection.d.ts +3 -0
  280. package/dist/serverGroup/details/sections/LogsDetailsSection.d.ts +5 -0
  281. package/dist/serverGroup/details/sections/MultipleInstanceTypesSubSection.d.ts +6 -0
  282. package/dist/serverGroup/details/sections/PackageDetailsSection.d.ts +12 -0
  283. package/dist/serverGroup/details/sections/ScalingPoliciesDetailsSection.d.ts +8 -0
  284. package/dist/serverGroup/details/sections/ScalingProcessesDetailsSection.d.ts +15 -0
  285. package/dist/serverGroup/details/sections/ScheduledActionsDetailsSection.d.ts +12 -0
  286. package/dist/serverGroup/details/sections/SecurityGroupsDetailsSection.d.ts +14 -0
  287. package/dist/serverGroup/details/sections/TagsDetailsSection.d.ts +5 -0
  288. package/dist/serverGroup/details/sections/index.d.ts +15 -0
  289. package/dist/serverGroup/details/securityGroup/editSecurityGroups.modal.controller.d.ts +2 -0
  290. package/dist/serverGroup/details/serverGroupDetails.module.d.ts +1 -0
  291. package/dist/serverGroup/details/utils.d.ts +1 -0
  292. package/dist/serverGroup/index.d.ts +5 -0
  293. package/dist/serverGroup/serverGroup.transformer.d.ts +14 -0
  294. package/dist/subnet/SubnetSelectField.d.ts +23 -0
  295. package/dist/subnet/SubnetSelectInput.d.ts +18 -0
  296. package/dist/subnet/index.d.ts +2 -0
  297. package/dist/subnet/subnet.renderer.d.ts +5 -0
  298. package/dist/validation/ApplicationNameValidator.d.ts +1 -0
  299. package/dist/vpc/VpcReader.d.ts +7 -0
  300. package/dist/vpc/VpcTag.d.ts +5 -0
  301. package/dist/vpc/index.d.ts +1 -0
  302. package/dist/vpc/vpc.module.d.ts +1 -0
  303. package/package.json +63 -0
  304. package/src/applicationProviderFields/awsFields.html +13 -0
  305. package/src/aws.module.ts +211 -0
  306. package/src/aws.settings.ts +71 -0
  307. package/src/aws.validators.ts +31 -0
  308. package/src/certificates/AmazonCertificateReader.ts +24 -0
  309. package/src/certificates/index.ts +1 -0
  310. package/src/common/AwsModalFooter.tsx +70 -0
  311. package/src/common/common.module.ts +6 -0
  312. package/src/common/footer.component.ts +29 -0
  313. package/src/common/index.ts +1 -0
  314. package/src/deploymentStrategy/AdditionalFields.tsx +110 -0
  315. package/src/deploymentStrategy/rollingPush.strategy.ts +43 -0
  316. package/src/domain/IAmazonBlockDeviceMapping.ts +16 -0
  317. package/src/domain/IAmazonCertificate.ts +6 -0
  318. package/src/domain/IAmazonFunction.ts +64 -0
  319. package/src/domain/IAmazonFunctionSourceData.ts +45 -0
  320. package/src/domain/IAmazonHealth.ts +15 -0
  321. package/src/domain/IAmazonInstance.ts +25 -0
  322. package/src/domain/IAmazonLaunchTemplate.ts +104 -0
  323. package/src/domain/IAmazonLoadBalancer.ts +277 -0
  324. package/src/domain/IAmazonLoadBalancerSourceData.ts +188 -0
  325. package/src/domain/IAmazonScalingPolicy.ts +26 -0
  326. package/src/domain/IAmazonSecurityGroup.ts +4 -0
  327. package/src/domain/IAmazonServerGroup.ts +74 -0
  328. package/src/domain/IKeyPair.ts +6 -0
  329. package/src/domain/IScalingPolicy.ts +85 -0
  330. package/src/domain/IScalingProcess.ts +11 -0
  331. package/src/domain/ITargetTrackingPolicy.ts +31 -0
  332. package/src/domain/index.ts +15 -0
  333. package/src/function/CreateLambdaFunction.tsx +228 -0
  334. package/src/function/configure/ExecutionRole.tsx +45 -0
  335. package/src/function/configure/FunctionBasicInformation.tsx +207 -0
  336. package/src/function/configure/FunctionDebugAndErrorHandling.tsx +49 -0
  337. package/src/function/configure/FunctionEnvironmentVariables.tsx +42 -0
  338. package/src/function/configure/FunctionSettings.tsx +43 -0
  339. package/src/function/configure/FunctionTags.tsx +35 -0
  340. package/src/function/configure/Network.tsx +260 -0
  341. package/src/function/details/AmazonFunctionDetails.tsx +198 -0
  342. package/src/function/details/FunctionActions.spec.tsx +55 -0
  343. package/src/function/details/FunctionActions.tsx +132 -0
  344. package/src/function/function.module.ts +5 -0
  345. package/src/function/function.transformer.ts +71 -0
  346. package/src/function/index.ts +5 -0
  347. package/src/help/amazon.help.ts +228 -0
  348. package/src/image/image.reader.spec.ts +75 -0
  349. package/src/image/image.reader.ts +44 -0
  350. package/src/image/index.ts +1 -0
  351. package/src/index.ts +15 -0
  352. package/src/instance/amazon.instance.write.service.ts +85 -0
  353. package/src/instance/awsInstanceType.service.spec.js +380 -0
  354. package/src/instance/awsInstanceType.service.ts +253 -0
  355. package/src/instance/awsInstanceTypes.ts +311 -0
  356. package/src/instance/details/AmazonInstanceInformation.tsx +35 -0
  357. package/src/instance/details/CostFactor.tsx +29 -0
  358. package/src/instance/details/InstanceDns.tsx +73 -0
  359. package/src/instance/details/InstanceInformation.spec.tsx +71 -0
  360. package/src/instance/details/InstanceInformation.tsx +66 -0
  361. package/src/instance/details/InstanceSecurityGroups.tsx +45 -0
  362. package/src/instance/details/InstanceStatus.tsx +92 -0
  363. package/src/instance/details/InstanceTags.tsx +21 -0
  364. package/src/instance/details/amazonInstanceInformation.component.ts +13 -0
  365. package/src/instance/details/instance.details.controller.js +586 -0
  366. package/src/instance/details/instance.details.controller.spec.js +133 -0
  367. package/src/instance/details/instanceDetails.html +65 -0
  368. package/src/instance/details/instanceDns.component.ts +21 -0
  369. package/src/instance/details/instanceSecurityGroups.component.ts +13 -0
  370. package/src/instance/details/instanceStatus.component.ts +19 -0
  371. package/src/instance/details/instanceTags.component.ts +13 -0
  372. package/src/instance/details/utils.ts +34 -0
  373. package/src/instance/index.ts +5 -0
  374. package/src/keyPairs/KeyPairsReader.ts +11 -0
  375. package/src/keyPairs/index.ts +1 -0
  376. package/src/loadBalancer/AmazonLoadBalancerClusterContainer.tsx +53 -0
  377. package/src/loadBalancer/AmazonLoadBalancersTag.tsx +231 -0
  378. package/src/loadBalancer/OidcConfigReader.ts +21 -0
  379. package/src/loadBalancer/TargetGroup.tsx +63 -0
  380. package/src/loadBalancer/TargetGroupDetails.tsx +13 -0
  381. package/src/loadBalancer/amazonLoadBalancerDataUtils.ts +64 -0
  382. package/src/loadBalancer/configure/AmazonLoadBalancerChoiceModal.tsx +155 -0
  383. package/src/loadBalancer/configure/LoadBalancerTypes.ts +42 -0
  384. package/src/loadBalancer/configure/application/ALBAdvancedSettings.tsx +28 -0
  385. package/src/loadBalancer/configure/application/ALBListeners.tsx +1023 -0
  386. package/src/loadBalancer/configure/application/ConfigureConfigModal.css +3 -0
  387. package/src/loadBalancer/configure/application/ConfigureOidcConfigModal.tsx +140 -0
  388. package/src/loadBalancer/configure/application/ConfigureRedirectConfigModal.tsx +146 -0
  389. package/src/loadBalancer/configure/application/CreateApplicationLoadBalancer.tsx +337 -0
  390. package/src/loadBalancer/configure/application/TargetGroups.tsx +548 -0
  391. package/src/loadBalancer/configure/classic/AdvancedSettings.css +3 -0
  392. package/src/loadBalancer/configure/classic/AdvancedSettings.tsx +69 -0
  393. package/src/loadBalancer/configure/classic/CreateClassicLoadBalancer.tsx +282 -0
  394. package/src/loadBalancer/configure/classic/HealthCheck.tsx +69 -0
  395. package/src/loadBalancer/configure/classic/Listeners.less +21 -0
  396. package/src/loadBalancer/configure/classic/Listeners.tsx +273 -0
  397. package/src/loadBalancer/configure/common/AmazonCertificateSelectField.tsx +48 -0
  398. package/src/loadBalancer/configure/common/LoadBalancerLocation.tsx +417 -0
  399. package/src/loadBalancer/configure/common/SecurityGroups.tsx +223 -0
  400. package/src/loadBalancer/configure/common/configure.less +131 -0
  401. package/src/loadBalancer/configure/common/targetGroupValidators.spec.ts +130 -0
  402. package/src/loadBalancer/configure/common/targetGroupValidators.ts +41 -0
  403. package/src/loadBalancer/configure/network/CertificateSelectors.tsx +73 -0
  404. package/src/loadBalancer/configure/network/CreateNetworkLoadBalancer.tsx +303 -0
  405. package/src/loadBalancer/configure/network/NLBAdvancedSettings.tsx +34 -0
  406. package/src/loadBalancer/configure/network/NLBListeners.tsx +298 -0
  407. package/src/loadBalancer/configure/network/TargetGroups.tsx +447 -0
  408. package/src/loadBalancer/details/LoadBalancerActions.tsx +166 -0
  409. package/src/loadBalancer/details/loadBalancerActions.component.ts +16 -0
  410. package/src/loadBalancer/details/loadBalancerDetails.controller.spec.ts +76 -0
  411. package/src/loadBalancer/details/loadBalancerDetails.controller.ts +240 -0
  412. package/src/loadBalancer/details/loadBalancerDetails.html +266 -0
  413. package/src/loadBalancer/details/targetGroupDetails.controller.ts +95 -0
  414. package/src/loadBalancer/details/targetGroupDetails.html +138 -0
  415. package/src/loadBalancer/index.ts +9 -0
  416. package/src/loadBalancer/loadBalancer.module.ts +15 -0
  417. package/src/loadBalancer/loadBalancer.transformer.ts +638 -0
  418. package/src/loadBalancer/targetGroup.less +46 -0
  419. package/src/loadBalancer/targetGroup.states.ts +55 -0
  420. package/src/logo/amazon.logo.svg +503 -0
  421. package/src/logo/aws.icon.svg +10 -0
  422. package/src/logo/aws.logo.less +5 -0
  423. package/src/pipeline/stages/bake/awsBakeStage.js +219 -0
  424. package/src/pipeline/stages/bake/bakeExecutionDetails.controller.js +43 -0
  425. package/src/pipeline/stages/bake/bakeExecutionDetails.html +65 -0
  426. package/src/pipeline/stages/bake/bakeStage.html +205 -0
  427. package/src/pipeline/stages/cloneServerGroup/awsCloneServerGroupStage.js +143 -0
  428. package/src/pipeline/stages/cloneServerGroup/cloneServerGroupStage.html +143 -0
  429. package/src/pipeline/stages/cloneServerGroup/cloneServerGroupStepLabel.html +1 -0
  430. package/src/pipeline/stages/deleteLambda/DeleteLambdaFunctionStageForm.tsx +143 -0
  431. package/src/pipeline/stages/deleteLambda/LambdaDeleteStage.tsx +86 -0
  432. package/src/pipeline/stages/deleteLambda/constants/deleteVersion.constants.ts +37 -0
  433. package/src/pipeline/stages/deleteLambda/constants/deleteVersion.picker.tsx +47 -0
  434. package/src/pipeline/stages/deleteLambda/constants/index.ts +5 -0
  435. package/src/pipeline/stages/deleteLambda/index.ts +17 -0
  436. package/src/pipeline/stages/deployCloudFormation/CloudFormationChangeSetInfo.tsx +80 -0
  437. package/src/pipeline/stages/deployCloudFormation/cloudFormationTemplateEntry.component.ts +46 -0
  438. package/src/pipeline/stages/deployCloudFormation/deployCloudFormationExecutionDetails.tsx +23 -0
  439. package/src/pipeline/stages/deployCloudFormation/deployCloudFormationStackConfig.controller.ts +84 -0
  440. package/src/pipeline/stages/deployCloudFormation/deployCloudFormationStackConfig.html +84 -0
  441. package/src/pipeline/stages/deployCloudFormation/deployCloudFormationStackStage.ts +37 -0
  442. package/src/pipeline/stages/deployCloudFormation/evaluateCloudFormationChangeSetExecution.service.ts +33 -0
  443. package/src/pipeline/stages/deployCloudFormation/evaluateCloudFormationChangeSetExecutionApproval.tsx +80 -0
  444. package/src/pipeline/stages/deployCloudFormation/evaluateCloudFormationChangeSetExecutionDetails.tsx +56 -0
  445. package/src/pipeline/stages/deployCloudFormation/evaluateCloudFormationChangeSetExecutionLabel.tsx +53 -0
  446. package/src/pipeline/stages/deployCloudFormation/evaluateCloudFormationChangeSetExecutionMarkerIcon.tsx +20 -0
  447. package/src/pipeline/stages/deployLambda/components/AwsLambdaFunctionStageForm.tsx +138 -0
  448. package/src/pipeline/stages/deployLambda/components/BasicSettingsForm.tsx +176 -0
  449. package/src/pipeline/stages/deployLambda/components/EnvironmentForm.tsx +24 -0
  450. package/src/pipeline/stages/deployLambda/components/ExecutionRoleForm.tsx +15 -0
  451. package/src/pipeline/stages/deployLambda/components/LambdaAtEdgeForm.tsx +28 -0
  452. package/src/pipeline/stages/deployLambda/components/NetworkForm.tsx +123 -0
  453. package/src/pipeline/stages/deployLambda/components/TriggerEventsForm.tsx +49 -0
  454. package/src/pipeline/stages/deployLambda/components/function.constants.ts +32 -0
  455. package/src/pipeline/stages/deployLambda/components/index.ts +8 -0
  456. package/src/pipeline/stages/deployLambda/config/LambdaDeploymentStage.tsx +20 -0
  457. package/src/pipeline/stages/deployLambda/config/LambdaDeploymentStageConfig.tsx +64 -0
  458. package/src/pipeline/stages/deployLambda/config/LambdaDeploymentStageExecutionDetails.tsx +31 -0
  459. package/src/pipeline/stages/deployLambda/config/UpsertDefaults.tsx +21 -0
  460. package/src/pipeline/stages/deployLambda/config/function.defaults.ts +39 -0
  461. package/src/pipeline/stages/deployLambda/index.ts +18 -0
  462. package/src/pipeline/stages/destroyAsg/awsDestroyAsgStage.js +66 -0
  463. package/src/pipeline/stages/destroyAsg/destroyAsgStage.html +9 -0
  464. package/src/pipeline/stages/destroyAsg/destroyAsgStepLabel.html +1 -0
  465. package/src/pipeline/stages/disableAsg/awsDisableAsgStage.js +69 -0
  466. package/src/pipeline/stages/disableAsg/disableAsgStage.html +11 -0
  467. package/src/pipeline/stages/disableAsg/disableAsgStepLabel.html +1 -0
  468. package/src/pipeline/stages/disableCluster/awsDisableClusterStage.js +84 -0
  469. package/src/pipeline/stages/disableCluster/disableClusterStage.html +26 -0
  470. package/src/pipeline/stages/enableAsg/awsEnableAsgStage.js +73 -0
  471. package/src/pipeline/stages/enableAsg/enableAsgStage.html +11 -0
  472. package/src/pipeline/stages/enableAsg/enableAsgStepLabel.html +1 -0
  473. package/src/pipeline/stages/findAmi/awsFindAmiStage.js +79 -0
  474. package/src/pipeline/stages/findAmi/findAmiStage.html +24 -0
  475. package/src/pipeline/stages/findImageFromTags/awsFindImageFromTagsStage.js +36 -0
  476. package/src/pipeline/stages/findImageFromTags/findImageFromTagsExecutionDetails.html +44 -0
  477. package/src/pipeline/stages/findImageFromTags/findImageFromTagsStage.html +11 -0
  478. package/src/pipeline/stages/invokeLambda/InvokeLambdaFunctionStageForm.tsx +106 -0
  479. package/src/pipeline/stages/invokeLambda/LambdaInvokeStage.tsx +125 -0
  480. package/src/pipeline/stages/invokeLambda/components/InvokeLambdaOperation.tsx +78 -0
  481. package/src/pipeline/stages/invokeLambda/components/index.ts +4 -0
  482. package/src/pipeline/stages/invokeLambda/index.ts +18 -0
  483. package/src/pipeline/stages/modifyScalingProcess/modifyScalingProcessExecutionDetails.html +36 -0
  484. package/src/pipeline/stages/modifyScalingProcess/modifyScalingProcessStage.html +24 -0
  485. package/src/pipeline/stages/modifyScalingProcess/modifyScalingProcessStage.js +98 -0
  486. package/src/pipeline/stages/resizeAsg/awsResizeAsgStage.js +127 -0
  487. package/src/pipeline/stages/resizeAsg/resizeAsgStage.html +90 -0
  488. package/src/pipeline/stages/resizeAsg/resizeAsgStepLabel.html +4 -0
  489. package/src/pipeline/stages/rollbackCluster/awsRollbackClusterStage.js +66 -0
  490. package/src/pipeline/stages/rollbackCluster/rollbackClusterStage.html +43 -0
  491. package/src/pipeline/stages/routeLambda/LambdaRouteStage.tsx +98 -0
  492. package/src/pipeline/stages/routeLambda/RouteLambdaFunctionStageForm.tsx +150 -0
  493. package/src/pipeline/stages/routeLambda/TriggerEventsForm.tsx +51 -0
  494. package/src/pipeline/stages/routeLambda/components/BlueGreenDeployment/BlueGreenDeploymentForm.tsx +27 -0
  495. package/src/pipeline/stages/routeLambda/components/BlueGreenDeployment/HealthCheckStrategy.tsx +21 -0
  496. package/src/pipeline/stages/routeLambda/components/BlueGreenDeployment/InvocationHealthCheck.tsx +93 -0
  497. package/src/pipeline/stages/routeLambda/components/BlueGreenDeployment/health.constants.ts +14 -0
  498. package/src/pipeline/stages/routeLambda/components/BlueGreenDeployment/index.ts +4 -0
  499. package/src/pipeline/stages/routeLambda/components/DeploymentStrategyForm.tsx +18 -0
  500. package/src/pipeline/stages/routeLambda/components/RenderStrategy.tsx +23 -0
  501. package/src/pipeline/stages/routeLambda/components/SimpleDeploymentForm.tsx +67 -0
  502. package/src/pipeline/stages/routeLambda/components/VersionPicker.tsx +43 -0
  503. package/src/pipeline/stages/routeLambda/components/WeightedDeploymentForm.tsx +107 -0
  504. package/src/pipeline/stages/routeLambda/components/index.ts +4 -0
  505. package/src/pipeline/stages/routeLambda/constants/index.ts +6 -0
  506. package/src/pipeline/stages/routeLambda/constants/strategy.constants.tsx +26 -0
  507. package/src/pipeline/stages/routeLambda/constants/strategy.picker.tsx +47 -0
  508. package/src/pipeline/stages/routeLambda/constants/versions.constants.ts +31 -0
  509. package/src/pipeline/stages/routeLambda/index.ts +18 -0
  510. package/src/pipeline/stages/scaleDownCluster/awsScaleDownClusterStage.js +78 -0
  511. package/src/pipeline/stages/scaleDownCluster/scaleDownClusterStage.html +35 -0
  512. package/src/pipeline/stages/shrinkCluster/awsShrinkClusterStage.js +73 -0
  513. package/src/pipeline/stages/shrinkCluster/shrinkClusterStage.html +34 -0
  514. package/src/pipeline/stages/tagImage/awsTagImageStage.js +34 -0
  515. package/src/pipeline/stages/tagImage/tagImageExecutionDetails.html +38 -0
  516. package/src/pipeline/stages/tagImage/tagImageStage.html +10 -0
  517. package/src/pipeline/stages/updateCodeLambda/LambdaUpdateCodeStage.less +5 -0
  518. package/src/pipeline/stages/updateCodeLambda/LambdaUpdateCodeStage.tsx +20 -0
  519. package/src/pipeline/stages/updateCodeLambda/LambdaUpdateCodeStageConfig.tsx +41 -0
  520. package/src/pipeline/stages/updateCodeLambda/LambdaUpdateCodeStageExecutionDetails.tsx +31 -0
  521. package/src/pipeline/stages/updateCodeLambda/components/UpdateCodeStageForm.tsx +122 -0
  522. package/src/pipeline/stages/updateCodeLambda/components/index.ts +4 -0
  523. package/src/pipeline/stages/updateCodeLambda/index.ts +18 -0
  524. package/src/reactShims/aws.react.injector.ts +25 -0
  525. package/src/reactShims/aws.react.module.ts +12 -0
  526. package/src/reactShims/index.ts +1 -0
  527. package/src/search/searchResultFormatter.ts +19 -0
  528. package/src/securityGroup/clone/cloneSecurityGroup.controller.js +106 -0
  529. package/src/securityGroup/clone/cloneSecurityGroup.html +19 -0
  530. package/src/securityGroup/configure/CreateSecurityGroup.controller.spec.js +307 -0
  531. package/src/securityGroup/configure/CreateSecurityGroupCtrl.js +47 -0
  532. package/src/securityGroup/configure/EditSecurityGroupCtrl.js +115 -0
  533. package/src/securityGroup/configure/configSecurityGroup.mixin.controller.js +366 -0
  534. package/src/securityGroup/configure/createSecurityGroup.html +19 -0
  535. package/src/securityGroup/configure/createSecurityGroupIngress.html +100 -0
  536. package/src/securityGroup/configure/createSecurityGroupProperties.html +123 -0
  537. package/src/securityGroup/configure/editSecurityGroup.html +20 -0
  538. package/src/securityGroup/configure/ingressRuleGroupSelector.component.html +77 -0
  539. package/src/securityGroup/configure/ingressRuleGroupSelector.component.less +6 -0
  540. package/src/securityGroup/configure/ingressRuleGroupSelector.component.ts +190 -0
  541. package/src/securityGroup/configure/securityGroupDetailsCustom.component.ts +16 -0
  542. package/src/securityGroup/configure/securityGroupDetailsCustom.tsx +16 -0
  543. package/src/securityGroup/details/IPRangeRules.tsx +56 -0
  544. package/src/securityGroup/details/index.ts +1 -0
  545. package/src/securityGroup/details/securityGroupDetail.controller.js +249 -0
  546. package/src/securityGroup/details/securityGroupDetail.html +114 -0
  547. package/src/securityGroup/details/securityGroupIpRangeRules.component.ts +12 -0
  548. package/src/securityGroup/index.ts +1 -0
  549. package/src/securityGroup/securityGroup.module.ts +26 -0
  550. package/src/securityGroup/securityGroup.reader.ts +24 -0
  551. package/src/securityGroup/securityGroup.transformer.js +48 -0
  552. package/src/serverGroup/AvailabilityZoneSelector.tsx +107 -0
  553. package/src/serverGroup/configure/AccountServiceFixtures.js +45 -0
  554. package/src/serverGroup/configure/AmazonImageSelectInput.spec.tsx +101 -0
  555. package/src/serverGroup/configure/AmazonImageSelectInput.tsx +412 -0
  556. package/src/serverGroup/configure/index.ts +5 -0
  557. package/src/serverGroup/configure/serverGroupCommandBuilder.aws.service.spec.js +430 -0
  558. package/src/serverGroup/configure/serverGroupCommandBuilder.service.ts +528 -0
  559. package/src/serverGroup/configure/serverGroupCommandBuilder.spec.js +284 -0
  560. package/src/serverGroup/configure/serverGroupConfiguration.service.spec.ts +478 -0
  561. package/src/serverGroup/configure/serverGroupConfiguration.service.ts +747 -0
  562. package/src/serverGroup/configure/wizard/AmazonCloneServerGroupModal.tsx +243 -0
  563. package/src/serverGroup/configure/wizard/ServerGroupTemplateSelection.tsx +60 -0
  564. package/src/serverGroup/configure/wizard/capacity/CapacitySelector.tsx +181 -0
  565. package/src/serverGroup/configure/wizard/capacity/MinMaxDesired.tsx +60 -0
  566. package/src/serverGroup/configure/wizard/instanceType/CpuCreditsToggle.tsx +62 -0
  567. package/src/serverGroup/configure/wizard/instanceType/InstanceTypeSelector.tsx +167 -0
  568. package/src/serverGroup/configure/wizard/instanceType/InstanceTypeWarning.tsx +44 -0
  569. package/src/serverGroup/configure/wizard/instanceType/advancedMode/AdvancedModeSelector.tsx +102 -0
  570. package/src/serverGroup/configure/wizard/instanceType/advancedMode/AmazonInstanceTypeInfoRenderer.tsx +59 -0
  571. package/src/serverGroup/configure/wizard/instanceType/advancedMode/InstanceProfileSelector.tsx +36 -0
  572. package/src/serverGroup/configure/wizard/instanceType/advancedMode/InstanceTypeRow.tsx +157 -0
  573. package/src/serverGroup/configure/wizard/instanceType/advancedMode/InstanceTypeSelect.tsx +78 -0
  574. package/src/serverGroup/configure/wizard/instanceType/advancedMode/InstanceTypeTable.tsx +148 -0
  575. package/src/serverGroup/configure/wizard/instanceType/advancedMode/InstanceTypeTableBody.tsx +144 -0
  576. package/src/serverGroup/configure/wizard/instanceType/advancedMode/InstanceTypeTableParts.tsx +129 -0
  577. package/src/serverGroup/configure/wizard/instanceType/advancedMode/InstancesDistribution.less +5 -0
  578. package/src/serverGroup/configure/wizard/instanceType/advancedMode/InstancesDistribution.tsx +111 -0
  579. package/src/serverGroup/configure/wizard/instanceType/advancedMode/advancedMode.less +122 -0
  580. package/src/serverGroup/configure/wizard/instanceType/simpleMode/SimpleModeSelector.tsx +65 -0
  581. package/src/serverGroup/configure/wizard/pages/ServerGroupBasicSettings.tsx +354 -0
  582. package/src/serverGroup/configure/wizard/pages/ServerGroupCapacity.tsx +71 -0
  583. package/src/serverGroup/configure/wizard/pages/ServerGroupInstanceType.tsx +158 -0
  584. package/src/serverGroup/configure/wizard/pages/ServerGroupLoadBalancers.tsx +262 -0
  585. package/src/serverGroup/configure/wizard/pages/ServerGroupSecurityGroups.tsx +52 -0
  586. package/src/serverGroup/configure/wizard/pages/ServerGroupZones.tsx +68 -0
  587. package/src/serverGroup/configure/wizard/pages/advancedSettings/ServerGroupAdvancedSettings.tsx +30 -0
  588. package/src/serverGroup/configure/wizard/pages/advancedSettings/ServerGroupAdvancedSettingsCommon.tsx +374 -0
  589. package/src/serverGroup/configure/wizard/pages/advancedSettings/ServerGroupAdvancedSettingsInner.tsx +40 -0
  590. package/src/serverGroup/configure/wizard/pages/index.ts +8 -0
  591. package/src/serverGroup/configure/wizard/securityGroups/SecurityGroupSelector.tsx +108 -0
  592. package/src/serverGroup/configure/wizard/securityGroups/ServerGroupSecurityGroupsRemoved.tsx +49 -0
  593. package/src/serverGroup/details/AmazonServerGroupActions.tsx +343 -0
  594. package/src/serverGroup/details/advancedSettings/editAsgAdvancedSettings.modal.controller.js +47 -0
  595. package/src/serverGroup/details/advancedSettings/editAsgAdvancedSettings.modal.html +79 -0
  596. package/src/serverGroup/details/amazonServerGroupDetailsGetter.ts +83 -0
  597. package/src/serverGroup/details/resize/AmazonResizeServerGroupModal.tsx +458 -0
  598. package/src/serverGroup/details/rollback/rollbackServerGroup.controller.js +146 -0
  599. package/src/serverGroup/details/rollback/rollbackServerGroup.html +139 -0
  600. package/src/serverGroup/details/scalingPolicy/CreateScalingPolicyButton.tsx +97 -0
  601. package/src/serverGroup/details/scalingPolicy/ScalingPolicySummary.tsx +33 -0
  602. package/src/serverGroup/details/scalingPolicy/ScalingPolicyWriter.ts +102 -0
  603. package/src/serverGroup/details/scalingPolicy/StepPolicySummary.less +10 -0
  604. package/src/serverGroup/details/scalingPolicy/StepPolicySummary.tsx +120 -0
  605. package/src/serverGroup/details/scalingPolicy/chart/DateLineChart.tsx +117 -0
  606. package/src/serverGroup/details/scalingPolicy/chart/MetricAlarmChart.tsx +85 -0
  607. package/src/serverGroup/details/scalingPolicy/createScalingPolicyButton.component.ts +15 -0
  608. package/src/serverGroup/details/scalingPolicy/index.ts +12 -0
  609. package/src/serverGroup/details/scalingPolicy/popover/AlarmSummary.tsx +26 -0
  610. package/src/serverGroup/details/scalingPolicy/popover/StepPolicyPopoverContent.tsx +90 -0
  611. package/src/serverGroup/details/scalingPolicy/scalingPolicy.module.ts +6 -0
  612. package/src/serverGroup/details/scalingPolicy/scalingPolicySummary.component.ts +14 -0
  613. package/src/serverGroup/details/scalingPolicy/targetTracking/TargetMetricFields.less +10 -0
  614. package/src/serverGroup/details/scalingPolicy/targetTracking/TargetMetricFields.tsx +212 -0
  615. package/src/serverGroup/details/scalingPolicy/targetTracking/TargetTrackingAdditionalSettings.less +11 -0
  616. package/src/serverGroup/details/scalingPolicy/targetTracking/TargetTrackingAdditionalSettings.tsx +122 -0
  617. package/src/serverGroup/details/scalingPolicy/targetTracking/TargetTrackingChart.tsx +85 -0
  618. package/src/serverGroup/details/scalingPolicy/targetTracking/TargetTrackingSummary.less +11 -0
  619. package/src/serverGroup/details/scalingPolicy/targetTracking/TargetTrackingSummary.tsx +117 -0
  620. package/src/serverGroup/details/scalingPolicy/targetTracking/UpsertTargetTrackingModal.tsx +77 -0
  621. package/src/serverGroup/details/scalingPolicy/upsert/PolicyTypeSelectionModal.tsx +77 -0
  622. package/src/serverGroup/details/scalingPolicy/upsert/ScalingPolicyAdditionalSettings.less +11 -0
  623. package/src/serverGroup/details/scalingPolicy/upsert/ScalingPolicyAdditionalSettings.tsx +105 -0
  624. package/src/serverGroup/details/scalingPolicy/upsert/ScalingPolicyCommandBuilderService.ts +133 -0
  625. package/src/serverGroup/details/scalingPolicy/upsert/UpsertScalingPolicyModal.tsx +213 -0
  626. package/src/serverGroup/details/scalingPolicy/upsert/alarm/AlarmConfigurer.less +19 -0
  627. package/src/serverGroup/details/scalingPolicy/upsert/alarm/AlarmConfigurer.tsx +176 -0
  628. package/src/serverGroup/details/scalingPolicy/upsert/alarm/DimensionsEditor.tsx +89 -0
  629. package/src/serverGroup/details/scalingPolicy/upsert/alarm/MetricSelector.less +15 -0
  630. package/src/serverGroup/details/scalingPolicy/upsert/alarm/MetricSelector.tsx +170 -0
  631. package/src/serverGroup/details/scalingPolicy/upsert/alarm/dimensionsEditor.less +18 -0
  632. package/src/serverGroup/details/scalingPolicy/upsert/alarm/namespaces.ts +31 -0
  633. package/src/serverGroup/details/scalingPolicy/upsert/index.ts +7 -0
  634. package/src/serverGroup/details/scalingPolicy/upsert/simple/SimplePolicyAction.less +9 -0
  635. package/src/serverGroup/details/scalingPolicy/upsert/simple/SimplePolicyAction.tsx +70 -0
  636. package/src/serverGroup/details/scalingPolicy/upsert/step/StepPolicyAction.less +18 -0
  637. package/src/serverGroup/details/scalingPolicy/upsert/step/StepPolicyAction.tsx +163 -0
  638. package/src/serverGroup/details/scalingProcesses/AutoScalingProcessService.spec.ts +94 -0
  639. package/src/serverGroup/details/scalingProcesses/AutoScalingProcessService.ts +76 -0
  640. package/src/serverGroup/details/scalingProcesses/modifyScalingProcesses.controller.js +95 -0
  641. package/src/serverGroup/details/scalingProcesses/modifyScalingProcesses.controller.spec.js +106 -0
  642. package/src/serverGroup/details/scalingProcesses/modifyScalingProcesses.html +30 -0
  643. package/src/serverGroup/details/scheduledAction/ScheduledAction.tsx +25 -0
  644. package/src/serverGroup/details/scheduledAction/editScheduledActions.modal.controller.js +70 -0
  645. package/src/serverGroup/details/scheduledAction/editScheduledActions.modal.html +89 -0
  646. package/src/serverGroup/details/sections/AdvancedSettingsDetailsSection.tsx +61 -0
  647. package/src/serverGroup/details/sections/AmazonCapacityDetailsSection.tsx +39 -0
  648. package/src/serverGroup/details/sections/AmazonInfoDetailsSection.tsx +89 -0
  649. package/src/serverGroup/details/sections/HealthDetailsSection.tsx +25 -0
  650. package/src/serverGroup/details/sections/IAmazonServerGroupDetailsSectionProps.ts +6 -0
  651. package/src/serverGroup/details/sections/InstancesDistributionDetailsSection.spec.tsx +88 -0
  652. package/src/serverGroup/details/sections/InstancesDistributionDetailsSection.tsx +50 -0
  653. package/src/serverGroup/details/sections/LaunchConfigDetailsSection.tsx +93 -0
  654. package/src/serverGroup/details/sections/LaunchTemplateDetailsSection.spec.tsx +255 -0
  655. package/src/serverGroup/details/sections/LaunchTemplateDetailsSection.tsx +61 -0
  656. package/src/serverGroup/details/sections/LogsDetailsSection.tsx +19 -0
  657. package/src/serverGroup/details/sections/MultipleInstanceTypesSubSection.tsx +44 -0
  658. package/src/serverGroup/details/sections/PackageDetailsSection.tsx +78 -0
  659. package/src/serverGroup/details/sections/ScalingPoliciesDetailsSection.tsx +65 -0
  660. package/src/serverGroup/details/sections/ScalingProcessesDetailsSection.tsx +113 -0
  661. package/src/serverGroup/details/sections/ScheduledActionsDetailsSection.tsx +92 -0
  662. package/src/serverGroup/details/sections/SecurityGroupsDetailsSection.tsx +119 -0
  663. package/src/serverGroup/details/sections/TagsDetailsSection.tsx +26 -0
  664. package/src/serverGroup/details/sections/index.ts +15 -0
  665. package/src/serverGroup/details/sections/multipleInstanceTypesSubSection.less +50 -0
  666. package/src/serverGroup/details/securityGroup/editSecurityGroups.modal.controller.js +95 -0
  667. package/src/serverGroup/details/securityGroup/editSecurityGroups.modal.html +40 -0
  668. package/src/serverGroup/details/serverGroupDetails.module.ts +18 -0
  669. package/src/serverGroup/details/utils.spec.ts +23 -0
  670. package/src/serverGroup/details/utils.ts +13 -0
  671. package/src/serverGroup/index.ts +5 -0
  672. package/src/serverGroup/serverGroup.transformer.spec.ts +185 -0
  673. package/src/serverGroup/serverGroup.transformer.ts +160 -0
  674. package/src/subnet/SubnetSelectField.tsx +84 -0
  675. package/src/subnet/SubnetSelectInput.spec.tsx +91 -0
  676. package/src/subnet/SubnetSelectInput.tsx +111 -0
  677. package/src/subnet/index.ts +2 -0
  678. package/src/subnet/subnet.renderer.ts +12 -0
  679. package/src/validation/ApplicationNameValidator.ts +84 -0
  680. package/src/vpc/VpcReader.spec.ts +45 -0
  681. package/src/vpc/VpcReader.ts +36 -0
  682. package/src/vpc/VpcTag.spec.tsx +37 -0
  683. package/src/vpc/VpcTag.tsx +24 -0
  684. package/src/vpc/index.ts +1 -0
  685. package/src/vpc/vpc.module.ts +9 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/aws.settings.ts","../src/common/footer.component.ts","../src/common/common.module.ts","../src/deploymentStrategy/AdditionalFields.tsx","../src/deploymentStrategy/rollingPush.strategy.ts","../src/function/function.transformer.ts","../src/aws.validators.ts","../src/function/configure/ExecutionRole.tsx","../src/pipeline/stages/deployLambda/components/function.constants.ts","../src/function/configure/FunctionBasicInformation.tsx","../src/function/configure/FunctionDebugAndErrorHandling.tsx","../src/function/configure/FunctionEnvironmentVariables.tsx","../src/function/configure/FunctionSettings.tsx","../src/function/configure/FunctionTags.tsx","../src/vpc/VpcReader.ts","../src/function/configure/Network.tsx","../src/function/CreateLambdaFunction.tsx","../src/function/details/FunctionActions.tsx","../src/reactShims/aws.react.injector.ts","../src/function/details/AmazonFunctionDetails.tsx","../src/function/function.module.ts","../src/help/amazon.help.ts","../src/image/image.reader.ts","../src/instance/awsInstanceTypes.ts","../src/instance/awsInstanceType.service.ts","../src/instance/details/InstanceInformation.tsx","../src/vpc/VpcTag.tsx","../src/instance/details/AmazonInstanceInformation.tsx","../src/instance/details/amazonInstanceInformation.component.ts","../src/instance/amazon.instance.write.service.ts","../src/instance/details/utils.ts","../src/instance/details/instance.details.controller.js","../src/instance/details/InstanceDns.tsx","../src/instance/details/instanceDns.component.ts","../src/instance/details/InstanceSecurityGroups.tsx","../src/instance/details/instanceSecurityGroups.component.ts","../src/instance/details/InstanceStatus.tsx","../src/instance/details/instanceStatus.component.ts","../src/instance/details/InstanceTags.tsx","../src/instance/details/instanceTags.component.ts","../../../node_modules/style-inject/dist/style-inject.es.js","../src/loadBalancer/TargetGroup.tsx","../src/loadBalancer/AmazonLoadBalancerClusterContainer.tsx","../src/loadBalancer/amazonLoadBalancerDataUtils.ts","../src/loadBalancer/AmazonLoadBalancersTag.tsx","../src/loadBalancer/loadBalancer.transformer.ts","../src/loadBalancer/TargetGroupDetails.tsx","../src/loadBalancer/configure/common/AmazonCertificateSelectField.tsx","../src/loadBalancer/configure/application/ALBAdvancedSettings.tsx","../src/loadBalancer/configure/application/ConfigureOidcConfigModal.tsx","../src/loadBalancer/configure/application/ConfigureRedirectConfigModal.tsx","../src/loadBalancer/OidcConfigReader.ts","../src/certificates/AmazonCertificateReader.ts","../src/loadBalancer/configure/application/ALBListeners.tsx","../src/loadBalancer/configure/common/targetGroupValidators.ts","../src/loadBalancer/configure/application/TargetGroups.tsx","../src/serverGroup/AvailabilityZoneSelector.tsx","../src/subnet/SubnetSelectInput.tsx","../src/subnet/SubnetSelectField.tsx","../src/loadBalancer/configure/common/LoadBalancerLocation.tsx","../src/loadBalancer/configure/common/SecurityGroups.tsx","../src/loadBalancer/configure/application/CreateApplicationLoadBalancer.tsx","../src/loadBalancer/configure/classic/AdvancedSettings.tsx","../src/loadBalancer/configure/classic/HealthCheck.tsx","../src/loadBalancer/configure/classic/Listeners.tsx","../src/loadBalancer/configure/classic/CreateClassicLoadBalancer.tsx","../src/loadBalancer/configure/network/NLBAdvancedSettings.tsx","../src/loadBalancer/configure/network/CertificateSelectors.tsx","../src/loadBalancer/configure/network/NLBListeners.tsx","../src/loadBalancer/configure/network/TargetGroups.tsx","../src/loadBalancer/configure/network/CreateNetworkLoadBalancer.tsx","../src/loadBalancer/configure/LoadBalancerTypes.ts","../src/loadBalancer/configure/AmazonLoadBalancerChoiceModal.tsx","../src/loadBalancer/details/LoadBalancerActions.tsx","../src/loadBalancer/details/loadBalancerActions.component.ts","../src/loadBalancer/details/loadBalancerDetails.controller.ts","../src/loadBalancer/details/targetGroupDetails.controller.ts","../src/loadBalancer/targetGroup.states.ts","../src/loadBalancer/loadBalancer.module.ts","../src/logo/amazon.logo.svg","../src/pipeline/stages/bake/bakeExecutionDetails.controller.js","../src/pipeline/stages/bake/awsBakeStage.js","../src/pipeline/stages/cloneServerGroup/awsCloneServerGroupStage.js","../src/pipeline/stages/deleteLambda/constants/deleteVersion.constants.ts","../src/pipeline/stages/deleteLambda/constants/deleteVersion.picker.tsx","../src/pipeline/stages/deleteLambda/DeleteLambdaFunctionStageForm.tsx","../src/pipeline/stages/deleteLambda/LambdaDeleteStage.tsx","../src/pipeline/stages/deleteLambda/index.ts","../src/pipeline/stages/deployCloudFormation/CloudFormationChangeSetInfo.tsx","../src/pipeline/stages/deployCloudFormation/cloudFormationTemplateEntry.component.ts","../src/pipeline/stages/deployCloudFormation/deployCloudFormationExecutionDetails.tsx","../src/pipeline/stages/deployCloudFormation/deployCloudFormationStackConfig.controller.ts","../src/pipeline/stages/deployCloudFormation/evaluateCloudFormationChangeSetExecutionApproval.tsx","../src/pipeline/stages/deployCloudFormation/evaluateCloudFormationChangeSetExecutionDetails.tsx","../src/pipeline/stages/deployCloudFormation/evaluateCloudFormationChangeSetExecutionLabel.tsx","../src/pipeline/stages/deployCloudFormation/evaluateCloudFormationChangeSetExecutionMarkerIcon.tsx","../src/pipeline/stages/deployCloudFormation/deployCloudFormationStackStage.ts","../src/pipeline/stages/deployCloudFormation/evaluateCloudFormationChangeSetExecution.service.ts","../src/pipeline/stages/deployLambda/config/UpsertDefaults.tsx","../src/pipeline/stages/deployLambda/components/BasicSettingsForm.tsx","../src/pipeline/stages/deployLambda/components/NetworkForm.tsx","../src/pipeline/stages/deployLambda/components/ExecutionRoleForm.tsx","../src/pipeline/stages/deployLambda/components/TriggerEventsForm.tsx","../src/pipeline/stages/deployLambda/components/LambdaAtEdgeForm.tsx","../src/pipeline/stages/deployLambda/components/AwsLambdaFunctionStageForm.tsx","../src/pipeline/stages/deployLambda/config/function.defaults.ts","../src/pipeline/stages/deployLambda/config/LambdaDeploymentStageConfig.tsx","../src/pipeline/stages/deployLambda/config/LambdaDeploymentStageExecutionDetails.tsx","../src/pipeline/stages/deployLambda/config/LambdaDeploymentStage.tsx","../src/pipeline/stages/deployLambda/index.ts","../src/pipeline/stages/destroyAsg/awsDestroyAsgStage.js","../src/pipeline/stages/disableAsg/awsDisableAsgStage.js","../src/pipeline/stages/disableCluster/awsDisableClusterStage.js","../src/pipeline/stages/enableAsg/awsEnableAsgStage.js","../src/pipeline/stages/findAmi/awsFindAmiStage.js","../src/pipeline/stages/findImageFromTags/awsFindImageFromTagsStage.js","../src/pipeline/stages/invokeLambda/components/InvokeLambdaOperation.tsx","../src/pipeline/stages/invokeLambda/InvokeLambdaFunctionStageForm.tsx","../src/pipeline/stages/invokeLambda/LambdaInvokeStage.tsx","../src/pipeline/stages/invokeLambda/index.ts","../src/pipeline/stages/modifyScalingProcess/modifyScalingProcessStage.js","../src/pipeline/stages/resizeAsg/awsResizeAsgStage.js","../src/pipeline/stages/rollbackCluster/awsRollbackClusterStage.js","../src/pipeline/stages/routeLambda/TriggerEventsForm.tsx","../src/pipeline/stages/routeLambda/components/BlueGreenDeployment/InvocationHealthCheck.tsx","../src/pipeline/stages/routeLambda/components/BlueGreenDeployment/HealthCheckStrategy.tsx","../src/pipeline/stages/routeLambda/components/BlueGreenDeployment/health.constants.ts","../src/pipeline/stages/routeLambda/components/BlueGreenDeployment/BlueGreenDeploymentForm.tsx","../src/pipeline/stages/routeLambda/constants/strategy.constants.tsx","../src/pipeline/stages/routeLambda/constants/strategy.picker.tsx","../src/pipeline/stages/routeLambda/constants/versions.constants.ts","../src/pipeline/stages/routeLambda/components/VersionPicker.tsx","../src/pipeline/stages/routeLambda/components/SimpleDeploymentForm.tsx","../src/pipeline/stages/routeLambda/components/WeightedDeploymentForm.tsx","../src/pipeline/stages/routeLambda/components/RenderStrategy.tsx","../src/pipeline/stages/routeLambda/components/DeploymentStrategyForm.tsx","../src/pipeline/stages/routeLambda/RouteLambdaFunctionStageForm.tsx","../src/pipeline/stages/routeLambda/LambdaRouteStage.tsx","../src/pipeline/stages/routeLambda/index.ts","../src/pipeline/stages/scaleDownCluster/awsScaleDownClusterStage.js","../src/pipeline/stages/shrinkCluster/awsShrinkClusterStage.js","../src/pipeline/stages/tagImage/awsTagImageStage.js","../src/pipeline/stages/updateCodeLambda/components/UpdateCodeStageForm.tsx","../src/pipeline/stages/updateCodeLambda/LambdaUpdateCodeStageConfig.tsx","../src/pipeline/stages/updateCodeLambda/LambdaUpdateCodeStageExecutionDetails.tsx","../src/pipeline/stages/updateCodeLambda/LambdaUpdateCodeStage.tsx","../src/pipeline/stages/updateCodeLambda/index.ts","../src/reactShims/aws.react.module.ts","../src/search/searchResultFormatter.ts","../src/securityGroup/configure/configSecurityGroup.mixin.controller.js","../src/securityGroup/clone/cloneSecurityGroup.controller.js","../src/securityGroup/configure/CreateSecurityGroupCtrl.js","../src/securityGroup/configure/EditSecurityGroupCtrl.js","../src/securityGroup/configure/ingressRuleGroupSelector.component.ts","../src/securityGroup/configure/securityGroupDetailsCustom.tsx","../src/securityGroup/configure/securityGroupDetailsCustom.component.ts","../src/securityGroup/details/securityGroupDetail.controller.js","../src/securityGroup/details/IPRangeRules.tsx","../src/securityGroup/details/securityGroupIpRangeRules.component.ts","../src/securityGroup/securityGroup.reader.ts","../src/securityGroup/securityGroup.transformer.js","../src/securityGroup/securityGroup.module.ts","../src/serverGroup/configure/wizard/ServerGroupTemplateSelection.tsx","../src/serverGroup/configure/AmazonImageSelectInput.tsx","../src/serverGroup/configure/wizard/pages/ServerGroupBasicSettings.tsx","../src/serverGroup/configure/wizard/capacity/CapacitySelector.tsx","../src/serverGroup/configure/wizard/capacity/MinMaxDesired.tsx","../src/serverGroup/configure/wizard/pages/ServerGroupCapacity.tsx","../src/serverGroup/configure/wizard/instanceType/advancedMode/InstanceProfileSelector.tsx","../src/serverGroup/configure/wizard/instanceType/CpuCreditsToggle.tsx","../src/serverGroup/configure/wizard/instanceType/advancedMode/AmazonInstanceTypeInfoRenderer.tsx","../src/instance/details/CostFactor.tsx","../src/serverGroup/configure/wizard/instanceType/advancedMode/InstanceTypeRow.tsx","../src/serverGroup/configure/wizard/instanceType/advancedMode/InstanceTypeTableBody.tsx","../src/serverGroup/configure/wizard/instanceType/advancedMode/InstanceTypeSelect.tsx","../src/serverGroup/configure/wizard/instanceType/advancedMode/InstanceTypeTableParts.tsx","../src/serverGroup/configure/wizard/instanceType/InstanceTypeWarning.tsx","../src/serverGroup/configure/wizard/instanceType/advancedMode/InstanceTypeTable.tsx","../src/serverGroup/configure/wizard/instanceType/advancedMode/InstancesDistribution.tsx","../src/serverGroup/configure/wizard/instanceType/advancedMode/AdvancedModeSelector.tsx","../src/serverGroup/configure/wizard/instanceType/simpleMode/SimpleModeSelector.tsx","../src/serverGroup/configure/wizard/instanceType/InstanceTypeSelector.tsx","../src/serverGroup/configure/wizard/pages/ServerGroupInstanceType.tsx","../src/serverGroup/configure/wizard/pages/ServerGroupZones.tsx","../src/serverGroup/configure/wizard/pages/ServerGroupLoadBalancers.tsx","../src/serverGroup/configure/wizard/securityGroups/SecurityGroupSelector.tsx","../src/serverGroup/configure/wizard/securityGroups/ServerGroupSecurityGroupsRemoved.tsx","../src/serverGroup/configure/wizard/pages/ServerGroupSecurityGroups.tsx","../src/serverGroup/configure/wizard/pages/advancedSettings/ServerGroupAdvancedSettingsCommon.tsx","../src/serverGroup/configure/wizard/pages/advancedSettings/ServerGroupAdvancedSettingsInner.tsx","../src/serverGroup/configure/wizard/pages/advancedSettings/ServerGroupAdvancedSettings.tsx","../src/serverGroup/configure/wizard/AmazonCloneServerGroupModal.tsx","../src/common/AwsModalFooter.tsx","../src/serverGroup/details/resize/AmazonResizeServerGroupModal.tsx","../src/serverGroup/details/AmazonServerGroupActions.tsx","../src/serverGroup/details/scalingProcesses/AutoScalingProcessService.ts","../src/serverGroup/details/amazonServerGroupDetailsGetter.ts","../src/serverGroup/details/scalingPolicy/chart/DateLineChart.tsx","../src/serverGroup/details/scalingPolicy/chart/MetricAlarmChart.tsx","../src/serverGroup/details/scalingPolicy/targetTracking/TargetTrackingChart.tsx","../src/serverGroup/details/scalingPolicy/upsert/alarm/DimensionsEditor.tsx","../src/serverGroup/details/scalingPolicy/upsert/alarm/namespaces.ts","../src/serverGroup/details/scalingPolicy/upsert/alarm/MetricSelector.tsx","../src/serverGroup/details/scalingPolicy/targetTracking/TargetMetricFields.tsx","../src/serverGroup/details/scalingPolicy/targetTracking/TargetTrackingAdditionalSettings.tsx","../src/serverGroup/details/scalingPolicy/upsert/ScalingPolicyCommandBuilderService.ts","../src/serverGroup/details/scalingPolicy/targetTracking/UpsertTargetTrackingModal.tsx","../src/serverGroup/details/scalingPolicy/upsert/PolicyTypeSelectionModal.tsx","../src/serverGroup/details/scalingPolicy/upsert/ScalingPolicyAdditionalSettings.tsx","../src/serverGroup/details/scalingPolicy/upsert/alarm/AlarmConfigurer.tsx","../src/serverGroup/details/scalingPolicy/upsert/simple/SimplePolicyAction.tsx","../src/serverGroup/details/scalingPolicy/upsert/step/StepPolicyAction.tsx","../src/serverGroup/details/scalingPolicy/upsert/UpsertScalingPolicyModal.tsx","../src/serverGroup/details/scalingPolicy/CreateScalingPolicyButton.tsx","../src/serverGroup/details/scalingPolicy/ScalingPolicyWriter.ts","../src/serverGroup/details/scalingPolicy/popover/AlarmSummary.tsx","../src/serverGroup/details/scalingPolicy/popover/StepPolicyPopoverContent.tsx","../src/serverGroup/details/scalingPolicy/StepPolicySummary.tsx","../src/serverGroup/details/scalingPolicy/targetTracking/TargetTrackingSummary.tsx","../src/serverGroup/details/scalingPolicy/ScalingPolicySummary.tsx","../src/serverGroup/details/sections/AdvancedSettingsDetailsSection.tsx","../src/serverGroup/details/sections/AmazonInfoDetailsSection.tsx","../src/serverGroup/details/sections/AmazonCapacityDetailsSection.tsx","../src/serverGroup/details/sections/HealthDetailsSection.tsx","../src/serverGroup/details/sections/InstancesDistributionDetailsSection.tsx","../src/serverGroup/details/utils.ts","../src/serverGroup/details/sections/LaunchConfigDetailsSection.tsx","../src/serverGroup/details/sections/MultipleInstanceTypesSubSection.tsx","../src/serverGroup/details/sections/LaunchTemplateDetailsSection.tsx","../src/serverGroup/details/sections/LogsDetailsSection.tsx","../src/serverGroup/details/sections/PackageDetailsSection.tsx","../src/serverGroup/details/sections/ScalingPoliciesDetailsSection.tsx","../src/serverGroup/details/sections/ScalingProcessesDetailsSection.tsx","../src/serverGroup/details/scheduledAction/ScheduledAction.tsx","../src/serverGroup/details/sections/ScheduledActionsDetailsSection.tsx","../src/serverGroup/details/sections/SecurityGroupsDetailsSection.tsx","../src/serverGroup/details/sections/TagsDetailsSection.tsx","../src/keyPairs/KeyPairsReader.ts","../src/serverGroup/configure/serverGroupConfiguration.service.ts","../src/serverGroup/configure/serverGroupCommandBuilder.service.ts","../src/serverGroup/details/advancedSettings/editAsgAdvancedSettings.modal.controller.js","../src/serverGroup/details/rollback/rollbackServerGroup.controller.js","../src/serverGroup/details/scalingPolicy/scalingPolicySummary.component.ts","../src/serverGroup/details/scalingPolicy/scalingPolicy.module.ts","../src/serverGroup/details/scalingProcesses/modifyScalingProcesses.controller.js","../src/serverGroup/details/scheduledAction/editScheduledActions.modal.controller.js","../src/serverGroup/details/securityGroup/editSecurityGroups.modal.controller.js","../src/serverGroup/details/serverGroupDetails.module.ts","../src/serverGroup/serverGroup.transformer.ts","../src/subnet/subnet.renderer.ts","../src/validation/ApplicationNameValidator.ts","../src/vpc/vpc.module.ts","../src/aws.module.ts"],"sourcesContent":["import type { IProviderSettings } from '@spinnaker/core';\nimport { SETTINGS } from '@spinnaker/core';\n\nexport interface IClassicLaunchAllowlist {\n region: string;\n credentials: string;\n}\n\nexport interface IAWSProviderSettings extends IProviderSettings {\n adHocInfraWritesEnabled?: boolean;\n bakeWarning?: string;\n classicLaunchLockout?: number;\n classicLaunchAllowlist?: IClassicLaunchAllowlist[];\n createLoadBalancerWarnings?: {\n application?: string;\n classic?: string;\n network?: string;\n };\n crossAccountIngressExclusions?: {\n [credentials: string]: string | string[];\n };\n securityGroupExclusions?: string[];\n defaults: {\n account?: string;\n iamRole?: string;\n region?: string;\n subnetType?: string;\n vpc?: string;\n };\n defaultSecurityGroups?: string[];\n disableSpotPricing?: boolean;\n dockerBakeryDeprecated?: boolean;\n dockerBakeWarning?: string;\n instanceTypes?: {\n exclude?: {\n categories?: string[];\n families?: string[];\n };\n };\n loadBalancers?: {\n certificateTypes?: string[];\n disableManualOidcDialog?: boolean;\n inferInternalFlagFromSubnet: boolean;\n };\n metrics?: {\n customNamespaces?: string[];\n };\n minRootVolumeSize?: number;\n serverGroups?: {\n enableLaunchTemplates?: boolean;\n // Enables IPv6 as an advanced setting\n enableIPv6?: boolean;\n // If `enableIPv6` is true, will automatically opt asgs in the test environment into IPv6\n setIPv6InTest?: boolean;\n enableIMDSv2?: boolean;\n defaultIMDSv2AppAgeLimit?: number;\n accountDenyListIMDSv2?: string[];\n enableCpuCredits?: boolean;\n recommendedSubnets?: string[];\n subnetWarning?: string;\n };\n useAmiBlockDeviceMappings?: boolean;\n}\n\nexport const AWSProviderSettings: IAWSProviderSettings = (SETTINGS.providers.aws as IAWSProviderSettings) || {\n defaults: {},\n};\nif (AWSProviderSettings) {\n AWSProviderSettings.adHocInfraWritesEnabled = AWSProviderSettings.adHocInfraWritesEnabled ?? true;\n AWSProviderSettings.resetToOriginal = SETTINGS.resetProvider('aws');\n}\n","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 AWS_FOOTER_COMPONENT = 'spinnaker.amazon.footer';\nmodule(AWS_FOOTER_COMPONENT, []).component('awsFooter', footerComponent);\n","import { module } from 'angular';\n\nimport { AWS_FOOTER_COMPONENT } from './footer.component';\n\nexport const COMMON_MODULE = 'spinnaker.amazon.common';\nmodule(COMMON_MODULE, [AWS_FOOTER_COMPONENT]);\n","import React from 'react';\n\nimport type { IDeploymentStrategyAdditionalFieldsProps } from '@spinnaker/core';\nimport { HelpField } from '@spinnaker/core';\n\nimport { AWSProviderSettings } from '../aws.settings';\nimport type { IRollingPushCommand } from './rollingPush.strategy';\n\nexport interface IRollingPushStrategyAdditionalFieldsProps extends IDeploymentStrategyAdditionalFieldsProps {\n command: IRollingPushCommand;\n}\n\nexport class AdditionalFields extends React.Component<IRollingPushStrategyAdditionalFieldsProps> {\n private handleChange = (key: string, value: any) => {\n this.props.command.termination[key] = value;\n this.forceUpdate();\n };\n\n public render() {\n const { command } = this.props;\n return (\n <div className=\"form-group\" style={{ marginTop: '20px' }}>\n <div className=\"well-compact alert alert-warning\">\n <strong>Note:</strong> a rolling push only updates the{' '}\n <em>\n launch {Boolean(AWSProviderSettings.serverGroups?.enableLaunchTemplates) ? 'template' : 'configuration'}\n </em>{' '}\n for the auto scaling group.\n <br /> Changes to the following fields will be ignored:\n <ul>\n <li>Account, Region, Subnet Type</li>\n <li>Capacity</li>\n <li>Load Balancers</li>\n <li>Health Check Configuration</li>\n <li>Termination Policies, Enable Traffic flag</li>\n </ul>\n </div>\n <div className=\"form-group\">\n <div className=\"col-md-12 checkbox\">\n <label>\n <input\n type=\"checkbox\"\n checked={command.termination.relaunchAllInstances}\n onChange={(e) => this.handleChange('relaunchAllInstances', e.target.checked)}\n />\n <b>Relaunch all instances</b>\n <HelpField id=\"strategy.rollingPush.relaunchAll\" />\n </label>\n </div>\n </div>\n\n {!command.termination.relaunchAllInstances && (\n <div className=\"form-group\">\n <div className=\"col-md-5 sm-label-right\">\n Total relaunches\n <HelpField id=\"strategy.rollingPush.totalRelaunches\" />\n </div>\n <div className=\"col-md-2\">\n <input\n className=\"form-control input-sm\"\n type=\"number\"\n value={command.termination.totalRelaunches}\n onChange={(e) => this.handleChange('totalRelaunches', e.target.value)}\n min=\"0\"\n />\n </div>\n </div>\n )}\n\n {(command.termination.totalRelaunches > 0 || command.termination.relaunchAllInstances) && (\n <div className=\"form-group\">\n <div className=\"col-md-5 sm-label-right\">\n Concurrent relaunches\n <HelpField id=\"strategy.rollingPush.concurrentRelaunches\" />\n </div>\n <div className=\"col-md-2\">\n <input\n className=\"form-control input-sm\"\n type=\"number\"\n value={command.termination.concurrentRelaunches}\n onChange={(e) => this.handleChange('concurrentRelaunches', e.target.value)}\n min=\"1\"\n />\n </div>\n </div>\n )}\n\n {(command.termination.totalRelaunches > 0 || command.termination.relaunchAllInstances) && (\n <div className=\"form-group\">\n <div className=\"col-md-5 sm-label-right\">\n Order\n <HelpField id=\"strategy.rollingPush.order\" />\n </div>\n <div className=\"col-md-3\">\n <select\n className=\"input input-sm\"\n style={{ width: '100px' }}\n value={command.termination.order}\n onChange={(e) => this.handleChange('order', e.target.value)}\n >\n <option value=\"oldest\">oldest first</option>\n <option value=\"newest\">newest first</option>\n </select>\n </div>\n </div>\n )}\n </div>\n );\n }\n}\n","import type { IServerGroupCommand } from '@spinnaker/core';\nimport { DeploymentStrategyRegistry } from '@spinnaker/core';\n\nimport { AdditionalFields } from './AdditionalFields';\nimport { AWSProviderSettings } from '../aws.settings';\n\nexport interface IRollingPushTermination {\n concurrentRelaunches: number;\n relaunchAllInstances: boolean;\n totalRelaunches: number;\n\n [key: string]: any;\n}\n\nexport interface IRollingPushCommand extends IServerGroupCommand {\n termination: IRollingPushTermination;\n}\n\nDeploymentStrategyRegistry.registerStrategy({\n label: 'Rolling Push (not recommended)',\n description: `Updates the launch ${\n AWSProviderSettings.serverGroups?.enableLaunchTemplates ? 'template' : 'configuration'\n } for this server group, then terminates instances incrementally,\n replacing them with instances launched with the updated configuration. This is not a best practice - it goes against\n the principles of immutable infrastructure - but may be necessary in some cases.`,\n key: 'rollingpush',\n providerRestricted: true,\n additionalFields: [\n 'termination.totalRelaunches',\n 'termination.concurrentRelaunches',\n 'termination.order',\n 'termination.relaunchAllInstances',\n ],\n AdditionalFieldsComponent: AdditionalFields,\n initializationMethod: (command: IRollingPushCommand) => {\n command.termination = command.termination || {\n order: 'oldest',\n relaunchAllInstances: true,\n concurrentRelaunches: 1,\n totalRelaunches: Number(command?.capacity?.max) ?? 1,\n };\n },\n});\n","import { isEmpty } from 'lodash';\n\nimport type { Application } from '@spinnaker/core';\nimport { AWSProviderSettings } from '../aws.settings';\nimport type { IAmazonFunction, IAmazonFunctionUpsertCommand } from '../domain';\n\nexport class AwsFunctionTransformer {\n public normalizeFunction(functionDef: IAmazonFunction): IAmazonFunction {\n const normalizedFunctionDef: IAmazonFunction = functionDef;\n normalizedFunctionDef.credentials = functionDef.account;\n return normalizedFunctionDef;\n }\n\n public convertFunctionForEditing = (functionDef: IAmazonFunction): IAmazonFunctionUpsertCommand => ({\n ...functionDef,\n envVariables: functionDef.environment ? functionDef.environment.variables : {},\n credentials: functionDef.account,\n tracingConfig: {\n mode: functionDef.tracingConfig ? functionDef.tracingConfig.mode : '',\n },\n deadLetterConfig: {\n targetArn: functionDef.deadLetterConfig ? functionDef.deadLetterConfig.targetArn : '',\n },\n KMSKeyArn: functionDef.kmskeyArn ? functionDef.kmskeyArn : '',\n subnetIds: functionDef.vpcConfig ? functionDef.vpcConfig.subnetIds : [],\n securityGroupIds: functionDef.vpcConfig ? functionDef.vpcConfig.securityGroupIds : [],\n vpcId: functionDef.vpcConfig ? functionDef.vpcConfig.vpcId : '',\n operation: '',\n cloudProvider: functionDef.cloudProvider,\n region: functionDef.region,\n targetGroups: isEmpty(functionDef.targetGroups) ? '' : functionDef.targetGroups,\n });\n\n public constructNewAwsFunctionTemplate(application: Application): IAmazonFunctionUpsertCommand {\n const defaultCredentials = application.defaultCredentials.aws || AWSProviderSettings.defaults.account;\n const defaultRegion = application.defaultRegions.aws || AWSProviderSettings.defaults.region;\n\n return {\n role: '',\n runtime: '',\n s3bucket: '',\n s3key: '',\n handler: '',\n functionName: '',\n publish: false,\n tags: {},\n memorySize: 128,\n description: '',\n\n credentials: defaultCredentials,\n cloudProvider: 'aws',\n detail: '',\n region: defaultRegion,\n envVariables: {},\n\n tracingConfig: {\n mode: 'PassThrough',\n },\n kmskeyArn: '',\n vpcId: '',\n subnetIds: [],\n securityGroupIds: [],\n timeout: 3,\n deadLetterConfig: {\n targetArn: '',\n },\n operation: '',\n targetGroups: '',\n };\n }\n}\n","import { isEmpty } from 'lodash';\n\nexport const iamRoleValidator = (value: string, label: string) => {\n const isIAMRole = value.match(/^arn:aws:iam::\\d{12}:role\\/?\\/[a-zA-Z_0-9+=,.@\\-/]+/);\n return isIAMRole\n ? undefined\n : `Invalid role. ${label} must match regular expression: arn:aws:iam::d{12}:role/?[a-zA-Z_0-9+=,.@-_/]+`;\n};\n\nexport const s3BucketNameValidator = (value: string, label: string) => {\n const s3BucketName = value.match(/^[0-9A-Za-z.-]*[^.]$/);\n return s3BucketName\n ? undefined\n : `Invalid S3 Bucket name. ${label} must match regular expression: [0-9A-Za-z.-]*[^.]$`;\n};\n\nexport const awsArnValidator = (value: string, label: string) => {\n const arn = value.match(/arn:aws[a-zA-Z-]?:[a-zA-Z_0-9.-]+:./);\n return arn\n ? undefined\n : `Invalid ARN. ${label} must match regular expression: /arn:aws[a-zA-Z-]?:[a-zA-Z_0-9.-]+:./`;\n};\n\nexport const awsTagsValidator = (value: string | { [key: string]: string }, label: string) => {\n return isEmpty(value) ? `At least one ${label} is required` : undefined;\n};\n\nexport const simpleStringValidator = (value: string, label: string) => {\n const simpleString = value.match(/^[0-9A-Za-z]*$/);\n return simpleString ? undefined : `Invalid String Value. ${label} must match regular expression: [0-9A-Za-z]`;\n};\n","import type { FormikErrors, FormikProps } from 'formik';\nimport React from 'react';\n\nimport type { IWizardPageComponent } from '@spinnaker/core';\nimport { FormikFormField, FormValidator, TextInput } from '@spinnaker/core';\nimport { iamRoleValidator } from '../../aws.validators';\nimport type { IAmazonFunction } from '../../domain';\nimport type { IAmazonFunctionUpsertCommand } from '../../index';\n\nexport interface IExecutionRoleProps {\n formik: FormikProps<IAmazonFunctionUpsertCommand>;\n isNew?: boolean;\n functionDef: IAmazonFunction;\n}\n\nexport class ExecutionRole\n extends React.Component<IExecutionRoleProps>\n implements IWizardPageComponent<IAmazonFunctionUpsertCommand> {\n constructor(props: IExecutionRoleProps) {\n super(props);\n }\n\n public validate(values: IAmazonFunctionUpsertCommand): FormikErrors<IAmazonFunctionUpsertCommand> {\n const validator = new FormValidator(values);\n validator.field('role', 'Role ARN').required().withValidators(iamRoleValidator);\n return validator.validateForm();\n }\n\n public render() {\n return (\n <div className=\"form-group\">\n <div className=\"col-md-11\">\n <div className=\"sp-margin-m-bottom\">\n <FormikFormField\n name=\"role\"\n label=\"Role ARN\"\n input={(props) => <TextInput {...props} placeholder=\"Enter role ARN\" name=\"role\" />}\n required={true}\n />\n </div>\n </div>\n </div>\n );\n }\n}\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n// https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html\nexport const availableRuntimes = [\n 'nodejs12.x',\n 'nodejs14.x',\n 'nodejs16.x',\n 'nodejs18.x',\n 'java8',\n 'java8.al2',\n 'java11',\n 'java17',\n 'python3.7',\n 'python3.8',\n 'python3.9',\n 'python3.10',\n 'dotnetcore3.1',\n 'dotnet7',\n 'dotnet6',\n 'dotnet5.0',\n 'go1.x',\n 'ruby2.7',\n 'provided',\n 'provided.al2',\n];\n\nexport const lambdaHelpFields = {\n stack:\n '(Optional) Stack is naming components of a function, used to create vertical stacks of dependent services for integration testing.',\n detail:\n '(Optional) Detail is a string of free-form alphanumeric characters to describe any other variables in naming a function.',\n};\n","import classNames from 'classnames';\nimport type { FormikErrors, FormikProps } from 'formik';\nimport React from 'react';\nimport type { Observable } from 'rxjs';\nimport { combineLatest as observableCombineLatest, from as observableFrom, Subject } from 'rxjs';\nimport { distinctUntilChanged, map, shareReplay, switchMap, takeUntil, withLatestFrom } from 'rxjs/operators';\n\nimport type { Application, IAccount, IRegion, IWizardPageComponent } from '@spinnaker/core';\nimport {\n AccountService,\n CheckboxInput,\n FormikFormField,\n FormValidator,\n HelpField,\n ReactSelectInput,\n TextInput,\n} from '@spinnaker/core';\nimport { s3BucketNameValidator } from '../../aws.validators';\nimport type { IAmazonFunction } from '../../domain';\nimport type { IAmazonFunctionUpsertCommand } from '../../index';\n\nimport { availableRuntimes } from '../../pipeline/stages/deployLambda/components/function.constants';\n\nexport interface IFunctionProps {\n app: Application;\n formik: FormikProps<IAmazonFunctionUpsertCommand>;\n isNew?: boolean;\n functionDef: IAmazonFunction;\n}\n\nexport interface IFunctionState {\n existingFunctionNames: string[];\n accounts: IAccount[];\n regions: IRegion[];\n}\n\nexport class FunctionBasicInformation\n extends React.Component<IFunctionProps, IFunctionState>\n implements IWizardPageComponent<IAmazonFunctionUpsertCommand> {\n public state: IFunctionState = {\n accounts: [],\n existingFunctionNames: [],\n regions: [],\n };\n\n private props$ = new Subject<IFunctionProps>();\n private destroy$ = new Subject<void>();\n\n public validate(values: IAmazonFunctionUpsertCommand): FormikErrors<IAmazonFunctionUpsertCommand> {\n const validator = new FormValidator(values);\n validator.field('s3bucket', 'S3 Bucket Name').optional().withValidators(s3BucketNameValidator);\n const errors = validator.validateForm();\n\n if (\n this.props.isNew &&\n this.state.existingFunctionNames.includes(this.props.app.name.concat('-').concat(values.functionName))\n ) {\n errors.functionName = `There is already a function in ${values.credentials}:${values.region} with that name.`;\n }\n return errors;\n }\n\n public componentDidUpdate() {\n this.props$.next(this.props);\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n public componentDidMount(): void {\n const formValues$ = this.props$.pipe(map((props) => props.formik.values));\n\n const form = {\n account$: formValues$.pipe(\n map((x) => x.credentials),\n distinctUntilChanged(),\n ),\n region$: formValues$.pipe(\n map((x) => x.region),\n distinctUntilChanged(),\n ),\n functionName$: formValues$.pipe(\n map((x) => x.functionName),\n distinctUntilChanged(),\n ),\n runtime$: formValues$.pipe(\n map((x) => x.runtime),\n distinctUntilChanged(),\n ),\n s3bucket$: formValues$.pipe(\n map((x) => x.s3bucket),\n distinctUntilChanged(),\n ),\n s3key$: formValues$.pipe(\n map((x) => x.s3key),\n distinctUntilChanged(),\n ),\n handler$: formValues$.pipe(\n map((x) => x.handler),\n distinctUntilChanged(),\n ),\n };\n\n const allAccounts$ = observableFrom(AccountService.listAccounts('aws')).pipe(shareReplay(1));\n // combineLatest with allAccounts to wait for accounts to load and be cached\n const accountRegions$ = observableCombineLatest([form.account$, allAccounts$]).pipe(\n switchMap(([currentAccount, _allAccounts]) => AccountService.getRegionsForAccount(currentAccount)),\n shareReplay(1),\n );\n\n const allFunctions$ = this.props.app.getDataSource('functions').data$ as Observable<IAmazonFunction[]>;\n const regionfunctions$ = observableCombineLatest([allFunctions$, form.account$, form.region$]).pipe(\n map(([allFunctions, currentAccount, currentRegion]) => {\n return allFunctions\n .filter((fn) => fn.account === currentAccount && fn.region === currentRegion)\n .map((fn) => fn.functionName);\n }),\n shareReplay(1),\n );\n\n accountRegions$\n .pipe(withLatestFrom(form.region$), takeUntil(this.destroy$))\n .subscribe(([accountRegions, selectedRegion]) => {\n // If the selected region doesn't exist in the new list of regions (for a new acct), select the first region.\n if (!accountRegions.some((x) => x.name === selectedRegion)) {\n this.props.formik.setFieldValue('region', accountRegions[0] && accountRegions[0].name);\n }\n });\n\n observableCombineLatest([allAccounts$, accountRegions$, regionfunctions$])\n .pipe(takeUntil(this.destroy$))\n .subscribe(([accounts, regions, existingFunctionNames]) => {\n return this.setState({ accounts, regions, existingFunctionNames });\n });\n }\n\n public render() {\n const { isNew } = this.props;\n const { errors, values } = this.props.formik;\n const { accounts, regions } = this.state;\n const className = classNames({\n well: true,\n 'alert-danger': !!errors.functionName,\n 'alert-info': !errors.functionName,\n });\n return (\n <div className=\"container-fluid form-horizontal \">\n {isNew && (\n <div className={className}>\n <strong>Your function will be named: </strong>\n <HelpField id=\"aws.function.name\" />\n <span>\n {this.props.app.name}-{values.functionName}\n </span>\n <FormikFormField name=\"functionName\" input={() => null} />\n </div>\n )}\n <FormikFormField\n name=\"credentials\"\n label=\"Account\"\n input={(props) => (\n <ReactSelectInput {...props} stringOptions={accounts.map((acc: IAccount) => acc.name)} clearable={true} />\n )}\n />\n <FormikFormField\n name=\"region\"\n label=\"Region\"\n input={(props) => (\n <ReactSelectInput {...props} stringOptions={regions.map((reg: IRegion) => reg.name)} clearable={true} />\n )}\n />\n <FormikFormField\n name=\"functionName\"\n label=\"Function Name\"\n help={<HelpField id=\"aws.function.name\" />}\n input={(props) => <TextInput {...props} />}\n />\n <FormikFormField\n name=\"runtime\"\n label=\"Runtime\"\n help={<HelpField id=\"aws.function.runtime\" />}\n input={(props) => <ReactSelectInput {...props} stringOptions={availableRuntimes} clearable={true} />}\n />\n <FormikFormField\n name=\"s3bucket\"\n label=\"S3 Bucket\"\n help={<HelpField id=\"aws.function.s3bucket\" />}\n input={(props) => <TextInput {...props} placeholder=\"S3 bucket name\" />}\n />\n <FormikFormField\n name=\"s3key\"\n label=\"S3 Key\"\n help={<HelpField id=\"aws.function.s3key\" />}\n input={(props) => <TextInput {...props} placeholder=\"object.zip\" />}\n />\n <FormikFormField\n name=\"handler\"\n label=\"Handler\"\n help={<HelpField id=\"aws.function.handler\" />}\n input={(props) => <TextInput {...props} placeholder=\"filename.method\" />}\n />\n <FormikFormField name=\"publish\" label=\"Publish\" input={(props) => <CheckboxInput {...props} />} />\n </div>\n );\n }\n}\n","import type { FormikErrors, FormikProps } from 'formik';\nimport React from 'react';\n\nimport type { IWizardPageComponent } from '@spinnaker/core';\nimport { FormikFormField, FormValidator, HelpField, ReactSelectInput, TextInput } from '@spinnaker/core';\nimport { awsArnValidator } from '../../aws.validators';\nimport type { IAmazonFunction } from '../../domain';\nimport type { IAmazonFunctionUpsertCommand } from '../../index';\n\nexport interface IFunctionDebugAndErrorHandlingProps {\n formik: FormikProps<IAmazonFunctionUpsertCommand>;\n isNew?: boolean;\n functionDef: IAmazonFunction;\n}\n\nexport class FunctionDebugAndErrorHandling\n extends React.Component<IFunctionDebugAndErrorHandlingProps>\n implements IWizardPageComponent<IAmazonFunctionUpsertCommand> {\n constructor(props: IFunctionDebugAndErrorHandlingProps) {\n super(props);\n }\n\n public validate = (values: IAmazonFunctionUpsertCommand): FormikErrors<IAmazonFunctionUpsertCommand> => {\n const validator = new FormValidator(values);\n validator.field('deadLetterConfig.targetArn', 'Target ARN').optional().withValidators(awsArnValidator);\n return validator.validateForm();\n };\n\n public render() {\n return (\n <div className=\"container-fluid form-horizontal \">\n Dead Letter Config\n <FormikFormField\n name=\"deadLetterConfig.targetArn\"\n label=\"Target ARN\"\n help={<HelpField id=\"aws.function.deadletterqueue\" />}\n input={(props) => <TextInput {...props} />}\n />\n X-Ray Tracing\n <FormikFormField\n name=\"tracingConfig.mode\"\n label=\"Mode\"\n help={<HelpField id=\"aws.function.tracingConfig.mode\" />}\n input={(props) => <ReactSelectInput {...props} stringOptions={['Active', 'PassThrough']} clearable={true} />}\n />\n </div>\n );\n }\n}\n","import type { FormikProps } from 'formik';\nimport React from 'react';\n\nimport type { IWizardPageComponent } from '@spinnaker/core';\nimport { FormikFormField, FormValidator, HelpField, MapEditorInput, TextInput } from '@spinnaker/core';\nimport { awsArnValidator } from '../../aws.validators';\nimport type { IAmazonFunction } from '../../domain';\nimport type { IAmazonFunctionUpsertCommand } from '../../index';\n\nexport interface IFunctionEnvironmentVariablesProps {\n formik: FormikProps<IAmazonFunctionUpsertCommand>;\n isNew?: boolean;\n functionDef: IAmazonFunction;\n}\n\nexport class FunctionEnvironmentVariables\n extends React.Component<IFunctionEnvironmentVariablesProps>\n implements IWizardPageComponent<IAmazonFunctionUpsertCommand> {\n public validate = (values: IAmazonFunctionUpsertCommand) => {\n const validator = new FormValidator(values);\n validator.field('kmskeyArn', 'KMS Key ARN').optional().withValidators(awsArnValidator);\n return validator.validateForm();\n };\n\n public render() {\n return (\n <div className=\"container-fluid form-horizontal \">\n <FormikFormField\n name=\"envVariables\"\n label=\"Env Variables\"\n input={(props) => <MapEditorInput {...props} allowEmptyValues={true} addButtonLabel=\"Add\" />}\n />\n <FormikFormField\n name=\"kmskeyArn\"\n label=\"Key ARN\"\n help={<HelpField id=\"aws.function.kmsKeyArn\" />}\n input={(props) => <TextInput {...props} />}\n />\n </div>\n );\n }\n}\n","import type { FormikProps } from 'formik';\nimport React from 'react';\n\nimport type { IWizardPageComponent } from '@spinnaker/core';\nimport { FormikFormField, HelpField, NumberInput, TextInput } from '@spinnaker/core';\nimport type { IAmazonFunction } from '../../domain';\nimport type { IAmazonFunctionUpsertCommand } from '../../index';\n\nexport interface IFunctionSettingsProps {\n formik: FormikProps<IAmazonFunctionUpsertCommand>;\n isNew?: boolean;\n functionDef: IAmazonFunction;\n}\n\nexport class FunctionSettings\n extends React.Component<IFunctionSettingsProps>\n implements IWizardPageComponent<IAmazonFunctionUpsertCommand> {\n public validate = () => {\n const errors = {} as any;\n return errors;\n };\n\n public render() {\n return (\n <div className=\"container-fluid form-horizontal \">\n <FormikFormField name=\"description\" label=\"Description\" input={(props) => <TextInput {...props} />} />\n <FormikFormField\n name=\"memorySize\"\n label=\"Memory (MB)\"\n help={<HelpField id=\"aws.functionBasicSettings.memorySize\" />}\n input={(props) => <NumberInput {...props} min={128} max={3008} />}\n />\n <FormikFormField\n name=\"timeout\"\n label=\"Timeout (seconds)\"\n help={<HelpField id=\"aws.functionBasicSettings.timeout\" />}\n input={(props) => <NumberInput {...props} min={1} max={900} />}\n />\n <FormikFormField name=\"targetGroups\" label=\"Target Group Name\" input={(props) => <TextInput {...props} />} />\n </div>\n );\n }\n}\n","import type { FormikProps } from 'formik';\nimport React from 'react';\n\nimport type { IWizardPageComponent } from '@spinnaker/core';\nimport { FormikFormField, FormValidator, MapEditorInput } from '@spinnaker/core';\nimport { awsTagsValidator } from '../../aws.validators';\nimport type { IAmazonFunction } from '../../domain';\nimport type { IAmazonFunctionUpsertCommand } from '../../index';\n\nexport interface IFunctionTagsProps {\n formik: FormikProps<IAmazonFunctionUpsertCommand>;\n isNew?: boolean;\n functionDef: IAmazonFunction;\n}\n\nexport class FunctionTags\n extends React.Component<IFunctionTagsProps>\n implements IWizardPageComponent<IAmazonFunctionUpsertCommand> {\n public validate = (values: IAmazonFunctionUpsertCommand) => {\n const validator = new FormValidator(values);\n validator.field('tags', 'Tag').required().withValidators(awsTagsValidator);\n return validator.validateForm();\n };\n\n public render() {\n return (\n <div className=\"container-fluid form-horizontal \">\n <FormikFormField\n name=\"tags\"\n input={(props) => <MapEditorInput {...props} allowEmptyValues={false} addButtonLabel=\"Add\" />}\n />\n </div>\n );\n }\n}\n","import type { IVpc } from '@spinnaker/core';\nimport { NetworkReader } from '@spinnaker/core';\n\nexport class VpcReader {\n private static cache: PromiseLike<IVpc[]>;\n\n public static listVpcs(): PromiseLike<IVpc[]> {\n if (this.cache) {\n return this.cache;\n }\n this.cache = NetworkReader.listNetworksByProvider('aws').then((vpcs: IVpc[]) => {\n return vpcs.map((vpc) => {\n vpc.label = vpc.name;\n vpc.deprecated = !!vpc.deprecated;\n if (vpc.deprecated) {\n vpc.label += ' (deprecated)';\n }\n return vpc;\n });\n });\n return this.cache;\n }\n\n public static resetCache() {\n this.cache = null;\n }\n\n public static getVpcName(id: string) {\n return this.listVpcs().then((vpcs) => {\n const match = vpcs.find((test) => {\n return test.id === id;\n });\n return match ? match.name : null;\n });\n }\n}\n","import type { FormikErrors, FormikProps } from 'formik';\nimport { forOwn, uniqBy } from 'lodash';\nimport React from 'react';\nimport type { Option } from 'react-select';\nimport { combineLatest as observableCombineLatest, from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type {\n Application,\n IAccount,\n IRegion,\n ISecurityGroupsByAccountSourceData,\n ISubnet,\n IVpc,\n IWizardPageComponent,\n} from '@spinnaker/core';\nimport {\n FormikFormField,\n HelpField,\n ReactInjector,\n ReactSelectInput,\n SubnetReader,\n TetheredSelect,\n} from '@spinnaker/core';\nimport type { IAmazonFunctionUpsertCommand } from '../../index';\nimport { VpcReader } from '../../vpc';\n\nexport interface ISubnetOption {\n subnetId: string;\n vpcId: string;\n}\n\nexport interface INetworkProps {\n formik: FormikProps<IAmazonFunctionUpsertCommand>;\n isNew?: boolean;\n app: Application;\n}\n\nexport interface INetworkState {\n vpcOptions: Array<{}>;\n accounts: IAccount[];\n regions: IRegion[];\n subnets: ISubnetOption[];\n availableSubnets: ISubnetOption[];\n securityGroups: ISecurityGroupsByAccountSourceData;\n}\n\nexport class Network\n extends React.Component<INetworkProps, INetworkState>\n implements IWizardPageComponent<IAmazonFunctionUpsertCommand> {\n constructor(props: INetworkProps) {\n super(props);\n this.getAllVpcs();\n }\n\n public state: INetworkState = {\n vpcOptions: [],\n accounts: null,\n regions: [],\n subnets: [],\n availableSubnets: [],\n securityGroups: null,\n };\n private props$ = new Subject<INetworkProps>();\n private destroy$ = new Subject<void>();\n\n private getAllVpcs(): void {\n observableFrom(VpcReader.listVpcs())\n .pipe(takeUntil(this.destroy$))\n .subscribe((Vpcs) => {\n this.setState({ vpcOptions: Vpcs });\n });\n }\n\n public validate(): FormikErrors<IAmazonFunctionUpsertCommand> {\n return {};\n }\n\n private getAvailableSubnets(): PromiseLike<ISubnet[]> {\n return SubnetReader.listSubnetsByProvider('aws');\n }\n\n private getAvailableSecurityGroups(): PromiseLike<ISecurityGroupsByAccountSourceData> {\n return ReactInjector.securityGroupReader.getAllSecurityGroups();\n }\n private makeSubnetOptions(availableSubnets: ISubnet[]): ISubnetOption[] {\n const subOptions: ISubnetOption[] = availableSubnets.map((s) => ({ subnetId: s.id, vpcId: s.vpcId }));\n // we have to filter out any duplicate options\n const uniqueSubOptions = uniqBy(subOptions, 'subnetId');\n return uniqueSubOptions;\n }\n\n public componentDidUpdate() {\n this.props$.next(this.props);\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n public componentDidMount(): void {\n const allSubnets = Promise.resolve(this.getAvailableSubnets())\n .then((subnets: ISubnet[]) => {\n subnets.forEach((subnet: ISubnet) => {\n subnet.label = subnet.id;\n subnet.deprecated = !!subnet.deprecated;\n if (subnet.deprecated) {\n subnet.label += ' (deprecated)';\n }\n });\n return subnets.filter((s) => s.label);\n })\n .then((subnets: ISubnet[]) => {\n return this.makeSubnetOptions(subnets);\n });\n\n const secGroups$ = Promise.resolve(this.getAvailableSecurityGroups());\n observableCombineLatest([allSubnets, secGroups$])\n .pipe(takeUntil(this.destroy$))\n .subscribe(([availableSubnets, securityGroups]) => {\n return this.setState({ availableSubnets, securityGroups });\n });\n }\n\n private handleSubnetUpdate = (options: Array<Option<string>>) => {\n const subnetsSelected = options.map((o) => o.value);\n this.props.formik.setFieldValue('subnetIds', subnetsSelected);\n };\n\n private handleSecurityGroupsUpdate = (options: Array<Option<string>>) => {\n const sgSelected = options.map((o) => o.value);\n this.props.formik.setFieldValue('securityGroupIds', sgSelected);\n };\n\n private setVpc = (vpcId: string): void => {\n this.props.formik.setFieldValue('vpcId', vpcId);\n this.props.formik.setFieldValue('subnetIds', []);\n const { availableSubnets } = this.state;\n const subs = availableSubnets.filter(function (s: ISubnetOption) {\n return s.vpcId.includes(vpcId);\n });\n this.setState({ subnets: subs });\n };\n\n private toSubnetOption = (value: ISubnetOption): Option<string> => {\n return { value: value.subnetId, label: value.subnetId };\n };\n\n private getSecurityGroupsByVpc = (sgs: ISecurityGroupsByAccountSourceData): Array<Option<string>> => {\n const { values } = this.props.formik;\n const sgOptions: Array<Option<string>> = [];\n /** Get security groups that belong to current selected account */\n forOwn(sgs, function (sgByAccount, acc) {\n if (acc === values.credentials) {\n /** Get security groups that fall under the provider 'aws' */\n forOwn(sgByAccount, function (sgByRegion, provider) {\n if (provider === 'aws') {\n /** Get security groups that are under the current selected region */\n forOwn(sgByRegion, function (groups, region) {\n if (region === values.region) {\n /** Get security groups that fall under the current selected VPC */\n groups.forEach(function (group) {\n if (group.vpcId === values.vpcId) {\n sgOptions.push({ value: group.id, label: group.name });\n }\n });\n }\n });\n }\n });\n }\n });\n return sgOptions;\n };\n\n private getSubnetOptions = (): Array<Option<string>> => {\n const { subnets, availableSubnets } = this.state;\n const { values } = this.props.formik;\n if (!this.props.isNew && values.vpcId) {\n return availableSubnets\n .filter(function (s: ISubnetOption) {\n return s.vpcId.includes(values.vpcId);\n })\n .map(this.toSubnetOption);\n } else {\n return subnets.map(this.toSubnetOption);\n }\n };\n\n public render() {\n const { vpcOptions, securityGroups } = this.state;\n const { values } = this.props.formik;\n const subnetOptions = this.getSubnetOptions();\n const sgOptions = securityGroups ? this.getSecurityGroupsByVpc(securityGroups) : [];\n return (\n <div className=\"form-group\">\n <div className=\"col-md-11\">\n <div className=\"sp-margin-m-bottom\">\n {values.credentials && (\n <FormikFormField\n name=\"vpcId\"\n label=\"VPC Id\"\n help={<HelpField id=\"aws.function.vpc.id\" />}\n input={(props) => (\n <ReactSelectInput\n {...props}\n stringOptions={vpcOptions\n .filter((v: IVpc) => v.account === values.credentials)\n .map((v: IVpc) => v.id)}\n clearable={true}\n />\n )}\n onChange={this.setVpc}\n required={false}\n />\n )}\n </div>\n <div className=\"form-group\">\n <div className=\"col-md-4 sm-label-right\">\n <b>Subnets </b>\n <HelpField id=\"aws.function.subnet\" />\n </div>\n <div className=\"col-md-7\">\n {subnetOptions.length === 0 && (\n <div className=\"form-control-static\">No subnets found in the selected account/region/VPC</div>\n )}\n {values.vpcId ? (\n <TetheredSelect\n multi={true}\n options={subnetOptions}\n value={values.subnetIds}\n onChange={this.handleSubnetUpdate}\n />\n ) : null}\n </div>\n </div>\n <div className=\"form-group\">\n <div className=\"col-md-4 sm-label-right\">\n <b>Security Groups </b>\n <HelpField id=\"aws.function.subnet\" />\n </div>\n <div className=\"col-md-7\">\n {sgOptions.length === 0 && (\n <div className=\"form-control-static\">No security groups found in the selected account/region/VPC</div>\n )}\n {values.credentials && values.vpcId ? (\n <TetheredSelect\n multi={true}\n options={sgOptions}\n value={values.securityGroupIds}\n onChange={this.handleSecurityGroupsUpdate}\n />\n ) : null}\n </div>\n </div>\n </div>\n </div>\n );\n }\n}\n","import { cloneDeep } from 'lodash';\nimport React from 'react';\n\nimport type { IFunctionModalProps } from '@spinnaker/core';\nimport { FunctionWriter, noop, ReactInjector, ReactModal, TaskMonitor, WizardModal, WizardPage } from '@spinnaker/core';\n\nimport { ExecutionRole } from './configure/ExecutionRole';\nimport { FunctionBasicInformation } from './configure/FunctionBasicInformation';\nimport { FunctionDebugAndErrorHandling } from './configure/FunctionDebugAndErrorHandling';\nimport { FunctionEnvironmentVariables } from './configure/FunctionEnvironmentVariables';\nimport { FunctionSettings } from './configure/FunctionSettings';\nimport { FunctionTags } from './configure/FunctionTags';\nimport { Network } from './configure/Network';\nimport type { IAmazonFunction, IAmazonFunctionUpsertCommand } from '../domain';\nimport { AwsFunctionTransformer } from './function.transformer';\n\nexport interface IAmazonCreateFunctionProps extends IFunctionModalProps {\n functionDef: IAmazonFunction;\n}\nexport interface IAmazonCreateFunctionState {\n isNew: boolean;\n functionCommand: IAmazonFunctionUpsertCommand;\n taskMonitor: TaskMonitor;\n}\n\nexport class CreateLambdaFunction extends React.Component<IAmazonCreateFunctionProps, IAmazonCreateFunctionState> {\n public static defaultProps: Partial<IAmazonCreateFunctionProps> = {\n closeModal: noop,\n dismissModal: noop,\n };\n\n constructor(props: IAmazonCreateFunctionProps) {\n super(props);\n const functionTransformer = new AwsFunctionTransformer();\n const funcCommand = props.functionDef\n ? functionTransformer.convertFunctionForEditing(props.functionDef)\n : functionTransformer.constructNewAwsFunctionTemplate(props.app);\n this.state = {\n isNew: !props.functionDef,\n functionCommand: funcCommand,\n taskMonitor: null,\n };\n }\n\n private _isUnmounted = false;\n private refreshUnsubscribe: () => void;\n\n public static show(props: IAmazonCreateFunctionProps): Promise<IAmazonFunctionUpsertCommand> {\n const modalProps = { dialogClassName: 'wizard-modal modal-lg' };\n return ReactModal.show(CreateLambdaFunction, props, modalProps);\n }\n\n public componentWillUnmount(): void {\n this._isUnmounted = true;\n if (this.refreshUnsubscribe) {\n this.refreshUnsubscribe();\n }\n }\n\n protected onApplicationRefresh(values: IAmazonFunctionUpsertCommand): void {\n if (this._isUnmounted) {\n return;\n }\n\n this.refreshUnsubscribe = undefined;\n this.props.dismissModal();\n this.setState({ taskMonitor: undefined });\n const newStateParams = {\n name: values.name,\n accountId: values.credentials,\n region: values.region,\n vpcId: values.vpcId,\n provider: 'aws',\n };\n\n if (!ReactInjector.$state.includes('**.functionDetails')) {\n ReactInjector.$state.go('.functionDetails', newStateParams);\n } else {\n ReactInjector.$state.go('^.functionDetails', newStateParams);\n }\n }\n\n private onTaskComplete(values: IAmazonFunctionUpsertCommand): void {\n this.props.app.functions.refresh();\n this.refreshUnsubscribe = this.props.app.functions.onNextRefresh(null, () => this.onApplicationRefresh(values));\n }\n\n private checkForS3Update(functionCommandFormatted: IAmazonFunctionUpsertCommand, descriptor: string): void {\n const { isNew } = this.state;\n if (!isNew && (functionCommandFormatted.s3bucket || functionCommandFormatted.s3key)) {\n functionCommandFormatted.operation = 'updateLambdaFunctionCode';\n const { app } = this.props;\n FunctionWriter.upsertFunction(functionCommandFormatted, app, descriptor);\n }\n this.onTaskComplete(functionCommandFormatted);\n }\n\n private submit = (values: IAmazonFunctionUpsertCommand): void => {\n const { app } = this.props;\n const { isNew } = this.state;\n const functionCommandFormatted = cloneDeep(values);\n\n const descriptor = isNew ? 'Create' : 'Update';\n\n const taskMonitor = new TaskMonitor({\n application: app,\n title: `${isNew ? 'Creating' : 'Updating'} your function`,\n modalInstance: TaskMonitor.modalInstanceEmulation(() => this.props.dismissModal()),\n onTaskComplete: () => {\n this.checkForS3Update(functionCommandFormatted, descriptor);\n },\n });\n\n taskMonitor.submit(() => {\n functionCommandFormatted.type = 'lambdaFunction';\n if (!isNew) {\n functionCommandFormatted.operation = 'updateLambdaFunctionConfiguration';\n } else {\n functionCommandFormatted.operation = 'createLambdaFunction';\n }\n return FunctionWriter.upsertFunction(functionCommandFormatted, app, descriptor);\n });\n this.setState({ taskMonitor });\n };\n\n public render() {\n const { app, dismissModal, forPipelineConfig, functionDef } = this.props;\n const { isNew, functionCommand, taskMonitor } = this.state;\n\n let heading = forPipelineConfig ? 'Configure Existing Function' : 'Create New Function';\n if (!isNew) {\n heading = `Edit ${functionCommand.functionName}: ${functionCommand.region}: ${functionCommand.credentials}`;\n }\n\n return (\n <WizardModal<IAmazonFunctionUpsertCommand>\n heading={heading}\n initialValues={functionCommand}\n taskMonitor={taskMonitor}\n dismissModal={dismissModal}\n closeModal={this.submit}\n submitButtonLabel={forPipelineConfig ? (isNew ? 'Add' : 'Done') : isNew ? 'Create' : 'Update'}\n render={({ formik, nextIdx, wizard }) => {\n return (\n <>\n <WizardPage\n label=\"Basic information\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => (\n <FunctionBasicInformation\n ref={innerRef}\n app={app}\n formik={formik}\n isNew={isNew}\n functionDef={functionDef}\n />\n )}\n />\n <WizardPage\n label=\"Execution Role\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => {\n return <ExecutionRole ref={innerRef} formik={formik} isNew={isNew} functionDef={functionDef} />;\n }}\n />\n <WizardPage\n label=\"Environment\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => {\n return (\n <FunctionEnvironmentVariables\n ref={innerRef}\n formik={formik}\n isNew={isNew}\n functionDef={functionDef}\n />\n );\n }}\n />\n <WizardPage\n label=\"Tags\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => {\n return <FunctionTags ref={innerRef} formik={formik} isNew={isNew} functionDef={functionDef} />;\n }}\n />\n <WizardPage\n label=\"Settings\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => {\n return <FunctionSettings ref={innerRef} formik={formik} isNew={isNew} functionDef={functionDef} />;\n }}\n />\n <WizardPage\n label=\"Network\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => {\n return <Network ref={innerRef} app={app} formik={formik} isNew={isNew} />;\n }}\n />\n <WizardPage\n label=\"Debugging and Error Handling\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => {\n return (\n <FunctionDebugAndErrorHandling\n ref={innerRef}\n formik={formik}\n isNew={isNew}\n functionDef={functionDef}\n />\n );\n }}\n />\n </>\n );\n }}\n />\n );\n }\n}\n","import React from 'react';\nimport { Dropdown } from 'react-bootstrap';\n\nimport type { Application } from '@spinnaker/core';\nimport {\n AddEntityTagLinks,\n ApplicationReader,\n ConfirmationModalService,\n FunctionWriter,\n SETTINGS,\n} from '@spinnaker/core';\n\nimport type { IFunctionFromStateParams } from './AmazonFunctionDetails';\nimport { CreateLambdaFunction } from '../CreateLambdaFunction';\nimport { AWSProviderSettings } from '../../aws.settings';\nimport type { IAmazonFunction, IAmazonFunctionDeleteCommand } from '../../domain';\n\nexport interface IFunctionActionsProps {\n app: Application;\n functionDef: IAmazonFunction;\n functionFromParams: IFunctionFromStateParams;\n}\n\nexport interface IFunctionActionsState {\n application: Application;\n}\n\nexport class FunctionActions extends React.Component<IFunctionActionsProps, IFunctionActionsState> {\n constructor(props: IFunctionActionsProps) {\n super(props);\n this.state = { application: props.app };\n }\n\n public componentDidMount(): void {\n const { app, functionDef } = this.props;\n let application: Application;\n\n const functionAppName = functionDef.functionName.split('-')[0];\n if (functionAppName === app.name) {\n // Name matches the currently active application\n application = app;\n } else {\n // Load balancer is a part of a different application\n ApplicationReader.getApplication(functionAppName)\n .then((functionApp) => {\n this.setState({ application: functionApp });\n })\n .catch(() => {\n // If the application can't be found, just use the old one\n this.setState({ application: this.props.app });\n });\n }\n\n this.setState({\n application,\n });\n }\n\n public editFunction = (): void => {\n const { functionDef } = this.props;\n const { application } = this.state;\n const FunctionModal = CreateLambdaFunction;\n FunctionModal.show({ app: application, functionDef });\n };\n\n public deleteFunction = (): void => {\n const { app, functionDef, functionFromParams } = this.props;\n const taskMonitor = {\n application: app,\n title: 'Deleting ' + functionFromParams.functionName,\n };\n const command: IAmazonFunctionDeleteCommand = {\n cloudProvider: functionDef.cloudProvider,\n functionName: functionDef.functionName,\n region: functionDef.region,\n credentials: functionDef.credentials,\n };\n\n const submitMethod = () => FunctionWriter.deleteFunction(command, app);\n\n ConfirmationModalService.confirm({\n header: `Really delete ${functionFromParams.functionName} in ${functionFromParams.region}: ${functionFromParams.account}?`,\n buttonText: `Delete ${functionFromParams.functionName}`,\n account: functionFromParams.account,\n taskMonitorConfig: taskMonitor,\n submitMethod,\n });\n };\n\n private entityTagUpdate = (): void => {\n this.props.app.functions.refresh();\n };\n\n public render() {\n const { app, functionDef } = this.props;\n const { application } = this.state;\n\n return (\n <div style={{ display: 'inline-block' }}>\n {AWSProviderSettings.adHocInfraWritesEnabled && (\n <Dropdown className=\"dropdown\" id=\"function-actions-dropdown\">\n <Dropdown.Toggle className=\"btn btn-sm btn-primary dropdown-toggle\">\n <span>Function Actions</span>\n </Dropdown.Toggle>\n <Dropdown.Menu className=\"dropdown-menu\">\n <li className={!application ? 'disabled' : ''}>\n <a className=\"clickable\" onClick={this.editFunction}>\n Edit Function\n </a>\n </li>\n {functionDef.functionName && (\n <li>\n <a className=\"clickable\" onClick={this.deleteFunction}>\n Delete Function\n </a>\n </li>\n )}\n {SETTINGS && SETTINGS.feature.entityTags && (\n <AddEntityTagLinks\n component={functionDef}\n application={app}\n entityType=\"function\"\n onUpdate={this.entityTagUpdate}\n />\n )}\n </Dropdown.Menu>\n </Dropdown>\n )}\n </div>\n );\n }\n}\n","import IInjectorService = angular.auto.IInjectorService;\n\nimport type { FunctionReader } from '@spinnaker/core';\nimport { ReactInject } from '@spinnaker/core';\nimport type { EvaluateCloudFormationChangeSetExecutionService } from '../pipeline/stages/deployCloudFormation/evaluateCloudFormationChangeSetExecution.service';\nimport type { AwsServerGroupCommandBuilder } from '../serverGroup/configure/serverGroupCommandBuilder.service';\n\nimport type { AwsServerGroupConfigurationService } from '../serverGroup/configure/serverGroupConfiguration.service';\nimport type { AwsServerGroupTransformer } from '../serverGroup/serverGroup.transformer';\n\n// prettier-ignore\nexport class AwsReactInject extends ReactInject {\n public get awsInstanceTypeService() { return this.$injector.get('awsInstanceTypeService') as any; }\n public get awsServerGroupCommandBuilder() { return this.$injector.get('awsServerGroupCommandBuilder') as AwsServerGroupCommandBuilder; }\n public get awsServerGroupConfigurationService() { return this.$injector.get('awsServerGroupConfigurationService') as AwsServerGroupConfigurationService; }\n public get awsServerGroupTransformer() { return this.$injector.get('awsServerGroupTransformer') as AwsServerGroupTransformer; }\n\n public get functionReader() { return this.$injector.get('functionReader') as FunctionReader; }\n public get evaluateCloudFormationChangeSetExecutionService() { return this.$injector.get('evaluateCloudFormationChangeSetExecutionService') as EvaluateCloudFormationChangeSetExecutionService; }\n public initialize($injector: IInjectorService) {\n this.$injector = $injector;\n }\n}\n\nexport const AwsReactInjector: AwsReactInject = new AwsReactInject();\n","import { isEmpty } from 'lodash';\nimport React from 'react';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { Application, IFunction, IOverridableProps } from '@spinnaker/core';\nimport { AccountTag, CollapsibleSection, Details, Overrides } from '@spinnaker/core';\n\nimport { FunctionActions } from './FunctionActions';\nimport type { IAmazonFunction, IAmazonFunctionSourceData } from '../../domain';\nimport { AwsReactInjector } from '../../reactShims';\n\nexport interface IFunctionFromStateParams {\n account: string;\n region: string;\n functionName: string;\n}\n\nexport interface IAmazonFunctionDetailsProps extends IOverridableProps {\n app: Application;\n functionObj: IFunction;\n}\n\n@Overrides('function.details', 'aws')\nexport class AmazonFunctionDetails extends React.Component<IAmazonFunctionDetailsProps, any> {\n private destroy$ = new Subject();\n constructor(props: IAmazonFunctionDetailsProps) {\n super(props);\n this.state = {\n loading: true,\n };\n }\n\n public extractFunction(): void {\n const { app, functionObj: functionFromProps } = this.props;\n const functionDef: IFunction = app.functions.data.find((test: IFunction) => {\n return (\n test.functionName === functionFromProps.functionName &&\n test.region === functionFromProps.region &&\n test.account === functionFromProps.account\n );\n });\n\n if (functionDef) {\n observableFrom(\n AwsReactInjector.functionReader.getFunctionDetails(\n 'aws',\n functionFromProps.account,\n functionFromProps.region,\n functionFromProps.functionName,\n ),\n )\n .pipe(takeUntil(this.destroy$))\n .subscribe((details: IAmazonFunctionSourceData[]) => {\n if (details.length) {\n this.setState({\n functionDef: details[0] as IAmazonFunction,\n loading: false,\n });\n }\n });\n } else {\n this.setState({\n functionDef: {},\n loading: false,\n });\n }\n }\n\n public componentDidMount(): void {\n const { app } = this.props;\n const dataSource = app.functions;\n observableFrom(dataSource.ready())\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n const dataSourceUnsubscribe = dataSource.onRefresh(null, () => this.extractFunction());\n this.setState({ dataSourceUnsubscribe });\n this.extractFunction();\n });\n }\n\n public componentWillUnmount() {\n this.state.dataSourceUnsubscribe && this.state.dataSourceUnsubscribe();\n this.destroy$.next();\n }\n\n public render() {\n const { app } = this.props;\n const { loading, functionDef } = this.state;\n if (loading) {\n // Don't bother computing any children if we're loading\n return <Details loading={loading} />;\n }\n\n const functionDetails = (\n <dl className=\"horizontal-when-filters-collapsed dl-horizontal dl-narrow\">\n <dt>Last Modified </dt>\n <dd>{functionDef.lastModified}</dd>\n <dt>In</dt>\n <dd>\n <AccountTag account={functionDef.account} /> {functionDef.region}\n </dd>\n <dt>VPC</dt>\n <dd>{functionDef.vpcConfig ? functionDef.vpcConfig.vpcId : 'Default'}</dd>\n <dt>Function ARN</dt>\n <dd>{functionDef.functionArn}</dd>\n <dt>Revision ID</dt>\n <dd>{functionDef.revisionId}</dd>\n <dt>Version</dt>\n <dd>{functionDef.version}</dd>\n </dl>\n );\n\n const eventSourceDetails = (\n <dl className=\"horizontal-when-filters-collapsed dl-horizontal dl-narrow\">\n {functionDef.eventSourceMappings && functionDef.eventSourceMappings.length !== 0\n ? functionDef.eventSourceMappings.map((value: any) => (\n <>\n <h5>\n <strong>Event Source</strong>\n </h5>\n <dl>\n <dt>ARN</dt>\n <dd>{value.eventSourceArn}</dd>\n <dt>State</dt>\n <dd>{value.state}</dd>\n </dl>\n </>\n ))\n : 'None'}\n </dl>\n );\n\n const aliasConfigurationDetails = (\n <dl className=\"horizontal-when-filters-collapsed dl-horizontal dl-narrow\">\n {functionDef.aliasConfigurations && functionDef.aliasConfigurations.length !== 0\n ? functionDef.aliasConfigurations.map((value: any) => (\n <>\n <h5>\n <strong>Alias Details</strong>\n </h5>\n <dl>\n <dt>Name</dt>\n <dd>{value.name}</dd>\n <dt>ARN</dt>\n <dd>{value.aliasArn}</dd>\n </dl>\n </>\n ))\n : 'None'}\n </dl>\n );\n\n const functionDetailsSection = (\n <CollapsibleSection heading=\"Function Details\">{functionDetails}</CollapsibleSection>\n );\n\n const eventSourceDetailsSection = (\n <CollapsibleSection heading=\"Event Source Details\">{eventSourceDetails}</CollapsibleSection>\n );\n\n const aliasConfigurationDetailsSection = (\n <CollapsibleSection heading=\"Alias Configuration Details\">{aliasConfigurationDetails}</CollapsibleSection>\n );\n\n return (\n <Details loading={this.state.loading}>\n {isEmpty(this.state.functionDef) ? (\n 'Function not found.'\n ) : (\n <Details.Header\n icon={<i className=\"fa fa-xs fa-fw fa-asterisk\" />}\n name={this.state.functionDef.functionName}\n >\n <div className=\"actions\">\n <FunctionActions\n app={app}\n functionDef={functionDef}\n functionFromParams={{\n account: this.state.functionDef.account,\n region: this.state.functionDef.region,\n functionName: this.state.functionDef.functionName,\n }}\n />\n </div>\n </Details.Header>\n )}\n {!isEmpty(this.state.functionDef) ? functionDetailsSection : ''}\n {!isEmpty(this.state.functionDef) && !isEmpty(this.state.functionDef.eventSourceMappings)\n ? eventSourceDetailsSection\n : ''}\n {!isEmpty(this.state.functionDef) && !isEmpty(this.state.functionDef.aliasConfigurations)\n ? aliasConfigurationDetailsSection\n : ''}\n </Details>\n );\n }\n}\n","import { module } from 'angular';\n\nexport const AWS_FUNCTION_MODULE = 'spinnaker.amazon.function';\n\nmodule(AWS_FUNCTION_MODULE, []);\n","import { HelpContentsRegistry } from '@spinnaker/core';\n\nconst helpContents: { [key: string]: string } = {\n 'aws.associateElasticIp.elasticIp': `<p>(Optional) <b>Elastic IP</b> is an IP address that Spinnaker will associate with this cluster.</p>\n <p>If specified, this elastic IP must exist and not already be attached to an instance or cluster.</p>\n <p>If left blank, Spinnaker will make a selection from the list of available elastic IPs in the provided account and region.</p>`,\n 'aws.associateElasticIp.type': `<p><b>Type</b> of elastic IP to associate:'\n <ul>\n <li><b>standard</b> is usable in EC2 Classic</li>\n <li><b>vpc</b> is usable in VPC</li>\n </ul>`,\n 'aws.serverGroup.subnet': `The subnet selection determines the VPC in which your server group will run. Options vary by account and region; the most common ones are:\n <ul>\n <li><b>None (EC2 Classic)</b>: instances will not run in a VPC</li>\n <li><b>internal</b> instances will be restricted to internal clients (i.e. require VPN access)</li>\n <li><b>external</b> instances will be publicly accessible and running in VPC</li>\n </ul>`,\n 'aws.loadBalancer.subnet': `The subnet selection determines the VPC in which your load balancer will run.<br/>\n This also restricts the server groups which can be serviced by the load balancer.\n Options vary by account and region; the most common ones are:\n <ul>\n <li><b>None (EC2 Classic)</b>: the load balancer will not run in a VPC</li>\n <li><b>internal</b> access to the load balancer will be restricted to internal clients (i.e. require VPN access)</li>\n <li><b>external</b> the load balancer will be publicly accessible and running in VPC</li>\n </ul>`,\n 'aws.loadBalancer.detail': `<p>(Optional) <b>Detail</b> is a string of free-form alphanumeric characters; by convention, we recommend using \"frontend\".</p>\n <p>However, if your stack name needs to be longer (load balancer names are limited to 32 characters), consider changing it to \"elb\", or omit it altogether.</p>`,\n 'aws.loadBalancer.internal':\n 'Controls the load balancer scheme, <strong>not</strong> the subnet. By default, load balancers are created with a DNS name that resolves to public IP addresses. Specify internal to create a load balancer with a DNS name that resolves to private IP addresses.',\n 'aws.loadBalancer.stack':\n '(Optional) <b>Stack</b> is one of the core naming components of a cluster, used to create vertical stacks of dependent services for integration testing.',\n 'aws.loadBalancer.name':\n '<p>The load balancer name is formed by combining the application name, the <b>Stack</b> field, and the <b>Detail</b> field.</p>',\n 'aws.loadBalancer.targetGroups':\n 'Add a target group if you want to associate this with an Application Load Balancer (ALB) or Network Load Balancer (NLB)',\n 'aws.loadBalancer.loadBalancers':\n 'Add a load balancer directly if you created a Classic Load Balancer (a classic load balancer does not have target groups)',\n 'aws.loadBalancer.ruleCondition.host': `<p>You can specify a single host name (for example, <em>my.example.com</em>). A host name is case insensitive, can be up to 128 characters in length, and can contain any of the following characters. Note that you can include up to three wildcard characters.</p>\n <ul>\n <li>A-Z, a-z, 0-9</li>\n <li>- .</li>\n <li>* (matches 0 or more characters)</li>\n <li>? (matches exactly 1 character)</li>\n </ul>\n <p>Note that <strong>*.example.com</strong> will match <strong>test.example.com</strong> but won't match <strong>example.com</strong>.</p>`,\n 'aws.loadBalancer.ruleCondition.path': `<p>You can specify a single path pattern (for example, <em>/img/*</em>). A path pattern is case sensitive, can be up to 128 characters in length, and can contain any of the following characters. Note that you can include up to three wildcard characters.</p>\n <ul>\n <li>A-Z, a-z, 0-9</li>\n <li>_ - . $ / ~ \" ' @ : +</li>\n <li>& (using &amp;amp;)</li>\n <li>* (matches 0 or more characters)</li>\n <li>? (matches exactly 1 character)</li>\n </ul>\n <p>Note that the path pattern is used to route requests but does not alter them. For example, if a rule has a path pattern of <em>/img/*</em>, the rule would forward a request for <em>/img/picture.jpg</em> to the specified target group as a request for <em>/img/picture.jpg</em>.</p>`,\n 'aws.loadBalancer.oidcAuthentication': 'Authentication requires a configured OIDC client.',\n 'aws.serverGroup.stack':\n '(Optional) <b>Stack</b> is one of the core naming components of a cluster, used to create vertical stacks of dependent services for integration testing.',\n 'aws.serverGroup.detail':\n '(Optional) <b>Detail</b> is a string of free-form alphanumeric characters and hyphens to describe any other variables.',\n 'aws.serverGroup.imageName':\n '(Required) <b>Image</b> is the deployable Amazon Machine Image. Images are restricted to the account and region selected.',\n 'aws.serverGroup.storageType': `AWS offers various storage options like temporary block-level storage via instance store (SSD, HDD) and Amazon Elastic Block Store (EBS). This column lists the storage type supported for the instance type.`,\n 'aws.serverGroup.instancesDistribution': `Learn more in <a target=\"_blank\" href=\"https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-purchase-options.html\">AWS docs</a>.`,\n 'aws.serverGroup.spotMaxPrice':\n 'The maximum price per unit hour to pay for a Spot instance. By <b>default (empty)</b>, Amazon EC2 Auto Scaling uses the On-Demand price as the maximum Spot price.',\n 'aws.serverGroup.spotAllocationStrategy': `<p>Indicates how to allocate instances across Spot Instance pools.</p>\n <ul>\n <li><b>capacity-optimized (recommended)</b>: Instances launched using Spot pools that are optimally chosen based on the available Spot capacity.</li>\n <li><b>capacity-optimized-prioritized</b>: Instances launched using the priority on a best-effort basis to determine which launch template override to use first, but AWS optimizes for capacity first.</li>\n <li><b>lowest-price (default)</b>: Instances launched using Spot pools with the lowest price, and evenly allocated across the number of Spot pools specified</li>\n </ul>`,\n 'aws.serverGroup.spotInstancePoolCount': `Number of lowest priced Spot Instance pools to diversify across. Only applicable for strategy 'lowest-price'. <b>Default: 2.</b>`,\n 'aws.serverGroup.odAllocationStrategy': `The only strategy / <b>default is 'prioritized'</b>. The order specified in the list of selected instance types is used to determine which instance type to use first when fulfilling On-Demand capacity.`,\n 'aws.serverGroup.odBase': `Minimum amount of the Auto Scaling Group's capacity that must be fulfilled by On-Demand Instances. This base portion is provisioned first as the group scales. <b>Default: 0.</b>`,\n 'aws.serverGroup.odPercentAboveBase': `Percentages of On-Demand and Spot instances for additional capacity beyond OnDemandBaseCapacity.<b>Default: 100.</b>`,\n 'aws.serverGroup.instanceTypeWeight': `The number of capacity units gives the instance type a proportional weight to other instance types. When specified, weights count towards desired capacity.\nLearn more in <a target=\"_blank\" href=\"https://spinnaker.io/docs/setup/other_config/server-group-launch-settings/aws-ec2/launch-templates/#convert-a-server-group-with-launch-template-to-use-mixed-instances-policy-with-multiple-instance-types-and-capacity-weighting\">examples and docs</a>.`,\n 'aws.serverGroup.instanceTypes': `Specify up to 20 instance types.`,\n 'aws.serverGroup.instanceTypesSelect': `<p>Filter instance types on one or more criteria, comma separated:\n <ul>\n <li>Minimum vCPU e.g. 16vcpu</li>\n <li>Minimum memory e.g. 32gib</li>\n <li>Spot support</li>\n <li>EBS support</li>\n <li>GPU support</li>\n <li>Instance storage type e.g. ssd</li>\n <li>Generation with 'currentGen' / 'oldGen'</li>\n <li>Instance family / size / type e.g. c3 / large / c3.large</li>\n </ul>\n Examples:\n <ul>\n <li>16vcpu, 32gib, spot, oldGen</li>\n <li>medium, ebs</li>\n <li>ssd,ebs,gpu,currentgen</li>\n </ul>`,\n 'aws.serverGroup.multipleInstanceTypes': `Instance types a server group can launch, first (highest priority) to last (lowest priority).`,\n 'aws.serverGroup.unlimitedCpuCredits': `<p>CPU credits can be configured with 2 modes:</p><br/>\n <ul>\n <li><b>Unlimited (i.e. Unlimited On)</b>: Can sustain high CPU utilization for any period of time whenever required.<br/>\n If the average CPU usage over a rolling 24-hour period exceeds the baseline, charges for surplus credits will apply.</li>\n <li><b>Standard (i.e. Unlimited Off)</b>: <b>Default mode in Spinnaker.</b> Suited to workloads with an average CPU utilization that is consistently below the baseline CPU utilization of the instance.<br/>\n To burst above the baseline, the instance spends credits that it has accrued in its CPU credit balance.</li>\n </ul>`,\n 'aws.serverGroup.capacityRebalance': `Enabling <b>Capacity Rebalance</b> allows EC2 Auto Scaling to proactively replace Spot Instances that have received a rebalance recommendation, <b>before</b> it is interrupted by AWS EC2.`,\n 'aws.serverGroup.advancedMode': `Advanced mode allows you to configure allocation strategies, multiple instance types with weighting, instance distribution across Spot / On-Demand and their proportions in the server group. Learn more in <a target=\"_blank\" href=\"https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-purchase-options.html\">AWS docs</a>.`,\n 'aws.serverGroup.legacyUdf': `<p>(Optional) <b>User Data Format</b> allows overriding of the format used when generating user data during deployment. The default format used is configured\n in the application's attributes, editable via the 'Config' tab.</p>\n <p><b>Default</b> will use the value from the application's configuration.</p>\n <p><b>Modern</b> will use the modern template.</p>\n <p><b>Legacy</b> will use the legacy (<b>deprecated</b>) template.</p>\n <p>This option is intended to allow testing migration from legacy to modern before configuring it for the entire application. If unsure, pick <b>Default</b>.</p>`,\n 'aws.serverGroup.base64UserData': '(Optional) <b>UserData</b> is a base64 encoded string.',\n 'aws.serverGroup.enabledMetrics':\n '(Optional) <b>Enabled Metrics</b> are the Auto Scaling Group metrics to enable on this group. Existing metrics are not modified.',\n 'aws.serverGroup.imdsv2':\n \"(Recommended) <b>IMDSv2</b> helps mitigate AWS credential theft from the exploitation of SSRF vulnerabilities in web applications. All modern AWS SDKs support IMDSv2 and it should not be disabled unless you're using a legacy SDK.\",\n 'aws.serverGroup.instanceMonitoring':\n '(Optional) <b>Instance Monitoring</b> whether to enable detailed monitoring of instances. Group metrics must be disabled to update an ASG with Instance Monitoring set to false.',\n 'aws.serverGroup.tags': '(Optional) <b>Tags</b> are propagated to the instances in this cluster.',\n 'aws.serverGroup.allImages': 'Search for an image that does not match the name of your application.',\n 'aws.serverGroup.filterImages': 'Select from a pre-filtered list of images matching the name of your application.',\n 'aws.serverGroup.traffic': `<p>Enables the \"AddToLoadBalancer\" scaling process, which is used by Spinnaker and discovery services to determine if the server group is enabled.</p>\n <p>Will be automatically enabled when any non \"custom\" deployment strategy is selected.</p>`,\n 'aws.securityGroup.vpc': `\n <p>The VPC to which this {{firewall}} will apply.</p>\n <p>If you wish to use VPC but are unsure which VPC to use, the most common one is \"Main\".</p>\n <p>If you do not wish to use VPC, select \"None\".</p>`,\n 'aws.securityGroup.name':\n '<p>The {{firewall}} name is formed by combining the application name, the <b>Stack</b> field, and the <b>Detail</b> field.</p>',\n 'aws.securityGroup.cross.account.ingress.help': '<p>Accounts that are excluded will not show up in this list</p>',\n 'aws.scalingPolicy.search.restricted': `<p>Resets dimensions to \"AutoScalingGroupName: {name of the ASG}\" and provides\n a simpler, combined input for the namespace and metric name fields.</p>`,\n 'aws.scalingPolicy.search.all': `\n <p>Allows you to edit the dimensions and namespace to find a specific metric for this alarm.</p>`,\n 'aws.blockDeviceMappings.useSource': `\n <p>Spinnaker will use the block device mappings of the existing server group when deploying a new server group.</p>\n <p>In the event that there is no existing server group, the\n <a target=\"_blank\" href=\"https://github.com/spinnaker/clouddriver/blob/master/clouddriver-aws/src/main/groovy/com/netflix/spinnaker/clouddriver/aws/deploy/InstanceTypeUtils.java\">defaults</a>\n for the selected instance type will be used.</p>`,\n 'aws.blockDeviceMappings.useAMI':\n '<p>Spinnaker will use the block device mappings from the selected AMI when deploying a new server group.</p>',\n 'aws.blockDeviceMappings.useDefaults':\n '<p>Spinnaker will use the <a target=\"_blank\" href=\"https://github.com/spinnaker/clouddriver/blob/master/clouddriver-aws/src/main/groovy/com/netflix/spinnaker/clouddriver/aws/deploy/InstanceTypeUtils.java\">default block device mappings</a> for the selected instance type when deploying a new server group.</p>',\n 'aws.targetGroup.protocol':\n 'The protocol to use for routing traffic to the targets. Cannot be edited after being saved; if you want to use a different protocol, create a new target group, save the load balancer, move your targets, and then delete this target group.',\n 'aws.targetGroup.targetType':\n 'Determines how targets are specified. Only set to ip if you need to attach individual ips. Cannot be edited after being saved; if you want to use a different target type, create a new target group, save the load balancer, move your targets, and then delete this target group.',\n 'aws.targetGroup.port':\n 'The port on which the targets receive traffic. Cannot be edited after being saved; if you want to use a different port, create a new target group, save the load balancer, move your targets, and then delete this target group.',\n 'aws.targetGroup.attributes.deregistrationDelay':\n 'The amount of time for the load balancer to wait before changing the state of a deregistering target from draining to unused. The range is 0-3600 seconds. The default value is 300 seconds.',\n 'aws.targetGroup.attributes.stickinessEnabled': ' Indicates whether sticky sessions are enabled.',\n 'aws.targetGroup.attributes.deregistrationDelayConnectionTermination':\n 'If enabled, your Network Load Balancer will terminate active connections when deregistration delay is reached.',\n 'aws.targetGroup.attributes.preserveClientIp':\n 'If enabled, your Network Load Balancer will preserve client IP addresses to the target.',\n 'aws.targetGroup.attributes.stickinessType':\n 'The type of sticky sessions. The only current possible value is <code>lb_cookie</code>.',\n 'aws.targetGroup.attributes.stickinessDuration':\n 'The time period, in seconds, during which requests from a client should be routed to the same target. After this time period expires, the load balancer-generated cookie is considered stale. The range is 1 second to 1 week (604800 seconds). The default value is 1 day (86400 seconds).',\n 'aws.targetGroup.attributes.healthCheckPort.trafficPort':\n 'The port the load balancer uses when performing health checks on targets. The default is <b>traffic-port</b>, which is the port on which each target receives traffic from the load balancer.',\n 'aws.targetGroup.healthCheckProtocol': 'TCP health checks only support 10s and 30s intervals',\n 'aws.targetGroup.healthCheckTimeout':\n 'Target groups with TCP or TLS protocol must have a 6s timeout for HTTP health checks or a 10s timeout for HTTPS/TLS health checks.',\n 'aws.targetGroup.nlbHealthcheckThreshold':\n 'The healthy and unhealthy threshold for NLBs must be equal. This represents the number of successful and failed healthchecks required for healthy and unhealthy targets, respectively.',\n 'aws.serverGroup.capacityConstraint': `\n <p>Ensures that the capacity of this server group has not changed in the background (i.e. due to autoscaling activity).</p>\n <p>If the capacity has changed, this resize operation will be rejected.</p>`,\n 'aws.tagImage.consideredStages': `Limit which previous stages will be considered when locating AMI's to tag. If left unchecked, AMI's generated by any upstream stage will be tagged.`,\n 'aws.loadBalancer.redirect.host': `The hostname. This component is not percent-encoded. The hostname can contain <code>#{host}</code>.`,\n 'aws.loadBalancer.redirect.path': `The absolute path, starting with the leading \"/\". This component is not percent-encoded. The path can contain <code>#{host}</code>, <code>#{path}</code>, and <code>#{port}</code>.`,\n 'aws.loadBalancer.redirect.port': `The port. You can specify a value from 1 to 65535 or <code>#{port}</code>.`,\n 'aws.loadBalancer.redirect.protocol': `The protocol. You can specify HTTP, HTTPS, or <code>#{protocol}</code>. You can redirect HTTP to HTTP, HTTP to HTTPS, and HTTPS to HTTPS. You cannot redirect HTTPS to HTTP.`,\n 'aws.loadBalancer.redirect.query': `The query parameters, URL-encoded when necessary, but not percent-encoded. Do not include the leading \"?\", as it is automatically added. You can specify any of the reserved keywords.`,\n 'aws.loadBalancer.redirect.statusCode': `The HTTP redirect code. The redirect is either permanent (HTTP 301) or temporary (HTTP 302).`,\n 'aws.loadBalancer.redirect': `<p>A URI consists of the following components: protocol://hostname:port/path?query. You must modify at least one of the following components to avoid a redirect loop: protocol, hostname, port, or path. Any components that you do not modify retain their original values.\n\n <p>You can reuse URI components using the following reserved keywords:\n\n <ul><li>#{protocol}\n <li>#{host}\n <li>#{port}\n <li>#{path} (the leading \"/\" is removed)\n <li>#{query}\n </ul>\n <p>For example, you can change the path to \"/new/#{path}\", the hostname to \"example.#{host}\", or the query to \"#{query}&value=xyz\".`,\n 'aws.cloudformation.source': `\n <p>Where the template file content is read from.</p>\n <p>\n <b>text:</b> The template is supplied statically to the pipeline from the below text-box.\n </p>\n <p>\n <b>artifact:</b> The template is read from an artifact supplied/created upstream. The expected artifact must be referenced here, and will be bound at runtime.\n </p>\n `,\n 'aws.cloudformation.expectedArtifact': `The artifact that is to be applied to this stage. The artifact should represent a valid cloudformation template.`,\n 'aws.function.name': `Enter a name that describes the purpose of your function. Function name will be prefixed with the application name.`,\n 'aws.function.runtime': `Choose the language to use to write your function`,\n 'aws.function.s3key': `The Amazon S3 key of the deployment package`,\n 'aws.function.handler': `The name of the method within your code that Lambda calls to execute your function. The format includes the file name. It can also include namespaces and other qualifiers, depending on the runtime.`,\n 'aws.function.s3bucket': `An Amazon S3 bucket in the same AWS Region as your function. The bucket can be in a different AWS account.`,\n 'aws.function.execution.role': `Lambda will create an execution role with permission to upload logs to Amazon CloudWatch Logs. You can also choose an existing role that defines the permissions of your function.`,\n 'aws.function.env.vars': `You can define environment variables as key-value pairs that are accessible from your function code. These are useful to store configuration settings without the need to change function code`,\n 'aws.function.tags': `You can use tags to group and filter your functions. A tag consists of a case-sensitive key-value pair`,\n 'aws.functionBasicSettings.memorySize': `Your function is allocated CPU proportional to the memory configured.`,\n 'aws.functionBasicSettings.timeout': `The amount of time that Lambda allows a function to run before stopping it. The default is 3 seconds. The maximum allowed value is 900 seconds.`,\n 'aws.function.publish': `Set to true to publish the first version of the function during creation.`,\n 'aws.function.deadletterqueue': `A dead letter queue configuration that specifies the queue or topic where Lambda sends asynchronous events when they fail processing. (SNS or SQS)`,\n 'aws.function.tracingConfig.mode': `The function's AWS X-Ray tracing configuration.`,\n 'aws.function.kmsKeyArn': `The ARN of the AWS Key Management Service (AWS KMS) key that's used to encrypt your function's environment variables. If it's not provided, AWS Lambda uses a default service key.`,\n 'aws.cloudformation.changeSet.options': `<p>Action to take when the created ChangeSet contains a replacement.</p>\n <p>\n <b>ask:</b> Execution will be put on hold asking for user feedback.\n </p>\n <p>\n <b>skip it:</b> ChangeSet will not be executed and stage will continue.\n </p>\n <p>\n <b>execute it</b> ChangeSet will be executed.\n </p>\n <p>\n <b>fail stage</b> ChangeSet will not be executed and the stage will fail.\n </p>`,\n};\n\nObject.keys(helpContents).forEach((key) => HelpContentsRegistry.register(key, helpContents[key]));\n","import { $q } from 'ngimport';\n\nimport { REST } from '@spinnaker/core';\n\nexport interface IAmazonImage {\n accounts: string[];\n amis: {\n [region: string]: string[];\n };\n attributes: {\n architecture: string;\n creationDate: string;\n virtualizationType: string;\n };\n imageName: string;\n tags: {\n [tag: string]: string;\n };\n tagsByImageId: {\n [imageId: string]: IAmazonImage['tags'];\n };\n}\n\nexport class AwsImageReader {\n public findImages(params: { q: string; region?: string }): PromiseLike<IAmazonImage[]> {\n if (!params.q || params.q.length < 3) {\n return $q.when([{ message: 'Please enter at least 3 characters...', disabled: true }]) as any;\n }\n\n return REST('/images/find')\n .query(params)\n .get()\n .catch(() => [] as IAmazonImage[]);\n }\n\n public getImage(amiName: string, region: string, credentials: string): PromiseLike<IAmazonImage> {\n return REST('/images')\n .path(credentials, region, amiName)\n .query({ provider: 'aws' })\n .get()\n .then((results: any[]) => (results && results.length ? results[0] : null))\n .catch(() => null as IAmazonImage);\n }\n}\n","import type { IInstanceTypeCategory, IInstanceTypeFamily, IPreferredInstanceType } from '@spinnaker/core';\n\nimport { AWSProviderSettings } from '../aws.settings';\n\ninterface IAwsInstanceTypeFamily extends IInstanceTypeFamily {\n instanceTypes: IAwsPreferredInstanceType[];\n}\n\ninterface IAwsPreferredInstanceType extends IPreferredInstanceType {\n cpuCreditsPerHour?: number;\n}\n\ninterface IAwsInstanceTypeCategory extends IInstanceTypeCategory {\n showCpuCredits?: boolean;\n descriptionListOverride?: string[];\n}\n\nconst m5: IAwsInstanceTypeFamily = {\n type: 'm5',\n description:\n 'm5 instances provide a balance of compute, memory, and network resources. They are a good choice for most applications.',\n instanceTypes: [\n {\n name: 'm5.large',\n label: 'Large',\n cpu: 2,\n memory: 8,\n storage: { type: 'EBS' },\n costFactor: 2,\n },\n {\n name: 'm5.xlarge',\n label: 'XLarge',\n cpu: 4,\n memory: 16,\n storage: { type: 'EBS' },\n costFactor: 3,\n },\n {\n name: 'm5.2xlarge',\n label: '2XLarge',\n cpu: 8,\n memory: 32,\n storage: { type: 'EBS' },\n costFactor: 4,\n },\n ],\n};\n\nconst t2gp: IAwsInstanceTypeFamily = {\n type: 't2',\n description:\n 't2 instances are a good choice for workloads that don’t use the full CPU often or consistently, but occasionally need to burst (e.g. web servers, developer environments and small databases).',\n instanceTypes: [\n {\n name: 't2.small',\n label: 'Small',\n cpu: 1,\n memory: 2,\n storage: { type: 'EBS' },\n costFactor: 1,\n cpuCreditsPerHour: 12,\n },\n {\n name: 't2.medium',\n label: 'Medium',\n cpu: 2,\n memory: 4,\n storage: { type: 'EBS' },\n costFactor: 1,\n cpuCreditsPerHour: 24,\n },\n {\n name: 't2.large',\n label: 'Large',\n cpu: 2,\n memory: 8,\n storage: { type: 'EBS' },\n costFactor: 2,\n cpuCreditsPerHour: 36,\n },\n {\n name: 't2.xlarge',\n label: 'XLarge',\n cpu: 4,\n memory: 16,\n storage: { type: 'EBS' },\n costFactor: 3,\n cpuCreditsPerHour: 54,\n },\n {\n name: 't2.2xlarge',\n label: '2XLarge',\n cpu: 8,\n memory: 32,\n storage: { type: 'EBS' },\n costFactor: 4,\n cpuCreditsPerHour: 81,\n },\n ],\n};\n\nconst t3gp: IAwsInstanceTypeFamily = {\n type: 't3',\n description:\n 't3 instances are a good choice for workloads that don’t use the full CPU often or consistently, but occasionally need to burst (e.g. web servers, developer environments and small databases).',\n instanceTypes: [\n {\n name: 't3.small',\n label: 'Small',\n cpu: 2,\n memory: 2,\n storage: { type: 'EBS' },\n costFactor: 1,\n cpuCreditsPerHour: 24,\n },\n {\n name: 't3.medium',\n label: 'Medium',\n cpu: 2,\n memory: 4,\n storage: { type: 'EBS' },\n costFactor: 1,\n cpuCreditsPerHour: 24,\n },\n {\n name: 't3.large',\n label: 'Large',\n cpu: 2,\n memory: 8,\n storage: { type: 'EBS' },\n costFactor: 2,\n cpuCreditsPerHour: 36,\n },\n {\n name: 't3.xlarge',\n label: 'XLarge',\n cpu: 4,\n memory: 16,\n storage: { type: 'EBS' },\n costFactor: 3,\n cpuCreditsPerHour: 96,\n },\n {\n name: 't3.2xlarge',\n label: '2XLarge',\n cpu: 8,\n memory: 32,\n storage: { type: 'EBS' },\n costFactor: 4,\n cpuCreditsPerHour: 192,\n },\n ],\n};\n\nconst t2: IAwsInstanceTypeFamily = {\n type: 't2',\n description:\n 't2 instances are a good choice for workloads that don’t use the full CPU often or consistently, but occasionally need to burst (e.g. web servers, developer environments and small databases).',\n instanceTypes: [\n {\n name: 't2.nano',\n label: 'Nano',\n cpu: 1,\n memory: 0.5,\n storage: { type: 'EBS' },\n costFactor: 1,\n cpuCreditsPerHour: 3,\n },\n {\n name: 't2.micro',\n label: 'Micro',\n cpu: 1,\n memory: 1,\n storage: { type: 'EBS' },\n costFactor: 1,\n cpuCreditsPerHour: 6,\n },\n {\n name: 't2.small',\n label: 'Small',\n cpu: 1,\n memory: 2,\n storage: { type: 'EBS' },\n costFactor: 1,\n cpuCreditsPerHour: 12,\n },\n ],\n};\n\nconst t3: IAwsInstanceTypeFamily = {\n type: 't3',\n description:\n 't3 instances are a good choice for workloads that don’t use the full CPU often or consistently, but occasionally need to burst (e.g. web servers, developer environments and small databases).',\n instanceTypes: [\n {\n name: 't3.nano',\n label: 'Nano',\n cpu: 2,\n memory: 0.5,\n storage: { type: 'EBS' },\n costFactor: 1,\n cpuCreditsPerHour: 6,\n },\n {\n name: 't3.micro',\n label: 'Micro',\n cpu: 2,\n memory: 1,\n storage: { type: 'EBS' },\n costFactor: 1,\n cpuCreditsPerHour: 12,\n },\n {\n name: 't3.small',\n label: 'Small',\n cpu: 2,\n memory: 2,\n storage: { type: 'EBS' },\n costFactor: 1,\n cpuCreditsPerHour: 24,\n },\n ],\n};\n\nconst r5: IAwsInstanceTypeFamily = {\n type: 'r5',\n description:\n 'r5 instances are optimized for memory-intensive applications and have the lowest cost per GiB of RAM among Amazon EC2 instance types.',\n instanceTypes: [\n {\n name: 'r5.large',\n label: 'Large',\n cpu: 2,\n memory: 16,\n storage: { type: 'EBS' },\n costFactor: 1,\n },\n {\n name: 'r5.xlarge',\n label: 'XLarge',\n cpu: 4,\n memory: 32,\n storage: { type: 'EBS' },\n costFactor: 2,\n },\n {\n name: 'r5.2xlarge',\n label: '2XLarge',\n cpu: 8,\n memory: 64,\n storage: { type: 'EBS' },\n costFactor: 2,\n },\n {\n name: 'r5.4xlarge',\n label: '4XLarge',\n cpu: 16,\n memory: 128,\n storage: { type: 'EBS' },\n costFactor: 3,\n },\n ],\n};\n\nexport const defaultCategories: IAwsInstanceTypeCategory[] = [\n {\n type: 'general',\n label: 'General Purpose',\n families: [m5, t2gp, t3gp],\n icon: 'hdd',\n showCpuCredits: true,\n descriptionListOverride: [\n m5.description,\n 't2/t3 instances are a good choice for workloads that don’t use the full CPU often or consistently, but occasionally need to burst (e.g. web servers, developer environments and small databases).',\n ],\n },\n {\n type: 'memory',\n label: 'High Memory',\n families: [r5],\n icon: 'hdd',\n },\n {\n type: 'micro',\n label: 'Micro Utility',\n families: [t2, t3],\n icon: 'hdd',\n showCpuCredits: true,\n descriptionListOverride: [\n 't2/t3 instances are a good choice for workloads that don’t use the full CPU often or consistently, but occasionally need to burst (e.g. web servers, developer environments and small databases).',\n ],\n },\n {\n type: 'custom',\n label: 'Custom Type',\n families: [],\n icon: 'asterisk',\n },\n];\n\nconst excludeCategories = AWSProviderSettings.instanceTypes?.exclude?.categories ?? [];\nconst excludeFamilies = AWSProviderSettings.instanceTypes?.exclude?.families ?? [];\n\nexport const categories = defaultCategories\n .filter(({ type }) => !excludeCategories.includes(type))\n .map((category) =>\n Object.assign({}, category, {\n families: category.families.filter(({ type }) => !excludeFamilies.includes(type)),\n }),\n );\n","import type { IQService } from 'angular';\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport type {\n IInstanceType,\n IInstanceTypeCategory,\n IInstanceTypesByRegion,\n IPreferredInstanceType,\n} from '@spinnaker/core';\nimport { REST } from '@spinnaker/core';\n\nimport { categories, defaultCategories } from './awsInstanceTypes';\n\nexport interface IAmazonPreferredInstanceType extends IPreferredInstanceType {\n cpuCreditsPerHour?: number;\n}\n\nexport interface IAmazonInstanceTypeCategory extends IInstanceTypeCategory {\n showCpuCredits?: boolean;\n descriptionListOverride?: string[];\n}\n\nexport interface IAmazonInstanceType extends IInstanceType {\n defaultVCpus: number;\n memoryInGiB: number;\n hypervisor: string;\n instanceStorageInfo?: IAmazonInstanceTypeStorageInfo;\n ebsInfo?: IAmazonInstanceTypeEbsInfo;\n gpuInfo?: IAmazonInstanceGpuInfo;\n\n instanceStorageSupported: boolean;\n currentGeneration: boolean;\n bareMetal: boolean;\n ipv6Supported?: boolean;\n burstablePerformanceSupported: boolean;\n\n supportedArchitectures: string[];\n supportedUsageClasses: string[];\n supportedRootDeviceTypes: string[];\n supportedVirtualizationTypes: string[];\n}\n\nexport interface IAmazonInstanceTypeStorageInfo {\n storageTypes: string;\n totalSizeInGB?: number;\n nvmeSupport?: string;\n}\n\nexport interface IAmazonInstanceTypeEbsInfo {\n ebsOptimizedSupport: string;\n nvmeSupport?: string;\n encryptionSupport: string;\n}\n\nexport interface IAmazonInstanceGpuInfo {\n totalGpuMemoryInMiB: number;\n gpus: IAmazonInstanceGpuDeviceInfo[];\n}\n\nexport interface IAmazonInstanceGpuDeviceInfo {\n name: string;\n manufacturer: string;\n count: number;\n gpuSizeInMiB: number;\n}\n\nexport interface IAmazonInstanceTypesByRegion extends IInstanceTypesByRegion {\n [region: string]: IAmazonInstanceType[];\n}\n\nexport const AMAZON_INSTANCE_AWSINSTANCETYPE_SERVICE = 'spinnaker.amazon.instanceType.service';\nexport const name = AMAZON_INSTANCE_AWSINSTANCETYPE_SERVICE; // for backwards compatibility\n\nmodule(AMAZON_INSTANCE_AWSINSTANCETYPE_SERVICE, []).factory('awsInstanceTypeService', [\n '$q',\n function ($q: IQService) {\n function getCategories() {\n return $q.when(categories);\n }\n\n const getAllTypesByRegion = function getAllTypesByRegion(): PromiseLike<IAmazonInstanceTypesByRegion> {\n return REST('/instanceTypes')\n .get()\n .then(function (types) {\n return _.chain(types)\n .map(function (type: IAmazonInstanceType) {\n return {\n ...type,\n key: [type.region, type.account, type.name].join(':'),\n };\n })\n .uniqBy('key')\n .groupBy('region')\n .value();\n });\n };\n\n const instanceClassOrder = ['xlarge', 'large', 'medium', 'small', 'micro', 'nano'];\n\n function sortTypesByFamilyAndSize(o1: string, o2: string) {\n const type1 = o1.split('.');\n const type2 = o2.split('.');\n\n const [family1, class1 = ''] = type1;\n const [family2, class2 = ''] = type2;\n\n if (family1 !== family2) {\n if (family1 > family2) {\n return 1;\n } else if (family1 < family2) {\n return -1;\n }\n return 0;\n }\n\n const t1Idx = instanceClassOrder.findIndex((el) => class1.endsWith(el));\n const t2Idx = instanceClassOrder.findIndex((el) => class2.endsWith(el));\n\n if (t1Idx === -1 || t2Idx === -1) {\n return 0;\n }\n\n if (t1Idx === 0 && t2Idx === 0) {\n const size1 = parseInt(class1.replace('xlarge', '')) || 0;\n const size2 = parseInt(class2.replace('xlarge', '')) || 0;\n\n if (size2 < size1) {\n return 1;\n } else if (size2 > size1) {\n return -1;\n }\n return 0;\n }\n\n if (t1Idx > t2Idx) {\n return -1;\n } else if (t1Idx < t2Idx) {\n return 1;\n }\n return 0;\n }\n\n function getAvailableTypesForRegions(\n availableInstanceTypes: IAmazonInstanceTypesByRegion,\n selectedRegions: string[],\n ): IAmazonInstanceType[] {\n selectedRegions = selectedRegions || [];\n let availableTypes: IAmazonInstanceType[] = [];\n\n // prime the list of available types\n if (selectedRegions && selectedRegions.length) {\n availableTypes = availableInstanceTypes[selectedRegions[0]] || [];\n }\n\n // this will perform an unnecessary intersection with the first region, which is fine\n selectedRegions.forEach(function (selectedRegion) {\n if (availableInstanceTypes[selectedRegion]) {\n availableTypes = _.intersectionBy(availableTypes, availableInstanceTypes[selectedRegion], 'name');\n }\n });\n\n return availableTypes?.sort((a, b) => sortTypesByFamilyAndSize(a.name, b.name));\n }\n\n const families: { [key: string]: string[] } = {\n ec2ClassicSupported: ['m1', 'm3', 't1', 'c1', 'c3', 'cc2', 'cr1', 'm2', 'r3', 'd2', 'hs1', 'i2', 'g2'], // https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-classic-platform.html#ec2-classic-instance-types\n ebsOptimized: ['c4', 'd2', 'f1', 'g3', 'i3', 'm4', 'm5', 'p2', 'r4', 'r5', 'x1'],\n burstablePerf: ['t2', 't3', 't3a', 't4g'],\n };\n\n function filterInstanceTypes(\n instanceTypes: IAmazonInstanceType[],\n virtualizationType: string,\n vpcConfigured: boolean,\n architecture: string,\n ): IAmazonInstanceType[] {\n return _.filter(instanceTypes, function (i) {\n if (virtualizationType === '*' && architecture === '*') {\n // show all instance types\n return true;\n }\n\n if (!vpcConfigured && !families.ec2ClassicSupported.includes(i.name.split('.')[0])) {\n return false;\n }\n\n if (\n virtualizationType &&\n i.supportedVirtualizationTypes &&\n !i.supportedVirtualizationTypes.includes(virtualizationType)\n ) {\n return false;\n }\n\n if (architecture && i.supportedArchitectures && !i.supportedArchitectures.includes(architecture)) {\n return false;\n }\n\n return true;\n });\n }\n\n function isEbsOptimized(instanceType: string) {\n if (!instanceType) {\n return false;\n }\n const family = _.split(instanceType, '.', 1)[0];\n return families.ebsOptimized.includes(family);\n }\n\n function isBurstingSupportedForAllTypes(instanceTypes: string[]): boolean {\n if (!instanceTypes || !instanceTypes.length) {\n return false;\n }\n // for multiple instance types case, all instance types must support bursting in order to prevent incompatible configuration.\n return instanceTypes.every((instanceType) => isBurstingSupported(instanceType));\n }\n\n function isBurstingSupported(instanceType: string): boolean {\n if (!instanceType) {\n return false;\n }\n const family = _.split(instanceType, '.', 1)[0];\n return families.burstablePerf.includes(family);\n }\n\n function getInstanceTypesInCategory(instanceTypesToFilter: string[], category: string): string[] {\n if (!instanceTypesToFilter || !instanceTypesToFilter.length || !category) {\n return [];\n }\n\n if (category === 'custom') {\n return instanceTypesToFilter;\n }\n\n const instanceTypesInCategory: string[] = _.flatten(\n _.find(defaultCategories, { type: category })?.families.map((f) => f.instanceTypes.map((it) => it.name)),\n );\n return _.intersection(instanceTypesToFilter, instanceTypesInCategory);\n }\n\n return {\n getCategories,\n getAvailableTypesForRegions,\n getAllTypesByRegion,\n filterInstanceTypes,\n isEbsOptimized,\n isBurstingSupportedForAllTypes,\n getInstanceTypesInCategory,\n };\n },\n]);\n","import { UISref } from '@uirouter/react';\nimport { UIRouterContextComponent } from '@uirouter/react-hybrid';\nimport React from 'react';\n\nimport { AccountTag, LabeledValue, timestamp } from '@spinnaker/core';\n\nexport interface IInstanceInformationProps {\n account: string;\n availabilityZone: string;\n instanceType: string;\n capacityType?: string;\n launchTime: number;\n provider: string;\n region: string;\n serverGroup: string;\n showInstanceType?: boolean;\n}\n\nexport const InstanceInformation = ({\n account,\n availabilityZone,\n instanceType,\n capacityType,\n launchTime,\n provider,\n region,\n serverGroup,\n showInstanceType,\n}: IInstanceInformationProps) => (\n <>\n <LabeledValue label=\"Launched\" value={launchTime ? timestamp(launchTime) : 'Unknown'} />\n <LabeledValue\n label=\"In\"\n value={\n <div>\n <AccountTag account={account} />\n {availabilityZone || 'Unknown'}\n </div>\n }\n />\n {showInstanceType && <LabeledValue label=\"Type\" value={instanceType || 'Unknown'} />}\n {showInstanceType && capacityType && <LabeledValue label=\"Capacity Type\" value={capacityType || 'Unknown'} />}\n {serverGroup && (\n <LabeledValue\n label=\"Server Group\"\n value={\n <div>\n <UIRouterContextComponent>\n <UISref\n to=\"^.serverGroup\"\n params={{\n region,\n accountId: account,\n serverGroup,\n provider,\n }}\n >\n <a>{serverGroup}</a>\n </UISref>\n </UIRouterContextComponent>\n </div>\n }\n />\n )}\n </>\n);\n","import React from 'react';\nimport { useData } from '@spinnaker/core';\nimport { VpcReader } from './VpcReader';\n\nexport interface IVpcTagProps {\n vpcId: string;\n}\n\nconst defaultLabel = 'None (EC2 Classic)';\n\nexport function VpcTag(props: IVpcTagProps) {\n const { vpcId } = props;\n const fetchVpcLabel = useData(\n async () => {\n const name = await VpcReader.getVpcName(props.vpcId);\n return name ? `${name} (${props.vpcId})` : `(${props.vpcId})`;\n },\n defaultLabel,\n [vpcId],\n );\n\n const label = vpcId ? fetchVpcLabel.result : defaultLabel;\n return <span className=\"vpc-tag\">{label}</span>;\n}\n","import React from 'react';\n\nimport { CollapsibleSection, LabeledValue, SubnetTag } from '@spinnaker/core';\n\nimport { InstanceInformation } from './InstanceInformation';\nimport type { IAmazonInstance } from '../../domain';\nimport { VpcTag } from '../../vpc/VpcTag';\n\nexport interface IAmazonInstanceInformationProps {\n instance: IAmazonInstance;\n}\n\nexport const AmazonInstanceInformation = ({ instance }: IAmazonInstanceInformationProps) => {\n const { imageId, serverGroup, subnetId, vpcId } = instance;\n return (\n <CollapsibleSection heading=\"Instance Information\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n <InstanceInformation\n account={instance.account}\n availabilityZone={instance.availabilityZone}\n instanceType={instance.instanceType}\n capacityType={instance.capacityType}\n launchTime={instance.launchTime}\n provider={instance.provider}\n region={instance.region}\n serverGroup={instance.serverGroup}\n showInstanceType={true}\n />\n {serverGroup && <LabeledValue label=\"VPC\" value={<VpcTag vpcId={vpcId} />} />}\n {subnetId && <LabeledValue label=\"Subnet\" value={<SubnetTag subnetId={subnetId} />} />}\n {imageId && <LabeledValue label=\"Image ID\" value={imageId} />}\n </dl>\n </CollapsibleSection>\n );\n};\n","import { module } from 'angular';\nimport { react2angular } from 'react2angular';\n\nimport { withErrorBoundary } from '@spinnaker/core';\n\nimport { AmazonInstanceInformation } from './AmazonInstanceInformation';\n\nexport const AMAZON_INSTANCE_INFORMATION_COMPONENT = 'spinnaker.application.amazonInstanceInformation.component';\n\nmodule(AMAZON_INSTANCE_INFORMATION_COMPONENT, []).component(\n 'amazonInstanceInformation',\n react2angular(withErrorBoundary(AmazonInstanceInformation, 'amazonInstanceInformation'), ['instance']),\n);\n","import type { Application, IMultiInstanceGroup, IMultiInstanceJob, ITask } from '@spinnaker/core';\nimport { InstanceWriter, TaskExecutor } from '@spinnaker/core';\nimport type { IAmazonInstance } from '../domain';\n\nexport interface IAmazonMultiInstanceGroup extends IMultiInstanceGroup {\n targetGroups: string[];\n}\n\nexport interface IAmazonMultiInstanceJob extends IMultiInstanceJob {\n targetGroupNames?: string[];\n}\n\nexport class AmazonInstanceWriter extends InstanceWriter {\n public static deregisterInstancesFromTargetGroup(\n instanceGroups: IMultiInstanceGroup[],\n application: Application,\n targetGroupNames: string[],\n ): PromiseLike<ITask> {\n const jobs = super.buildMultiInstanceJob(\n instanceGroups,\n 'deregisterInstancesFromLoadBalancer',\n ) as IAmazonMultiInstanceJob[];\n jobs.forEach((job) => (job.targetGroupNames = targetGroupNames));\n const descriptor = super.buildMultiInstanceDescriptor(jobs, 'Deregister', `from ${targetGroupNames.join(' and ')}`);\n return TaskExecutor.executeTask({\n job: jobs,\n application,\n description: descriptor,\n });\n }\n\n public static deregisterInstanceFromTargetGroup(\n instance: IAmazonInstance,\n application: Application,\n params: any = {},\n ): PromiseLike<ITask> {\n params.type = 'deregisterInstancesFromLoadBalancer';\n params.instanceIds = [instance.id];\n params.targetGroupNames = instance.targetGroups;\n params.region = instance.region;\n params.credentials = instance.account;\n params.cloudProvider = instance.cloudProvider;\n return TaskExecutor.executeTask({\n job: [params],\n application,\n description: `Deregister instance: ${instance.id}`,\n });\n }\n\n public static registerInstancesWithTargetGroup(\n instanceGroups: IMultiInstanceGroup[],\n application: Application,\n targetGroupNames: string[],\n ) {\n const jobs = super.buildMultiInstanceJob(\n instanceGroups,\n 'registerInstancesWithLoadBalancer',\n ) as IAmazonMultiInstanceJob[];\n jobs.forEach((job) => (job.targetGroupNames = targetGroupNames));\n const descriptor = super.buildMultiInstanceDescriptor(jobs, 'Register', `with ${targetGroupNames.join(' and ')}`);\n return TaskExecutor.executeTask({\n job: jobs,\n application,\n description: descriptor,\n });\n }\n\n public static registerInstanceWithTargetGroup(\n instance: IAmazonInstance,\n application: Application,\n params: any = {},\n ): PromiseLike<ITask> {\n params.type = 'registerInstancesWithLoadBalancer';\n params.instanceIds = [instance.id];\n params.targetGroupNames = instance.targetGroups;\n params.region = instance.region;\n params.credentials = instance.account;\n params.cloudProvider = instance.cloudProvider;\n return TaskExecutor.executeTask({\n job: [params],\n application,\n description: `Register instance: ${instance.id}`,\n });\n }\n}\n","import { flatten, isNil } from 'lodash';\n\nimport type {\n IAmazonApplicationLoadBalancer,\n IAmazonHealth,\n IAmazonNetworkLoadBalancer,\n ITargetGroup,\n} from '../../domain';\n\nexport const getAllTargetGroups = (\n loadBalancers: IAmazonApplicationLoadBalancer[] | IAmazonNetworkLoadBalancer[],\n): ITargetGroup[] => {\n const allTargetGroups = loadBalancers.map((d) => d.targetGroups);\n const targetGroups = flatten(allTargetGroups);\n return targetGroups;\n};\n\nexport const applyHealthCheckInfoToTargetGroups = (\n healthMetrics: IAmazonHealth[],\n targetGroups: ITargetGroup[],\n account: string,\n) => {\n healthMetrics.forEach((metric) => {\n if (metric.type === 'TargetGroup') {\n metric.targetGroups.forEach((tg) => {\n const group = targetGroups.find((g) => g.name === tg.name && g.account === account) ?? ({} as ITargetGroup);\n const useTrafficPort = group.healthCheckPort === 'traffic-port' || isNil(group.healthCheckPort);\n const port = useTrafficPort ? group.port : group.healthCheckPort;\n tg.healthCheckProtocol = group.healthCheckProtocol?.toLowerCase();\n tg.healthCheckPath = `:${port}${group.healthCheckPath ?? ''}`;\n });\n }\n });\n};\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 {\n CloudProviderRegistry,\n ConfirmationModalService,\n FirewallLabels,\n InstanceReader,\n RecentHistoryService,\n SETTINGS,\n} from '@spinnaker/core';\n\nimport { AmazonInstanceWriter } from '../amazon.instance.write.service';\nimport { AWSProviderSettings } from '../../aws.settings';\nimport { applyHealthCheckInfoToTargetGroups, getAllTargetGroups } from './utils';\n\nexport const AMAZON_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER = 'spinnaker.amazon.instance.details.controller';\nexport const name = AMAZON_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER; // for backwards compatibility\nmodule(AMAZON_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER, [UIROUTER_ANGULARJS, ANGULAR_UI_BOOTSTRAP]).controller(\n 'awsInstanceDetailsCtrl',\n [\n '$scope',\n '$state',\n 'instance',\n 'app',\n 'moniker',\n 'environment',\n '$q',\n 'overrides',\n function ($scope, $state, instance, app, moniker, environment, $q, overrides) {\n $scope.isDisabled = !AWSProviderSettings.adHocInfraWritesEnabled;\n\n // needed for standalone instances\n $scope.detailsTemplateUrl = CloudProviderRegistry.getValue('aws', '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 $scope.securityGroupsLabel = FirewallLabels.get('Firewalls');\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 !== 'Amazon' || metric.state !== 'Unknown';\n });\n\n if (!app.isStandalone) {\n // augment with target group healthcheck data\n const targetGroups = getAllTargetGroups(\n app.loadBalancers.data.filter(function (loadBalancer) {\n return loadBalancer.cloudProvider === 'aws';\n }),\n );\n applyHealthCheckInfoToTargetGroups(displayableMetrics, targetGroups, instance.account);\n }\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, targetGroups, account, region, vpcId, serverGroupDisabled;\n if (!app.serverGroups) {\n // standalone instance\n instanceSummary = { id: instance.instanceId }; // terminate call expects `id` to be populated\n loadBalancers = [];\n targetGroups = [];\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 targetGroups = serverGroup.targetGroups;\n account = serverGroup.account;\n region = serverGroup.region;\n vpcId = serverGroup.vpcId;\n serverGroupDisabled = serverGroup.isDisabled;\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.targetGroups.some(function (targetGroup) {\n return targetGroup.instances.some(function (possibleInstance) {\n if (possibleInstance.id === instance.instanceId) {\n instanceSummary = possibleInstance;\n targetGroups = [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.targetGroups.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.serverGroupDisabled = serverGroupDisabled;\n $scope.instance.loadBalancers = loadBalancers;\n $scope.instance.targetGroups = targetGroups;\n if ($scope.instance.networkInterfaces) {\n $scope.instance.ipv6Addresses = _.flatMap($scope.instance.networkInterfaces, (i) =>\n i.ipv6Addresses.map((a) => ({\n ip: a.ipv6Address,\n url: `http://${a.ipv6Address}:${$scope.state.instancePort}`,\n })),\n );\n\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.canDeregisterFromLoadBalancer = function () {\n const healthMetrics = $scope.instance.health || [];\n return healthMetrics.some(function (health) {\n return health.type === 'LoadBalancer';\n });\n };\n\n this.canRegisterWithLoadBalancer = function () {\n const instance = $scope.instance;\n const healthMetrics = instance.health || [];\n if (!instance.loadBalancers || !instance.loadBalancers.length) {\n return false;\n }\n const outOfService = healthMetrics.some(function (health) {\n return health.type === 'LoadBalancer' && health.state === 'OutOfService';\n });\n const hasLoadBalancerHealth = healthMetrics.some(function (health) {\n return health.type === 'LoadBalancer';\n });\n return outOfService || !hasLoadBalancerHealth;\n };\n\n this.canDeregisterFromTargetGroup = function () {\n const healthMetrics = $scope.instance.health || [];\n return healthMetrics.some(function (health) {\n return health.type === 'TargetGroup' && health.state !== 'OutOfService';\n });\n };\n\n this.canRegisterWithTargetGroup = function () {\n const instance = $scope.instance;\n const healthMetrics = instance.health || [];\n if (!instance.targetGroups || !instance.targetGroups.length) {\n return false;\n }\n const outOfService = healthMetrics.some(function (health) {\n return health.type === 'TargetGroup' && health.state === 'OutOfService';\n });\n const hasTargetGroupHealth = healthMetrics.some(function (health) {\n return health.type === 'TargetGroup';\n });\n return outOfService || !hasTargetGroupHealth;\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 AmazonInstanceWriter.terminateInstance(instance, app);\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 AmazonInstanceWriter.terminateInstanceAndShrinkServerGroup(instance, app);\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.rebootInstance = function rebootInstance() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Rebooting ' + instance.instanceId,\n };\n\n const submitMethod = (params = {}) => {\n if (app.attributes && app.attributes.platformHealthOnlyShowOverride && app.attributes.platformHealthOnly) {\n params.interestingHealthProviderNames = ['Amazon'];\n }\n\n return AmazonInstanceWriter.rebootInstance(instance, app, params);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really reboot ' + instance.instanceId + '?',\n buttonText: 'Reboot ' + instance.instanceId,\n account: instance.account,\n platformHealthOnlyShowOverride: app.attributes.platformHealthOnlyShowOverride,\n platformHealthType: 'Amazon',\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.registerInstanceWithLoadBalancer = function registerInstanceWithLoadBalancer() {\n const instance = $scope.instance;\n const loadBalancerNames = instance.loadBalancers.join(' and ');\n\n const taskMonitor = {\n application: app,\n title: 'Registering ' + instance.instanceId + ' with ' + loadBalancerNames,\n };\n\n const submitMethod = function () {\n return AmazonInstanceWriter.registerInstanceWithLoadBalancer(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really register ' + instance.instanceId + ' with ' + loadBalancerNames + '?',\n buttonText: 'Register ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.deregisterInstanceFromLoadBalancer = function deregisterInstanceFromLoadBalancer() {\n const instance = $scope.instance;\n const loadBalancerNames = instance.loadBalancers.join(' and ');\n\n const taskMonitor = {\n application: app,\n title: 'Deregistering ' + instance.instanceId + ' from ' + loadBalancerNames,\n };\n\n const submitMethod = function () {\n return AmazonInstanceWriter.deregisterInstanceFromLoadBalancer(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really deregister ' + instance.instanceId + ' from ' + loadBalancerNames + '?',\n buttonText: 'Deregister ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.registerInstanceWithTargetGroup = function registerInstanceWithTargetGroup() {\n const instance = $scope.instance;\n const targetGroupNames = instance.targetGroups.join(' and ');\n\n const taskMonitor = {\n application: app,\n title: 'Registering ' + instance.instanceId + ' with ' + targetGroupNames,\n };\n\n const submitMethod = function () {\n return AmazonInstanceWriter.registerInstanceWithTargetGroup(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really register ' + instance.instanceId + ' with ' + targetGroupNames + '?',\n buttonText: 'Register ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.deregisterInstanceFromTargetGroup = function deregisterInstanceFromTargetGroup() {\n const instance = $scope.instance;\n const targetGroupNames = instance.targetGroups.join(' and ');\n\n const taskMonitor = {\n application: app,\n title: 'Deregistering ' + instance.instanceId + ' from ' + targetGroupNames,\n };\n\n const submitMethod = function () {\n return AmazonInstanceWriter.deregisterInstanceFromTargetGroup(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really deregister ' + instance.instanceId + ' from ' + targetGroupNames + '?',\n buttonText: 'Deregister ' + instance.instanceId,\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 AmazonInstanceWriter.enableInstanceInDiscovery(instance, app);\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 AmazonInstanceWriter.disableInstanceInDiscovery(instance, app);\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 constructInstanceActions = (instance) => {\n const constantActions = [\n { label: 'Reboot', triggerAction: this.rebootInstance },\n { label: 'Terminate', triggerAction: this.terminateInstance },\n { label: 'Terminate and Shrink Server Group', triggerAction: this.terminateInstanceAndShrinkServerGroup },\n ];\n const conditionalActions = [];\n\n if (this.canRegisterWithDiscovery() && !instance.serverGroupDisabled) {\n conditionalActions.push({\n label: 'Enable In Discovery',\n triggerAction: this.enableInstanceInDiscovery,\n });\n }\n\n if (this.hasHealthState('Discovery', 'Up') || this.hasHealthState('Discovery', 'Down')) {\n conditionalActions.push({\n label: 'Disable in Discovery',\n triggerAction: this.disableInstanceInDiscovery,\n });\n }\n\n if (this.canRegisterWithLoadBalancer()) {\n conditionalActions.push({\n label: 'Register with Load Balancer',\n triggerAction: this.registerInstanceWithLoadBalancer,\n });\n }\n\n if (this.canDeregisterFromLoadBalancer()) {\n conditionalActions.push({\n label: 'Deregister from Load Balancer',\n triggerAction: this.deregisterInstanceFromLoadBalancer,\n });\n }\n\n if (this.canRegisterWithTargetGroup()) {\n conditionalActions.push({\n label: 'Register with Target Group',\n triggerAction: this.registerInstanceWithTargetGroup,\n });\n }\n\n if (this.canDeregisterFromTargetGroup()) {\n conditionalActions.push({\n label: 'Deregister from Target Group',\n triggerAction: this.deregisterInstanceFromTargetGroup,\n });\n }\n return conditionalActions.concat(constantActions);\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 $scope.instanceActions = constructInstanceActions($scope.instance);\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 * as React from 'react';\nimport { LabeledValue, LabeledValueList, LinkWithClipboard } from '@spinnaker/core';\n\ninterface IIpv6Address {\n ip: string;\n url: string;\n}\n\nexport interface IInstanceDnsProps {\n instancePort: string;\n ipv6Addresses: IIpv6Address[];\n permanentIps: string[];\n privateDnsName: string;\n privateIpAddress: string;\n publicDnsName: string;\n publicIpAddress: string;\n}\n\nexport const InstanceDns = ({\n instancePort,\n ipv6Addresses,\n permanentIps,\n privateDnsName,\n privateIpAddress,\n publicDnsName,\n publicIpAddress,\n}: IInstanceDnsProps) => {\n const portSuffix = instancePort ? `:${instancePort}` : '';\n return (\n <LabeledValueList className=\"horizontal-when-filters-collapsed\">\n {privateDnsName && (\n <LabeledValue\n label=\"Private DNS Name\"\n value={<LinkWithClipboard text={privateDnsName} url={`http://${privateDnsName}${portSuffix}`} />}\n />\n )}\n {publicDnsName && (\n <LabeledValue\n label=\"Public DNS Name\"\n value={<LinkWithClipboard text={publicDnsName} url={`http://${publicDnsName}${portSuffix}`} />}\n />\n )}\n {privateIpAddress && (\n <LabeledValue\n label=\"Private IP Address\"\n value={<LinkWithClipboard text={privateIpAddress} url={`http://${privateIpAddress}${portSuffix}`} />}\n />\n )}\n {Boolean(permanentIps?.length) && (\n <LabeledValue\n label=\"Permanent IP Address\"\n value={permanentIps.map((ip) => (\n <LinkWithClipboard key={ip} text={ip} url={`http://${ip}${portSuffix}`} />\n ))}\n />\n )}\n {publicIpAddress && (\n <LabeledValue\n label=\"Public IP Address\"\n value={<LinkWithClipboard text={publicIpAddress} url={`http://${publicIpAddress}${portSuffix}`} />}\n />\n )}\n {Boolean(ipv6Addresses?.length) && (\n <LabeledValue\n label={`IPv6 Address${ipv6Addresses.length > 1 ? 'es' : ''}`}\n value={ipv6Addresses.map((ipv6) => (\n <LinkWithClipboard key={ipv6.ip} text={ipv6.ip} url={ipv6.url} />\n ))}\n />\n )}\n </LabeledValueList>\n );\n};\n","import { module } from 'angular';\nimport { react2angular } from 'react2angular';\n\nimport { withErrorBoundary } from '@spinnaker/core';\n\nimport { InstanceDns } from './InstanceDns';\n\nexport const INSTANCE_DNS_COMPONENT = 'spinnaker.application.instanceDns.component';\n\nmodule(INSTANCE_DNS_COMPONENT, []).component(\n 'instanceDns',\n react2angular(withErrorBoundary(InstanceDns, 'instanceDns'), [\n 'instancePort',\n 'ipv6Addresses',\n 'permanentIps',\n 'privateDnsName',\n 'privateIpAddress',\n 'publicDnsName',\n 'publicIpAddress',\n ]),\n);\n","import { UISref } from '@uirouter/react';\nimport { UIRouterContextComponent } from '@uirouter/react-hybrid';\nimport { orderBy } from 'lodash';\nimport React from 'react';\n\nimport { CollapsibleSection, FirewallLabels } from '@spinnaker/core';\n\nimport type { IAmazonInstance } from '../../domain';\n\nexport interface IInstanceSecurityGroupsProps {\n instance: IAmazonInstance;\n}\n\nexport const InstanceSecurityGroups = ({ instance }: IInstanceSecurityGroupsProps) => {\n const { account, region, provider, securityGroups, vpcId } = instance;\n const sortedSecurityGroups = orderBy(securityGroups, ['groupName'], ['asc']);\n const securityGroupLabel = FirewallLabels.get('Firewalls');\n\n return (\n <CollapsibleSection heading={securityGroupLabel} defaultExpanded={true}>\n <UIRouterContextComponent>\n <ul>\n {(sortedSecurityGroups || []).map((sg) => (\n <li key={sg.groupId}>\n <UISref\n to=\"^.firewallDetails\"\n params={{\n name: sg.groupName,\n accountId: account,\n region,\n vpcId,\n provider,\n }}\n >\n <a>\n {sg.groupName} ({sg.groupId})\n </a>\n </UISref>\n </li>\n ))}\n </ul>\n </UIRouterContextComponent>\n </CollapsibleSection>\n );\n};\n","import { module } from 'angular';\nimport { react2angular } from 'react2angular';\n\nimport { withErrorBoundary } from '@spinnaker/core';\n\nimport { InstanceSecurityGroups } from './InstanceSecurityGroups';\n\nexport const INSTANCE_SECURITY_GROUPS_COMPONENT = 'spinnaker.application.instanceSecurityGroups.component';\n\nmodule(INSTANCE_SECURITY_GROUPS_COMPONENT, []).component(\n 'instanceSecurityGroups',\n react2angular(withErrorBoundary(InstanceSecurityGroups, 'instanceSecurityGroups'), ['instance']),\n);\n","import React from 'react';\n\nimport { CollapsibleSection, InstanceLoadBalancerHealth, robotToHuman, Tooltip } from '@spinnaker/core';\nimport type { IAmazonHealth } from '../../domain';\n\nexport type MetricTypes = 'LoadBalancer' | 'TargetGroup';\n\nexport interface CustomHealthLink {\n type: string;\n href: string;\n text: string;\n}\n\nexport interface IInstanceStatusProps {\n healthMetrics: IAmazonHealth[];\n healthState: string;\n metricTypes: MetricTypes[];\n customHealthUrl?: CustomHealthLink;\n privateIpAddress?: string;\n}\n\nexport const InstanceStatus = ({\n healthMetrics,\n healthState,\n metricTypes,\n customHealthUrl,\n privateIpAddress,\n}: IInstanceStatusProps) => {\n const hasLoadBalancer = metricTypes.includes('LoadBalancer');\n const hasTargetGroup = metricTypes.includes('TargetGroup');\n\n return (\n <CollapsibleSection heading=\"Status\" defaultExpanded={true}>\n {!healthMetrics.length && (\n <p>{healthState === 'Starting' ? 'Starting' : 'No health metrics found for this instance'}</p>\n )}\n <dl className=\"horizontal-when-filters-collapsed\">\n {healthMetrics\n .sort((a: IAmazonHealth, b: IAmazonHealth) => (a.type < b.type ? -1 : a.type > b.type ? 1 : 0))\n .map((metric: IAmazonHealth) => (\n <React.Fragment key={`${metric.type}-${metric.description}`}>\n <dt>{robotToHuman(metric.type)}</dt>\n <dd>\n {!metricTypes.includes(metric.type as MetricTypes) && (\n <div>\n <Tooltip value={metric.state.toLowerCase() === 'down' ? metric.description : ''} placement=\"left\">\n <span>\n <span className={`glyphicon glyphicon-${metric.state}-triangle`} />\n <span>{robotToHuman(metric.state)}</span>\n </span>\n </Tooltip>\n <span className=\"pad-left small\">\n {metric.healthCheckUrl && (\n <a target=\"_blank\" href={metric.healthCheckUrl}>\n Health Check\n </a>\n )}\n {metric.healthCheckUrl && metric.statusPageUrl && <span> | </span>}\n {metric.statusPageUrl && (\n <a target=\"_blank\" href={metric.statusPageUrl}>\n Status\n </a>\n )}\n {customHealthUrl && metric.type === customHealthUrl.type && (\n <span>\n {' '}\n |{' '}\n <a target=\"_blank\" href={customHealthUrl.href}>\n {customHealthUrl.text}\n </a>\n </span>\n )}\n </span>\n </div>\n )}\n {hasLoadBalancer &&\n metric.type === 'LoadBalancer' &&\n (metric.loadBalancers || []).map((lb) => (\n <InstanceLoadBalancerHealth key={`lb-${lb.name}`} loadBalancer={lb} />\n ))}\n {hasTargetGroup &&\n metric.type === 'TargetGroup' &&\n (metric.targetGroups || []).map((tg) => (\n <InstanceLoadBalancerHealth key={`tg-${tg.name}`} loadBalancer={tg} ipAddress={privateIpAddress} />\n ))}\n </dd>\n </React.Fragment>\n ))}\n </dl>\n </CollapsibleSection>\n );\n};\n","import { module } from 'angular';\nimport { react2angular } from 'react2angular';\n\nimport { withErrorBoundary } from '@spinnaker/core';\n\nimport { InstanceStatus } from './InstanceStatus';\n\nexport const INSTANCE_STATUS_COMPONENT = 'spinnaker.application.instanceStatus.component';\n\nmodule(INSTANCE_STATUS_COMPONENT, []).component(\n 'instanceStatus',\n react2angular(withErrorBoundary(InstanceStatus, 'instanceStatus'), [\n 'healthMetrics',\n 'healthState',\n 'metricTypes',\n 'customHealthUrl',\n 'privateIpAddress',\n ]),\n);\n","import { orderBy } from 'lodash';\nimport React from 'react';\n\nimport { CollapsibleSection, LabeledValue } from '@spinnaker/core';\n\nexport interface IInstanceTagsProps {\n tags: Array<{\n key: string;\n value: string;\n }>;\n}\n\nexport const InstanceTags = ({ tags }: IInstanceTagsProps) => {\n const sortedTags = orderBy(tags, ['key'], ['asc']);\n return (\n <CollapsibleSection heading=\"Tags\" defaultExpanded={true}>\n {!tags.length && <div>No tags associated with this server</div>}\n {tags.length && sortedTags.map((tag) => <LabeledValue key={tag.key} label={tag.key} value={tag.value} />)}\n </CollapsibleSection>\n );\n};\n","import { module } from 'angular';\nimport { react2angular } from 'react2angular';\n\nimport { withErrorBoundary } from '@spinnaker/core';\n\nimport { InstanceTags } from './InstanceTags';\n\nexport const INSTANCE_TAGS_COMPONENT = 'spinnaker.application.instanceTags.component';\n\nmodule(INSTANCE_TAGS_COMPONENT, []).component(\n 'instanceTags',\n react2angular(withErrorBoundary(InstanceTags, 'instanceTags'), ['tags']),\n);\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","import { UISref, UISrefActive } from '@uirouter/react';\nimport { orderBy } from 'lodash';\nimport React from 'react';\n\nimport { HealthCounts, LoadBalancerInstances, LoadBalancerServerGroup } from '@spinnaker/core';\nimport type { IAmazonApplicationLoadBalancer, ITargetGroup } from '../domain/IAmazonLoadBalancer';\n\nimport './targetGroup.less';\n\nexport interface ITargetGroupProps {\n loadBalancer: IAmazonApplicationLoadBalancer;\n targetGroup: ITargetGroup;\n showServerGroups: boolean;\n showInstances: boolean;\n}\n\nexport class TargetGroup extends React.Component<ITargetGroupProps> {\n public render(): React.ReactElement<TargetGroup> {\n const { targetGroup, showInstances, showServerGroups, loadBalancer } = this.props;\n\n const ServerGroups = orderBy(\n targetGroup.serverGroups,\n ['isDisabled', 'name'],\n ['asc', 'desc'],\n ).map((serverGroup) => (\n <LoadBalancerServerGroup\n key={serverGroup.name}\n account={serverGroup.account}\n region={serverGroup.region}\n serverGroup={serverGroup}\n showInstances={showInstances}\n />\n ));\n\n const params = {\n loadBalancerName: loadBalancer.name,\n region: targetGroup.region,\n accountId: targetGroup.account,\n name: targetGroup.name,\n vpcId: targetGroup.vpcId,\n provider: targetGroup.cloudProvider,\n };\n\n return (\n <div className=\"target-group-container container-fluid no-padding\">\n <UISrefActive class=\"active\">\n <UISref to=\".targetGroupDetails\" 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.name}</div>\n <div className=\"col-md-4 text-right\">\n <HealthCounts container={targetGroup.instanceCounts} />\n </div>\n </div>\n </UISref>\n </UISrefActive>\n {showServerGroups && ServerGroups}\n {!showServerGroups && showInstances && (\n <LoadBalancerInstances serverGroups={targetGroup.serverGroups} instances={targetGroup.instances} />\n )}\n </div>\n );\n }\n}\n","import { isEqual } from 'lodash';\nimport React from 'react';\n\nimport type { ILoadBalancerClusterContainerProps } from '@spinnaker/core';\nimport { LoadBalancerClusterContainer } from '@spinnaker/core';\n\nimport { TargetGroup } from './TargetGroup';\nimport type { IAmazonApplicationLoadBalancer } from '../domain/IAmazonLoadBalancer';\n\nexport class AmazonLoadBalancerClusterContainer 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 IAmazonApplicationLoadBalancer).targetGroups || []).map((t) => t.name),\n ((this.props.loadBalancer as IAmazonApplicationLoadBalancer).targetGroups || []).map((t) => t.name),\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<AmazonLoadBalancerClusterContainer> {\n const { loadBalancer, showInstances, showServerGroups } = this.props;\n\n if (loadBalancer.loadBalancerType !== 'classic') {\n const alb = loadBalancer as IAmazonApplicationLoadBalancer;\n const TargetGroups = alb.targetGroups.map((targetGroup) => {\n return (\n <TargetGroup\n key={targetGroup.name}\n loadBalancer={loadBalancer as IAmazonApplicationLoadBalancer}\n targetGroup={targetGroup}\n showInstances={showInstances}\n showServerGroups={showServerGroups}\n />\n );\n });\n return <div className=\"cluster-container\">{TargetGroups}</div>;\n } else {\n // Classic load balancer\n return <LoadBalancerClusterContainer {...this.props} />;\n }\n }\n}\n","import { flatten } from 'lodash';\nimport { $q } from 'ngimport';\n\nimport type { Application, ILoadBalancer } from '@spinnaker/core';\nimport { AccountService } from '@spinnaker/core';\nimport type { IAmazonApplicationLoadBalancer, IAmazonHealth, IAmazonServerGroup, ITargetGroup } from '../domain';\n\nexport class AmazonLoadBalancerDataUtils {\n private static buildTargetGroup(match: ITargetGroup, serverGroup: IAmazonServerGroup): ITargetGroup {\n if (!match) {\n return null;\n }\n\n const targetGroup: ITargetGroup = {\n name: match.name,\n vpcId: match.vpcId,\n cloudProvider: match.cloudProvider,\n account: match.account,\n region: match.region,\n loadBalancerNames: match.loadBalancerNames,\n } as ITargetGroup;\n targetGroup.instanceCounts = { up: 0, down: 0, succeeded: 0, failed: 0, outOfService: 0, unknown: 0, starting: 0 };\n\n serverGroup.instances.forEach((instance) => {\n const tgHealth: IAmazonHealth = instance.health.find((h) => h.type === 'TargetGroup') as IAmazonHealth;\n if (tgHealth) {\n const matchedHealth: ILoadBalancer = tgHealth.targetGroups.find((tg) => tg.name === match.name);\n\n if (matchedHealth !== undefined && matchedHealth.healthState !== undefined) {\n const healthState = matchedHealth.healthState.toLowerCase();\n if (targetGroup.instanceCounts[healthState] !== undefined) {\n targetGroup.instanceCounts[healthState]++;\n }\n }\n }\n });\n return targetGroup;\n }\n\n public static populateTargetGroups(\n application: Application,\n serverGroup: IAmazonServerGroup,\n ): PromiseLike<ITargetGroup[]> {\n return $q\n .all([AccountService.getAccountDetails(serverGroup.account), application.getDataSource('loadBalancers').ready()])\n .then((data) => {\n const awsAccount = (data[0] && data[0].awsAccount) || serverGroup.account;\n const loadBalancers: IAmazonApplicationLoadBalancer[] = (application.loadBalancers\n .data as ILoadBalancer[]).filter(\n (lb) => lb.loadBalancerType === 'application' || lb.loadBalancerType === 'network',\n ) as IAmazonApplicationLoadBalancer[];\n const targetGroups = serverGroup.targetGroups\n .map((targetGroupName: string) => {\n const allTargetGroups = flatten(loadBalancers.map((lb) => lb.targetGroups || []));\n const targetGroup = allTargetGroups.find(\n (tg) => tg.name === targetGroupName && tg.region === serverGroup.region && tg.account === awsAccount,\n );\n return this.buildTargetGroup(targetGroup, serverGroup);\n })\n .filter((tg) => tg);\n return targetGroups;\n });\n }\n}\n","// This is all mercilessly copied from LoadBalancersTag.tsx. This should be cleaned up at some point\n// Probably when we convert clusters view to React.\n\nimport { sortBy } from 'lodash';\nimport React from 'react';\n\nimport type { ILoadBalancer, ILoadBalancersTagProps } from '@spinnaker/core';\nimport {\n HealthCounts,\n HoverablePopover,\n LoadBalancerDataUtils,\n logger,\n ReactInjector,\n Spinner,\n Tooltip,\n} from '@spinnaker/core';\n\nimport { AmazonLoadBalancerDataUtils } from './amazonLoadBalancerDataUtils';\nimport type { IAmazonServerGroup, ITargetGroup } from '../domain';\n\ninterface ILoadBalancerListItemProps {\n loadBalancer: ILoadBalancer | ITargetGroup;\n onItemClick: (loadBalancer: ILoadBalancer | ITargetGroup) => void;\n}\n\ninterface ILoadBalancerSingleItemProps extends ILoadBalancerListItemProps {\n label: string;\n}\n\nclass LoadBalancerListItem extends React.Component<ILoadBalancerListItemProps> {\n private onClick = (e: React.MouseEvent<HTMLElement>): void => {\n this.props.onItemClick(this.props.loadBalancer);\n e.nativeEvent.preventDefault(); // yay angular JQueryEvent still listening to the click event...\n };\n\n public render(): React.ReactElement<LoadBalancerListItem> {\n return (\n <a onClick={this.onClick}>\n <span className=\"name\">{this.props.loadBalancer.name}</span>\n <HealthCounts container={this.props.loadBalancer.instanceCounts} />\n </a>\n );\n }\n}\n\nclass LoadBalancerButton extends React.Component<ILoadBalancerSingleItemProps> {\n private onClick = (e: React.MouseEvent<HTMLElement>): void => {\n this.props.onItemClick(this.props.loadBalancer);\n e.nativeEvent.preventDefault(); // yay angular JQueryEvent still listening to the click event...\n };\n\n public render(): React.ReactElement<LoadBalancerButton> {\n return (\n <Tooltip value={`${this.props.label || 'Load Balancer'}: ${this.props.loadBalancer.name}`}>\n <button className=\"btn btn-link no-padding\" onClick={this.onClick}>\n <span className=\"badge badge-counter\">\n <span className=\"icon\">\n <i className=\"fa icon-sitemap\" />\n </span>\n </span>\n </button>\n </Tooltip>\n );\n }\n}\n\nexport interface IAmazonLoadBalancersTagState {\n loadBalancers: ILoadBalancer[];\n targetGroups: ITargetGroup[];\n isLoading: boolean;\n}\n\nexport class AmazonLoadBalancersTag extends React.Component<ILoadBalancersTagProps, IAmazonLoadBalancersTagState> {\n private loadBalancersRefreshUnsubscribe: () => void;\n private mounted = false;\n\n constructor(props: ILoadBalancersTagProps) {\n super(props);\n this.state = {\n loadBalancers: [],\n targetGroups: [],\n isLoading: true,\n };\n }\n\n private showLoadBalancerDetails = (loadBalancer: ILoadBalancer): void => {\n const { $state } = ReactInjector;\n const serverGroup = this.props.serverGroup;\n logger.log({ category: 'Cluster Pod', action: `Load Load Balancer Details (multiple menu)` });\n const nextState = $state.current.name.endsWith('.clusters') ? '.loadBalancerDetails' : '^.loadBalancerDetails';\n $state.go(nextState, {\n region: serverGroup.region,\n accountId: serverGroup.account,\n name: loadBalancer.name,\n provider: serverGroup.type,\n });\n };\n\n private showTargetGroupDetails = (targetGroup: ITargetGroup): void => {\n const { $state } = ReactInjector;\n logger.log({ category: 'Cluster Pod', action: `Load Target Group Details (multiple menu)` });\n const nextState = $state.current.name.endsWith('.clusters') ? '.targetGroupDetails' : '^.targetGroupDetails';\n $state.go(nextState, {\n region: targetGroup.region,\n accountId: targetGroup.account,\n name: targetGroup.name,\n provider: 'aws',\n loadBalancerName: targetGroup.loadBalancerNames[0],\n });\n };\n\n private handleShowPopover = () => {\n logger.log({ category: 'Cluster Pod', action: `Show Load Balancers Menu` });\n };\n\n private handleClick = (e: React.MouseEvent<HTMLElement>): void => {\n e.preventDefault();\n e.stopPropagation();\n };\n\n public componentDidMount(): void {\n this.mounted = true;\n this.loadBalancersRefreshUnsubscribe = this.props.application.getDataSource('loadBalancers').onRefresh(null, () => {\n this.forceUpdate();\n });\n\n LoadBalancerDataUtils.populateLoadBalancers(this.props.application, this.props.serverGroup).then(\n (loadBalancers) => {\n if (this.mounted) {\n this.setState({ loadBalancers, isLoading: false });\n }\n },\n );\n AmazonLoadBalancerDataUtils.populateTargetGroups(\n this.props.application,\n this.props.serverGroup as IAmazonServerGroup,\n ).then((targetGroups: ITargetGroup[]) => {\n if (this.mounted) {\n this.setState({ targetGroups });\n }\n });\n }\n\n public componentWillUnmount(): void {\n this.mounted = false;\n this.loadBalancersRefreshUnsubscribe();\n }\n\n public render(): React.ReactElement<AmazonLoadBalancersTag> {\n const { loadBalancers, targetGroups, isLoading } = this.state;\n\n const targetGroupCount = (targetGroups && targetGroups.length) || 0;\n const loadBalancerCount = (loadBalancers && loadBalancers.length) || 0;\n const totalCount = targetGroupCount + loadBalancerCount;\n\n if (!totalCount) {\n return isLoading ? <Spinner size=\"nano\" /> : null;\n }\n\n const className = `load-balancers-tag ${totalCount > 1 ? 'overflowing' : ''}`;\n const popover = (\n <div className=\"menu-load-balancers\">\n {loadBalancerCount > 0 && <div className=\"menu-load-balancers-header\">Load Balancers</div>}\n {sortBy(loadBalancers, 'name').map((loadBalancer) => (\n <LoadBalancerListItem\n key={loadBalancer.name}\n loadBalancer={loadBalancer}\n onItemClick={this.showLoadBalancerDetails}\n />\n ))}\n\n {targetGroupCount > 0 && <div className=\"menu-load-balancers-header\">Target Groups</div>}\n {sortBy(targetGroups, 'name').map((targetGroup) => (\n <LoadBalancerListItem\n key={targetGroup.name}\n loadBalancer={targetGroup}\n onItemClick={this.showTargetGroupDetails}\n />\n ))}\n </div>\n );\n\n return (\n <span className={className}>\n {totalCount > 1 && (\n <HoverablePopover\n delayShow={100}\n delayHide={150}\n onShow={this.handleShowPopover}\n placement=\"bottom\"\n template={popover}\n hOffsetPercent=\"80%\"\n container={this.props.container}\n className=\"no-padding menu-load-balancers\"\n >\n <button onClick={this.handleClick} className=\"btn btn-link btn-multiple-load-balancers clearfix no-padding\">\n <span className=\"badge badge-counter\">\n <span className=\"icon\">\n <i className=\"fa icon-sitemap\" />\n </span>{' '}\n {totalCount}\n </span>\n </button>\n </HoverablePopover>\n )}\n\n {loadBalancers.length === 1 && targetGroups.length === 0 && (\n <span className=\"btn-load-balancer\">\n <LoadBalancerButton\n key={loadBalancers[0].name}\n label=\"Load Balancer\"\n loadBalancer={loadBalancers[0]}\n onItemClick={this.showLoadBalancerDetails}\n />\n </span>\n )}\n\n {targetGroups.length === 1 && loadBalancers.length === 0 && (\n <span className=\"btn-load-balancer\">\n <LoadBalancerButton\n key={targetGroups[0].name}\n label=\"Target Group\"\n loadBalancer={targetGroups[0]}\n onItemClick={this.showTargetGroupDetails}\n />\n </span>\n )}\n </span>\n );\n }\n}\n","import { chain, filter, flatten, map } from 'lodash';\nimport { $q } from 'ngimport';\n\nimport type { Application, IHealth, IInstance, IServerGroup, IVpc } from '@spinnaker/core';\nimport { AccountService, NameUtils, SETTINGS } from '@spinnaker/core';\nimport { AWSProviderSettings } from '../aws.settings';\nimport type {\n IALBListenerCertificate,\n IAmazonApplicationLoadBalancer,\n IAmazonApplicationLoadBalancerUpsertCommand,\n IAmazonClassicLoadBalancer,\n IAmazonClassicLoadBalancerUpsertCommand,\n IAmazonLoadBalancer,\n IAmazonNetworkLoadBalancerUpsertCommand,\n IAmazonServerGroup,\n IApplicationLoadBalancerSourceData,\n IClassicListenerDescription,\n IClassicLoadBalancerSourceData,\n INetworkLoadBalancerSourceData,\n ITargetGroup,\n} from '../domain';\nimport { VpcReader } from '../vpc/VpcReader';\n\nexport class AwsLoadBalancerTransformer {\n private updateHealthCounts(container: IServerGroup | ITargetGroup | IAmazonLoadBalancer): void {\n const instances = container.instances;\n\n container.instanceCounts = {\n up: instances.filter((instance) => instance.health[0].state === 'InService').length,\n down: instances.filter((instance) => instance.healthState === 'Down').length,\n outOfService: instances.filter((instance) => instance.healthState === 'OutOfService').length,\n starting: undefined,\n succeeded: undefined,\n failed: undefined,\n unknown: undefined,\n };\n\n if ((container as ITargetGroup | IAmazonLoadBalancer).serverGroups) {\n const serverGroupInstances = flatten((container as ITargetGroup).serverGroups.map((sg) => sg.instances));\n container.instanceCounts.up = serverGroupInstances.filter(\n (instance) => instance.health[0].state === 'InService',\n ).length;\n container.instanceCounts.down = serverGroupInstances.filter((instance) => instance.healthState === 'Down').length;\n container.instanceCounts.outOfService = serverGroupInstances.filter(\n (instance) => instance.healthState === 'OutOfService',\n ).length;\n }\n }\n\n private transformInstance(instance: IInstance, provider: string, account: string, region: string): void {\n // instance in this case should be some form if instance source data, but force to 'any' type to fix\n // instnace health in load balancers until we can actually shape this bit properly\n const health: IHealth = (instance.health as any) || ({} as IHealth);\n if (health.state === 'healthy') {\n // Target groups use 'healthy' instead of 'InService' and a lot of deck expects InService\n // to surface health in the UI; just set it as InService since we don't really care the\n // specific state name... yet\n health.state = 'InService';\n }\n instance.provider = provider;\n instance.account = account;\n instance.region = region;\n instance.healthState = health.state ? (health.state === 'InService' ? 'Up' : 'Down') : 'OutOfService';\n instance.health = [health];\n }\n\n private addVpcNameToContainer(\n container: IAmazonLoadBalancer | ITargetGroup,\n ): (vpcs: IVpc[]) => IAmazonLoadBalancer | ITargetGroup {\n return (vpcs: IVpc[]) => {\n const match = vpcs.find((test) => test.id === container.vpcId);\n container.vpcName = match ? match.name : '';\n return container;\n };\n }\n\n private normalizeServerGroups(\n serverGroups: IServerGroup[],\n container: IAmazonLoadBalancer | ITargetGroup,\n containerType: string,\n healthType: string,\n ): void {\n serverGroups.forEach((serverGroup) => {\n serverGroup.account = serverGroup.account || container.account;\n serverGroup.region = serverGroup.region || container.region;\n serverGroup.cloudProvider = serverGroup.cloudProvider || container.cloudProvider;\n\n if (serverGroup.detachedInstances) {\n serverGroup.detachedInstances = (serverGroup.detachedInstances as any).map((instanceId: string) => {\n return { id: instanceId } as IInstance;\n });\n serverGroup.instances = serverGroup.instances.concat(serverGroup.detachedInstances);\n } else {\n serverGroup.detachedInstances = [];\n }\n\n serverGroup.instances.forEach((instance) => {\n this.transformInstance(instance, container.type, container.account, container.region);\n (instance as any)[containerType] = [container.name];\n (instance.health as any).type = healthType;\n });\n this.updateHealthCounts(serverGroup);\n });\n }\n\n private normalizeTargetGroup(targetGroup: ITargetGroup): PromiseLike<ITargetGroup> {\n this.normalizeServerGroups(targetGroup.serverGroups, targetGroup, 'targetGroups', 'TargetGroup');\n\n const activeServerGroups = filter(targetGroup.serverGroups, { isDisabled: false });\n targetGroup.provider = targetGroup.type;\n targetGroup.instances = chain(activeServerGroups).map('instances').flatten<IInstance>().value();\n targetGroup.detachedInstances = chain(activeServerGroups).map('detachedInstances').flatten<IInstance>().value();\n this.updateHealthCounts(targetGroup);\n\n return $q.all([VpcReader.listVpcs(), AccountService.listAllAccounts()]).then(([vpcs, accounts]) => {\n const tg = this.addVpcNameToContainer(targetGroup)(vpcs) as ITargetGroup;\n\n tg.serverGroups = tg.serverGroups.map((serverGroup) => {\n const account = accounts.find((x) => x.name === serverGroup.account);\n const cloudProvider = (account && account.cloudProvider) || serverGroup.cloudProvider;\n\n serverGroup.cloudProvider = cloudProvider;\n serverGroup.instances.forEach((instance) => {\n instance.cloudProvider = cloudProvider;\n instance.provider = cloudProvider;\n });\n\n return { ...serverGroup, cloudProvider };\n });\n\n return tg;\n });\n }\n\n private normalizeActions(loadBalancer: IAmazonApplicationLoadBalancer) {\n if (loadBalancer.loadBalancerType === 'application') {\n const alb = loadBalancer as IAmazonApplicationLoadBalancer;\n\n // Sort the actions by the order specified since amazon does not return them in order of order\n alb.listeners.forEach((l) => {\n l.defaultActions.sort((a, b) => a.order - b.order);\n l.rules.forEach((r) => r.actions.sort((a, b) => a.order - b.order));\n });\n }\n }\n\n public normalizeLoadBalancer(loadBalancer: IAmazonLoadBalancer): PromiseLike<IAmazonLoadBalancer> {\n this.normalizeServerGroups(loadBalancer.serverGroups, loadBalancer, 'loadBalancers', 'LoadBalancer');\n\n let serverGroups = loadBalancer.serverGroups;\n if ((loadBalancer as IAmazonApplicationLoadBalancer).targetGroups) {\n const appLoadBalancer = loadBalancer as IAmazonApplicationLoadBalancer;\n appLoadBalancer.targetGroups.forEach((targetGroup) => this.normalizeTargetGroup(targetGroup));\n serverGroups = flatten<IAmazonServerGroup>(map(appLoadBalancer.targetGroups, 'serverGroups'));\n }\n\n loadBalancer.loadBalancerType = loadBalancer.loadBalancerType || 'classic';\n loadBalancer.provider = loadBalancer.type;\n\n this.normalizeActions(loadBalancer as IAmazonApplicationLoadBalancer);\n\n const activeServerGroups = filter(serverGroups, { isDisabled: false });\n loadBalancer.instances = chain(activeServerGroups).map('instances').flatten<IInstance>().value();\n loadBalancer.detachedInstances = chain(activeServerGroups).map('detachedInstances').flatten<IInstance>().value();\n this.updateHealthCounts(loadBalancer);\n return VpcReader.listVpcs().then(\n (vpcs: IVpc[]) => this.addVpcNameToContainer(loadBalancer)(vpcs) as IAmazonLoadBalancer,\n );\n }\n\n public static convertClassicLoadBalancerForEditing(\n loadBalancer: IAmazonClassicLoadBalancer,\n ): IAmazonClassicLoadBalancerUpsertCommand {\n const toEdit: IAmazonClassicLoadBalancerUpsertCommand = {\n availabilityZones: undefined,\n isInternal: loadBalancer.isInternal,\n region: loadBalancer.region,\n cloudProvider: loadBalancer.cloudProvider,\n credentials: loadBalancer.credentials || loadBalancer.account,\n listeners: loadBalancer.listeners,\n loadBalancerType: 'classic',\n name: loadBalancer.name,\n regionZones: loadBalancer.availabilityZones,\n securityGroups: loadBalancer.securityGroups,\n vpcId: loadBalancer.vpcId,\n healthCheck: undefined,\n healthTimeout: loadBalancer.healthTimeout,\n healthInterval: loadBalancer.healthInterval,\n healthyThreshold: loadBalancer.healthyThreshold,\n unhealthyThreshold: loadBalancer.unhealthyThreshold,\n healthCheckProtocol: loadBalancer.healthCheckProtocol,\n healthCheckPort: loadBalancer.healthCheckPort,\n healthCheckPath: loadBalancer.healthCheckPath,\n idleTimeout: loadBalancer.idleTimeout || 60,\n subnetType: loadBalancer.subnetType,\n };\n\n if (loadBalancer.elb) {\n const elb = loadBalancer.elb as IClassicLoadBalancerSourceData;\n toEdit.securityGroups = elb.securityGroups;\n toEdit.vpcId = elb.vpcid || elb.vpcId;\n\n if (elb.listenerDescriptions) {\n toEdit.listeners = elb.listenerDescriptions.map(\n (description: any): IClassicListenerDescription => {\n const listener = description.listener;\n if (listener.sslcertificateId) {\n const splitCertificateId = listener.sslcertificateId.split('/');\n listener.sslcertificateId = splitCertificateId[1];\n listener.sslCertificateType = splitCertificateId[0].split(':')[2];\n }\n return {\n internalProtocol: listener.instanceProtocol,\n internalPort: listener.instancePort,\n externalProtocol: listener.protocol,\n externalPort: listener.loadBalancerPort,\n sslCertificateId: listener.sslcertificateId,\n sslCertificateName: listener.sslcertificateId,\n sslCertificateType: listener.sslCertificateType,\n policyNames: description.policyNames,\n };\n },\n );\n }\n\n if (elb.healthCheck && elb.healthCheck.target) {\n toEdit.healthTimeout = elb.healthCheck.timeout;\n toEdit.healthInterval = elb.healthCheck.interval;\n toEdit.healthyThreshold = elb.healthCheck.healthyThreshold;\n toEdit.unhealthyThreshold = elb.healthCheck.unhealthyThreshold;\n\n const healthCheck = elb.healthCheck.target;\n const protocolIndex = healthCheck.indexOf(':');\n let pathIndex = healthCheck.indexOf('/');\n\n if (pathIndex === -1) {\n pathIndex = healthCheck.length;\n }\n\n if (protocolIndex !== -1) {\n toEdit.healthCheckProtocol = healthCheck.substring(0, protocolIndex);\n const healthCheckPort = Number(healthCheck.substring(protocolIndex + 1, pathIndex));\n toEdit.healthCheckPath = healthCheck.substring(pathIndex);\n if (!isNaN(healthCheckPort)) {\n toEdit.healthCheckPort = healthCheckPort;\n }\n }\n }\n }\n return toEdit;\n }\n\n public static convertApplicationLoadBalancerForEditing(\n loadBalancer: IAmazonApplicationLoadBalancer,\n ): IAmazonApplicationLoadBalancerUpsertCommand {\n const applicationName = NameUtils.parseLoadBalancerName(loadBalancer.name).application;\n\n // Since we build up toEdit as we go, much easier to declare as any, then cast at return time.\n const toEdit: IAmazonApplicationLoadBalancerUpsertCommand = {\n availabilityZones: undefined,\n isInternal: loadBalancer.isInternal,\n region: loadBalancer.region,\n loadBalancerType: 'application',\n cloudProvider: loadBalancer.cloudProvider,\n credentials: loadBalancer.account || loadBalancer.credentials,\n listeners: [],\n targetGroups: [],\n name: loadBalancer.name,\n regionZones: loadBalancer.availabilityZones,\n securityGroups: [],\n subnetType: loadBalancer.subnetType,\n vpcId: undefined,\n idleTimeout: loadBalancer.idleTimeout || 60,\n deletionProtection: loadBalancer.deletionProtection || false,\n ipAddressType: loadBalancer.ipAddressType || 'ipv4',\n dualstack: loadBalancer.ipAddressType === 'dualstack',\n };\n\n if (loadBalancer.elb) {\n const elb = loadBalancer.elb as IApplicationLoadBalancerSourceData;\n toEdit.securityGroups = elb.securityGroups;\n toEdit.vpcId = elb.vpcid || elb.vpcId;\n\n // Convert listeners\n if (elb.listeners) {\n toEdit.listeners = elb.listeners.map((listener) => {\n const certificates: IALBListenerCertificate[] = [];\n if (listener.certificates) {\n listener.certificates.forEach((cert) => {\n const certArnParts = cert.certificateArn.split(':');\n const certParts = certArnParts[5].split('/');\n certificates.push({\n certificateArn: cert.certificateArn,\n type: certArnParts[2],\n name: certParts[1],\n });\n });\n }\n\n (listener.defaultActions || []).forEach((action) => {\n if (action.targetGroupName) {\n action.targetGroupName = action.targetGroupName.replace(`${applicationName}-`, '');\n }\n action.redirectActionConfig = action.redirectConfig;\n });\n\n // Remove the default rule because it already exists in defaultActions\n listener.rules = (listener.rules || []).filter((l) => !l.default);\n listener.rules.forEach((rule) => {\n (rule.actions || []).forEach((action) => {\n if (action.targetGroupName) {\n action.targetGroupName = action.targetGroupName.replace(`${applicationName}-`, '');\n }\n action.redirectActionConfig = action.redirectConfig;\n });\n (rule.conditions || []).forEach((condition) => {\n if (condition.field === 'http-request-method') {\n condition.values = condition.httpRequestMethodConfig.values;\n }\n });\n rule.conditions = rule.conditions || [];\n });\n\n // Sort listener.rules by priority.\n listener.rules.sort((a, b) => (a.priority as number) - (b.priority as number));\n\n return {\n protocol: listener.protocol,\n port: listener.port,\n defaultActions: listener.defaultActions,\n certificates,\n rules: listener.rules || [],\n sslPolicy: listener.sslPolicy,\n };\n });\n }\n\n // Convert target groups\n if (elb.targetGroups) {\n toEdit.targetGroups = elb.targetGroups.map((targetGroup: any) => {\n return {\n name: targetGroup.targetGroupName.replace(`${applicationName}-`, ''),\n protocol: targetGroup.protocol,\n port: targetGroup.port,\n targetType: targetGroup.targetType,\n healthCheckProtocol: targetGroup.healthCheckProtocol,\n healthCheckPort: targetGroup.healthCheckPort,\n healthCheckPath: targetGroup.healthCheckPath,\n healthCheckTimeout: targetGroup.healthCheckTimeoutSeconds,\n healthCheckInterval: targetGroup.healthCheckIntervalSeconds,\n healthyThreshold: targetGroup.healthyThresholdCount,\n unhealthyThreshold: targetGroup.unhealthyThresholdCount,\n attributes: {\n deregistrationDelay: Number(targetGroup.attributes['deregistration_delay.timeout_seconds']),\n stickinessEnabled: targetGroup.attributes['stickiness.enabled'] === 'true',\n stickinessType: targetGroup.attributes['stickiness.type'],\n stickinessDuration: Number(targetGroup.attributes['stickiness.lb_cookie.duration_seconds']),\n multiValueHeadersEnabled: targetGroup.attributes['lambda.multi_value_headers.enabled'] === 'true',\n },\n };\n });\n }\n }\n return toEdit;\n }\n\n public static convertNetworkLoadBalancerForEditing(\n loadBalancer: IAmazonApplicationLoadBalancer,\n ): IAmazonNetworkLoadBalancerUpsertCommand {\n const applicationName = NameUtils.parseLoadBalancerName(loadBalancer.name).application;\n\n // Since we build up toEdit as we go, much easier to declare as any, then cast at return time.\n const toEdit: IAmazonNetworkLoadBalancerUpsertCommand = {\n availabilityZones: undefined,\n isInternal: loadBalancer.isInternal,\n region: loadBalancer.region,\n loadBalancerType: 'network',\n cloudProvider: loadBalancer.cloudProvider,\n credentials: loadBalancer.account || loadBalancer.credentials,\n listeners: [],\n targetGroups: [],\n name: loadBalancer.name,\n regionZones: loadBalancer.availabilityZones,\n securityGroups: [],\n subnetType: loadBalancer.subnetType,\n vpcId: undefined,\n deletionProtection: loadBalancer.deletionProtection,\n loadBalancingCrossZone: loadBalancer.loadBalancingCrossZone,\n ipAddressType: loadBalancer.ipAddressType || 'ipv4',\n dualstack: loadBalancer.ipAddressType === 'dualstack',\n };\n\n if (loadBalancer.elb) {\n const elb = loadBalancer.elb as INetworkLoadBalancerSourceData;\n toEdit.securityGroups = elb.securityGroups;\n toEdit.vpcId = elb.vpcid || elb.vpcId;\n\n // Convert listeners\n if (elb.listeners) {\n toEdit.listeners = elb.listeners.map((listener) => {\n const certificates: IALBListenerCertificate[] = [];\n if (listener.certificates) {\n listener.certificates.forEach((cert) => {\n const certArnParts = cert.certificateArn.split(':');\n const certParts = certArnParts[5].split('/');\n certificates.push({\n certificateArn: cert.certificateArn,\n type: certArnParts[2],\n name: certParts[1],\n });\n });\n }\n\n (listener.defaultActions || []).forEach((action) => {\n if (action.targetGroupName) {\n action.targetGroupName = action.targetGroupName.replace(`${applicationName}-`, '');\n }\n });\n\n // Remove the default rule because it already exists in defaultActions\n listener.rules = (listener.rules || []).filter((l) => !l.default);\n listener.rules.forEach((rule) => {\n (rule.actions || []).forEach((action) => {\n if (action.targetGroupName) {\n action.targetGroupName = action.targetGroupName.replace(`${applicationName}-`, '');\n }\n });\n rule.conditions = rule.conditions || [];\n });\n\n // Sort listener.rules by priority.\n listener.rules.sort((a, b) => (a.priority as number) - (b.priority as number));\n\n return {\n protocol: listener.protocol,\n port: listener.port,\n defaultActions: listener.defaultActions,\n certificates,\n rules: listener.rules || [],\n sslPolicy: listener.sslPolicy,\n };\n });\n }\n\n // Convert target groups\n if (elb.targetGroups) {\n toEdit.targetGroups = elb.targetGroups.map((targetGroup: any) => {\n return {\n name: targetGroup.targetGroupName.replace(`${applicationName}-`, ''),\n protocol: targetGroup.protocol,\n port: targetGroup.port,\n targetType: targetGroup.targetType,\n healthCheckProtocol: targetGroup.healthCheckProtocol,\n healthCheckPort: targetGroup.healthCheckPort,\n healthCheckTimeout: targetGroup.healthCheckTimeoutSeconds,\n healthCheckInterval: targetGroup.healthCheckIntervalSeconds,\n healthyThreshold: targetGroup.healthyThresholdCount,\n unhealthyThreshold: targetGroup.unhealthyThresholdCount,\n healthCheckPath: targetGroup.healthCheckPath,\n attributes: {\n deregistrationDelay: Number(targetGroup.attributes['deregistration_delay.timeout_seconds']),\n deregistrationDelayConnectionTermination: Boolean(\n targetGroup.attributes['deregistration_delay.connection_termination.enabled'] === 'true',\n ),\n preserveClientIp: Boolean(targetGroup.attributes['preserve_client_ip.enabled'] === 'true'),\n },\n };\n });\n }\n }\n return toEdit;\n }\n\n public static constructNewClassicLoadBalancerTemplate(\n application: Application,\n ): IAmazonClassicLoadBalancerUpsertCommand {\n const defaultCredentials = application.defaultCredentials.aws || AWSProviderSettings.defaults.account;\n const defaultRegion = application.defaultRegions.aws || AWSProviderSettings.defaults.region;\n const defaultSubnetType = AWSProviderSettings.defaults.subnetType;\n return {\n availabilityZones: undefined,\n name: '',\n stack: '',\n detail: '',\n loadBalancerType: 'classic',\n isInternal: false,\n cloudProvider: 'aws',\n credentials: defaultCredentials,\n region: defaultRegion,\n vpcId: null,\n subnetType: defaultSubnetType,\n healthCheck: undefined,\n healthCheckProtocol: 'HTTP',\n healthCheckPort: 7001,\n healthCheckPath: '/healthcheck',\n healthTimeout: 5,\n healthInterval: 10,\n healthyThreshold: 10,\n unhealthyThreshold: 2,\n idleTimeout: 60,\n regionZones: [],\n securityGroups: [],\n listeners: [\n {\n externalPort: 80,\n externalProtocol: 'HTTP',\n internalPort: 7001,\n internalProtocol: 'HTTP',\n },\n ],\n };\n }\n\n public static constructNewApplicationLoadBalancerTemplate(\n application: Application,\n ): IAmazonApplicationLoadBalancerUpsertCommand {\n const defaultCredentials = application.defaultCredentials.aws || AWSProviderSettings.defaults.account;\n const defaultRegion = application.defaultRegions.aws || AWSProviderSettings.defaults.region;\n const defaultSubnetType = AWSProviderSettings.defaults.subnetType;\n const defaultPort = application.attributes.instancePort || SETTINGS.defaultInstancePort;\n const defaultTargetGroupName = `targetgroup`;\n return {\n name: '',\n availabilityZones: undefined,\n stack: '',\n detail: '',\n loadBalancerType: 'application',\n ipAddressType: 'ipv4',\n dualstack: false,\n isInternal: false,\n cloudProvider: 'aws',\n credentials: defaultCredentials,\n region: defaultRegion,\n vpcId: null,\n subnetType: defaultSubnetType,\n idleTimeout: 60,\n deletionProtection: false,\n targetGroups: [\n {\n name: defaultTargetGroupName,\n protocol: 'HTTP',\n port: defaultPort,\n targetType: 'instance',\n healthCheckProtocol: 'HTTP',\n healthCheckPort: 'traffic-port',\n healthCheckPath: '/healthcheck',\n healthCheckTimeout: 5,\n healthCheckInterval: 10,\n healthyThreshold: 10,\n unhealthyThreshold: 2,\n attributes: {\n deregistrationDelay: 300,\n stickinessEnabled: false,\n stickinessType: 'lb_cookie',\n stickinessDuration: 8400,\n multiValueHeadersEnabled: false,\n },\n },\n ],\n regionZones: [],\n securityGroups: [],\n listeners: [\n {\n certificates: [],\n protocol: 'HTTP',\n port: 80,\n defaultActions: [\n {\n type: 'forward',\n targetGroupName: defaultTargetGroupName,\n },\n ],\n rules: [],\n },\n ],\n };\n }\n\n public static constructNewNetworkLoadBalancerTemplate(\n application: Application,\n ): IAmazonNetworkLoadBalancerUpsertCommand {\n const defaultCredentials = application.defaultCredentials.aws || AWSProviderSettings.defaults.account;\n const defaultRegion = application.defaultRegions.aws || AWSProviderSettings.defaults.region;\n const defaultSubnetType = AWSProviderSettings.defaults.subnetType;\n const defaultTargetGroupName = `targetgroup`;\n return {\n name: '',\n availabilityZones: undefined,\n stack: '',\n detail: '',\n loadBalancerType: 'network',\n isInternal: false,\n ipAddressType: 'ipv4',\n dualstack: false,\n cloudProvider: 'aws',\n credentials: defaultCredentials,\n region: defaultRegion,\n vpcId: null,\n subnetType: defaultSubnetType,\n deletionProtection: false,\n loadBalancingCrossZone: true,\n securityGroups: [],\n targetGroups: [\n {\n name: defaultTargetGroupName,\n protocol: 'TCP',\n port: 7001,\n targetType: 'instance',\n healthCheckProtocol: 'TCP',\n healthCheckPath: '/healthcheck',\n healthCheckPort: 'traffic-port',\n healthCheckTimeout: 5,\n healthCheckInterval: 10,\n healthyThreshold: 10,\n unhealthyThreshold: 10,\n attributes: {\n deregistrationDelay: 300,\n },\n },\n ],\n regionZones: [],\n listeners: [\n {\n certificates: [],\n protocol: 'TCP',\n port: 80,\n defaultActions: [\n {\n type: 'forward',\n targetGroupName: defaultTargetGroupName,\n },\n ],\n rules: [],\n },\n ],\n };\n }\n}\n","import React from 'react';\n\nimport type { IOverridableProps } from '@spinnaker/core';\nimport { Overridable } from '@spinnaker/core';\n\nexport interface ITargetGroupDetailsProps extends IOverridableProps {}\n\n@Overridable('loadBalancer.targetGroupDetails')\nexport class TargetGroupDetails extends React.Component<ITargetGroupDetailsProps> {\n public render() {\n return <h3>Target Group Details</h3>;\n }\n}\n","import React from 'react';\nimport type { Option } from 'react-select';\nimport Select from 'react-select';\n\nimport type { Application } from '@spinnaker/core';\nimport { Overridable, relativeTime, timestamp } from '@spinnaker/core';\nimport type { IAmazonCertificate } from '../../../domain';\n\nexport interface IAmazonCertificateSelectFieldProps {\n certificates: { [accountName: string]: IAmazonCertificate[] };\n accountName: string;\n currentValue: string;\n onCertificateSelect: (certificateName: string) => void;\n app: Application;\n}\n\n@Overridable('amazon.certificateSelectField')\nexport class AmazonCertificateSelectField extends React.Component<IAmazonCertificateSelectFieldProps> {\n public render() {\n const { certificates, accountName, onCertificateSelect, currentValue } = this.props;\n const certificatesForAccount = certificates[accountName] || [];\n const certificateOptions = certificatesForAccount.map((cert) => {\n return { label: cert.serverCertificateName, value: cert.serverCertificateName };\n });\n const currentCert = certificatesForAccount.find((c) => c.serverCertificateName === currentValue);\n return (\n <div style={{ width: '100%' }}>\n <Select\n className=\"input-sm\"\n wrapperStyle={{ width: '100%' }}\n clearable={true}\n required={true}\n options={certificateOptions}\n onChange={(value: Option<string>) => onCertificateSelect(value.value)}\n value={currentValue}\n />\n {currentCert && (\n <div className=\"small sp-margin-xs-top sp-margin-m-bottom sp-margin-m-left\">\n <div>\n Uploaded {relativeTime(currentCert.uploadDate)} ({timestamp(currentCert.uploadDate)})\n </div>\n <b>Expires {relativeTime(currentCert.expiration)}</b> ({timestamp(currentCert.expiration)})\n </div>\n )}\n </div>\n );\n }\n}\n","import React from 'react';\n\nimport { CheckboxInput, FormikFormField, HelpField, NumberInput } from '@spinnaker/core';\n\nexport const ALBAdvancedSettings = React.forwardRef<HTMLDivElement, {}>((_, ref) => (\n <div ref={ref}>\n <FormikFormField\n name=\"idleTimeout\"\n label=\"Idle Timeout\"\n help={<HelpField id=\"loadBalancer.advancedSettings.idleTimeout\" />}\n input={(inputProps) => <NumberInput {...inputProps} min={0} />}\n />\n\n <FormikFormField\n name=\"deletionProtection\"\n label=\"Protection\"\n help={<HelpField id=\"loadBalancer.advancedSettings.deletionProtection\" />}\n input={(inputProps) => <CheckboxInput {...inputProps} text=\"Enable delete protection\" />}\n />\n\n <FormikFormField\n name=\"dualstack\"\n label=\"Dualstack\"\n help={<HelpField id=\"loadBalancer.advancedSettings.albIpAddressType\" />}\n input={(inputProps) => <CheckboxInput {...inputProps} text=\"Assign Ipv4 and IPv6\" />}\n />\n </div>\n));\n","import type { FormikErrors } from 'formik';\nimport { Form } from 'formik';\nimport React from 'react';\nimport { Modal } from 'react-bootstrap';\n\nimport { FormikFormField, ModalClose, noop, ReactModal, SpinFormik, SubmitButton, TextInput } from '@spinnaker/core';\n\nimport type { IAuthenticateOidcActionConfig } from '../../OidcConfigReader';\n\nimport './ConfigureConfigModal.css';\n\nexport interface IConfigureOidcConfigModalProps {\n config: IAuthenticateOidcActionConfig;\n closeModal?(result?: any): void; // provided by ReactModal\n dismissModal?(rejection?: any): void; // provided by ReactModal\n}\n\nexport interface IConfigureOidcConfigModalState {\n initialValues: IAuthenticateOidcActionConfig;\n}\n\nexport class ConfigureOidcConfigModal extends React.Component<\n IConfigureOidcConfigModalProps,\n IConfigureOidcConfigModalState\n> {\n public static defaultProps: Partial<IConfigureOidcConfigModalProps> = {\n closeModal: noop,\n dismissModal: noop,\n };\n\n public static show(props: IConfigureOidcConfigModalProps): Promise<void> {\n return ReactModal.show(ConfigureOidcConfigModal, props);\n }\n\n constructor(props: IConfigureOidcConfigModalProps) {\n super(props);\n\n const config = props.config || ({} as IAuthenticateOidcActionConfig);\n\n this.state = {\n initialValues: {\n authorizationEndpoint: config.authorizationEndpoint || '',\n clientId: config.clientId || '',\n clientSecret: config.clientSecret || '',\n issuer: config.issuer || '',\n scope: config.scope || 'openid',\n sessionCookieName: config.sessionCookieName || 'AWSELBAuthSessionCookie',\n tokenEndpoint: config.tokenEndpoint || '',\n userInfoEndpoint: config.userInfoEndpoint || '',\n },\n };\n }\n\n private close = (reason?: any): void => {\n this.props.dismissModal(reason);\n };\n\n private submit = (data: IAuthenticateOidcActionConfig): void => {\n this.props.closeModal(data);\n };\n\n private validate = (): FormikErrors<IAuthenticateOidcActionConfig> => {\n return {};\n };\n\n public render() {\n const { initialValues } = this.state;\n\n const submitLabel = 'Save Client';\n\n return (\n <div className=\"configure-config-modal\">\n <SpinFormik<IAuthenticateOidcActionConfig>\n initialValues={initialValues}\n onSubmit={this.submit}\n validate={this.validate}\n render={({ isValid }) => (\n <Form className=\"form-horizontal\">\n <ModalClose dismiss={this.close} />\n <Modal.Header>\n <Modal.Title>Configure OIDC Client</Modal.Title>\n </Modal.Header>\n\n <Modal.Body>\n <FormikFormField\n name=\"issuer\"\n label=\"Issuer\"\n required={true}\n input={(props) => <TextInput {...props} placeholder=\"Enter the OpenId Provider\" />}\n />\n\n <FormikFormField\n name=\"authorizationEndpoint\"\n label=\"Authorization Endpoint\"\n required={true}\n input={(props) => <TextInput {...props} placeholder=\"Enter OpenID provider server endpoint\" />}\n />\n\n <FormikFormField\n name=\"tokenEndpoint\"\n label=\"Token Endpoint\"\n required={true}\n input={(props) => <TextInput {...props} placeholder=\"Enter a URI for your token endpoint\" />}\n />\n\n <FormikFormField\n name=\"userInfoEndpoint\"\n label=\"User info Endpoint\"\n required={true}\n input={(props) => <TextInput {...props} placeholder=\"Enter a URI for your user info endpoint\" />}\n />\n\n <FormikFormField\n name=\"clientId\"\n label=\"Client ID\"\n required={true}\n input={(props) => <TextInput {...props} placeholder=\"Enter the client ID\" />}\n />\n\n <FormikFormField\n name=\"clientSecret\"\n label=\"Client secret\"\n required={true}\n input={(props) => <TextInput {...props} placeholder=\"Enter the client secret\" />}\n />\n </Modal.Body>\n\n <Modal.Footer>\n <button className=\"btn btn-default\" onClick={this.close} type=\"button\">\n Cancel\n </button>\n <SubmitButton isDisabled={!isValid} submitting={false} isFormSubmit={true} label={submitLabel} />\n </Modal.Footer>\n </Form>\n )}\n />\n </div>\n );\n }\n}\n","import { Form } from 'formik';\nimport { pickBy } from 'lodash';\nimport React from 'react';\nimport { Modal } from 'react-bootstrap';\n\nimport {\n FormikFormField,\n HelpField,\n ModalClose,\n noop,\n ReactModal,\n ReactSelectInput,\n SelectInput,\n SpinFormik,\n SubmitButton,\n TextInput,\n} from '@spinnaker/core';\nimport type { IRedirectActionConfig } from '../../../domain';\n\nimport './ConfigureConfigModal.css';\n\nexport interface IConfigureRedirectConfigModalProps {\n config: IRedirectActionConfig;\n closeModal?(result?: any): void; // provided by ReactModal\n dismissModal?(rejection?: any): void; // provided by ReactModal\n}\n\nexport class ConfigureRedirectConfigModal extends React.Component<IConfigureRedirectConfigModalProps> {\n private initialValues: IRedirectActionConfig;\n\n public static defaultProps: Partial<IConfigureRedirectConfigModalProps> = {\n closeModal: noop,\n dismissModal: noop,\n };\n\n public static show(props: IConfigureRedirectConfigModalProps): Promise<void> {\n return ReactModal.show(ConfigureRedirectConfigModal, props);\n }\n\n constructor(props: IConfigureRedirectConfigModalProps) {\n super(props);\n\n const config = props.config || ({} as IRedirectActionConfig);\n\n this.initialValues = {\n host: config.host || '',\n path: config.path || '',\n port: config.port || '',\n protocol: config.protocol || undefined,\n query: config.query || '',\n statusCode: config.statusCode || 'HTTP_301',\n };\n }\n\n private close = (reason?: null): void => {\n this.props.dismissModal(reason);\n };\n\n private submit = (data: IRedirectActionConfig): void => {\n const filteredData: IRedirectActionConfig = pickBy(data, (value: string) => value && value !== '');\n this.props.closeModal(filteredData);\n };\n\n public render() {\n const submitLabel = 'Save Config';\n\n return (\n <div className=\"configure-config-modal\">\n <SpinFormik<IRedirectActionConfig>\n initialValues={this.initialValues}\n onSubmit={this.submit}\n render={({ isValid }) => (\n <Form className=\"form-horizontal\">\n <ModalClose dismiss={this.close} />\n <Modal.Header>\n <Modal.Title>\n Configure Redirect <HelpField id=\"aws.loadBalancer.redirect\" />\n </Modal.Title>\n </Modal.Header>\n\n <Modal.Body>\n <FormikFormField\n name=\"host\"\n label=\"Host\"\n required={false}\n input={(props) => <TextInput {...props} />}\n help={<HelpField id=\"aws.loadBalancer.redirect.host\" />}\n />\n <FormikFormField\n name=\"path\"\n label=\"Path\"\n required={false}\n input={(props) => <TextInput {...props} />}\n help={<HelpField id=\"aws.loadBalancer.redirect.path\" />}\n />\n <FormikFormField\n name=\"port\"\n label=\"Port\"\n required={false}\n input={(props) => <TextInput {...props} />}\n help={<HelpField id=\"aws.loadBalancer.redirect.port\" />}\n />\n <FormikFormField\n name=\"protocol\"\n label=\"Protocol\"\n required={false}\n input={(props) => (\n <ReactSelectInput\n {...props}\n stringOptions={['HTTP', 'HTTPS', '#{protocol}']}\n placeholder=\"Select Protocol\"\n clearable={false}\n style={{ width: '130px' }}\n />\n )}\n help={<HelpField id=\"aws.loadBalancer.redirect.protocol\" />}\n />\n <FormikFormField\n name=\"query\"\n label=\"Query\"\n required={false}\n input={(props) => <TextInput {...props} />}\n help={<HelpField id=\"aws.loadBalancer.redirect.query\" />}\n />\n <FormikFormField\n name=\"statusCode\"\n label=\"Status Code\"\n required={true}\n input={(props) => <SelectInput {...props} options={['HTTP_301', 'HTTP_302']} />}\n help={<HelpField id=\"aws.loadBalancer.redirect.statusCode\" />}\n />\n </Modal.Body>\n\n <Modal.Footer>\n <button className=\"btn btn-default\" onClick={this.close} type=\"button\">\n Cancel\n </button>\n <SubmitButton isDisabled={!isValid} submitting={false} isFormSubmit={true} label={submitLabel} />\n </Modal.Footer>\n </Form>\n )}\n />\n </div>\n );\n }\n}\n","import { REST } from '@spinnaker/core';\n\nexport interface IAuthenticateOidcActionConfig {\n authorizationEndpoint: string;\n authenticationRequestExtraParams?: any;\n clientId: string;\n clientSecret?: string;\n idpLogoutUrl?: string;\n issuer: string;\n scope: string;\n sessionCookieName: string;\n sessionTimeout?: number;\n tokenEndpoint: string;\n userInfoEndpoint: string;\n}\n\nexport class OidcConfigReader {\n public static getOidcConfigsByApp(app: string): PromiseLike<IAuthenticateOidcActionConfig[]> {\n return REST('/oidcConfigs').query({ app }).get();\n }\n}\n","import { groupBy, sortBy } from 'lodash';\n\nimport { AccountService, CertificateReader } from '@spinnaker/core';\nimport type { IAmazonCertificate } from '../domain';\n\nexport class AmazonCertificateReader {\n public static listCertificates(): PromiseLike<{ [accountId: string]: IAmazonCertificate[] }> {\n return CertificateReader.listCertificatesByProvider('aws').then((certificates: IAmazonCertificate[]) => {\n // This account grouping should really go into clouddriver but since it's not, put it here for now.\n return AccountService.listAllAccounts('aws').then((allAccountDetails) => {\n const accountIdToName = allAccountDetails.reduce((acc, accountDetails) => {\n acc[accountDetails.accountId] = accountDetails.name;\n return acc;\n }, {} as { [id: string]: string });\n\n const sortedCertificates = sortBy(certificates, 'serverCertificateName');\n return groupBy(sortedCertificates, (cert) => {\n const [, , , , accountId] = cert.arn.split(':');\n return accountIdToName[accountId] || 'unknown';\n });\n });\n });\n }\n}\n","import type { FormikErrors, FormikProps } from 'formik';\nimport { difference, flatten, get, some, uniq, uniqBy } from 'lodash';\nimport { $q } from 'ngimport';\nimport React from 'react';\nimport type { SortEnd } from 'react-sortable-hoc';\nimport { arrayMove, SortableContainer, SortableElement, SortableHandle } from 'react-sortable-hoc';\n\nimport type { Application, IWizardPageComponent } from '@spinnaker/core';\nimport { ConfirmationModalService, CustomLabels, HelpField, Tooltip, ValidationMessage } from '@spinnaker/core';\n\nimport { ConfigureOidcConfigModal } from './ConfigureOidcConfigModal';\nimport { ConfigureRedirectConfigModal } from './ConfigureRedirectConfigModal';\nimport type { IAuthenticateOidcActionConfig } from '../../OidcConfigReader';\nimport { OidcConfigReader } from '../../OidcConfigReader';\nimport { AWSProviderSettings } from '../../../aws.settings';\nimport { AmazonCertificateReader } from '../../../certificates/AmazonCertificateReader';\nimport { AmazonCertificateSelectField } from '../common/AmazonCertificateSelectField';\nimport type {\n ALBListenerProtocol,\n IALBListenerCertificate,\n IALBTargetGroupDescription,\n IAmazonApplicationLoadBalancerUpsertCommand,\n IAmazonCertificate,\n IListenerAction,\n IListenerActionType,\n IListenerDescription,\n IListenerRule,\n IListenerRuleCondition,\n IRedirectActionConfig,\n ListenerRuleConditionField,\n} from '../../../domain';\n\nexport interface IALBListenersState {\n certificates: { [accountId: number]: IAmazonCertificate[] };\n certificateTypes: string[];\n oidcConfigs: IAuthenticateOidcActionConfig[];\n}\n\nconst DragHandle = SortableHandle(() => (\n <span className=\"pipeline-drag-handle clickable glyphicon glyphicon-resize-vertical\" />\n));\n\nconst defaultAuthAction = {\n authenticateOidcConfig: {\n authorizationEndpoint: '',\n clientId: '',\n issuer: '',\n scope: 'openid',\n sessionCookieName: 'AWSELBAuthSessionCookie',\n tokenEndpoint: '',\n userInfoEndpoint: '',\n },\n type: 'authenticate-oidc',\n} as IListenerAction;\n\nexport interface IALBListenersProps {\n app: Application;\n formik: FormikProps<IAmazonApplicationLoadBalancerUpsertCommand>;\n}\n\nexport class ALBListeners\n extends React.Component<IALBListenersProps, IALBListenersState>\n implements IWizardPageComponent<IAmazonApplicationLoadBalancerUpsertCommand> {\n public protocols = ['HTTP', 'HTTPS'];\n\n private initialActionsWithAuth: Set<IListenerAction[]> = new Set();\n private initialListenersWithDefaultAuth: Set<IListenerDescription> = new Set();\n private removedAuthActions: Map<IListenerDescription, { [key: number]: IListenerAction }> = new Map();\n\n constructor(props: IALBListenersProps) {\n super(props);\n this.state = {\n certificates: [],\n certificateTypes: get(AWSProviderSettings, 'loadBalancers.certificateTypes', ['iam', 'acm']),\n oidcConfigs: undefined,\n };\n\n this.props.formik.initialValues.listeners.forEach((l) => {\n const hasDefaultAuth = l.defaultActions[0].type === 'authenticate-oidc';\n if (hasDefaultAuth) {\n this.initialListenersWithDefaultAuth.add(l);\n }\n l.rules.forEach((r) => {\n if (r.actions[0].type === 'authenticate-oidc') {\n this.initialActionsWithAuth.add(r.actions);\n }\n });\n });\n }\n\n private getAllTargetGroupsFromListeners(listeners: IListenerDescription[]): string[] {\n const actions = flatten(listeners.map((l) => l.defaultActions));\n const rules = flatten(listeners.map((l) => l.rules));\n actions.push(...flatten(rules.map((r) => r.actions)));\n return uniq(actions.map((a) => a.targetGroupName));\n }\n\n public validate(\n values: IAmazonApplicationLoadBalancerUpsertCommand,\n ): FormikErrors<IAmazonApplicationLoadBalancerUpsertCommand> {\n const errors = {} as any;\n\n // Check to make sure all target groups have an associated listener\n const targetGroupNames = values.targetGroups.map((tg) => tg.name);\n const usedTargetGroupNames = this.getAllTargetGroupsFromListeners(values.listeners);\n const unusedTargetGroupNames = difference(targetGroupNames, usedTargetGroupNames);\n if (unusedTargetGroupNames.length === 1) {\n errors.listeners = `Target group ${unusedTargetGroupNames[0]} is unused.`;\n } else if (unusedTargetGroupNames.length > 1) {\n errors.listeners = `Target groups ${unusedTargetGroupNames.join(', ')} are unused.`;\n }\n\n const { listeners } = values;\n if (uniqBy(listeners, 'port').length < listeners.length) {\n errors.listenerPorts = 'Multiple listeners cannot use the same port.';\n }\n\n const missingRuleFields = values.listeners.find((l) => {\n const defaultActionsHaveMissingTarget = !!l.defaultActions.find(\n (da) =>\n (da.type === 'forward' && !da.targetGroupName) ||\n (da.type === 'authenticate-oidc' && !da.authenticateOidcConfig.clientId) ||\n (da.type === 'redirect' &&\n (!da.redirectActionConfig || !some(da.redirectActionConfig, (field) => field && field !== ''))),\n );\n const rulesHaveMissingFields = !!l.rules.find((rule) => {\n const missingTargets = !!rule.actions.find((a) => a.type === 'forward' && !a.targetGroupName);\n const missingAuth = !!rule.actions.find(\n (a) => a.type === 'authenticate-oidc' && !a.authenticateOidcConfig.clientId,\n );\n const missingValue = !!rule.conditions.find((c) => {\n if (c.field === 'http-request-method') {\n return !c.values.length;\n }\n return c.values.includes('');\n });\n\n return missingTargets || missingAuth || missingValue;\n });\n return defaultActionsHaveMissingTarget || rulesHaveMissingFields;\n });\n\n if (missingRuleFields) {\n errors.listeners = `Missing fields in rule configuration.`;\n }\n\n return errors;\n }\n\n public componentDidMount(): void {\n this.loadCertificates();\n this.loadOidcClients();\n }\n\n private loadCertificates(): void {\n AmazonCertificateReader.listCertificates().then((certificates) => {\n this.setState({ certificates });\n });\n }\n\n private attachClientSecret = (action: IListenerAction, oidcConfigs: IAuthenticateOidcActionConfig[]) => {\n if (action.type === 'authenticate-oidc') {\n const config = oidcConfigs.find((c) => c.clientId === action.authenticateOidcConfig.clientId);\n if (config) {\n action.authenticateOidcConfig.clientSecret = config.clientSecret;\n }\n }\n };\n\n private loadOidcClients(): void {\n OidcConfigReader.getOidcConfigsByApp(this.props.app.name)\n .then((oidcConfigs) => {\n // make sure we have all the secrets for listener actions that need them\n if (oidcConfigs && oidcConfigs.length) {\n this.props.formik.values.listeners.forEach((listener) => {\n listener.defaultActions.forEach((action) => this.attachClientSecret(action, oidcConfigs));\n listener.rules.forEach((rule) =>\n rule.actions.forEach((action) => this.attachClientSecret(action, oidcConfigs)),\n );\n });\n }\n\n this.setState({ oidcConfigs });\n this.updateListeners();\n })\n .catch(() => {});\n }\n\n private updateListeners(): void {\n this.props.formik.setFieldValue('listeners', this.props.formik.values.listeners);\n }\n\n private needsCert(listener: IListenerDescription): boolean {\n return listener.protocol === 'HTTPS';\n }\n\n private showCertificateSelect(certificate: IALBListenerCertificate): boolean {\n return certificate.type === 'iam' && this.state.certificates && Object.keys(this.state.certificates).length > 0;\n }\n\n private addListenerCertificate(listener: IListenerDescription): void {\n listener.certificates = listener.certificates || [];\n listener.certificates.push({\n certificateArn: undefined,\n type: 'iam',\n name: undefined,\n });\n }\n\n private removeAuthActions(listener: IListenerDescription): void {\n const authIndex = listener.defaultActions.findIndex((a) => a.type === 'authenticate-oidc');\n if (authIndex !== -1) {\n this.removeAuthAction(listener, listener.defaultActions, authIndex, -1);\n }\n listener.rules.forEach((rule, ruleIndex) => {\n const index = rule.actions.findIndex((a) => a.type === 'authenticate-oidc');\n if (index !== -1) {\n this.removeAuthAction(listener, rule.actions, index, ruleIndex);\n }\n });\n this.updateListeners();\n }\n\n private reenableAuthActions(listener: IListenerDescription): void {\n const removedAuthActions = this.removedAuthActions.has(listener) ? this.removedAuthActions.get(listener) : [];\n const existingDefaultAuthAction = removedAuthActions[-1];\n if (existingDefaultAuthAction) {\n removedAuthActions[-1] = undefined;\n listener.defaultActions.unshift({ ...existingDefaultAuthAction });\n }\n listener.rules.forEach((rule, ruleIndex) => {\n const existingAuthAction = removedAuthActions[ruleIndex];\n removedAuthActions[ruleIndex] = undefined;\n if (existingAuthAction) {\n rule.actions.unshift({ ...existingAuthAction });\n }\n });\n }\n\n private listenerProtocolChanged(listener: IListenerDescription, newProtocol: ALBListenerProtocol): void {\n listener.protocol = newProtocol;\n if (listener.protocol === 'HTTPS') {\n listener.port = 443;\n if (!listener.certificates || listener.certificates.length === 0) {\n this.addListenerCertificate(listener);\n }\n this.reenableAuthActions(listener);\n }\n if (listener.protocol === 'HTTP') {\n listener.port = 80;\n listener.certificates.length = 0;\n this.removeAuthActions(listener);\n }\n this.updateListeners();\n }\n\n private listenerPortChanged(listener: IListenerDescription, newPort: string): void {\n listener.port = Number.parseInt(newPort, 10);\n this.updateListeners();\n }\n\n private certificateTypeChanged(certificate: IALBListenerCertificate, newType: string): void {\n certificate.type = newType;\n this.updateListeners();\n }\n\n private handleCertificateChanged(certificate: IALBListenerCertificate, newCertificateName: string): void {\n certificate.name = newCertificateName;\n this.updateListeners();\n }\n\n private removeListener(index: number): void {\n this.props.formik.values.listeners.splice(index, 1);\n this.updateListeners();\n }\n\n private addListener = (): void => {\n this.props.formik.values.listeners.push({\n certificates: [],\n protocol: 'HTTP',\n port: 80,\n defaultActions: [\n {\n type: 'forward',\n targetGroupName: '',\n },\n ],\n rules: [],\n });\n this.updateListeners();\n };\n\n private addRule = (listener: IListenerDescription): void => {\n const newRule: IListenerRule = {\n priority: null,\n actions: [\n {\n type: 'forward',\n targetGroupName: '',\n },\n ],\n conditions: [\n {\n field: 'path-pattern',\n values: [''],\n },\n ],\n };\n\n listener.rules.push(newRule);\n this.updateListeners();\n };\n\n public removeRule = (listener: IListenerDescription, index: number): void => {\n listener.rules.splice(index, 1);\n this.updateListeners();\n };\n\n private handleConditionFieldChanged = (\n condition: IListenerRuleCondition,\n newField: ListenerRuleConditionField,\n ): void => {\n condition.field = newField;\n\n if (newField === 'http-request-method') {\n condition.values = [];\n }\n\n this.updateListeners();\n };\n\n private handleConditionValueChanged = (condition: IListenerRuleCondition, newValue: string): void => {\n condition.values[0] = newValue;\n this.updateListeners();\n };\n\n private handleHttpRequestMethodChanged = (\n condition: IListenerRuleCondition,\n newValue: string,\n selected: boolean,\n ): void => {\n let newValues = condition.values || [];\n\n if (selected) {\n newValues.push(newValue);\n } else {\n newValues = newValues.filter((v) => v !== newValue);\n }\n\n /**\n * The `http-request-method` conditions have a differnt model.\n * AWS uses `httpRequestMethodConfig` as the source of truth, while deck uses `values`.\n * Both are updated for consistency.\n */\n condition.values = newValues;\n condition.httpRequestMethodConfig = {\n values: newValues,\n };\n this.updateListeners();\n };\n\n private addCondition = (rule: IListenerRule): void => {\n if (rule.conditions.length === 1) {\n const field = rule.conditions[0].field === 'path-pattern' ? 'host-header' : 'path-pattern';\n rule.conditions.push({ field, values: [''] });\n }\n this.updateListeners();\n };\n\n private removeCondition = (rule: IListenerRule, index: number): void => {\n rule.conditions.splice(index, 1);\n this.updateListeners();\n };\n\n private handleRuleActionTargetChanged = (action: IListenerAction, newTarget: string): void => {\n action.targetGroupName = newTarget;\n this.updateListeners();\n };\n\n private handleRuleActionTypeChanged = (action: IListenerAction, newType: IListenerActionType): void => {\n action.type = newType;\n\n if (action.type === 'forward') {\n delete action.redirectActionConfig;\n } else if (action.type === 'redirect') {\n action.redirectActionConfig = {\n statusCode: 'HTTP_301',\n };\n delete action.targetGroupName;\n }\n\n this.updateListeners();\n };\n\n private handleSortEnd = (sortEnd: SortEnd, listener: IListenerDescription): void => {\n listener.rules = arrayMove(listener.rules, sortEnd.oldIndex, sortEnd.newIndex);\n this.updateListeners();\n };\n\n private configureOidcClient = (action: IListenerAction): void => {\n ConfigureOidcConfigModal.show({ config: action.authenticateOidcConfig })\n .then((config: any) => {\n action.authenticateOidcConfig = config;\n this.updateListeners(); // pushes change to formik, needed due to prop mutation\n })\n .catch(() => {});\n };\n\n private configureRedirect = (action: IListenerAction): void => {\n ConfigureRedirectConfigModal.show({ config: action.redirectActionConfig })\n .then((config: any) => {\n action.redirectActionConfig = config;\n this.updateListeners(); // pushes change to formik, needed due to prop mutation\n })\n .catch(() => {});\n };\n\n private removeAuthActionInternal(\n listener: IListenerDescription,\n actions: IListenerAction[],\n authIndex: number,\n ruleIndex = -1,\n ): void {\n const removedAuthAction = actions.splice(authIndex, 1)[0];\n if (!this.removedAuthActions.has(listener)) {\n this.removedAuthActions.set(listener, []);\n }\n this.removedAuthActions.get(listener)[ruleIndex || -1] = removedAuthAction;\n this.updateListeners();\n }\n\n private removeAuthAction(\n listener: IListenerDescription,\n actions: IListenerAction[],\n authIndex: number,\n ruleIndex = -1,\n ): void {\n // TODO: Check if initial is true.\n const confirmDefaultRemove = ruleIndex === -1 && this.initialListenersWithDefaultAuth.has(listener);\n const confirmRemove = ruleIndex > -1 && this.initialActionsWithAuth.has(actions);\n\n if (confirmDefaultRemove || confirmRemove) {\n // TODO: Confirmation Dialog first.\n ConfirmationModalService.confirm({\n header: 'Really remove authentication?',\n buttonText: `Remove Auth`,\n submitMethod: () => {\n this.removeAuthActionInternal(listener, actions, authIndex, ruleIndex);\n if (confirmDefaultRemove) {\n this.initialListenersWithDefaultAuth.delete(listener);\n }\n if (confirmRemove) {\n this.initialActionsWithAuth.delete(actions);\n }\n return $q.resolve();\n },\n });\n } else {\n this.removeAuthActionInternal(listener, actions, authIndex, ruleIndex);\n }\n }\n\n private authenticateRuleToggle = (listener: IListenerDescription, ruleIndex: number) => {\n const rules = listener.rules[ruleIndex];\n const actions = (rules && rules.actions) || listener.defaultActions;\n if (actions) {\n const authIndex = actions.findIndex((a) => a.type === 'authenticate-oidc');\n if (authIndex !== -1) {\n this.removeAuthAction(listener, actions, authIndex, ruleIndex);\n } else {\n const removedAction = this.removedAuthActions.has(listener)\n ? this.removedAuthActions.get(listener)[ruleIndex || -1]\n : undefined;\n const newAuthAction = removedAction || { ...defaultAuthAction };\n actions.unshift({ ...newAuthAction });\n }\n this.updateListeners();\n }\n };\n\n private oidcConfigChanged = (action: IListenerAction, config: IAuthenticateOidcActionConfig) => {\n action.authenticateOidcConfig = { ...config };\n this.updateListeners();\n };\n\n private redirectConfigChanged = (action: IListenerAction, config: IRedirectActionConfig) => {\n action.redirectActionConfig = { ...config };\n this.updateListeners();\n };\n\n public render() {\n const { errors, values } = this.props.formik;\n const { certificates, certificateTypes, oidcConfigs } = this.state;\n return (\n <div className=\"container-fluid form-horizontal\">\n <div className=\"form-group\">\n <div className=\"col-md-12\">\n {values.listeners.map((listener, index) => (\n <div key={index} className=\"wizard-pod\">\n <div>\n <div className=\"wizard-pod-row header\">\n <div className=\"wizard-pod-row-title\">Listen On</div>\n <div className=\"wizard-pod-row-contents spread\">\n <div>\n <span className=\"wizard-pod-content\">\n <label>Protocol</label>\n <select\n className=\"form-control input-sm inline-number\"\n style={{ width: '80px' }}\n value={listener.protocol}\n onChange={(event) =>\n this.listenerProtocolChanged(listener, event.target.value as ALBListenerProtocol)\n }\n >\n {this.protocols.map((p) => (\n <option key={p}>{p}</option>\n ))}\n </select>\n </span>\n <span className=\"wizard-pod-content\">\n <label>Port</label>\n <input\n className=\"form-control input-sm inline-number\"\n type=\"text\"\n min={0}\n value={listener.port || ''}\n onChange={(event) => this.listenerPortChanged(listener, event.target.value)}\n style={{ width: '80px' }}\n required={true}\n />\n </span>\n </div>\n <div>\n <a className=\"sm-label clickable\" onClick={() => this.removeListener(index)}>\n <span className=\"glyphicon glyphicon-trash\" />\n </a>\n </div>\n </div>\n </div>\n {this.needsCert(listener) && (\n <div className=\"wizard-pod-row\">\n <div className=\"wizard-pod-row-title\">Certificate</div>\n <div className=\"wizard-pod-row-contents\">\n {listener.certificates.map((certificate, cIndex) => (\n <div key={cIndex} style={{ width: '100%', display: 'flex', flexDirection: 'row' }}>\n <select\n className=\"form-control input-sm inline-number\"\n style={{ width: '45px' }}\n value={certificate.type}\n onChange={(event) => this.certificateTypeChanged(certificate, event.target.value)}\n >\n {certificateTypes.map((t) => (\n <option key={t}>{t}</option>\n ))}\n </select>\n {this.showCertificateSelect(certificate) && (\n <AmazonCertificateSelectField\n certificates={certificates}\n accountName={values.credentials}\n currentValue={certificate.name}\n app={this.props.app}\n onCertificateSelect={(value) => this.handleCertificateChanged(certificate, value)}\n />\n )}\n {!this.showCertificateSelect(certificate) && (\n <input\n className=\"form-control input-sm no-spel\"\n style={{ display: 'inline-block' }}\n type=\"text\"\n value={certificate.name}\n onChange={(event) => this.handleCertificateChanged(certificate, event.target.value)}\n required={true}\n />\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n <div className=\"wizard-pod-row\">\n <div className=\"wizard-pod-row-contents\" style={{ padding: '0' }}>\n <table className=\"table table-condensed packed rules-table\">\n <thead>\n <tr>\n <th style={{ width: '15px', padding: '0' }} />\n <th>If</th>\n <th style={{ width: '315px' }}>Then</th>\n <th style={{ width: '45px' }} />\n </tr>\n </thead>\n <Rules\n addCondition={this.addCondition}\n addRule={this.addRule}\n authenticateRuleToggle={this.authenticateRuleToggle}\n distance={10}\n handleConditionFieldChanged={this.handleConditionFieldChanged}\n handleConditionValueChanged={this.handleConditionValueChanged}\n handleHttpRequestMethodChanged={this.handleHttpRequestMethodChanged}\n handleRuleActionTargetChanged={this.handleRuleActionTargetChanged}\n handleRuleActionTypeChanged={this.handleRuleActionTypeChanged}\n listener={listener}\n helperClass=\"rule-sortable-helper\"\n removeRule={this.removeRule}\n removeCondition={this.removeCondition}\n targetGroups={values.targetGroups}\n oidcConfigs={oidcConfigs}\n oidcConfigChanged={this.oidcConfigChanged}\n redirectConfigChanged={this.redirectConfigChanged}\n onSortEnd={(sortEnd) => this.handleSortEnd(sortEnd, listener)}\n configureOidcClient={this.configureOidcClient}\n configureRedirect={this.configureRedirect}\n />\n </table>\n </div>\n </div>\n </div>\n </div>\n ))}\n {errors.listenerPorts && (\n <div className=\"wizard-pod-row-errors\">\n <ValidationMessage type=\"error\" message={errors.listenerPorts} />\n </div>\n )}\n {errors.listeners && (\n <div className=\"wizard-pod-row-errors\">\n <ValidationMessage type=\"error\" message={errors.listeners} />\n </div>\n )}\n <table className=\"table table-condensed packed\">\n <tbody>\n <tr>\n <td>\n <button type=\"button\" className=\"add-new col-md-12\" onClick={this.addListener}>\n <span>\n <span className=\"glyphicon glyphicon-plus-sign\" /> Add new listener\n </span>\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n );\n }\n}\n\ninterface IRuleProps {\n rule: IListenerRule;\n listener: IListenerDescription;\n index: number;\n targetGroups: IALBTargetGroupDescription[];\n oidcConfigChanged: (action: IListenerAction, config: IAuthenticateOidcActionConfig) => void;\n redirectConfigChanged: (action: IListenerAction, config: IRedirectActionConfig) => void;\n oidcConfigs: IAuthenticateOidcActionConfig[];\n ruleIndex: number;\n authenticateRuleToggle: (listener: IListenerDescription, index: number) => void;\n removeRule: (listener: IListenerDescription, index: number) => void;\n handleRuleActionTargetChanged: (action: IListenerAction, newTarget: string) => void;\n handleRuleActionTypeChanged: (action: IListenerAction, newType: string) => void;\n addCondition: (rule: IListenerRule) => void;\n removeCondition: (rule: IListenerRule, index: number) => void;\n handleConditionFieldChanged: (condition: IListenerRuleCondition, newField: ListenerRuleConditionField) => void;\n handleConditionValueChanged: (condition: IListenerRuleCondition, newValue: string) => void;\n handleHttpRequestMethodChanged: (condition: IListenerRuleCondition, newValue: string, selected: boolean) => void;\n configureOidcClient: (action: IListenerAction) => void;\n configureRedirect: (action: IListenerAction) => void;\n}\n\nconst Rule = SortableElement((props: IRuleProps) => (\n <tr className=\"listener-rule\">\n <td className=\"handle\">\n <DragHandle />\n </td>\n <td>\n {props.rule.conditions.map((condition, cIndex) => (\n <div key={cIndex} className=\"listener-rule-condition\">\n <select\n className=\"form-control input-sm inline-number\"\n value={condition.field}\n onChange={(event) =>\n props.handleConditionFieldChanged(condition, event.target.value as ListenerRuleConditionField)\n }\n style={{ width: '40%' }}\n required={true}\n >\n {(props.rule.conditions.length === 1 || condition.field === 'host-header') && (\n <option value=\"host-header\">Host</option>\n )}\n {(props.rule.conditions.length === 1 || condition.field === 'path-pattern') && (\n <option value=\"path-pattern\">Path</option>\n )}\n {(props.rule.conditions.length === 1 || condition.field === 'http-request-method') && (\n <option value=\"http-request-method\">Method(s)</option>\n )}\n </select>\n {condition.field === 'path-pattern' && <HelpField id=\"aws.loadBalancer.ruleCondition.path\" />}\n {condition.field === 'host-header' && <HelpField id=\"aws.loadBalancer.ruleCondition.host\" />}\n {condition.field !== 'http-request-method' && (\n <input\n className=\"form-control input-sm\"\n type=\"text\"\n value={condition.values[0]}\n onChange={(event) => props.handleConditionValueChanged(condition, event.target.value)}\n maxLength={128}\n required={true}\n style={{ width: '63%' }}\n />\n )}\n {condition.field === 'http-request-method' && (\n <div className=\"col-md-6 checkbox\">\n {['DELETE', 'GET', 'PATCH', 'POST', 'PUT'].map((httpMethod) => (\n <label key={`${httpMethod}-checkbox`}>\n <input\n type=\"checkbox\"\n checked={condition.values.includes(httpMethod)}\n onChange={(event) =>\n props.handleHttpRequestMethodChanged(condition, httpMethod, event.target.checked)\n }\n />\n {httpMethod}\n </label>\n ))}\n </div>\n )}\n <span className=\"remove-condition\">\n {cIndex === 1 && (\n <a\n className=\"btn btn-sm btn-link clickable\"\n onClick={() => props.removeCondition(props.rule, cIndex)}\n style={{ padding: '0' }}\n >\n <Tooltip value=\"Remove Condition\">\n <span className=\"glyphicon glyphicon-trash\" />\n </Tooltip>\n </a>\n )}\n </span>\n </div>\n ))}\n {props.rule.conditions.length === 1 && (\n <div className=\"add-new-container\">\n <button type=\"button\" className=\"add-new col-md-12\" onClick={() => props.addCondition(props.rule)}>\n <span>\n <span className=\"glyphicon glyphicon-plus-sign\" /> Add new condition\n </span>\n </button>\n <span style={{ minWidth: '15px' }} />\n </div>\n )}\n </td>\n <td>\n {props.rule.actions.map((action, index) => (\n <Action\n key={index}\n action={action}\n actionTypeChanged={(type) => props.handleRuleActionTypeChanged(action, type)}\n oidcConfigChanged={(config) => props.oidcConfigChanged(action, config)}\n redirectConfigChanged={(config) => props.redirectConfigChanged(action, config)}\n targetChanged={(target) => props.handleRuleActionTargetChanged(action, target)}\n targetGroups={props.targetGroups}\n oidcConfigs={props.oidcConfigs}\n configureOidcClient={props.configureOidcClient}\n configureRedirect={props.configureRedirect}\n />\n ))}\n </td>\n <td>\n <RuleActions\n ruleIndex={props.ruleIndex}\n listener={props.listener}\n authenticateRuleToggle={props.authenticateRuleToggle}\n removeRule={props.removeRule}\n actions={props.rule.actions}\n />\n </td>\n </tr>\n));\n\nconst Action = (props: {\n action: IListenerAction;\n oidcConfigChanged: (config: IAuthenticateOidcActionConfig) => void;\n redirectConfigChanged: (config: IRedirectActionConfig) => void;\n actionTypeChanged: (actionType: string) => void;\n targetChanged: (newTarget: string) => void;\n targetGroups: IALBTargetGroupDescription[];\n oidcConfigs: IAuthenticateOidcActionConfig[];\n configureOidcClient: (action: IListenerAction) => void;\n configureRedirect: (action: IListenerAction) => void;\n}) => {\n if (props.action.type !== 'authenticate-oidc') {\n const redirectConfig = props.action.redirectActionConfig || props.action.redirectConfig;\n // TODO: Support redirect\n return (\n <div className=\"horizontal top\">\n <select\n className=\"form-control input-sm\"\n style={{ width: '80px' }}\n value={props.action.type}\n onChange={(event) => props.actionTypeChanged(event.target.value)}\n >\n <option value=\"forward\">forward to</option>\n <option value=\"redirect\">redirect to</option>\n </select>\n {props.action.type === 'forward' && (\n <select\n className=\"form-control input-sm\"\n value={props.action.targetGroupName}\n onChange={(event) => props.targetChanged(event.target.value)}\n required={true}\n >\n <option value=\"\" />\n {uniq(props.targetGroups.map((tg) => tg.name)).map((name) => (\n <option key={name}>{name}</option>\n ))}\n </select>\n )}\n {props.action.type === 'redirect' && (\n <dl className=\"dl-horizontal dl-narrow\">\n <dt>Host</dt>\n <dd>{redirectConfig.host}</dd>\n <dt>Path</dt>\n <dd>{redirectConfig.path}</dd>\n <dt>Port</dt>\n <dd>{redirectConfig.port}</dd>\n <dt>Protocol</dt>\n <dd>{redirectConfig.protocol}</dd>\n <dt>Query</dt>\n <dd>{redirectConfig.query}</dd>\n <dt>Status Code</dt>\n <dd>{redirectConfig.statusCode}</dd>\n <dt>\n <button\n className=\"btn btn-link no-padding\"\n type=\"button\"\n onClick={() => props.configureRedirect(props.action)}\n >\n Configure...\n </button>\n </dt>\n </dl>\n )}\n </div>\n );\n }\n if (props.action.type === 'authenticate-oidc') {\n const clientId = props.action.authenticateOidcConfig.clientId;\n\n const disableManualOidcDialog = get(AWSProviderSettings, 'loadBalancers.disableManualOidcDialog', false);\n const showOidcConfigs =\n disableManualOidcDialog ||\n (props.oidcConfigs &&\n props.oidcConfigs.length > 0 &&\n (!clientId || props.oidcConfigs.find((c) => c.clientId === clientId)));\n\n const oidcOptions = props.oidcConfigs?.length ? (\n props.oidcConfigs.map((config) => <option key={config.clientId}>{config.clientId}</option>)\n ) : (\n <option disabled>No {CustomLabels.get('OIDC client')} config found</option>\n );\n\n return (\n <div className=\"horizontal middle\" style={{ height: '30px' }}>\n <span style={{ whiteSpace: 'pre' }}>auth with {CustomLabels.get('OIDC client')} </span>\n\n {showOidcConfigs && (\n <select\n className=\"form-control input-sm\"\n value={clientId}\n onChange={(event) =>\n props.oidcConfigChanged(props.oidcConfigs.find((c) => c.clientId === event.target.value))\n }\n required={true}\n >\n <option value=\"\" />\n {oidcOptions}\n </select>\n )}\n {!showOidcConfigs && (\n // a link text to open an oidc modal that is labeled with the client_id\n <a onClick={() => props.configureOidcClient(props.action)} className=\"clickable\">\n {clientId || 'Configure...'}\n </a>\n )}\n <span style={{ whiteSpace: 'pre' }}>\n <em> and then</em>\n </span>\n </div>\n );\n }\n\n return null;\n};\n\nconst RuleActions = (props: {\n ruleIndex?: number;\n actions: IListenerAction[];\n listener: IListenerDescription;\n authenticateRuleToggle: (listener: IListenerDescription, index: number) => void;\n removeRule?: (listener: IListenerDescription, index: number) => void;\n}) => {\n const hasAuth = Boolean(props.actions.find((a) => a.type === 'authenticate-oidc'));\n const allowAuth = props.listener.protocol === 'HTTPS';\n const tooltip = hasAuth ? 'Remove authentication from rule' : 'Authenticate rule';\n const icon = hasAuth ? 'fas fa-fw fa-lock-open' : 'fas fa-fw fa-user-lock';\n return (\n <span>\n {allowAuth && (\n <>\n <a\n className=\"btn btn-sm btn-link clickable\"\n onClick={() => props.authenticateRuleToggle(props.listener, props.ruleIndex)}\n style={{ padding: '0' }}\n >\n <Tooltip value={tooltip}>\n <i className={icon} />\n </Tooltip>\n </a>\n <HelpField id=\"aws.loadBalancer.oidcAuthentication\" />\n </>\n )}\n {props.ruleIndex !== undefined && props.ruleIndex >= 0 && props.removeRule && (\n <a\n className=\"btn btn-sm btn-link clickable\"\n onClick={() => props.removeRule(props.listener, props.ruleIndex)}\n style={{ padding: '0' }}\n >\n <Tooltip value=\"Remove Rule\">\n <i className=\"far fa-fw fa-trash-alt\" />\n </Tooltip>\n </a>\n )}\n </span>\n );\n};\n\ninterface IRulesProps {\n addRule: (listener: IListenerDescription) => void;\n authenticateRuleToggle: (listener: IListenerDescription, index: number) => void;\n removeRule: (listener: IListenerDescription, index: number) => void;\n handleRuleActionTargetChanged: (action: IListenerAction, newTarget: string) => void;\n handleRuleActionTypeChanged: (action: IListenerAction, type: string) => void;\n addCondition: (rule: IListenerRule) => void;\n removeCondition: (rule: IListenerRule, index: number) => void;\n handleConditionFieldChanged: (condition: IListenerRuleCondition, newField: ListenerRuleConditionField) => void;\n handleConditionValueChanged: (condition: IListenerRuleCondition, newValue: string) => void;\n handleHttpRequestMethodChanged: (condition: IListenerRuleCondition, newValue: string, selected: boolean) => void;\n listener: IListenerDescription;\n targetGroups: IALBTargetGroupDescription[];\n oidcConfigChanged: (action: IListenerAction, config: IAuthenticateOidcActionConfig) => void;\n redirectConfigChanged: (action: IListenerAction, config: IRedirectActionConfig) => void;\n oidcConfigs: IAuthenticateOidcActionConfig[];\n configureOidcClient: (action: IListenerAction) => void;\n configureRedirect: (action: IListenerAction) => void;\n}\n\nconst Rules = SortableContainer((props: IRulesProps) => (\n <tbody>\n <tr className=\"not-sortable\">\n <td />\n <td>Default</td>\n <td>\n {props.listener.defaultActions.map((action, index) => (\n <Action\n key={index}\n action={action}\n actionTypeChanged={(type) => props.handleRuleActionTypeChanged(action, type)}\n targetChanged={(target) => props.handleRuleActionTargetChanged(action, target)}\n targetGroups={props.targetGroups}\n oidcConfigs={props.oidcConfigs}\n oidcConfigChanged={(config) => props.oidcConfigChanged(action, config)}\n redirectConfigChanged={(config) => props.redirectConfigChanged(action, config)}\n configureOidcClient={props.configureOidcClient}\n configureRedirect={props.configureRedirect}\n />\n ))}\n </td>\n <td>\n <RuleActions\n listener={props.listener}\n actions={props.listener.defaultActions}\n authenticateRuleToggle={props.authenticateRuleToggle}\n />\n </td>\n </tr>\n {props.listener.rules\n .sort((a, b) => (a.priority as number) - (b.priority as number))\n .map((rule, index) => (\n <Rule\n key={index}\n rule={rule}\n addCondition={props.addCondition}\n handleConditionFieldChanged={props.handleConditionFieldChanged}\n handleConditionValueChanged={props.handleConditionValueChanged}\n handleHttpRequestMethodChanged={props.handleHttpRequestMethodChanged}\n handleRuleActionTargetChanged={props.handleRuleActionTargetChanged}\n handleRuleActionTypeChanged={props.handleRuleActionTypeChanged}\n oidcConfigChanged={props.oidcConfigChanged}\n redirectConfigChanged={props.redirectConfigChanged}\n removeCondition={props.removeCondition}\n authenticateRuleToggle={props.authenticateRuleToggle}\n removeRule={props.removeRule}\n targetGroups={props.targetGroups}\n oidcConfigs={props.oidcConfigs}\n listener={props.listener}\n index={index}\n ruleIndex={index}\n configureOidcClient={props.configureOidcClient}\n configureRedirect={props.configureRedirect}\n />\n ))}\n <tr className=\"not-sortable\">\n <td colSpan={5}>\n <button type=\"button\" className=\"add-new col-md-12\" onClick={() => props.addRule(props.listener)}>\n <span>\n <span className=\"glyphicon glyphicon-plus-sign\" /> Add new rule\n </span>\n </button>\n </td>\n </tr>\n </tbody>\n));\n","import { get, isNumber } from 'lodash';\n\nimport type { IValidator } from '@spinnaker/core';\nimport type { ITargetGroup } from '../../../domain';\n\nexport const isNameInUse = (\n existingNames: { [account: string]: { [region: string]: string[] } },\n credentials: string,\n region: string,\n): IValidator => (name: string) =>\n get(existingNames, [credentials, region], []).includes(name.toLowerCase())\n ? `There is already a target group in ${credentials}:${region} with that name.`\n : null;\n\nexport const isNameLong = (appNameLength: number): IValidator => (name: string) =>\n name.length < 32 - appNameLength\n ? null\n : 'Target group names are automatically prefixed with their application name and cannot exceed 32 characters in length.';\n\nexport const isValidTimeout = (targetGroup: ITargetGroup): IValidator => (value: number | string) => {\n const num = isNumber(value) ? value : Number.parseInt(value, 10);\n const { protocol, healthCheckProtocol } = targetGroup;\n\n if (protocol === 'TCP' || protocol === 'TLS') {\n if (healthCheckProtocol === 'HTTP' && num !== 6) {\n return 'HTTP health check timeouts for TCP/TLS target groups must be 6s';\n }\n\n if ((healthCheckProtocol === 'HTTPS' || healthCheckProtocol === 'TLS') && num !== 10) {\n return 'HTTPS/TLS health check timeouts for TCP/TLS target groups must be 10s';\n }\n }\n return null;\n};\n\nexport const isValidHealthCheckInterval = (targetGroup: ITargetGroup): IValidator => (value: string) =>\n targetGroup.healthCheckProtocol !== 'TCP' ||\n (targetGroup.healthCheckProtocol === 'TCP' &&\n (Number.parseInt(value, 10) === 10 || Number.parseInt(value, 10) === 30))\n ? null\n : 'TCP health checks only support 10s and 30s intervals';\n","import type { FormikErrors, FormikProps } from 'formik';\nimport { filter, flatten, groupBy, set, uniq } from 'lodash';\nimport React from 'react';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { Application, IWizardPageComponent } from '@spinnaker/core';\nimport {\n FormValidator,\n HelpField,\n spelNumberCheck,\n SpelNumberInput,\n SpInput,\n ValidationMessage,\n Validators,\n} from '@spinnaker/core';\n\nimport { isNameInUse, isNameLong, isValidHealthCheckInterval, isValidTimeout } from '../common/targetGroupValidators';\nimport type { IAmazonApplicationLoadBalancer, IAmazonApplicationLoadBalancerUpsertCommand } from '../../../domain';\n\nexport interface ITargetGroupsProps {\n app: Application;\n formik: FormikProps<IAmazonApplicationLoadBalancerUpsertCommand>;\n isNew: boolean;\n loadBalancer: IAmazonApplicationLoadBalancer;\n}\n\nexport interface ITargetGroupsState {\n existingTargetGroupNames: { [account: string]: { [region: string]: string[] } };\n oldTargetGroupCount: number;\n}\n\nexport class TargetGroups\n extends React.Component<ITargetGroupsProps, ITargetGroupsState>\n implements IWizardPageComponent<IAmazonApplicationLoadBalancerUpsertCommand> {\n public protocols = ['HTTP', 'HTTPS'];\n public targetTypes = ['instance', 'ip', 'lambda'];\n private destroy$ = new Subject();\n\n constructor(props: ITargetGroupsProps) {\n super(props);\n\n const oldTargetGroupCount = !props.isNew ? props.formik.initialValues.targetGroups.length : 0;\n this.state = {\n existingTargetGroupNames: {},\n oldTargetGroupCount,\n };\n }\n\n public validate(\n values: IAmazonApplicationLoadBalancerUpsertCommand,\n ): FormikErrors<IAmazonApplicationLoadBalancerUpsertCommand> {\n const duplicateTargetGroups = uniq(\n flatten(filter(groupBy(values.targetGroups, 'name'), (count) => count.length > 1)).map((tg) => tg.name),\n );\n\n const formValidator = new FormValidator(values);\n const { arrayForEach } = formValidator;\n\n formValidator.field('targetGroups').withValidators(\n arrayForEach((builder, item) => {\n builder\n .field('name', 'Name')\n .withValidators(\n isNameInUse(this.state.existingTargetGroupNames, values.credentials, values.region),\n isNameLong(this.props.app.name.length),\n Validators.valueUnique(\n duplicateTargetGroups,\n 'There is already a target group in this load balancer with the same name.',\n ),\n );\n builder\n .field('healthCheckInterval', 'Health Check Interval')\n .withValidators(isValidHealthCheckInterval(item), Validators.checkBetween('healthCheckInterval', 5, 300));\n builder\n .field('healthyThreshold', 'Healthy Threshold')\n .withValidators(Validators.checkBetween('healthyThreshold', 2, 10));\n builder\n .field('unhealthyThreshold', 'Unhealthy Threshold')\n .spelAware()\n .withValidators(Validators.checkBetween('unhealthyThreshold', 2, 10));\n builder\n .field('healthCheckTimeout', 'Timeout')\n .withValidators(isValidTimeout(item), Validators.checkBetween('healthCheckTimeout', 2, 120));\n\n if (item.targetType !== 'lambda') {\n builder.field('protocol', 'Protocol').required();\n builder.field('healthCheckPath', 'Health Check Path').required();\n builder.field('healthCheckProtocol', 'Health Check Protocol').required();\n builder.field('name', 'Name').required();\n builder\n .field('healthyThreshold', 'Healthy Threshold')\n .required()\n .spelAware()\n .withValidators((value) => spelNumberCheck(value));\n builder\n .field('unhealthyThreshold', 'Unhealthy Threshold')\n .required()\n .spelAware()\n .withValidators((value) => spelNumberCheck(value));\n builder\n .field('healthCheckInterval', 'Health Check Interval')\n .required()\n .spelAware()\n .withValidators((value) => spelNumberCheck(value));\n builder\n .field('healthCheckPort', 'Health Check Port')\n .required()\n .spelAware()\n .withValidators((value) => (value === 'traffic-port' ? null : spelNumberCheck(value)));\n builder\n .field('port', 'Port')\n .required()\n .spelAware()\n .withValidators((value) => spelNumberCheck(value));\n builder\n .field('healthyThreshold', 'Healthy Threshold')\n .required()\n .spelAware()\n .withValidators((value) => spelNumberCheck(value), Validators.checkBetween('healthyThreshold', 2, 10));\n builder\n .field('unhealthyThreshold', 'Unhealthy Threshold')\n .required()\n .spelAware()\n .withValidators((value) => spelNumberCheck(value), Validators.checkBetween('unhealthyThreshold', 2, 10));\n }\n }),\n );\n\n return formValidator.validateForm();\n }\n\n private removeAppName(name: string): string {\n return name.replace(`${this.props.app.name}-`, '');\n }\n\n protected updateLoadBalancerNames(props: ITargetGroupsProps): void {\n const { app, loadBalancer } = props;\n\n const targetGroupsByAccountAndRegion: { [account: string]: { [region: string]: string[] } } = {};\n observableFrom(app.getDataSource('loadBalancers').refresh(true))\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n app.getDataSource('loadBalancers').data.forEach((lb: IAmazonApplicationLoadBalancer) => {\n if (lb.loadBalancerType !== 'classic') {\n if (!loadBalancer || lb.name !== loadBalancer.name) {\n lb.targetGroups.forEach((targetGroup) => {\n targetGroupsByAccountAndRegion[lb.account] = targetGroupsByAccountAndRegion[lb.account] || {};\n targetGroupsByAccountAndRegion[lb.account][lb.region] =\n targetGroupsByAccountAndRegion[lb.account][lb.region] || [];\n targetGroupsByAccountAndRegion[lb.account][lb.region].push(this.removeAppName(targetGroup.name));\n });\n }\n }\n });\n\n this.setState({ existingTargetGroupNames: targetGroupsByAccountAndRegion }, () =>\n this.props.formik.validateForm(),\n );\n });\n }\n\n private targetGroupFieldChanged(index: number, field: string, value: string | boolean | number): void {\n const { setFieldValue, values } = this.props.formik;\n const targetGroup = values.targetGroups[index];\n if (field === 'targetType' && value === 'lambda') {\n delete targetGroup.port;\n }\n set(targetGroup, field, value);\n setFieldValue('targetGroups', values.targetGroups);\n }\n\n private addTargetGroup = (): void => {\n const { setFieldValue, values } = this.props.formik;\n const tgLength = values.targetGroups.length;\n values.targetGroups.push({\n name: `targetgroup${tgLength ? `${tgLength}` : ''}`,\n protocol: 'HTTP',\n port: 7001,\n targetType: 'instance',\n healthCheckProtocol: 'HTTP',\n healthCheckPort: '7001',\n healthCheckPath: '/healthcheck',\n healthCheckTimeout: 5,\n healthCheckInterval: 10,\n healthyThreshold: 10,\n unhealthyThreshold: 2,\n attributes: {\n deregistrationDelay: 300,\n stickinessEnabled: false,\n stickinessType: 'lb_cookie',\n stickinessDuration: 8400,\n },\n });\n setFieldValue('targetGroups', values.targetGroups);\n };\n\n private removeTargetGroup(index: number): void {\n const { setFieldValue, values } = this.props.formik;\n const { oldTargetGroupCount } = this.state;\n values.targetGroups.splice(index, 1);\n\n if (index < oldTargetGroupCount) {\n this.setState({ oldTargetGroupCount: oldTargetGroupCount - 1 });\n }\n setFieldValue('targetGroups', values.targetGroups);\n }\n\n public componentDidMount(): void {\n this.updateLoadBalancerNames(this.props);\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n public render() {\n const { app } = this.props;\n const { errors, values } = this.props.formik;\n const { oldTargetGroupCount } = this.state;\n\n const ProtocolOptions = this.protocols.map((p) => <option key={p}>{p}</option>);\n const TargetTypeOptions = this.targetTypes.map((p) => <option key={p}>{p}</option>);\n return (\n <div className=\"container-fluid form-horizontal\">\n <div className=\"form-group\">\n <div className=\"col-md-12\">\n {values.targetGroups.map((targetGroup, index) => {\n const tgErrors = (errors.targetGroups && errors.targetGroups[index]) || {};\n const has6sTimeout =\n (targetGroup.protocol === 'TCP' || targetGroup.protocol === 'TLS') &&\n targetGroup.healthCheckProtocol === 'HTTP';\n const has10sTimeout =\n (targetGroup.protocol === 'TCP' || targetGroup.protocol === 'TLS') &&\n targetGroup.healthCheckProtocol === 'HTTPS';\n\n return (\n <div key={index} className=\"wizard-pod\">\n <div>\n <div className=\"wizard-pod-row header\">\n <div className=\"wizard-pod-row-title\">Group Name</div>\n <div className=\"wizard-pod-row-contents\">\n <div className=\"wizard-pod-row-data\">\n <span className=\"group-name-prefix\">{app.name}-</span>\n <input\n className=\"form-control input-sm target-group-name\"\n type=\"text\"\n value={targetGroup.name}\n onChange={(event) => this.targetGroupFieldChanged(index, 'name', event.target.value)}\n required={true}\n disabled={index < oldTargetGroupCount}\n />\n <a className=\"sm-label clickable\" onClick={() => this.removeTargetGroup(index)}>\n <span className=\"glyphicon glyphicon-trash\" />\n </a>\n </div>\n {tgErrors.name && (\n <div className=\"wizard-pod-row-errors\">\n <ValidationMessage type=\"error\" message={tgErrors.name} />\n </div>\n )}\n </div>\n </div>\n <div className=\"wizard-pod-row\">\n <div className=\"wizard-pod-row-title\">\n <HelpField id=\"aws.targetGroup.targetType\" /> <span>Target Type&nbsp;</span>\n </div>\n <div className=\"wizard-pod-row-contents\">\n <div className=\"wizard-pod-row-data\">\n <span className=\"wizard-pod-content\">\n <select\n className=\"form-control input-sm\"\n value={targetGroup.targetType}\n onChange={(event) =>\n this.targetGroupFieldChanged(index, 'targetType', event.target.value)\n }\n disabled={index < oldTargetGroupCount}\n >\n {TargetTypeOptions}\n </select>\n </span>\n </div>\n </div>\n </div>\n {targetGroup.targetType !== 'lambda' && (\n <div className=\"wizard-pod-row\">\n <div className=\"wizard-pod-row-title\">Backend Connection</div>\n <div className=\"wizard-pod-row-contents\">\n <div className=\"wizard-pod-row-data\">\n <span className=\"wizard-pod-content\">\n <label>Protocol </label>\n <HelpField id=\"aws.targetGroup.protocol\" />{' '}\n <select\n className=\"form-control input-sm inline-number\"\n value={targetGroup.protocol}\n onChange={(event) =>\n this.targetGroupFieldChanged(index, 'protocol', event.target.value)\n }\n disabled={index < oldTargetGroupCount}\n >\n {ProtocolOptions}\n </select>\n </span>\n <span className=\"wizard-pod-content\">\n <label>Port </label>\n <HelpField id=\"aws.targetGroup.port\" />{' '}\n <input\n className=\"form-control input-sm inline-number\"\n value={targetGroup.port}\n onChange={(event) => this.targetGroupFieldChanged(index, 'port', event.target.value)}\n type=\"text\"\n required={true}\n disabled={index < oldTargetGroupCount}\n />\n </span>\n </div>\n </div>\n </div>\n )}\n <div className=\"wizard-pod-row\">\n <div className=\"wizard-pod-row-title\">Healthcheck</div>\n <div className=\"wizard-pod-row-contents\">\n <div className=\"wizard-pod-row-data\">\n {targetGroup.targetType !== 'lambda' && (\n <span className=\"wizard-pod-content\">\n <label>Protocol </label>\n {targetGroup.healthCheckProtocol === 'TCP' && (\n <HelpField id=\"aws.targetGroup.healthCheckProtocol\" />\n )}{' '}\n <select\n className=\"form-control input-sm inline-number\"\n value={targetGroup.healthCheckProtocol}\n onChange={(event) =>\n this.targetGroupFieldChanged(index, 'healthCheckProtocol', event.target.value)\n }\n >\n {ProtocolOptions}\n </select>\n </span>\n )}\n {targetGroup.targetType !== 'lambda' && (\n <span className=\"wizard-pod-content\">\n <label>Port </label>\n <HelpField id=\"aws.targetGroup.attributes.healthCheckPort.trafficPort\" />{' '}\n <select\n className=\"form-control input-sm inline-number\"\n style={{ width: '90px' }}\n value={targetGroup.healthCheckPort === 'traffic-port' ? 'traffic-port' : 'manual'}\n onChange={(event) =>\n this.targetGroupFieldChanged(\n index,\n 'healthCheckPort',\n event.target.value === 'traffic-port' ? 'traffic-port' : '',\n )\n }\n >\n <option value=\"traffic-port\">Traffic Port</option>\n <option value=\"manual\">Manual</option>\n </select>{' '}\n <SpInput\n className=\"form-control input-sm inline-number\"\n error={tgErrors.healthCheckPort}\n style={{\n visibility: targetGroup.healthCheckPort === 'traffic-port' ? 'hidden' : 'inherit',\n }}\n name=\"healthCheckPort\"\n required={true}\n value={targetGroup.healthCheckPort}\n onChange={(event) =>\n this.targetGroupFieldChanged(index, 'healthCheckPort', event.target.value)\n }\n />\n </span>\n )}\n <span className=\"wizard-pod-content\">\n <label>Path </label>\n <SpInput\n error={tgErrors.healthCheckPath}\n name=\"healthCheckPath\"\n required={true}\n value={targetGroup.healthCheckPath}\n onChange={(event) =>\n this.targetGroupFieldChanged(index, 'healthCheckPath', event.target.value)\n }\n />\n </span>\n <span className=\"wizard-pod-content\">\n <label>Timeout </label>\n {(has6sTimeout || has10sTimeout) && <HelpField id=\"aws.targetGroup.healthCheckTimeout\" />}\n <SpelNumberInput\n error={tgErrors.healthCheckTimeout}\n disabled={has6sTimeout || has10sTimeout}\n required={true}\n value={has6sTimeout ? 6 : has10sTimeout ? 10 : targetGroup.healthCheckTimeout}\n min={2}\n max={120}\n onChange={(value: string | number) =>\n this.targetGroupFieldChanged(index, 'healthCheckTimeout', value)\n }\n />\n </span>\n <span className=\"wizard-pod-content\">\n <label>Interval </label>\n <SpelNumberInput\n error={tgErrors.healthCheckInterval}\n required={true}\n value={targetGroup.healthCheckInterval}\n min={5}\n max={300}\n onChange={(value: string | number) =>\n this.targetGroupFieldChanged(index, 'healthCheckInterval', value)\n }\n />\n </span>\n </div>\n </div>\n </div>\n <div className=\"wizard-pod-row\">\n <div className=\"wizard-pod-row-title\">Healthcheck Threshold</div>\n <div className=\"wizard-pod-row-contents\">\n <div className=\"wizard-pod-row-data\">\n <span className=\"wizard-pod-content\">\n <label>Healthy </label>\n <SpelNumberInput\n error={tgErrors.healthyThreshold}\n value={targetGroup.healthyThreshold}\n min={2}\n max={10}\n onChange={(value: string | number) =>\n this.targetGroupFieldChanged(index, 'healthyThreshold', value)\n }\n />\n </span>\n <span className=\"wizard-pod-content\">\n <label>Unhealthy </label>\n <SpelNumberInput\n error={tgErrors.unhealthyThreshold}\n required={true}\n value={targetGroup.unhealthyThreshold}\n min={2}\n max={10}\n onChange={(value: string | number) =>\n this.targetGroupFieldChanged(index, 'unhealthyThreshold', value)\n }\n />\n </span>\n </div>\n </div>\n </div>\n <div className=\"wizard-pod-row\">\n <div className=\"wizard-pod-row-title\">Attributes</div>\n {targetGroup.targetType !== 'lambda' ? (\n <div className=\"wizard-pod-row-contents\">\n <div className=\"wizard-pod-row-data\">\n <span className=\"wizard-pod-content\">\n <label>Dereg. Delay</label>\n <HelpField id=\"aws.targetGroup.attributes.deregistrationDelay\" />{' '}\n <input\n className=\"form-control input-sm inline-number\"\n type=\"text\"\n value={targetGroup.attributes.deregistrationDelay}\n onChange={(event) =>\n this.targetGroupFieldChanged(\n index,\n 'attributes.deregistrationDelay',\n event.target.value,\n )\n }\n />\n </span>\n <span className=\"wizard-pod-content\">\n <label className=\"checkbox-inline\" style={{ paddingTop: '2px' }}>\n <input\n type=\"checkbox\"\n checked={targetGroup.attributes.stickinessEnabled}\n onChange={(event) =>\n this.targetGroupFieldChanged(\n index,\n 'attributes.stickinessEnabled',\n event.target.checked,\n )\n }\n />{' '}\n <label>Sticky</label>\n <HelpField id=\"aws.targetGroup.attributes.stickinessEnabled\" />\n </label>\n </span>\n {targetGroup.attributes.stickinessEnabled && (\n <span className=\"wizard-pod-content\">\n <label>Duration </label>\n <HelpField id=\"aws.targetGroup.attributes.stickinessDuration\" />{' '}\n <input\n className=\"form-control input-sm inline-number\"\n value={targetGroup.attributes.stickinessDuration}\n onChange={(event) =>\n this.targetGroupFieldChanged(\n index,\n 'attributes.stickinessDuration',\n event.target.value,\n )\n }\n type=\"text\"\n />\n </span>\n )}\n </div>\n </div>\n ) : (\n <span className=\"wizard-pod-content\">\n <label className=\"checkbox-inline\" style={{ paddingTop: '2px' }}>\n <input\n type=\"checkbox\"\n checked={targetGroup.attributes.multiValueHeadersEnabled}\n onChange={(event) =>\n this.targetGroupFieldChanged(\n index,\n 'attributes.multiValueHeadersEnabled',\n event.target.checked,\n )\n }\n />{' '}\n <label>Enable Multi Value Headers</label>\n </label>\n </span>\n )}\n </div>\n </div>\n </div>\n );\n })}\n <table className=\"table table-condensed packed\">\n <tbody>\n <tr>\n <td>\n <button type=\"button\" className=\"add-new col-md-12\" onClick={this.addTargetGroup}>\n <span className=\"glyphicon glyphicon-plus-sign\" /> Add new target group\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n );\n }\n}\n","import React from 'react';\n\nimport { AccountService, ChecklistInput } from '@spinnaker/core';\n\nexport interface IAvailabilityZoneSelectorProps {\n region: string;\n credentials: string;\n onChange: (zones: string[]) => void;\n allZones: string[];\n usePreferredZones?: boolean;\n selectedZones: string[];\n}\n\nexport interface IAvailabilityZoneSelectorState {\n defaultZones: string[];\n usePreferredZones: boolean;\n}\n\nexport class AvailabilityZoneSelector extends React.Component<\n IAvailabilityZoneSelectorProps,\n IAvailabilityZoneSelectorState\n> {\n constructor(props: IAvailabilityZoneSelectorProps) {\n super(props);\n this.state = {\n defaultZones: [],\n usePreferredZones: props.usePreferredZones || !props.selectedZones || props.selectedZones.length === 0,\n };\n\n this.setDefaultZones(this.state.usePreferredZones, props);\n }\n\n public componentWillReceiveProps(nextProps: IAvailabilityZoneSelectorProps): void {\n if (nextProps.region !== this.props.region || nextProps.credentials !== this.props.credentials) {\n this.setDefaultZones(this.state.usePreferredZones, nextProps);\n }\n }\n\n private setDefaultZones(usePreferredZones: boolean, props: IAvailabilityZoneSelectorProps) {\n const { credentials, region } = props;\n\n AccountService.getAvailabilityZonesForAccountAndRegion('aws', credentials, region).then((preferredZones) => {\n this.setState({ defaultZones: preferredZones });\n if (usePreferredZones && preferredZones) {\n props.onChange(preferredZones.slice());\n }\n });\n }\n\n private handleUsePreferredZonesChanged = (event: React.ChangeEvent<HTMLSelectElement>): void => {\n const usePreferredZones = event.target.value === 'true';\n this.setState({ usePreferredZones });\n\n if (usePreferredZones) {\n this.setDefaultZones(usePreferredZones, this.props);\n }\n };\n\n private handleSelectedZonesChanged = (zones: Set<string>): void => {\n this.props.onChange([...zones]);\n };\n\n public render(): React.ReactElement<AvailabilityZoneSelector> {\n const { region, allZones, selectedZones } = this.props;\n const { defaultZones, usePreferredZones } = this.state;\n\n return (\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">Availability Zones</div>\n {region && (\n <div className=\"col-md-7\">\n <p className=\"form-control-static\">Automatic Availability Zone Balancing:</p>\n <select\n className=\"form-control input-sm\"\n value={usePreferredZones ? 'true' : 'false'}\n onChange={this.handleUsePreferredZonesChanged}\n >\n <option value=\"true\">Enabled</option>\n <option value=\"false\">Manual</option>\n </select>\n <br />\n {usePreferredZones && (\n <div>\n <p className=\"form-control-static\">Server group will be available in:</p>\n <ul>\n {defaultZones.map((zone) => (\n <li key={zone}>{zone}</li>\n ))}\n </ul>\n </div>\n )}\n {!usePreferredZones && (\n <div>\n Restrict server group instances to:\n <ChecklistInput\n stringOptions={allZones}\n value={selectedZones}\n onChange={(e: React.ChangeEvent<any>) => this.handleSelectedZonesChanged(e.target.value)}\n />\n </div>\n )}\n </div>\n )}\n </div>\n );\n }\n}\n","import { get } from 'lodash';\nimport React from 'react';\nimport type { Option } from 'react-select';\n\nimport type { Application, ISelectInputProps, ISubnet, Omit } from '@spinnaker/core';\nimport { createFakeReactSyntheticEvent, SelectInput, useDeepObjectDiff, useMountStatusRef } from '@spinnaker/core';\nimport { AWSProviderSettings } from '../aws.settings';\n\nexport interface ISubnetSelectInputProps extends Omit<ISelectInputProps, 'options'> {\n value: string;\n onChange: (event: React.ChangeEvent<any>) => void;\n application: Application;\n readOnly?: boolean;\n hideClassic?: boolean;\n // Ordered list of subnet types to default to\n // higher priority defaults should be ordered first\n defaultSubnetTypes: string[];\n subnets: ISubnet[];\n region: string;\n credentials: string;\n}\n\nexport interface ISubnetSelectInputState {\n options: Array<Option<string>>;\n}\n\nfunction isClassicLockout(region: string, credentials: string, application: Application): boolean {\n const { classicLaunchLockout, classicLaunchAllowlist: allowlist } = AWSProviderSettings;\n\n const appCreationDate = Number(get(application, 'attributes.createTs', 0));\n const appCreatedAfterLockout = appCreationDate > (classicLaunchLockout || 0);\n const isAllowlisted = !!allowlist && allowlist.some((e) => e.region === region && e.credentials === credentials);\n return appCreatedAfterLockout || !isAllowlisted;\n}\n\nfunction getOptions(subnets: ISubnet[], isClassicHidden: boolean): Array<Option<string>> {\n const sortByLabel = (a: ISubnet, b: ISubnet) => a.label.localeCompare(b.label);\n const asOption = (subnet: ISubnet): Option<string> => ({ value: subnet.purpose, label: subnet.label });\n\n const classicOption = isClassicHidden ? [] : [{ label: 'None (EC2 Classic)', value: '' } as Option];\n\n const activeOptions = subnets\n .filter((x) => !x.deprecated)\n .sort(sortByLabel)\n .map(asOption);\n\n const deprecatedOptions = subnets\n .filter((x) => x.deprecated)\n .sort(sortByLabel)\n .map(asOption);\n\n if (deprecatedOptions.length) {\n deprecatedOptions.unshift({ label: '-----------', value: '', disabled: true });\n }\n\n return classicOption.concat(activeOptions).concat(deprecatedOptions) as Array<Option<string>>;\n}\n\nfunction getDefaultSubnet(subnets: ISubnet[], defaultSubnetTypes: string[] = []): ISubnet {\n for (const subnetType of defaultSubnetTypes) {\n const defaultSubnet = subnets.find((subnet) => subnetType === subnet.purpose);\n if (defaultSubnet) {\n return defaultSubnet;\n }\n }\n return undefined;\n}\n\nexport function SubnetSelectInput(props: ISubnetSelectInputProps) {\n const {\n application,\n credentials,\n defaultSubnetTypes,\n hideClassic,\n name,\n onChange,\n readOnly,\n region,\n subnets,\n value,\n ...otherProps\n } = props;\n\n // Allow subnets array reference to change by parent component\n const subnetsDiff = useDeepObjectDiff(subnets);\n\n const options = React.useMemo(() => {\n const isClassicHidden = hideClassic || isClassicLockout(region, credentials, application);\n return getOptions(subnets, isClassicHidden);\n }, [hideClassic, region, credentials, application, subnetsDiff]);\n\n const defaultSubnet = getDefaultSubnet(subnets, defaultSubnetTypes) || subnets[0];\n const mountStatus = useMountStatusRef().current;\n\n React.useEffect(() => {\n const isSelectionValid = options.some((o) => o.value === value);\n // - apply the default value whenever `options` changes and the current\n // selection is invalid, including on the first pass\n // - apply the default value on all subsequent renders if `options` changes\n const applyDefault = !isSelectionValid || mountStatus !== 'FIRST_RENDER';\n if (defaultSubnet && applyDefault) {\n onChange(createFakeReactSyntheticEvent({ name, value: defaultSubnet.purpose }));\n }\n }, [options]);\n\n if (readOnly) {\n return <p className=\"form-control-static\">{props.value || 'None (EC2 Classic)'}</p>;\n }\n\n return <SelectInput options={options} value={value} onChange={onChange} {...otherProps} />;\n}\n","import * as React from 'react';\n\nimport type { Application, ISubnet } from '@spinnaker/core';\nimport { HelpField, Markdown } from '@spinnaker/core';\n\nimport { SubnetSelectInput } from './SubnetSelectInput';\nimport { AWSProviderSettings } from '../aws.settings';\n\nexport interface ISubnetSelectFieldProps {\n application: Application;\n component: { [key: string]: any };\n field: string;\n helpKey: string;\n hideClassic?: boolean;\n labelColumns: number;\n onChange: () => void;\n readOnly?: boolean;\n // The default value to select when subnets change\n defaultSubnetTypes?: string[];\n // The recommended values; all other values will display a configurable warning\n recommendedSubnetTypes?: string[];\n region: string;\n subnets: ISubnet[];\n showSubnetWarning?: boolean;\n}\n\nexport class SubnetSelectField extends React.Component<ISubnetSelectFieldProps> {\n private handleChange = (event: React.ChangeEvent<any>) => {\n const { component, onChange, field } = this.props;\n component[field] = event.target.value;\n onChange();\n };\n\n public render() {\n const {\n component,\n defaultSubnetTypes,\n field,\n helpKey,\n labelColumns,\n recommendedSubnetTypes,\n region,\n showSubnetWarning,\n ...otherProps\n } = this.props;\n\n const value = component[field];\n const recommended = recommendedSubnetTypes ?? AWSProviderSettings.serverGroups?.recommendedSubnets ?? [];\n const defaults = defaultSubnetTypes ?? [AWSProviderSettings.defaults.subnetType];\n const isRecommended = recommended.some((subnet) => value && value.includes(subnet));\n const subnetWarning = AWSProviderSettings.serverGroups?.subnetWarning;\n\n return (\n <div className=\"form-group\">\n <div className={`col-md-${labelColumns} sm-label-right`}>\n VPC Subnet <HelpField id={helpKey} />\n </div>\n <div className=\"col-md-7\">\n {region ? (\n <SubnetSelectInput\n {...otherProps}\n inputClassName=\"form-control input-sm\"\n credentials={component.credentials}\n defaultSubnetTypes={defaults}\n region={region}\n value={value}\n onChange={this.handleChange}\n />\n ) : (\n '(Select an account)'\n )}\n {showSubnetWarning && !isRecommended && Boolean(subnetWarning) && (\n <div className=\"alert alert-warning sp-margin-s-top horizontal center\">\n <i className=\"fa fa-exclamation-triangle sp-margin-s-top\" />\n <div className=\"sp-margin-s-left\">\n <Markdown message={subnetWarning} style={{ display: 'inline-block', marginLeft: '2px' }} />\n </div>\n </div>\n )}\n </div>\n </div>\n );\n }\n}\n","import classNames from 'classnames';\nimport type { FieldProps, FormikErrors, FormikProps } from 'formik';\nimport { Field } from 'formik';\nimport { chain, groupBy, isNil, uniq } from 'lodash';\nimport React from 'react';\nimport type { Observable } from 'rxjs';\nimport { combineLatest as observableCombineLatest, from as observableFrom, Subject } from 'rxjs';\nimport { distinctUntilChanged, map, shareReplay, switchMap, takeUntil, withLatestFrom } from 'rxjs/operators';\n\nimport type { Application, IAccount, IMoniker, IRegion, ISubnet, IWizardPageComponent } from '@spinnaker/core';\nimport {\n AccountSelectInput,\n AccountService,\n HelpField,\n NameUtils,\n RegionSelectField,\n Spinner,\n SubnetReader,\n ValidationMessage,\n} from '@spinnaker/core';\nimport { AWSProviderSettings } from '../../../aws.settings';\nimport type { IAmazonLoadBalancer, IAmazonLoadBalancerUpsertCommand } from '../../../domain';\nimport { AvailabilityZoneSelector } from '../../../serverGroup/AvailabilityZoneSelector';\nimport { SubnetSelectField } from '../../../subnet';\n\nexport interface ISubnetOption {\n availabilityZones: string[];\n deprecated?: boolean;\n label: string;\n purpose: string;\n vpcIds: string[];\n}\n\nexport interface ILoadBalancerLocationProps {\n app: Application;\n formik: FormikProps<IAmazonLoadBalancerUpsertCommand>;\n forPipelineConfig?: boolean;\n isNew?: boolean;\n loadBalancer?: IAmazonLoadBalancer;\n}\n\nexport interface ILoadBalancerLocationState {\n accounts: IAccount[];\n availabilityZones: string[];\n existingLoadBalancerNames: string[];\n hideInternalFlag: boolean;\n internalFlagToggled: boolean;\n regions: IRegion[];\n subnets: ISubnetOption[];\n}\n\nexport class LoadBalancerLocation\n extends React.Component<ILoadBalancerLocationProps, ILoadBalancerLocationState>\n implements IWizardPageComponent<IAmazonLoadBalancerUpsertCommand> {\n public state: ILoadBalancerLocationState = {\n accounts: undefined,\n availabilityZones: [],\n existingLoadBalancerNames: [],\n hideInternalFlag: false,\n internalFlagToggled: false,\n regions: [],\n subnets: [],\n };\n\n private props$ = new Subject<ILoadBalancerLocationProps>();\n private destroy$ = new Subject<void>();\n\n public validate(values: IAmazonLoadBalancerUpsertCommand) {\n const errors = {} as FormikErrors<IAmazonLoadBalancerUpsertCommand>;\n\n if (this.state.existingLoadBalancerNames.includes(values.name)) {\n errors.name = `There is already a load balancer in ${values.credentials}:${values.region} with that name.`;\n }\n\n if (values.name && values.name.length > 32) {\n errors.name = 'Load balancer names cannot exceed 32 characters in length';\n }\n\n if (values.stack && !values.stack.match(/^[a-zA-Z0-9]*$/)) {\n errors.stack = 'Stack can only contain letters and numbers.';\n }\n\n if (values.detail && !values.detail.match(/^[a-zA-Z0-9-]*$/)) {\n errors.detail = 'Detail can only contain letters, numbers, and dashes.';\n }\n\n return errors;\n }\n\n protected buildName(): void {\n const { values } = this.props.formik;\n if (isNil(values.moniker)) {\n const nameParts = NameUtils.parseLoadBalancerName(values.name);\n values.stack = nameParts.stack;\n values.detail = nameParts.freeFormDetails;\n } else {\n values.stack = values.moniker.stack;\n values.detail = values.moniker.detail;\n }\n delete values.name;\n }\n\n private shouldHideInternalFlag(): boolean {\n if (AWSProviderSettings) {\n if (AWSProviderSettings.loadBalancers && AWSProviderSettings.loadBalancers.inferInternalFlagFromSubnet) {\n // clouddriver will check the subnet if isInternal is competely omitted\n delete this.props.formik.values.isInternal;\n return true;\n }\n }\n return false;\n }\n\n public componentDidMount(): void {\n this.setState({ hideInternalFlag: this.shouldHideInternalFlag() });\n if (this.props.loadBalancer && this.props.isNew) {\n this.buildName();\n }\n\n const formValues$ = this.props$.pipe(map((props) => props.formik.values));\n const appName$ = this.props$.pipe(\n map((props) => props.app.name),\n distinctUntilChanged(),\n );\n\n const form = {\n account$: formValues$.pipe(\n map((x) => x.credentials),\n distinctUntilChanged(),\n ),\n region$: formValues$.pipe(\n map((x) => x.region),\n distinctUntilChanged(),\n ),\n subnetPurpose$: formValues$.pipe(\n map((x) => x.subnetType),\n distinctUntilChanged(),\n ),\n stack$: formValues$.pipe(\n map((x) => x.stack),\n distinctUntilChanged(),\n ),\n detail$: formValues$.pipe(\n map((x) => x.detail),\n distinctUntilChanged(),\n ),\n };\n\n const allAccounts$ = observableFrom(AccountService.listAccounts('aws')).pipe(shareReplay(1));\n\n // combineLatest with allAccounts to wait for accounts to load and be cached\n const accountRegions$ = observableCombineLatest([form.account$, allAccounts$]).pipe(\n switchMap(([currentAccount, _allAccounts]) => AccountService.getRegionsForAccount(currentAccount)),\n shareReplay(1),\n );\n\n const allLoadBalancers$ = this.props.app.getDataSource('loadBalancers').data$ as Observable<IAmazonLoadBalancer[]>;\n const regionLoadBalancers$ = observableCombineLatest([allLoadBalancers$, form.account$, form.region$]).pipe(\n map(([allLoadBalancers, currentAccount, currentRegion]) => {\n return allLoadBalancers\n .filter((lb) => lb.account === currentAccount && lb.region === currentRegion)\n .map((lb) => lb.name);\n }),\n shareReplay(1),\n );\n\n const regionSubnets$ = observableCombineLatest([form.account$, form.region$]).pipe(\n switchMap(([currentAccount, currentRegion]) => this.getAvailableSubnets(currentAccount, currentRegion)),\n map((availableSubnets) => this.makeSubnetOptions(availableSubnets)),\n shareReplay(1),\n );\n\n const subnet$ = observableCombineLatest([regionSubnets$, form.subnetPurpose$]).pipe(\n map(([allSubnets, subnetPurpose]) => allSubnets && allSubnets.find((subnet) => subnet.purpose === subnetPurpose)),\n );\n\n // I don't understand why we use subnet.availabilityZones here, but region.availabilityZones below.\n const availabilityZones$ = subnet$.pipe(map((subnet) => (subnet ? uniq(subnet.availabilityZones).sort() : [])));\n\n // Update selected zones when the selected region changes\n const regionZones$ = form.region$.pipe(\n withLatestFrom(accountRegions$),\n map(([currentRegion, accountRegions]) => accountRegions.find((region) => region.name === currentRegion)),\n map((region) => (region ? region.availabilityZones : [])),\n );\n\n const moniker$ = observableCombineLatest([appName$, form.stack$, form.detail$]).pipe(\n map(([app, stack, detail]) => {\n return { app, stack, detail, cluster: NameUtils.getClusterName(app, stack, detail) } as IMoniker;\n }),\n );\n\n accountRegions$\n .pipe(withLatestFrom(form.region$), takeUntil(this.destroy$))\n .subscribe(([accountRegions, selectedRegion]) => {\n // If the selected region doesn't exist in the new list of regions (for a new acct), select the first region.\n if (!accountRegions.some((x) => x.name === selectedRegion)) {\n this.props.formik.setFieldValue('region', accountRegions[0] && accountRegions[0].name);\n }\n });\n\n regionZones$.pipe(takeUntil(this.destroy$)).subscribe((regionZones) => {\n this.props.formik.setFieldValue('regionZones', regionZones);\n });\n\n subnet$.pipe(takeUntil(this.destroy$)).subscribe((subnet) => {\n this.props.formik.setFieldValue('vpcId', subnet && subnet.vpcIds[0]);\n this.props.formik.setFieldValue('subnetType', subnet && subnet.purpose);\n if (!this.state.hideInternalFlag && !this.state.internalFlagToggled && subnet && subnet.purpose) {\n // Even if inferInternalFlagFromSubnet is false, deck will still try to guess which the user wants unless explicitly toggled\n this.props.formik.setFieldValue('isInternal', subnet.purpose.includes('internal'));\n }\n });\n\n moniker$.pipe(takeUntil(this.destroy$)).subscribe((moniker) => {\n this.props.formik.setFieldValue('moniker', moniker);\n this.props.formik.setFieldValue('name', moniker.cluster);\n });\n\n observableCombineLatest([allAccounts$, accountRegions$, availabilityZones$, regionLoadBalancers$, regionSubnets$])\n .pipe(takeUntil(this.destroy$))\n .subscribe(([accounts, regions, availabilityZones, existingLoadBalancerNames, subnets]) => {\n return this.setState({ accounts, regions, availabilityZones, existingLoadBalancerNames, subnets });\n });\n }\n\n public componentDidUpdate() {\n this.props$.next(this.props);\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n }\n\n private internalFlagChanged = (event: React.ChangeEvent<any>): void => {\n this.setState({ internalFlagToggled: true });\n this.props.formik.handleChange(event);\n };\n\n private getAvailableSubnets(credentials: string, region: string): PromiseLike<ISubnet[]> {\n return SubnetReader.listSubnets().then((subnets) => {\n return chain(subnets)\n .filter({ account: credentials, region })\n .reject({ target: 'ec2' })\n .reject({ purpose: null })\n .value();\n });\n }\n\n private handleSubnetUpdated = (subnetType: string): void => {\n this.props.formik.setFieldValue('subnetType', subnetType);\n };\n\n private makeSubnetOptions(availableSubnets: ISubnet[]): ISubnetOption[] {\n const makeSubnetOption = (subnets: ISubnet[]) => {\n const { purpose, label, deprecated } = subnets[0];\n const vpcIds = uniq(subnets.map((x) => x.vpcId));\n const availabilityZones = uniq(subnets.map((x) => x.availabilityZone));\n return { purpose, label, deprecated, vpcIds, availabilityZones } as ISubnetOption;\n };\n\n const grouped = groupBy(availableSubnets, (sn) => sn.purpose);\n return Object.keys(grouped)\n .map((k) => grouped[k])\n .map((subnets) => makeSubnetOption(subnets));\n }\n\n private accountUpdated = (account: string): void => {\n this.props.formik.setFieldValue('credentials', account);\n };\n\n private regionUpdated = (region: string): void => {\n this.props.formik.setFieldValue('region', region);\n };\n\n private stackChanged = (event: React.ChangeEvent<HTMLInputElement>): void => {\n this.props.formik.setFieldValue('stack', event.target.value);\n };\n\n private detailChanged = (event: React.ChangeEvent<HTMLInputElement>): void => {\n this.props.formik.setFieldValue('detail', event.target.value);\n };\n\n private handleAvailabilityZonesChanged = (zones: string[]): void => {\n this.props.formik.setFieldValue('regionZones', zones);\n };\n\n public render() {\n const { app } = this.props;\n const { errors, values } = this.props.formik;\n const { accounts, availabilityZones, hideInternalFlag, regions, subnets } = this.state;\n\n const className = classNames({\n 'col-md-12': true,\n well: true,\n 'alert-danger': !!errors.name,\n 'alert-info': !errors.name,\n });\n\n return (\n <div className=\"container-fluid form-horizontal\">\n {!accounts && (\n <div style={{ height: '200px' }}>\n <Spinner size=\"medium\" />\n </div>\n )}\n {accounts && (\n <div className=\"modal-body\">\n <div className=\"form-group\">\n <div className={className}>\n <strong>Your load balancer will be named: </strong>\n <span>{values.name}</span>\n <HelpField id=\"aws.loadBalancer.name\" />\n <Field type=\"text\" style={{ display: 'none' }} className=\"form-control input-sm no-spel\" name=\"name\" />\n {errors.name && <ValidationMessage type=\"error\" message={errors.name} />}\n </div>\n </div>\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">Account</div>\n <div className=\"col-md-7\">\n <AccountSelectInput\n value={values.credentials}\n onChange={(evt: any) => this.accountUpdated(evt.target.value)}\n accounts={accounts}\n provider=\"aws\"\n />\n </div>\n </div>\n <RegionSelectField\n labelColumns={3}\n component={values}\n field=\"region\"\n account={values.credentials}\n onChange={this.regionUpdated}\n regions={regions}\n />\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">\n Stack <HelpField id=\"aws.loadBalancer.stack\" />\n </div>\n <div className=\"col-md-3\">\n <input\n type=\"text\"\n className={`form-control input-sm no-spel ${errors.stack ? 'invalid' : ''}`}\n value={values.stack}\n name=\"stack\"\n onChange={this.stackChanged}\n />\n </div>\n <div className=\"col-md-6 form-inline\">\n <label className=\"sm-label-right\">\n <span>\n Detail <HelpField id=\"aws.loadBalancer.detail\" />{' '}\n </span>\n </label>\n <input\n type=\"text\"\n className={`form-control input-sm no-spel ${errors.detail ? 'invalid' : ''}`}\n value={values.detail}\n name=\"detail\"\n onChange={this.detailChanged}\n />\n </div>\n {errors.stack && (\n <div className=\"col-md-7 col-md-offset-3\">\n <ValidationMessage type=\"error\" message={errors.stack} />\n </div>\n )}\n {errors.detail && (\n <div className=\"col-md-7 col-md-offset-3\">\n <ValidationMessage type=\"error\" message={errors.detail} />\n </div>\n )}\n </div>\n\n <AvailabilityZoneSelector\n credentials={values.credentials}\n region={values.region}\n onChange={this.handleAvailabilityZonesChanged}\n selectedZones={values.regionZones}\n allZones={availabilityZones}\n />\n <SubnetSelectField\n labelColumns={3}\n helpKey=\"aws.loadBalancer.subnet\"\n component={values}\n field=\"subnetType\"\n region={values.region}\n subnets={subnets as any}\n application={app}\n onChange={() => this.handleSubnetUpdated(values.subnetType)}\n />\n {values.vpcId && !hideInternalFlag && (\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">\n <b>Internal</b> <HelpField id=\"aws.loadBalancer.internal\" />\n </div>\n <div className=\"col-md-7 checkbox\">\n <label>\n <Field\n name=\"isInternal\"\n onChange={this.internalFlagChanged}\n render={({ field: { value, ...field } }: FieldProps) => (\n <input type=\"checkbox\" {...field} checked={!!value} />\n )}\n />\n Create an internal load balancer\n </label>\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n }\n}\n","import type { FormikErrors, FormikProps } from 'formik';\nimport { get, isEqual, partition, uniq } from 'lodash';\nimport React from 'react';\nimport VirtualizedSelect from 'react-virtualized-select';\nimport { combineLatest as observableCombineLatest, Subject } from 'rxjs';\nimport { distinctUntilChanged, map, mergeMap, switchMap, takeUntil, tap, withLatestFrom } from 'rxjs/operators';\n\nimport type { ISecurityGroup, IWizardPageComponent } from '@spinnaker/core';\nimport { FirewallLabels, InfrastructureCaches, ReactInjector, Spinner, timestamp } from '@spinnaker/core';\nimport { AWSProviderSettings } from '../../../aws.settings';\nimport type { IAmazonLoadBalancerUpsertCommand } from '../../../domain';\n\nexport interface ISecurityGroupsProps {\n formik: FormikProps<IAmazonLoadBalancerUpsertCommand>;\n isNew?: boolean;\n onLoadingChanged(isLoading: boolean): void;\n}\n\nexport interface ISecurityGroupsState {\n availableSecurityGroups: Array<{ label: string; value: string }>;\n defaultSecurityGroups: string[];\n loaded: boolean;\n refreshing: boolean;\n removed: string[];\n refreshTime: number;\n}\n\nexport class SecurityGroups\n extends React.Component<ISecurityGroupsProps, ISecurityGroupsState>\n implements IWizardPageComponent<IAmazonLoadBalancerUpsertCommand> {\n private destroy$ = new Subject<void>();\n private props$ = new Subject<ISecurityGroupsProps>();\n private refresh$ = new Subject<void>();\n\n constructor(props: ISecurityGroupsProps) {\n super(props);\n\n const defaultSecurityGroups = get<string[]>(AWSProviderSettings, 'defaultSecurityGroups', []);\n this.state = {\n availableSecurityGroups: [],\n defaultSecurityGroups,\n loaded: false,\n refreshing: false,\n removed: [],\n refreshTime: InfrastructureCaches.get('securityGroups').getStats().ageMax,\n };\n }\n\n public validate(): FormikErrors<IAmazonLoadBalancerUpsertCommand> {\n const { removed } = this.state;\n if (removed && removed.length) {\n const label = FirewallLabels.get('Firewalls');\n return { securityGroupsRemoved: `${label} removed: ${removed.join(', ')}` };\n }\n return {};\n }\n\n private clearRemoved = (): void => {\n this.setState({ removed: [] }, () => this.props.formik.validateForm());\n };\n\n private updateRemovedSecurityGroups(selectedGroups: string[], availableGroups: ISecurityGroup[]): void {\n const { isNew } = this.props;\n const { defaultSecurityGroups, removed } = this.state;\n\n const getDesiredGroupNames = (): string[] => {\n const desired = selectedGroups.concat(removed).sort();\n const defaults = isNew ? defaultSecurityGroups : [];\n return uniq(defaults.concat(desired));\n };\n\n const getAvailableSecurityGroup = (name: string) =>\n availableGroups.find((sg) => sg.name === name || sg.id === name);\n\n // Organize selected security groups into available/not available\n const [available, notAvailable] = partition(getDesiredGroupNames(), (name) => !!getAvailableSecurityGroup(name));\n\n // Normalize available security groups from [name or id] to name\n const securityGroups = available.map((name) => getAvailableSecurityGroup(name).name);\n if (!isEqual(selectedGroups, securityGroups)) {\n this.props.formik.setFieldValue('securityGroups', securityGroups);\n }\n this.setState({ removed: notAvailable }, () => this.props.formik.validateForm());\n }\n\n private handleSecurityGroupsChanged = (newValues: Array<{ label: string; value: string }>): void => {\n this.props.formik.setFieldValue(\n 'securityGroups',\n newValues.map((sg) => sg.value),\n );\n };\n\n private onRefreshStart() {\n this.props.onLoadingChanged(true);\n this.setState({ refreshing: true });\n }\n\n private onRefreshComplete() {\n this.props.onLoadingChanged(false);\n const refreshTime = InfrastructureCaches.get('securityGroups').getStats().ageMax;\n this.setState({ refreshing: false, loaded: true, refreshTime });\n }\n\n public componentDidMount(): void {\n const allSecurityGroups$ = this.refresh$.pipe(\n tap(() => this.onRefreshStart()),\n switchMap(() => ReactInjector.cacheInitializer.refreshCache('securityGroups')),\n mergeMap(() => ReactInjector.securityGroupReader.getAllSecurityGroups()),\n tap(() => this.onRefreshComplete()),\n );\n\n const formValues$ = this.props$.pipe(map((props) => props.formik.values));\n const vpcId$ = formValues$.pipe(\n map((values) => values.vpcId),\n distinctUntilChanged(),\n );\n\n const availableSecurityGroups$ = observableCombineLatest([vpcId$, allSecurityGroups$]).pipe(\n withLatestFrom(formValues$),\n map(([[vpcId, allSecurityGroups], formValues]) => {\n const forAccount = allSecurityGroups[formValues.credentials] || {};\n const forRegion = (forAccount.aws && forAccount.aws[formValues.region]) || [];\n return forRegion.filter((securityGroup) => vpcId === securityGroup.vpcId).sort();\n }),\n );\n\n availableSecurityGroups$\n .pipe(withLatestFrom(formValues$), takeUntil(this.destroy$))\n .subscribe(([availableSecurityGroups, formValues]) => {\n const makeOption = (sg: ISecurityGroup) => ({ label: `${sg.name} (${sg.id})`, value: sg.name });\n this.setState({ availableSecurityGroups: availableSecurityGroups.map(makeOption) });\n this.updateRemovedSecurityGroups(formValues.securityGroups, availableSecurityGroups);\n });\n\n this.refresh$.next();\n }\n\n public componentDidUpdate(): void {\n this.props$.next(this.props);\n }\n\n public componentWillUnmount() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n public render() {\n const { securityGroups } = this.props.formik.values;\n const { availableSecurityGroups, loaded, refreshing, removed, refreshTime } = this.state;\n\n return (\n <div className=\"container-fluid form-horizontal\">\n <div>\n {removed.length > 0 && (\n <div className=\"form-group\">\n <div className=\"col-md-12\">\n <div className=\"alert alert-warning\">\n <p>\n <i className=\"fa fa-exclamation-triangle\" />\n The following {FirewallLabels.get('firewalls')} could not be found in the selected\n account/region/VPC and were removed:\n </p>\n <ul>\n {removed.map((sg) => (\n <li key={sg}>{sg}</li>\n ))}\n </ul>\n <p className=\"text-right\">\n <a className=\"btn btn-sm btn-default dirty-flag-dismiss clickable\" onClick={this.clearRemoved}>\n Okay\n </a>\n </p>\n </div>\n </div>\n </div>\n )}\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">{FirewallLabels.get('Firewalls')}</div>\n <div className=\"col-md-9\">\n {!loaded && (\n <div style={{ paddingTop: '13px' }}>\n <Spinner size=\"small\" />\n </div>\n )}\n {loaded && (\n <VirtualizedSelect\n // className=\"\"\n multi={true}\n value={securityGroups}\n options={availableSecurityGroups}\n onChange={this.handleSecurityGroupsChanged}\n clearable={false}\n />\n )}\n </div>\n </div>\n\n <div className=\"form-group small\" style={{ marginTop: '20px' }}>\n <div className=\"col-md-9 col-md-offset-3\">\n <p>\n {refreshing && (\n <span>\n <span className=\"fa fa-sync-alt fa-spin\" />{' '}\n </span>\n )}\n {FirewallLabels.get('Firewalls')}\n {!refreshing && <span> last refreshed {timestamp(refreshTime)}</span>}\n {refreshing && <span> refreshing...</span>}\n </p>\n <p>\n If you're not finding a {FirewallLabels.get('firewall')} that was recently added,{' '}\n <a className=\"clickable\" onClick={() => this.refresh$.next()}>\n click here\n </a>{' '}\n to refresh the list.\n </p>\n </div>\n </div>\n </div>\n </div>\n );\n }\n}\n","import { cloneDeep, get } from 'lodash';\nimport React from 'react';\n\nimport type { ILoadBalancerModalProps } from '@spinnaker/core';\nimport {\n AccountService,\n FirewallLabels,\n LoadBalancerWriter,\n noop,\n ReactInjector,\n ReactModal,\n TaskMonitor,\n WizardModal,\n WizardPage,\n} from '@spinnaker/core';\n\nimport { ALBAdvancedSettings } from './ALBAdvancedSettings';\nimport { ALBListeners } from './ALBListeners';\nimport { TargetGroups } from './TargetGroups';\nimport { AWSProviderSettings } from '../../../aws.settings';\nimport { LoadBalancerLocation } from '../common/LoadBalancerLocation';\nimport { SecurityGroups } from '../common/SecurityGroups';\nimport type { IAmazonApplicationLoadBalancer, IAmazonApplicationLoadBalancerUpsertCommand } from '../../../domain';\nimport { AwsLoadBalancerTransformer } from '../../loadBalancer.transformer';\n\nimport '../common/configure.less';\n\nexport interface ICreateApplicationLoadBalancerProps extends ILoadBalancerModalProps {\n loadBalancer: IAmazonApplicationLoadBalancer;\n}\n\nexport interface ICreateApplicationLoadBalancerState {\n includeSecurityGroups: boolean;\n isNew: boolean;\n loadBalancerCommand: IAmazonApplicationLoadBalancerUpsertCommand;\n taskMonitor: TaskMonitor;\n}\n\nexport class CreateApplicationLoadBalancer extends React.Component<\n ICreateApplicationLoadBalancerProps,\n ICreateApplicationLoadBalancerState\n> {\n public static defaultProps: Partial<ICreateApplicationLoadBalancerProps> = {\n closeModal: noop,\n dismissModal: noop,\n };\n\n private _isUnmounted = false;\n private refreshUnsubscribe: () => void;\n private certificateTypes = get(AWSProviderSettings, 'loadBalancers.certificateTypes', ['iam', 'acm']);\n\n public static show(props: ICreateApplicationLoadBalancerProps): Promise<IAmazonApplicationLoadBalancerUpsertCommand> {\n const modalProps = { dialogClassName: 'wizard-modal modal-lg' };\n return ReactModal.show(CreateApplicationLoadBalancer, props, modalProps);\n }\n\n constructor(props: ICreateApplicationLoadBalancerProps) {\n super(props);\n\n const loadBalancerCommand = props.command\n ? (props.command as IAmazonApplicationLoadBalancerUpsertCommand) // ejecting from a wizard\n : props.loadBalancer\n ? AwsLoadBalancerTransformer.convertApplicationLoadBalancerForEditing(props.loadBalancer)\n : AwsLoadBalancerTransformer.constructNewApplicationLoadBalancerTemplate(props.app);\n\n this.state = {\n includeSecurityGroups: !!loadBalancerCommand.vpcId,\n isNew: !props.loadBalancer,\n loadBalancerCommand,\n taskMonitor: null,\n };\n }\n\n protected certificateIdAsARN(\n accountId: string,\n certificateId: string,\n region: string,\n certificateType: string,\n ): string {\n if (\n certificateId &&\n (certificateId.indexOf('arn:aws:iam::') !== 0 || certificateId.indexOf('arn:aws:acm:') !== 0)\n ) {\n // If they really want to enter the ARN...\n if (certificateType === 'iam') {\n return `arn:aws:iam::${accountId}:server-certificate/${certificateId}`;\n }\n if (certificateType === 'acm') {\n return `arn:aws:acm:${region}:${accountId}:certificate/${certificateId}`;\n }\n }\n return certificateId;\n }\n\n private formatListeners(command: IAmazonApplicationLoadBalancerUpsertCommand): PromiseLike<void> {\n return AccountService.getAccountDetails(command.credentials).then((account) => {\n command.listeners.forEach((listener) => {\n if (listener.protocol === 'HTTP') {\n delete listener.sslPolicy;\n listener.certificates = [];\n }\n listener.certificates.forEach((certificate) => {\n certificate.certificateArn = this.certificateIdAsARN(\n account.accountId,\n certificate.name,\n command.region,\n certificate.type || this.certificateTypes[0],\n );\n });\n });\n });\n }\n\n private setAvailabilityZones(loadBalancerCommand: IAmazonApplicationLoadBalancerUpsertCommand): void {\n const availabilityZones: { [region: string]: string[] } = {};\n availabilityZones[loadBalancerCommand.region] = loadBalancerCommand.regionZones || [];\n loadBalancerCommand.availabilityZones = availabilityZones;\n }\n\n private addAppName(name: string): string {\n return `${this.props.app.name}-${name}`;\n }\n\n private manageTargetGroupNames(command: IAmazonApplicationLoadBalancerUpsertCommand): void {\n (command.targetGroups || []).forEach((targetGroupDescription) => {\n targetGroupDescription.name = this.addAppName(targetGroupDescription.name);\n });\n (command.listeners || []).forEach((listenerDescription) => {\n listenerDescription.defaultActions.forEach((actionDescription) => {\n if (actionDescription.targetGroupName) {\n actionDescription.targetGroupName = this.addAppName(actionDescription.targetGroupName);\n }\n });\n (listenerDescription.rules || []).forEach((ruleDescription) => {\n ruleDescription.actions.forEach((actionDescription) => {\n if (actionDescription.targetGroupName) {\n actionDescription.targetGroupName = this.addAppName(actionDescription.targetGroupName);\n }\n });\n });\n });\n }\n\n private manageRules(command: IAmazonApplicationLoadBalancerUpsertCommand): void {\n command.listeners.forEach((listener) => {\n listener.rules.forEach((rule, index) => {\n // Set the priority in array order, starting with 1\n rule.priority = index + 1;\n // Remove conditions that have no value\n rule.conditions = rule.conditions.filter((condition) => {\n if (condition.field !== 'http-request-method') {\n return condition.values[0].length > 0;\n }\n\n return condition.values.length > 0;\n });\n });\n });\n }\n\n private setIpAddressType(command: IAmazonApplicationLoadBalancerUpsertCommand): void {\n command.ipAddressType = command.dualstack ? 'dualstack' : 'ipv4';\n delete command.dualstack;\n }\n\n private formatCommand(command: IAmazonApplicationLoadBalancerUpsertCommand): void {\n this.setAvailabilityZones(command);\n this.manageTargetGroupNames(command);\n this.manageRules(command);\n this.setIpAddressType(command);\n }\n\n protected onApplicationRefresh(values: IAmazonApplicationLoadBalancerUpsertCommand): void {\n if (this._isUnmounted) {\n return;\n }\n\n this.refreshUnsubscribe = undefined;\n this.props.dismissModal();\n this.setState({ taskMonitor: undefined });\n const newStateParams = {\n name: values.name,\n accountId: values.credentials,\n region: values.region,\n vpcId: values.vpcId,\n provider: 'aws',\n };\n\n if (!ReactInjector.$state.includes('**.loadBalancerDetails')) {\n ReactInjector.$state.go('.loadBalancerDetails', newStateParams);\n } else {\n ReactInjector.$state.go('^.loadBalancerDetails', newStateParams);\n }\n }\n\n public componentWillUnmount(): void {\n this._isUnmounted = true;\n if (this.refreshUnsubscribe) {\n this.refreshUnsubscribe();\n }\n }\n\n private onTaskComplete(values: IAmazonApplicationLoadBalancerUpsertCommand): void {\n this.props.app.loadBalancers.refresh();\n this.refreshUnsubscribe = this.props.app.loadBalancers.onNextRefresh(null, () => this.onApplicationRefresh(values));\n }\n\n private submit = (values: IAmazonApplicationLoadBalancerUpsertCommand): void => {\n const { app, forPipelineConfig, closeModal } = this.props;\n const { isNew } = this.state;\n\n const descriptor = isNew ? 'Create' : 'Update';\n const loadBalancerCommandFormatted = cloneDeep(values);\n\n // replace all authenticateOidcConfig with authenticateOidcActionConfig because aws\n loadBalancerCommandFormatted.listeners.forEach((listener) => {\n listener.defaultActions.forEach((a: any) => {\n if (a.authenticateOidcConfig) {\n a.authenticateOidcActionConfig = a.authenticateOidcConfig;\n delete a.authenticateOidcConfig;\n }\n });\n listener.rules.forEach((r) =>\n r.actions.forEach((a: any) => {\n if (a.authenticateOidcConfig) {\n a.authenticateOidcActionConfig = a.authenticateOidcConfig;\n delete a.authenticateOidcConfig;\n }\n }),\n );\n });\n\n if (forPipelineConfig) {\n // don't submit to backend for creation. Just return the loadBalancerCommand object\n this.formatListeners(loadBalancerCommandFormatted).then(() => {\n this.setIpAddressType(loadBalancerCommandFormatted);\n closeModal && closeModal(loadBalancerCommandFormatted);\n });\n } else {\n const taskMonitor = new TaskMonitor({\n application: app,\n title: `${isNew ? 'Creating' : 'Updating'} your load balancer`,\n modalInstance: TaskMonitor.modalInstanceEmulation(() => this.props.dismissModal()),\n onTaskComplete: () => this.onTaskComplete(loadBalancerCommandFormatted),\n });\n\n taskMonitor.submit(() => {\n return this.formatListeners(loadBalancerCommandFormatted).then(() => {\n this.formatCommand(loadBalancerCommandFormatted);\n return LoadBalancerWriter.upsertLoadBalancer(loadBalancerCommandFormatted, app, descriptor);\n });\n });\n\n this.setState({ taskMonitor });\n }\n };\n\n public render() {\n const { app, dismissModal, forPipelineConfig, loadBalancer } = this.props;\n const { isNew, loadBalancerCommand, taskMonitor } = this.state;\n let heading = forPipelineConfig ? 'Configure Application Load Balancer' : 'Create New Application Load Balancer';\n if (!isNew) {\n heading = `Edit ${loadBalancerCommand.name}: ${loadBalancerCommand.region}: ${loadBalancerCommand.credentials}`;\n }\n\n return (\n <WizardModal<IAmazonApplicationLoadBalancerUpsertCommand>\n heading={heading}\n initialValues={loadBalancerCommand}\n taskMonitor={taskMonitor}\n dismissModal={dismissModal}\n closeModal={this.submit}\n submitButtonLabel={forPipelineConfig ? (isNew ? 'Add' : 'Done') : isNew ? 'Create' : 'Update'}\n render={({ formik, nextIdx, wizard }) => {\n const showLocationSection = isNew || forPipelineConfig;\n const showSecurityGroups = !!formik.values.vpcId;\n\n return (\n <>\n {showLocationSection && (\n <WizardPage\n label=\"Location\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => (\n <LoadBalancerLocation\n app={app}\n forPipelineConfig={forPipelineConfig}\n formik={formik}\n isNew={isNew}\n loadBalancer={loadBalancer}\n ref={innerRef}\n />\n )}\n />\n )}\n\n {showSecurityGroups && (\n <WizardPage\n label={FirewallLabels.get('Firewalls')}\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef, onLoadingChanged }) => (\n <SecurityGroups formik={formik} isNew={isNew} onLoadingChanged={onLoadingChanged} ref={innerRef} />\n )}\n />\n )}\n\n <WizardPage\n label=\"Target Groups\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => (\n <TargetGroups ref={innerRef} app={app} formik={formik} isNew={isNew} loadBalancer={loadBalancer} />\n )}\n />\n\n <WizardPage\n label=\"Listeners\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => <ALBListeners ref={innerRef} app={app} formik={formik} />}\n />\n\n <WizardPage\n label=\"Advanced Settings\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => <ALBAdvancedSettings ref={innerRef} />}\n />\n </>\n );\n }}\n />\n );\n }\n}\n","import type { FormikProps } from 'formik';\nimport React from 'react';\n\nimport { FormikFormField, HelpField, NumberInput, Validators } from '@spinnaker/core';\nimport type { IAmazonClassicLoadBalancerUpsertCommand } from '../../../domain';\n\nimport './AdvancedSettings.css';\n\nexport interface IAdvancedSettingsProps {\n formik: FormikProps<IAmazonClassicLoadBalancerUpsertCommand>;\n}\n\nexport class AdvancedSettings extends React.Component<IAdvancedSettingsProps> {\n public render() {\n const { values } = this.props.formik;\n const { maxValue } = Validators;\n return (\n <div className=\"form-group AmazonLoadBalancer-AdvancedSettings\">\n <FormikFormField\n name=\"healthTimeout\"\n label=\"Timeout\"\n required={true}\n help={<HelpField id=\"loadBalancer.advancedSettings.healthTimeout\" />}\n input={(props) => <NumberInput {...props} min={0} max={values.healthInterval} />}\n validate={maxValue(values.healthInterval, 'Timeout must be less than the health interval.')}\n />\n\n <FormikFormField\n name=\"healthInterval\"\n label=\"Interval\"\n required={true}\n help={<HelpField id=\"loadBalancer.advancedSettings.healthInterval\" />}\n input={(props) => <NumberInput {...props} min={0} />}\n />\n\n <FormikFormField\n name=\"healthyThreshold\"\n label=\"Healthy Threshold\"\n required={true}\n help={<HelpField id=\"loadBalancer.advancedSettings.healthyThreshold\" />}\n input={(props) => <NumberInput {...props} min={0} />}\n />\n\n <FormikFormField\n name=\"unhealthyThreshold\"\n label=\"Unhealthy Threshold\"\n required={true}\n help={<HelpField id=\"loadBalancer.advancedSettings.unhealthyThreshold\" />}\n input={(props) => <NumberInput {...props} min={0} />}\n />\n\n <FormikFormField\n name=\"idleTimeout\"\n label=\"Idle Timeout\"\n required={true}\n help={<HelpField id=\"loadBalancer.advancedSettings.idleTimeout\" />}\n input={(props) => <NumberInput {...props} min={0} />}\n />\n\n <div className=\"col-md-12\">\n <p>\n Additional configuration options (cross-zone load balancing, session stickiness, access logs) are available\n via the AWS console.\n </p>\n </div>\n </div>\n );\n }\n}\n","import type { FormikProps } from 'formik';\nimport React from 'react';\n\nimport { FormikFormField, NumberInput, SelectInput, TextInput } from '@spinnaker/core';\nimport type { IAmazonClassicLoadBalancerUpsertCommand } from '../../../domain';\n\nexport interface IHealthCheckProps {\n formik: FormikProps<IAmazonClassicLoadBalancerUpsertCommand>;\n}\n\nexport class HealthCheck extends React.Component<IHealthCheckProps> {\n public requiresHealthCheckPath(): boolean {\n const { values } = this.props.formik;\n return values.healthCheckProtocol && values.healthCheckProtocol.indexOf('HTTP') === 0;\n }\n\n private healthCheckPathChanged = (value: string) => {\n if (value && value.indexOf('/') !== 0) {\n this.props.formik.setFieldValue('healthCheckPath', `/${value}`);\n }\n };\n\n public render() {\n return (\n <div className=\"container-fluid form-horizontal\">\n <div className=\"col-md-4 sm-label-right\">Ping</div>\n <div className=\"col-md-8\">\n <table className=\"table table-condensed packed\">\n <thead>\n <tr>\n <th style={{ width: '35%' }}>Protocol</th>\n <th style={{ width: '30%' }}>Port</th>\n <th>{this.requiresHealthCheckPath() && <span>Path</span>}</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>\n <FormikFormField\n name=\"healthCheckProtocol\"\n required={true}\n input={(props) => <SelectInput {...props} options={['HTTP', 'HTTPS', 'SSL', 'TCP']} />}\n />\n </td>\n <td>\n <FormikFormField\n name=\"healthCheckPort\"\n required={true}\n input={(props) => <NumberInput {...props} min={1} max={65534} />}\n />\n </td>\n <td>\n {this.requiresHealthCheckPath() && (\n <FormikFormField\n name=\"healthCheckPath\"\n input={(props) => <TextInput {...props} />}\n required={true}\n onChange={this.healthCheckPathChanged}\n />\n )}\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n );\n }\n}\n","import type { FormikProps } from 'formik';\nimport { get } from 'lodash';\nimport React from 'react';\n\nimport type { Application } from '@spinnaker/core';\n\nimport { AWSProviderSettings } from '../../../aws.settings';\nimport { AmazonCertificateReader } from '../../../certificates/AmazonCertificateReader';\nimport { AmazonCertificateSelectField } from '../common/AmazonCertificateSelectField';\nimport type {\n ClassicListenerProtocol,\n IAmazonCertificate,\n IAmazonClassicLoadBalancerUpsertCommand,\n IClassicListenerDescription,\n} from '../../../domain';\n\nimport './Listeners.less';\n\nexport interface IListenersProps {\n formik: FormikProps<IAmazonClassicLoadBalancerUpsertCommand>;\n app: Application;\n}\n\nexport interface IListenersState {\n certificates: { [accountId: number]: IAmazonCertificate[] };\n}\n\nexport class Listeners extends React.Component<IListenersProps, IListenersState> {\n public protocols = ['HTTP', 'HTTPS', 'TCP', 'SSL'];\n public secureProtocols = ['HTTPS', 'SSL'];\n private certificateTypes = get(AWSProviderSettings, 'loadBalancers.certificateTypes', ['iam', 'acm']);\n\n public state: IListenersState = {\n certificates: [],\n };\n\n public componentDidMount(): void {\n this.loadCertificates();\n }\n\n private loadCertificates(): void {\n AmazonCertificateReader.listCertificates().then((certificates) => {\n this.setState({ certificates });\n });\n }\n\n private updateListeners(): void {\n const { values, setFieldValue } = this.props.formik;\n setFieldValue('listeners', values.listeners);\n }\n\n private showCertificateSelect(listener: IClassicListenerDescription): boolean {\n return (\n listener.sslCertificateType === 'iam' &&\n this.state.certificates &&\n Object.keys(this.state.certificates).length > 0\n );\n }\n\n private listenerExternalProtocolChanged(\n listener: IClassicListenerDescription,\n newProtocol: ClassicListenerProtocol,\n ): void {\n listener.externalProtocol = newProtocol;\n if (this.secureProtocols.includes(newProtocol)) {\n listener.externalPort = 443;\n if (this.certificateTypes.length >= 1) {\n listener.sslCertificateType = this.certificateTypes[0];\n }\n }\n if (newProtocol === 'HTTP') {\n listener.externalPort = 80;\n }\n this.updateListeners();\n }\n\n private listenerInternalProtocolChanged(\n listener: IClassicListenerDescription,\n newProtocol: ClassicListenerProtocol,\n ): void {\n listener.internalProtocol = newProtocol;\n this.updateListeners();\n }\n\n private listenerExternalPortChanged(listener: IClassicListenerDescription, newPort: string): void {\n listener.externalPort = Number.parseInt(newPort, 10);\n this.updateListeners();\n }\n\n private listenerInternalPortChanged(listener: IClassicListenerDescription, newPort: string): void {\n listener.internalPort = Number.parseInt(newPort, 10);\n this.updateListeners();\n }\n\n private listenerCertificateTypeChanged(listener: IClassicListenerDescription, newProtocol: string): void {\n listener.sslCertificateType = newProtocol;\n this.updateListeners();\n }\n\n private handleListenerCertificateChanged(listener: IClassicListenerDescription, newCertificate: string): void {\n listener.sslCertificateName = newCertificate;\n this.updateListeners();\n }\n\n private removeListener(index: number): void {\n this.props.formik.values.listeners.splice(index, 1);\n this.updateListeners();\n }\n\n private addListener = (): void => {\n this.props.formik.values.listeners.push({\n internalProtocol: 'HTTP',\n externalProtocol: 'HTTP',\n externalPort: 80,\n internalPort: 80,\n });\n this.updateListeners();\n };\n\n private renderCertificateSelector(listener: IClassicListenerDescription): JSX.Element {\n if (!this.secureProtocols.includes(listener.externalProtocol)) {\n return null;\n } else if (this.showCertificateSelect(listener)) {\n const { values } = this.props.formik;\n const { certificates } = this.state;\n return (\n <AmazonCertificateSelectField\n certificates={certificates}\n accountName={values.credentials}\n currentValue={listener.sslCertificateName}\n app={this.props.app}\n onCertificateSelect={(value) => this.handleListenerCertificateChanged(listener, value)}\n />\n );\n } else {\n return (\n <input\n className=\"input-sm\"\n style={{ width: '100%', marginLeft: '10px' }}\n required={true}\n onChange={(e) => this.handleListenerCertificateChanged(listener, e.target.value)}\n value={listener.sslCertificateName}\n />\n );\n }\n }\n\n public render() {\n const { values } = this.props.formik;\n\n return (\n <div className=\"container-fluid form-horizontal create-classic-load-balancer-wizard-listeners\">\n <div className=\"form-group\">\n <div className=\"col-md-12\">\n <table className=\"table table-condensed packed\">\n <thead>\n <tr>\n <th>External Protocol</th>\n <th>External Port</th>\n <th />\n <th>Internal Protocol</th>\n <th>Internal Port</th>\n <th />\n </tr>\n </thead>\n <tbody>\n {values.listeners.map((listener, index) => (\n <React.Fragment key={index}>\n {/* Using React.Fragment to supply the key only */}\n <tr key={index + '-main'}>\n <td>\n <select\n className=\"form-control input-sm\"\n value={listener.externalProtocol}\n onChange={(event) =>\n this.listenerExternalProtocolChanged(\n listener,\n event.target.value as ClassicListenerProtocol,\n )\n }\n >\n {this.protocols.map((p) => (\n <option key={p}>{p}</option>\n ))}\n </select>\n </td>\n <td>\n <input\n className=\"form-control input-sm\"\n type=\"number\"\n min=\"0\"\n value={listener.externalPort}\n onChange={(event) => this.listenerExternalPortChanged(listener, event.target.value)}\n required={true}\n />\n </td>\n <td className=\"small\" style={{ paddingTop: '10px' }}>\n &rarr;\n </td>\n <td>\n <select\n className=\"form-control input-sm\"\n value={listener.internalProtocol}\n onChange={(event) =>\n this.listenerInternalProtocolChanged(\n listener,\n event.target.value as ClassicListenerProtocol,\n )\n }\n >\n {this.protocols.map((p) => (\n <option key={p}>{p}</option>\n ))}\n </select>\n </td>\n <td>\n <input\n className=\"form-control input-sm\"\n type=\"number\"\n min=\"0\"\n value={listener.internalPort}\n onChange={(event) => this.listenerInternalPortChanged(listener, event.target.value)}\n required={true}\n />\n </td>\n <td>\n <a className=\"sm-label clickable\" onClick={() => this.removeListener(index)}>\n <span className=\"glyphicon glyphicon-trash\" />\n </a>\n </td>\n </tr>\n {this.secureProtocols.includes(listener.externalProtocol) && (\n <tr key={index + '-ssl'}>\n <td colSpan={5} style={{ borderTopWidth: 0 }}>\n <div className=\"horizontal space-between\">\n <div className=\"sm-label-right\">Certificate</div>\n {this.certificateTypes.length > 1 && (\n <select\n style={{ width: '45px', marginLeft: '10px' }}\n className=\"form-control input-sm\"\n value={listener.sslCertificateType}\n onChange={(event) => this.listenerCertificateTypeChanged(listener, event.target.value)}\n >\n {this.certificateTypes.map((t) => (\n <option key={t}>{t}</option>\n ))}\n </select>\n )}\n {this.renderCertificateSelector(listener)}\n </div>\n </td>\n </tr>\n )}\n </React.Fragment>\n ))}\n </tbody>\n <tfoot>\n <tr>\n <td colSpan={5}>\n <button className=\"add-new col-md-12\" onClick={this.addListener} type=\"button\">\n <span className=\"glyphicon glyphicon-plus-sign\" />\n <span> Add new port mapping</span>\n </button>\n </td>\n </tr>\n </tfoot>\n </table>\n </div>\n </div>\n </div>\n );\n }\n}\n","import type { FormikErrors, FormikValues } from 'formik';\nimport { cloneDeep, get } from 'lodash';\nimport React from 'react';\n\nimport type { ILoadBalancerModalProps } from '@spinnaker/core';\nimport {\n AccountService,\n FirewallLabels,\n LoadBalancerWriter,\n noop,\n ReactInjector,\n ReactModal,\n TaskMonitor,\n WizardModal,\n WizardPage,\n} from '@spinnaker/core';\n\nimport { AdvancedSettings } from './AdvancedSettings';\nimport { HealthCheck } from './HealthCheck';\nimport { Listeners } from './Listeners';\nimport { AWSProviderSettings } from '../../../aws.settings';\nimport { LoadBalancerLocation } from '../common/LoadBalancerLocation';\nimport { SecurityGroups } from '../common/SecurityGroups';\nimport type { IAmazonClassicLoadBalancer, IAmazonClassicLoadBalancerUpsertCommand } from '../../../domain';\nimport { AwsLoadBalancerTransformer } from '../../loadBalancer.transformer';\n\nimport '../common/configure.less';\n\nexport interface ICreateClassicLoadBalancerProps extends ILoadBalancerModalProps {\n loadBalancer: IAmazonClassicLoadBalancer;\n}\n\nexport interface ICreateClassicLoadBalancerState {\n isNew: boolean;\n loadBalancerCommand: IAmazonClassicLoadBalancerUpsertCommand;\n taskMonitor: TaskMonitor;\n}\n\nexport class CreateClassicLoadBalancer extends React.Component<\n ICreateClassicLoadBalancerProps,\n ICreateClassicLoadBalancerState\n> {\n public static defaultProps: Partial<ICreateClassicLoadBalancerProps> = {\n closeModal: noop,\n dismissModal: noop,\n };\n\n private _isUnmounted = false;\n private refreshUnsubscribe: () => void;\n private certificateTypes = get(AWSProviderSettings, 'loadBalancers.certificateTypes', ['iam', 'acm']);\n\n public static show(props: ICreateClassicLoadBalancerProps): Promise<IAmazonClassicLoadBalancerUpsertCommand> {\n const modalProps = { dialogClassName: 'wizard-modal modal-lg' };\n return ReactModal.show(CreateClassicLoadBalancer, props, modalProps);\n }\n\n constructor(props: ICreateClassicLoadBalancerProps) {\n super(props);\n\n const loadBalancerCommand = props.command\n ? (props.command as IAmazonClassicLoadBalancerUpsertCommand) // ejecting from a wizard\n : props.loadBalancer\n ? AwsLoadBalancerTransformer.convertClassicLoadBalancerForEditing(props.loadBalancer)\n : AwsLoadBalancerTransformer.constructNewClassicLoadBalancerTemplate(props.app);\n\n this.state = {\n isNew: !props.loadBalancer,\n loadBalancerCommand,\n taskMonitor: null,\n };\n }\n\n protected certificateIdAsARN(\n accountId: string,\n certificateId: string,\n region: string,\n certificateType: string,\n ): string {\n if (\n certificateId &&\n (certificateId.indexOf('arn:aws:iam::') !== 0 || certificateId.indexOf('arn:aws:acm:') !== 0)\n ) {\n // If they really want to enter the ARN...\n if (certificateType === 'iam') {\n return `arn:aws:iam::${accountId}:server-certificate/${certificateId}`;\n }\n if (certificateType === 'acm') {\n return `arn:aws:acm:${region}:${accountId}:certificate/${certificateId}`;\n }\n }\n return certificateId;\n }\n\n protected formatListeners(command: IAmazonClassicLoadBalancerUpsertCommand): PromiseLike<void> {\n return AccountService.getAccountDetails(command.credentials).then((account) => {\n command.listeners.forEach((listener) => {\n listener.sslCertificateId = this.certificateIdAsARN(\n account.accountId,\n listener.sslCertificateName,\n command.region,\n listener.sslCertificateType || this.certificateTypes[0],\n );\n });\n });\n }\n\n private clearSecurityGroupsIfNotInVpc(loadBalancer: IAmazonClassicLoadBalancerUpsertCommand): void {\n if (!loadBalancer.vpcId && !loadBalancer.subnetType) {\n loadBalancer.securityGroups = null;\n }\n }\n\n private addHealthCheckToCommand(loadBalancer: IAmazonClassicLoadBalancerUpsertCommand): void {\n let healthCheck = null;\n const protocol = loadBalancer.healthCheckProtocol || '';\n if (protocol.startsWith('HTTP')) {\n healthCheck = `${protocol}:${loadBalancer.healthCheckPort}${loadBalancer.healthCheckPath}`;\n } else {\n healthCheck = `${protocol}:${loadBalancer.healthCheckPort}`;\n }\n loadBalancer.healthCheck = healthCheck;\n }\n\n public setAvailabilityZones(loadBalancerCommand: IAmazonClassicLoadBalancerUpsertCommand): void {\n const availabilityZones: { [region: string]: string[] } = {};\n availabilityZones[loadBalancerCommand.region] = loadBalancerCommand.regionZones || [];\n loadBalancerCommand.availabilityZones = availabilityZones;\n }\n\n protected formatCommand(command: IAmazonClassicLoadBalancerUpsertCommand): void {\n this.setAvailabilityZones(command);\n this.clearSecurityGroupsIfNotInVpc(command);\n this.addHealthCheckToCommand(command);\n }\n\n protected onApplicationRefresh(values: IAmazonClassicLoadBalancerUpsertCommand): void {\n if (this._isUnmounted) {\n return;\n }\n\n this.refreshUnsubscribe = undefined;\n this.props.dismissModal();\n this.setState({ taskMonitor: undefined });\n const newStateParams = {\n name: values.name,\n accountId: values.credentials,\n region: values.region,\n vpcId: values.vpcId,\n provider: 'aws',\n };\n\n if (!ReactInjector.$state.includes('**.loadBalancerDetails')) {\n ReactInjector.$state.go('.loadBalancerDetails', newStateParams);\n } else {\n ReactInjector.$state.go('^.loadBalancerDetails', newStateParams);\n }\n }\n\n public componentWillUnmount(): void {\n this._isUnmounted = true;\n if (this.refreshUnsubscribe) {\n this.refreshUnsubscribe();\n }\n }\n\n private onTaskComplete(values: IAmazonClassicLoadBalancerUpsertCommand): void {\n this.props.app.loadBalancers.refresh();\n this.refreshUnsubscribe = this.props.app.loadBalancers.onNextRefresh(null, () => this.onApplicationRefresh(values));\n }\n\n private submit = (values: IAmazonClassicLoadBalancerUpsertCommand): void => {\n const { app, forPipelineConfig, closeModal } = this.props;\n const { isNew } = this.state;\n\n const descriptor = isNew ? 'Create' : 'Update';\n const loadBalancerCommandFormatted = cloneDeep(values);\n if (forPipelineConfig) {\n // don't submit to backend for creation. Just return the loadBalancerCommand object\n this.formatListeners(loadBalancerCommandFormatted).then(() => {\n closeModal && closeModal(loadBalancerCommandFormatted);\n });\n } else {\n const taskMonitor = new TaskMonitor({\n application: app,\n title: `${isNew ? 'Creating' : 'Updating'} your load balancer`,\n modalInstance: TaskMonitor.modalInstanceEmulation(() => this.props.dismissModal()),\n onTaskComplete: () => this.onTaskComplete(loadBalancerCommandFormatted),\n });\n\n taskMonitor.submit(() => {\n return this.formatListeners(loadBalancerCommandFormatted).then(() => {\n this.formatCommand(loadBalancerCommandFormatted);\n return LoadBalancerWriter.upsertLoadBalancer(loadBalancerCommandFormatted, app, descriptor);\n });\n });\n\n this.setState({ taskMonitor });\n }\n };\n\n private validate = (_values: FormikValues): FormikErrors<IAmazonClassicLoadBalancerUpsertCommand> => {\n const errors = {} as FormikErrors<IAmazonClassicLoadBalancerUpsertCommand>;\n return errors;\n };\n\n public render(): React.ReactElement<CreateClassicLoadBalancer> {\n const { app, dismissModal, forPipelineConfig, loadBalancer } = this.props;\n const { isNew, loadBalancerCommand, taskMonitor } = this.state;\n\n const showLocationSection = isNew || forPipelineConfig;\n\n let heading = forPipelineConfig ? 'Configure Classic Load Balancer' : 'Create New Classic Load Balancer';\n if (!isNew) {\n heading = `Edit ${loadBalancerCommand.name}: ${loadBalancerCommand.region}: ${loadBalancerCommand.credentials}`;\n }\n\n return (\n <WizardModal<IAmazonClassicLoadBalancerUpsertCommand>\n heading={heading}\n initialValues={loadBalancerCommand}\n taskMonitor={taskMonitor}\n dismissModal={dismissModal}\n closeModal={this.submit}\n submitButtonLabel={forPipelineConfig ? (isNew ? 'Add' : 'Done') : isNew ? 'Create' : 'Update'}\n validate={this.validate}\n render={({ formik, nextIdx, wizard }) => (\n <>\n {showLocationSection && (\n <WizardPage\n label=\"Location\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => (\n <LoadBalancerLocation\n app={app}\n formik={formik}\n isNew={isNew}\n forPipelineConfig={forPipelineConfig}\n loadBalancer={loadBalancer}\n ref={innerRef}\n />\n )}\n />\n )}\n\n {!!formik.values.vpcId && (\n <WizardPage\n label={FirewallLabels.get('Firewall')}\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef, onLoadingChanged }) => (\n <SecurityGroups formik={formik} isNew={isNew} onLoadingChanged={onLoadingChanged} ref={innerRef} />\n )}\n />\n )}\n\n <WizardPage\n label=\"Listeners\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => <Listeners ref={innerRef} formik={formik} app={app} />}\n />\n\n <WizardPage\n label=\"Health Check\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => <HealthCheck ref={innerRef} formik={formik} />}\n />\n\n <WizardPage\n label=\"Advanced Settings\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => <AdvancedSettings ref={innerRef} formik={formik} />}\n />\n </>\n )}\n />\n );\n }\n}\n","import React from 'react';\n\nimport { CheckboxInput, FormikFormField, HelpField } from '@spinnaker/core';\n\nexport interface INLBAdvancedSettingsProps {\n showDualstack: boolean;\n}\n\nexport const NLBAdvancedSettings = React.forwardRef<HTMLDivElement, INLBAdvancedSettingsProps>((props, ref) => (\n <div ref={ref}>\n <FormikFormField\n name=\"deletionProtection\"\n label=\"Protection\"\n help={<HelpField id=\"loadBalancer.advancedSettings.deletionProtection\" />}\n input={(inputProps) => <CheckboxInput {...inputProps} text=\"Enable deletion protection\" />}\n />\n\n <FormikFormField\n name=\"loadBalancingCrossZone\"\n label=\"Cross-Zone Load Balancing\"\n help={<HelpField id=\"loadBalancer.advancedSettings.loadBalancingCrossZone\" />}\n input={(inputProps) => <CheckboxInput {...inputProps} text=\"Distribute traffic across zones\" />}\n />\n\n {props.showDualstack && (\n <FormikFormField\n name=\"dualstack\"\n label=\"Dualstack\"\n help={<HelpField id=\"loadBalancer.advancedSettings.nlbIpAddressType\" />}\n input={(inputProps) => <CheckboxInput {...inputProps} text=\"Assign Ipv4 and IPv6\" />}\n />\n )}\n </div>\n));\n","import React from 'react';\n\nimport type { IALBListenerCertificate } from '../../../index';\nimport { AmazonCertificateSelectField } from '../../../index';\nimport type { INLBCertificateSelectorProps } from '../network/NLBListeners';\n\nexport function CertificateSelector({\n availableCertificates,\n certificates,\n formik,\n app,\n certificateTypes,\n}: INLBCertificateSelectorProps) {\n function certificateTypeChanged(certificate: IALBListenerCertificate, newType: string): void {\n certificate.type = newType;\n updateListeners();\n }\n\n function updateListeners(): void {\n formik.setFieldValue('listeners', formik.values.listeners);\n }\n\n function handleCertificateChanged(certificate: IALBListenerCertificate, newCertificateName: string): void {\n certificate.name = newCertificateName;\n updateListeners();\n }\n\n function showCertificateSelect(certificate: IALBListenerCertificate): boolean {\n return certificate.type === 'iam' && certificates && Object.keys(certificates).length > 0;\n }\n\n const { values } = formik;\n return (\n <div className=\"wizard-pod-row\">\n <div className=\"wizard-pod-row-title\">Certificate</div>\n <div className=\"wizard-pod-row-contents\">\n {availableCertificates.map((certificate, cIndex) => (\n <div key={cIndex} style={{ width: '100%', display: 'flex', flexDirection: 'row' }}>\n <select\n className=\"form-control input-sm inline-number\"\n style={{ width: '45px' }}\n value={certificate.type}\n onChange={(event) => certificateTypeChanged(certificate, event.target.value)}\n >\n {certificateTypes.map((t) => (\n <option key={t}>{t}</option>\n ))}\n </select>\n {showCertificateSelect(certificate) && (\n <AmazonCertificateSelectField\n certificates={certificates}\n accountName={values.credentials}\n currentValue={certificate.name}\n app={app}\n onCertificateSelect={(value) => handleCertificateChanged(certificate, value)}\n />\n )}\n {!showCertificateSelect(certificate) && (\n <input\n className=\"form-control input-sm no-spel\"\n style={{ display: 'inline-block' }}\n type=\"text\"\n value={certificate.name}\n onChange={(event) => handleCertificateChanged(certificate, event.target.value)}\n required={true}\n />\n )}\n </div>\n ))}\n </div>\n </div>\n );\n}\n","import type { FormikProps } from 'formik';\nimport { difference, flatten, get, uniq, uniqBy } from 'lodash';\nimport React from 'react';\n\nimport type { Application, IWizardPageComponent } from '@spinnaker/core';\nimport { ValidationMessage } from '@spinnaker/core';\n\nimport type { IAuthenticateOidcActionConfig } from '../../OidcConfigReader';\nimport type {\n IALBListenerCertificate,\n IAmazonCertificate,\n IAmazonNetworkLoadBalancerUpsertCommand,\n IListenerAction,\n IListenerDescription,\n NLBListenerProtocol,\n} from '../../../domain';\nimport { AmazonCertificateReader, AWSProviderSettings } from '../../../index';\nimport { CertificateSelector } from '../network/CertificateSelectors';\n\nexport interface INLBListenersProps {\n app?: Application;\n formik: FormikProps<IAmazonNetworkLoadBalancerUpsertCommand>;\n}\n\nexport interface INLBListenersState {\n certificates: { [accountId: number]: IAmazonCertificate[] };\n certificateTypes: string[];\n oidcConfigs: IAuthenticateOidcActionConfig[];\n}\n\nexport interface INLBCertificateSelectorProps {\n availableCertificates: IALBListenerCertificate[];\n certificates: { [accountId: number]: IAmazonCertificate[] };\n formik: FormikProps<IAmazonNetworkLoadBalancerUpsertCommand>;\n app?: Application;\n certificateTypes: string[];\n}\n\nexport class NLBListeners\n extends React.Component<INLBListenersProps, INLBListenersState>\n implements IWizardPageComponent<IAmazonNetworkLoadBalancerUpsertCommand> {\n public protocols = ['TCP', 'UDP', 'TLS'];\n private removedAuthActions: Map<IListenerDescription, { [key: number]: IListenerAction }> = new Map();\n\n constructor(props: INLBListenersProps) {\n super(props);\n this.state = {\n certificates: [],\n certificateTypes: get(AWSProviderSettings, 'loadBalancers.certificateTypes', ['iam', 'acm']),\n oidcConfigs: undefined,\n };\n }\n\n private getAllTargetGroupsFromListeners(listeners: IListenerDescription[]): string[] {\n const actions = flatten(listeners.map((l) => l.defaultActions));\n const rules = flatten(listeners.map((l) => l.rules));\n actions.push(...flatten(rules.map((r) => r.actions)));\n return uniq(actions.map((a) => a.targetGroupName));\n }\n\n public validate(values: IAmazonNetworkLoadBalancerUpsertCommand) {\n const errors = {} as any;\n\n // Check to make sure all target groups have an associated listener\n const targetGroupNames = values.targetGroups.map((tg) => tg.name);\n const usedTargetGroupNames = this.getAllTargetGroupsFromListeners(values.listeners);\n const unusedTargetGroupNames = difference(targetGroupNames, usedTargetGroupNames);\n if (unusedTargetGroupNames.length === 1) {\n errors.listeners = `Target group ${unusedTargetGroupNames[0]} is unused.`;\n } else if (unusedTargetGroupNames.length > 1) {\n errors.listeners = `Target groups ${unusedTargetGroupNames.join(', ')} are unused.`;\n }\n\n const { listeners } = values;\n if (uniqBy(listeners, 'port').length < listeners.length) {\n errors.listenerPorts = 'Multiple listeners cannot use the same port.';\n }\n\n return errors;\n }\n\n private updateListeners(): void {\n this.props.formik.setFieldValue('listeners', this.props.formik.values.listeners);\n }\n\n public componentDidMount(): void {\n this.loadCertificates();\n }\n\n private addListenerCertificate(listener: IListenerDescription): void {\n listener.certificates = listener.certificates || [];\n listener.certificates.push({\n certificateArn: undefined,\n type: 'iam',\n name: undefined,\n });\n }\n\n private loadCertificates(): void {\n AmazonCertificateReader.listCertificates().then((certificates) => {\n this.setState({ certificates });\n });\n }\n\n private listenerProtocolChanged(listener: IListenerDescription, newProtocol: NLBListenerProtocol): void {\n listener.protocol = newProtocol;\n if (listener.protocol === 'TCP') {\n listener.port = 80;\n } else if (listener.protocol === 'UDP') {\n listener.port = 53;\n } else if (listener.protocol === 'TLS') {\n listener.port = 443;\n if (!listener.certificates || listener.certificates.length === 0) {\n this.addListenerCertificate(listener);\n }\n this.reenableAuthActions(listener);\n }\n this.updateListeners();\n }\n\n private reenableAuthActions(listener: IListenerDescription): void {\n const removedAuthActions = this.removedAuthActions.has(listener) ? this.removedAuthActions.get(listener) : [];\n const existingDefaultAuthAction = removedAuthActions[-1];\n if (existingDefaultAuthAction) {\n removedAuthActions[-1] = undefined;\n listener.defaultActions.unshift({ ...existingDefaultAuthAction });\n }\n listener.rules.forEach((rule, ruleIndex) => {\n const existingAuthAction = removedAuthActions[ruleIndex];\n removedAuthActions[ruleIndex] = undefined;\n if (existingAuthAction) {\n rule.actions.unshift({ ...existingAuthAction });\n }\n });\n }\n\n private listenerPortChanged(listener: IListenerDescription, newPort: string): void {\n listener.port = Number.parseInt(newPort, 10);\n this.updateListeners();\n }\n\n private removeListener(index: number): void {\n this.props.formik.values.listeners.splice(index, 1);\n this.updateListeners();\n }\n\n private addListener = (): void => {\n this.props.formik.values.listeners.push({\n certificates: [],\n protocol: 'TCP',\n port: 80,\n defaultActions: [\n {\n type: 'forward',\n targetGroupName: '',\n },\n ],\n rules: [],\n });\n this.updateListeners();\n };\n\n private handleDefaultTargetChanged = (listener: IListenerDescription, newTarget: string): void => {\n listener.defaultActions[0].targetGroupName = newTarget;\n this.updateListeners();\n };\n\n public render() {\n const { errors, values } = this.props.formik;\n const { certificates, certificateTypes } = this.state;\n return (\n <div className=\"container-fluid form-horizontal\">\n <div className=\"form-group\">\n <div className=\"col-md-12\">\n {values.listeners.map((listener, index) => (\n <div key={index} className=\"wizard-pod\">\n <div>\n <div className=\"wizard-pod-row header\">\n <div className=\"wizard-pod-row-title\">Listen On</div>\n <div className=\"wizard-pod-row-contents spread\">\n <div>\n <span className=\"wizard-pod-content\">\n <label>Protocol</label>\n <select\n className=\"form-control input-sm inline-number\"\n style={{ width: '80px' }}\n value={listener.protocol}\n onChange={(event) =>\n this.listenerProtocolChanged(listener, event.target.value as NLBListenerProtocol)\n }\n >\n {this.protocols.map((p) => (\n <option key={p}>{p}</option>\n ))}\n </select>\n </span>\n <span className=\"wizard-pod-content\">\n <label>Port</label>\n <input\n className=\"form-control input-sm inline-number\"\n type=\"text\"\n min={0}\n value={listener.port || ''}\n onChange={(event) => this.listenerPortChanged(listener, event.target.value)}\n style={{ width: '80px' }}\n required={true}\n />\n </span>\n </div>\n <div>\n <a className=\"sm-label clickable\" onClick={() => this.removeListener(index)}>\n <span className=\"glyphicon glyphicon-trash\" />\n </a>\n </div>\n </div>\n </div>\n <div>\n {listener.protocol === 'TLS' && (\n <CertificateSelector\n availableCertificates={listener.certificates}\n formik={this.props.formik}\n app={this.props.app}\n certificateTypes={certificateTypes}\n certificates={certificates}\n ></CertificateSelector>\n )}\n </div>\n <div className=\"wizard-pod-row\">\n <div className=\"wizard-pod-row-title\" style={{ height: '30px' }}>\n Rules\n </div>\n <div className=\"wizard-pod-row-contents\" style={{ padding: '0' }}>\n <table className=\"table table-condensed packed rules-table\">\n <thead>\n <tr>\n <th style={{ width: '10px', padding: '0' }} />\n <th style={{ width: '226px' }}>If</th>\n <th style={{ width: '75px' }}>Then</th>\n <th>Target</th>\n <th style={{ width: '30px' }} />\n </tr>\n </thead>\n <tbody>\n <tr className=\"not-sortable\">\n <td />\n <td>Default</td>\n <td>forward to</td>\n <td>\n <select\n className=\"form-control input-sm\"\n value={listener.defaultActions[0].targetGroupName}\n onChange={(event) => this.handleDefaultTargetChanged(listener, event.target.value)}\n required={true}\n >\n <option value=\"\" />\n {uniq(values.targetGroups.map((tg) => tg.name)).map((name) => (\n <option key={name}>{name}</option>\n ))}\n </select>\n </td>\n <td />\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n </div>\n ))}\n {errors.listenerPorts && (\n <div className=\"wizard-pod-row-errors\">\n <ValidationMessage type=\"error\" message={errors.listenerPorts} />\n </div>\n )}\n {errors.listeners && (\n <div className=\"wizard-pod-row-errors\">\n <ValidationMessage type=\"error\" message={errors.listeners} />\n </div>\n )}\n <table className=\"table table-condensed packed\">\n <tbody>\n <tr>\n <td>\n <button type=\"button\" className=\"add-new col-md-12\" onClick={this.addListener}>\n <span>\n <span className=\"glyphicon glyphicon-plus-sign\" /> Add new listener\n </span>\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n );\n }\n}\n","import type { FormikErrors, FormikProps } from 'formik';\nimport { filter, flatten, groupBy, set, uniq } from 'lodash';\nimport React from 'react';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport type { Application, IWizardPageComponent } from '@spinnaker/core';\nimport {\n CheckboxInput,\n FormValidator,\n HelpField,\n spelNumberCheck,\n SpelNumberInput,\n SpInput,\n ValidationMessage,\n Validators,\n} from '@spinnaker/core';\n\nimport { isNameInUse, isNameLong } from '../common/targetGroupValidators';\nimport type { IAmazonApplicationLoadBalancer, IAmazonNetworkLoadBalancerUpsertCommand } from '../../../domain';\n\nexport interface ITargetGroupsProps {\n app: Application;\n formik: FormikProps<IAmazonNetworkLoadBalancerUpsertCommand>;\n isNew: boolean;\n loadBalancer: IAmazonApplicationLoadBalancer;\n}\n\nexport interface ITargetGroupsState {\n existingTargetGroupNames: { [account: string]: { [region: string]: string[] } };\n oldTargetGroupCount: number;\n}\n\nexport class TargetGroups\n extends React.Component<ITargetGroupsProps, ITargetGroupsState>\n implements IWizardPageComponent<IAmazonNetworkLoadBalancerUpsertCommand> {\n public protocols = ['TCP', 'UDP'];\n public healthProtocols = ['TCP', 'HTTP', 'HTTPS'];\n public targetTypes = ['instance', 'ip'];\n private destroy$ = new Subject();\n\n constructor(props: ITargetGroupsProps) {\n super(props);\n\n const oldTargetGroupCount = !props.isNew ? props.formik.initialValues.targetGroups.length : 0;\n this.state = {\n existingTargetGroupNames: {},\n oldTargetGroupCount,\n };\n }\n\n public validate(\n values: IAmazonNetworkLoadBalancerUpsertCommand,\n ): FormikErrors<IAmazonNetworkLoadBalancerUpsertCommand> {\n const duplicateTargetGroups = uniq(\n flatten(filter(groupBy(values.targetGroups, 'name'), (count) => count.length > 1)).map((tg) => tg.name),\n );\n const formValidator = new FormValidator(values);\n const { arrayForEach } = formValidator;\n\n formValidator.field('targetGroups').withValidators(\n arrayForEach((builder) => {\n builder\n .field('name', 'Name')\n .required()\n .withValidators(\n isNameInUse(this.state.existingTargetGroupNames, values.credentials, values.region),\n isNameLong(this.props.app.name.length),\n Validators.valueUnique(\n duplicateTargetGroups,\n 'There is already a target group in this load balancer with the same name.',\n ),\n );\n builder\n .field('port', 'Port')\n .required()\n .spelAware()\n .withValidators((value) => spelNumberCheck(value));\n builder\n .field('healthCheckInterval', 'Health Check Interval')\n .required()\n .spelAware()\n .withValidators((value) => spelNumberCheck(value));\n builder\n .field('healthyThreshold', 'Healthy Threshold')\n .required()\n .spelAware()\n .withValidators((value) => spelNumberCheck(value));\n builder\n .field('unhealthyThreshold', 'Unhealthy Threshold')\n .required()\n .spelAware()\n .withValidators((value) => spelNumberCheck(value));\n builder\n .field('healthCheckPort', 'Health Check Port')\n .required()\n .spelAware()\n .withValidators((value) => (value === 'traffic-port' ? null : spelNumberCheck(value)));\n builder.field('protocol', 'Protocol').required();\n builder.field('healthCheckProtocol', 'Health Check Protocol').required();\n }),\n );\n return formValidator.validateForm();\n }\n\n private removeAppName(name: string): string {\n return name.replace(`${this.props.app.name}-`, '');\n }\n\n protected updateLoadBalancerNames(props: ITargetGroupsProps): void {\n const { app, loadBalancer } = props;\n\n const targetGroupsByAccountAndRegion: { [account: string]: { [region: string]: string[] } } = {};\n observableFrom(app.getDataSource('loadBalancers').refresh(true))\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n app.getDataSource('loadBalancers').data.forEach((lb: IAmazonApplicationLoadBalancer) => {\n if (lb.loadBalancerType !== 'classic') {\n if (!loadBalancer || lb.name !== loadBalancer.name) {\n lb.targetGroups.forEach((targetGroup) => {\n targetGroupsByAccountAndRegion[lb.account] = targetGroupsByAccountAndRegion[lb.account] || {};\n targetGroupsByAccountAndRegion[lb.account][lb.region] =\n targetGroupsByAccountAndRegion[lb.account][lb.region] || [];\n targetGroupsByAccountAndRegion[lb.account][lb.region].push(this.removeAppName(targetGroup.name));\n });\n }\n }\n });\n\n this.setState({ existingTargetGroupNames: targetGroupsByAccountAndRegion }, () =>\n this.props.formik.validateForm(),\n );\n });\n }\n\n private targetGroupFieldChanged(index: number, field: string, value: string | boolean): void {\n const { setFieldValue, values } = this.props.formik;\n const targetGroup = values.targetGroups[index];\n set(targetGroup, field, value);\n if (field === 'healthyThreshold') {\n set(targetGroup, 'unhealthyThreshold', value);\n }\n setFieldValue('targetGroups', values.targetGroups);\n }\n\n private addTargetGroup = (): void => {\n const { setFieldValue, values } = this.props.formik;\n const tgLength = values.targetGroups.length;\n values.targetGroups.push({\n name: `targetgroup${tgLength ? `${tgLength}` : ''}`,\n protocol: 'TCP',\n port: 7001,\n targetType: 'instance',\n healthCheckProtocol: 'TCP',\n healthCheckPort: 'traffic-port',\n healthCheckPath: '/healthcheck',\n healthCheckTimeout: 5,\n healthCheckInterval: 10,\n healthyThreshold: 10,\n unhealthyThreshold: 10,\n attributes: {\n deregistrationDelay: 300,\n preserveClientIp: true,\n },\n });\n setFieldValue('targetGroups', values.targetGroups);\n };\n\n private removeTargetGroup(index: number): void {\n const { setFieldValue, values } = this.props.formik;\n const { oldTargetGroupCount } = this.state;\n values.targetGroups.splice(index, 1);\n\n if (index < oldTargetGroupCount) {\n this.setState({ oldTargetGroupCount: oldTargetGroupCount - 1 });\n }\n setFieldValue('targetGroups', values.targetGroups);\n }\n\n public componentDidMount(): void {\n this.updateLoadBalancerNames(this.props);\n }\n\n public componentWillUnmount(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n public render() {\n const { app } = this.props;\n const { errors, values } = this.props.formik;\n const { oldTargetGroupCount } = this.state;\n\n const ProtocolOptions = this.protocols.map((p) => <option key={p}>{p}</option>);\n const HealthProtocolOptions = this.healthProtocols.map((p) => <option key={p}>{p}</option>);\n const TargetTypeOptions = this.targetTypes.map((p) => <option key={p}>{p}</option>);\n\n return (\n <div className=\"container-fluid form-horizontal\">\n <div className=\"form-group\">\n <div className=\"col-md-12\">\n {values.targetGroups.map((targetGroup, index) => {\n const tgErrors = (errors.targetGroups && errors.targetGroups[index]) || {};\n return (\n <div key={index} className=\"wizard-pod\">\n <div>\n <div className=\"wizard-pod-row header\">\n <div className=\"wizard-pod-row-title\">Group Name</div>\n <div className=\"wizard-pod-row-contents\">\n <div className=\"wizard-pod-row-data\">\n <span className=\"group-name-prefix\">{app.name}-</span>\n <input\n className=\"form-control input-sm target-group-name\"\n type=\"text\"\n value={targetGroup.name}\n onChange={(event) => this.targetGroupFieldChanged(index, 'name', event.target.value)}\n required={true}\n disabled={index < oldTargetGroupCount}\n />\n <a className=\"sm-label clickable\" onClick={() => this.removeTargetGroup(index)}>\n <span className=\"glyphicon glyphicon-trash\" />\n </a>\n </div>\n {tgErrors.name && (\n <div className=\"wizard-pod-row-errors\">\n <ValidationMessage type=\"error\" message={tgErrors.name} />\n </div>\n )}\n </div>\n </div>\n <div className=\"wizard-pod-row\">\n <div className=\"wizard-pod-row-title\">\n <HelpField id=\"aws.targetGroup.targetType\" /> <span>Target Type&nbsp;</span>\n </div>\n <div className=\"wizard-pod-row-contents\">\n <div className=\"wizard-pod-row-data\">\n <span className=\"wizard-pod-content\">\n <select\n className=\"form-control input-sm\"\n value={targetGroup.targetType}\n onChange={(event) =>\n this.targetGroupFieldChanged(index, 'targetType', event.target.value)\n }\n disabled={index < oldTargetGroupCount}\n >\n {TargetTypeOptions}\n </select>\n </span>\n </div>\n </div>\n </div>\n <div className=\"wizard-pod-row\">\n <div className=\"wizard-pod-row-title\">Backend Connection</div>\n <div className=\"wizard-pod-row-contents\">\n <div className=\"wizard-pod-row-data\">\n <span className=\"wizard-pod-content\">\n <label>Protocol </label>\n <HelpField id=\"aws.targetGroup.protocol\" />{' '}\n <select\n className=\"form-control input-sm inline-number\"\n value={targetGroup.protocol}\n onChange={(event) => this.targetGroupFieldChanged(index, 'protocol', event.target.value)}\n disabled={index < oldTargetGroupCount}\n >\n {ProtocolOptions}\n </select>\n </span>\n <span className=\"wizard-pod-content\">\n <label>Port </label>\n <HelpField id=\"aws.targetGroup.port\" />{' '}\n <input\n className=\"form-control input-sm inline-number\"\n value={targetGroup.port}\n onChange={(event) => this.targetGroupFieldChanged(index, 'port', event.target.value)}\n type=\"text\"\n required={true}\n disabled={index < oldTargetGroupCount}\n />\n </span>\n </div>\n </div>\n </div>\n <div className=\"wizard-pod-row\">\n <div className=\"wizard-pod-row-title\">Healthcheck</div>\n <div className=\"wizard-pod-row-contents\">\n <div className=\"wizard-pod-row-data\">\n <span className=\"wizard-pod-content\">\n <label>Protocol </label>\n <select\n disabled={index < oldTargetGroupCount}\n className=\"form-control input-sm inline-number\"\n value={targetGroup.healthCheckProtocol}\n onChange={(event) =>\n this.targetGroupFieldChanged(index, 'healthCheckProtocol', event.target.value)\n }\n >\n {HealthProtocolOptions}\n </select>\n </span>\n <span className=\"wizard-pod-content\">\n <label>Port </label>\n <SpInput\n className=\"form-control input-sm inline-number\"\n error={tgErrors.healthCheckPort}\n name=\"healthCheckPort\"\n required={true}\n value={targetGroup.healthCheckPort}\n onChange={(event) =>\n this.targetGroupFieldChanged(index, 'healthCheckPort', event.target.value)\n }\n />\n </span>\n {targetGroup.healthCheckProtocol !== 'TCP' && (\n <span className=\"wizard-pod-content\">\n <label>Path </label>\n <SpInput\n className=\"form-control input-sm inline-text\"\n error={tgErrors.healthCheckPath}\n name=\"healthCheckPath\"\n required={true}\n value={targetGroup.healthCheckPath}\n onChange={(event) =>\n this.targetGroupFieldChanged(index, 'healthCheckPath', event.target.value)\n }\n />\n </span>\n )}\n <span className=\"wizard-pod-content\">\n <label>Timeout </label>\n <SpelNumberInput\n error={tgErrors.healthCheckTimeout}\n required={true}\n value={targetGroup.healthCheckTimeout}\n onChange={(value: string) =>\n this.targetGroupFieldChanged(index, 'healthCheckTimeout', value)\n }\n />\n </span>\n <span className=\"wizard-pod-content\">\n <label>Interval </label>\n <SpelNumberInput\n error={tgErrors.healthCheckInterval}\n required={true}\n value={targetGroup.healthCheckInterval}\n onChange={(value: string) =>\n this.targetGroupFieldChanged(index, 'healthCheckInterval', value)\n }\n />\n </span>\n </div>\n </div>\n </div>\n <div className=\"wizard-pod-row\">\n <div className=\"wizard-pod-row-title\">\n <HelpField id=\"aws.targetGroup.nlbHealthcheckThreshold\" />{' '}\n <span>Healthcheck Threshold&nbsp;</span>\n </div>\n <div className=\"wizard-pod-row-contents\">\n <div className=\"wizard-pod-row-data\">\n <span className=\"wizard-pod-content\">\n <SpelNumberInput\n error={tgErrors.healthyThreshold}\n value={targetGroup.healthyThreshold}\n onChange={(value: string) =>\n this.targetGroupFieldChanged(index, 'healthyThreshold', value)\n }\n />\n </span>\n </div>\n </div>\n </div>\n <div className=\"wizard-pod-row\">\n <div className=\"wizard-pod-row-title\">Attributes</div>\n <div className=\"wizard-pod-row-contents\">\n <div className=\"wizard-pod-row-data\">\n <span className=\"wizard-pod-content\">\n <label>Dereg. Delay</label>\n <HelpField id=\"aws.targetGroup.attributes.deregistrationDelay\" />{' '}\n <input\n className=\"form-control input-sm inline-number\"\n type=\"text\"\n value={targetGroup.attributes.deregistrationDelay}\n onChange={(event) =>\n this.targetGroupFieldChanged(\n index,\n 'attributes.deregistrationDelay',\n event.target.value,\n )\n }\n />\n </span>\n <span className=\"wizard-pod-content\">\n <CheckboxInput\n name=\"deregistrationDelayConnectionTermination\"\n text=\"Connection Termination\"\n checked={targetGroup.attributes.deregistrationDelayConnectionTermination}\n onChange={(event: { target: { checked: boolean } }) => {\n this.targetGroupFieldChanged(\n index,\n 'attributes.deregistrationDelayConnectionTermination',\n event.target.checked,\n );\n }}\n />\n <HelpField id=\"aws.targetGroup.attributes.deregistrationDelayConnectionTermination\" />\n </span>\n {targetGroup.targetType !== 'instance' && (\n <span className=\"wizard-pod-content\">\n <CheckboxInput\n name=\"preserveClientIp\"\n text=\"Preserve Client IP\"\n checked={targetGroup.attributes.preserveClientIp}\n onChange={(event: { target: { checked: boolean } }) => {\n this.targetGroupFieldChanged(\n index,\n 'attributes.preserveClientIp',\n event.target.checked,\n );\n }}\n />\n <HelpField id=\"aws.targetGroup.attributes.preserveClientIp\" />\n </span>\n )}\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n })}\n <table className=\"table table-condensed packed\">\n <tbody>\n <tr>\n <td>\n <button type=\"button\" className=\"add-new col-md-12\" onClick={this.addTargetGroup}>\n <span className=\"glyphicon glyphicon-plus-sign\" /> Add new target group\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n );\n }\n}\n","import type { FormikErrors } from 'formik';\nimport { cloneDeep, every, get } from 'lodash';\nimport React from 'react';\n\nimport type { ILoadBalancerModalProps } from '@spinnaker/core';\nimport {\n AccountService,\n LoadBalancerWriter,\n noop,\n ReactInjector,\n ReactModal,\n TaskMonitor,\n WizardModal,\n WizardPage,\n} from '@spinnaker/core';\n\nimport { NLBAdvancedSettings } from './NLBAdvancedSettings';\nimport { NLBListeners } from './NLBListeners';\nimport { TargetGroups } from './TargetGroups';\nimport { AWSProviderSettings } from '../../../aws.settings';\nimport { LoadBalancerLocation } from '../common/LoadBalancerLocation';\nimport type { IAmazonNetworkLoadBalancer, IAmazonNetworkLoadBalancerUpsertCommand } from '../../../domain';\nimport { AwsLoadBalancerTransformer } from '../../loadBalancer.transformer';\n\nimport '../common/configure.less';\n\nexport interface ICreateNetworkLoadBalancerProps extends ILoadBalancerModalProps {\n loadBalancer: IAmazonNetworkLoadBalancer;\n}\n\nexport interface ICreateApplicationLoadBalancerState {\n isNew: boolean;\n loadBalancerCommand: IAmazonNetworkLoadBalancerUpsertCommand;\n taskMonitor: TaskMonitor;\n}\n\nexport class CreateNetworkLoadBalancer extends React.Component<\n ICreateNetworkLoadBalancerProps,\n ICreateApplicationLoadBalancerState\n> {\n public static defaultProps: Partial<ICreateNetworkLoadBalancerProps> = {\n closeModal: noop,\n dismissModal: noop,\n };\n\n private _isUnmounted = false;\n private refreshUnsubscribe: () => void;\n private certificateTypes = get(AWSProviderSettings, 'loadBalancers.certificateTypes', ['iam', 'acm']);\n\n public static show(props: ICreateNetworkLoadBalancerProps): Promise<IAmazonNetworkLoadBalancerUpsertCommand> {\n const modalProps = { dialogClassName: 'wizard-modal modal-lg' };\n return ReactModal.show(CreateNetworkLoadBalancer, props, modalProps);\n }\n\n constructor(props: ICreateNetworkLoadBalancerProps) {\n super(props);\n\n const loadBalancerCommand = props.loadBalancer\n ? AwsLoadBalancerTransformer.convertNetworkLoadBalancerForEditing(props.loadBalancer)\n : AwsLoadBalancerTransformer.constructNewNetworkLoadBalancerTemplate(props.app);\n\n this.state = {\n isNew: !props.loadBalancer,\n loadBalancerCommand,\n taskMonitor: null,\n };\n }\n\n protected certificateIdAsARN(\n accountId: string,\n certificateId: string,\n region: string,\n certificateType: string,\n ): string {\n if (\n certificateId &&\n (certificateId.indexOf('arn:aws:iam::') !== 0 || certificateId.indexOf('arn:aws:acm:') !== 0)\n ) {\n // If they really want to enter the ARN...\n if (certificateType === 'iam') {\n return `arn:aws:iam::${accountId}:server-certificate/${certificateId}`;\n }\n if (certificateType === 'acm') {\n return `arn:aws:acm:${region}:${accountId}:certificate/${certificateId}`;\n }\n }\n return certificateId;\n }\n\n private formatListeners(command: IAmazonNetworkLoadBalancerUpsertCommand): PromiseLike<void> {\n return AccountService.getAccountDetails(command.credentials).then((account) => {\n command.listeners.forEach((listener) => {\n if (listener.protocol === 'TCP') {\n delete listener.sslPolicy;\n listener.certificates = [];\n }\n listener.certificates.forEach((certificate) => {\n certificate.certificateArn = this.certificateIdAsARN(\n account.accountId,\n certificate.name,\n command.region,\n certificate.type || this.certificateTypes[0],\n );\n });\n });\n });\n }\n\n private setAvailabilityZones(loadBalancerCommand: IAmazonNetworkLoadBalancerUpsertCommand): void {\n const availabilityZones: { [region: string]: string[] } = {};\n availabilityZones[loadBalancerCommand.region] = loadBalancerCommand.regionZones || [];\n loadBalancerCommand.availabilityZones = availabilityZones;\n }\n\n private addAppName(name: string): string {\n return `${this.props.app.name}-${name}`;\n }\n\n private manageTargetGroupNames(command: IAmazonNetworkLoadBalancerUpsertCommand): void {\n (command.targetGroups || []).forEach((targetGroupDescription) => {\n targetGroupDescription.name = this.addAppName(targetGroupDescription.name);\n });\n (command.listeners || []).forEach((listenerDescription) => {\n listenerDescription.defaultActions.forEach((actionDescription) => {\n if (actionDescription.targetGroupName) {\n actionDescription.targetGroupName = this.addAppName(actionDescription.targetGroupName);\n }\n });\n (listenerDescription.rules || []).forEach((ruleDescription) => {\n ruleDescription.actions.forEach((actionDescription) => {\n if (actionDescription.targetGroupName) {\n actionDescription.targetGroupName = this.addAppName(actionDescription.targetGroupName);\n }\n });\n });\n });\n }\n\n private manageRules(command: IAmazonNetworkLoadBalancerUpsertCommand): void {\n command.listeners.forEach((listener) => {\n listener.rules.forEach((rule, index) => {\n // Set the priority in array order, starting with 1\n rule.priority = index + 1;\n // Remove conditions that have no value\n rule.conditions = rule.conditions.filter((condition) => condition.values[0].length > 0);\n });\n });\n }\n\n private formatCommand(command: IAmazonNetworkLoadBalancerUpsertCommand): void {\n this.setAvailabilityZones(command);\n this.manageTargetGroupNames(command);\n this.manageRules(command);\n }\n\n protected onApplicationRefresh(values: IAmazonNetworkLoadBalancerUpsertCommand): void {\n if (this._isUnmounted) {\n return;\n }\n\n this.refreshUnsubscribe = undefined;\n this.props.dismissModal();\n this.setState({ taskMonitor: undefined });\n const newStateParams = {\n name: values.name,\n accountId: values.credentials,\n region: values.region,\n vpcId: values.vpcId,\n provider: 'aws',\n };\n\n if (!ReactInjector.$state.includes('**.loadBalancerDetails')) {\n ReactInjector.$state.go('.loadBalancerDetails', newStateParams);\n } else {\n ReactInjector.$state.go('^.loadBalancerDetails', newStateParams);\n }\n }\n\n public componentWillUnmount(): void {\n this._isUnmounted = true;\n if (this.refreshUnsubscribe) {\n this.refreshUnsubscribe();\n }\n }\n\n private onTaskComplete(values: IAmazonNetworkLoadBalancerUpsertCommand): void {\n this.props.app.loadBalancers.refresh();\n this.refreshUnsubscribe = this.props.app.loadBalancers.onNextRefresh(null, () => this.onApplicationRefresh(values));\n }\n\n private submit = (values: IAmazonNetworkLoadBalancerUpsertCommand): void => {\n const { app, forPipelineConfig, closeModal } = this.props;\n const { isNew } = this.state;\n\n const descriptor = isNew ? 'Create' : 'Update';\n const loadBalancerCommandFormatted = cloneDeep(values);\n loadBalancerCommandFormatted.ipAddressType = loadBalancerCommandFormatted.dualstack ? 'dualstack' : 'ipv4';\n delete loadBalancerCommandFormatted.dualstack;\n\n if (forPipelineConfig) {\n // don't submit to backend for creation. Just return the loadBalancerCommand object\n this.formatListeners(loadBalancerCommandFormatted).then(() => {\n closeModal && closeModal(loadBalancerCommandFormatted);\n });\n } else {\n const taskMonitor = new TaskMonitor({\n application: app,\n title: `${isNew ? 'Creating' : 'Updating'} your load balancer`,\n modalInstance: TaskMonitor.modalInstanceEmulation(() => this.props.dismissModal()),\n onTaskComplete: () => this.onTaskComplete(loadBalancerCommandFormatted),\n });\n\n taskMonitor.submit(() => {\n return this.formatListeners(loadBalancerCommandFormatted).then(() => {\n this.formatCommand(loadBalancerCommandFormatted);\n return LoadBalancerWriter.upsertLoadBalancer(loadBalancerCommandFormatted, app, descriptor);\n });\n });\n\n this.setState({ taskMonitor });\n }\n };\n\n private validate = (): FormikErrors<IAmazonNetworkLoadBalancerUpsertCommand> => {\n const errors = {} as FormikErrors<IAmazonNetworkLoadBalancerUpsertCommand>;\n return errors;\n };\n\n public render(): React.ReactElement<ICreateNetworkLoadBalancerProps> {\n const { app, dismissModal, forPipelineConfig, loadBalancer } = this.props;\n const { isNew, loadBalancerCommand, taskMonitor } = this.state;\n\n let heading = forPipelineConfig ? 'Configure Network Load Balancer' : 'Create New Network Load Balancer';\n if (!isNew) {\n heading = `Edit ${loadBalancerCommand.name}: ${loadBalancerCommand.region}: ${loadBalancerCommand.credentials}`;\n }\n\n const showLocationSection = isNew || forPipelineConfig;\n\n return (\n <WizardModal<IAmazonNetworkLoadBalancerUpsertCommand>\n heading={heading}\n initialValues={loadBalancerCommand}\n taskMonitor={taskMonitor}\n dismissModal={dismissModal}\n closeModal={this.submit}\n submitButtonLabel={forPipelineConfig ? (isNew ? 'Add' : 'Done') : isNew ? 'Create' : 'Update'}\n validate={this.validate}\n render={({ formik, nextIdx, wizard }) => (\n <>\n {showLocationSection && (\n <WizardPage\n label=\"Location\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => (\n <LoadBalancerLocation\n app={app}\n forPipelineConfig={forPipelineConfig}\n formik={formik}\n isNew={isNew}\n loadBalancer={loadBalancer}\n ref={innerRef}\n />\n )}\n />\n )}\n\n <WizardPage\n label=\"Target Groups\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => (\n <TargetGroups ref={innerRef} formik={formik} app={app} isNew={isNew} loadBalancer={loadBalancer} />\n )}\n />\n\n <WizardPage\n label=\"Listeners\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => <NLBListeners ref={innerRef} formik={formik} />}\n />\n\n <WizardPage\n label=\"Advanced Settings\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => (\n <NLBAdvancedSettings\n ref={innerRef}\n showDualstack={\n !formik.values.isInternal && every(formik.values.targetGroups, { targetType: 'instance' })\n }\n />\n )}\n />\n </>\n )}\n />\n );\n }\n}\n","import type { ILoadBalancerModalProps } from '@spinnaker/core';\n\nimport { CreateApplicationLoadBalancer } from './application/CreateApplicationLoadBalancer';\nimport { CreateClassicLoadBalancer } from './classic/CreateClassicLoadBalancer';\nimport type { IAmazonLoadBalancerUpsertCommand } from '../../domain';\nimport { CreateNetworkLoadBalancer } from './network/CreateNetworkLoadBalancer';\n\nexport interface ICloseableLoadBalancerModal extends React.ComponentClass<ILoadBalancerModalProps> {\n show: (props: ILoadBalancerModalProps) => Promise<IAmazonLoadBalancerUpsertCommand>;\n}\n\nexport interface IAmazonLoadBalancerConfig {\n type: 'network' | 'application' | 'classic';\n label: string;\n sublabel: string;\n description: string;\n component: ICloseableLoadBalancerModal;\n}\n\nexport const LoadBalancerTypes: IAmazonLoadBalancerConfig[] = [\n {\n type: 'application',\n label: 'Application',\n sublabel: 'ALB',\n description: 'Highly configurable, application-focused balancer. HTTP and HTTPS only.',\n component: CreateApplicationLoadBalancer,\n },\n {\n type: 'network',\n label: 'Network',\n sublabel: 'NLB',\n description: 'Basic, high-performance balancer with fixed IP.',\n component: CreateNetworkLoadBalancer,\n },\n {\n type: 'classic',\n label: 'Classic',\n sublabel: 'Legacy',\n description: 'Previous generation balancer (ELB).',\n component: CreateClassicLoadBalancer,\n },\n];\n","import React from 'react';\nimport { Button, Modal } from 'react-bootstrap';\n\nimport type { ILoadBalancerIncompatibility, ILoadBalancerModalProps } from '@spinnaker/core';\nimport { CloudProviderRegistry, Markdown, ModalClose, noop, ReactModal } from '@spinnaker/core';\n\nimport type { IAmazonLoadBalancerConfig } from './LoadBalancerTypes';\nimport { LoadBalancerTypes } from './LoadBalancerTypes';\nimport { AWSProviderSettings } from '../../aws.settings';\n\nexport interface IAmazonLoadBalancerChoiceModalState {\n choices: IAmazonLoadBalancerConfig[];\n selectedChoice: IAmazonLoadBalancerConfig;\n}\n\nexport class AmazonLoadBalancerChoiceModal extends React.Component<\n ILoadBalancerModalProps,\n IAmazonLoadBalancerChoiceModalState\n> {\n public static defaultProps: Partial<ILoadBalancerModalProps> = {\n closeModal: noop,\n dismissModal: noop,\n };\n\n public static show(props: ILoadBalancerModalProps): Promise<void> {\n return ReactModal.show(\n AmazonLoadBalancerChoiceModal,\n {\n ...props,\n className: 'create-pipeline-modal-overflow-visible modal-lg',\n },\n { bsSize: 'lg' },\n );\n }\n\n constructor(props: ILoadBalancerModalProps) {\n super(props);\n this.state = {\n choices: LoadBalancerTypes,\n selectedChoice: LoadBalancerTypes[0],\n };\n }\n\n public choiceSelected(choice: IAmazonLoadBalancerConfig): void {\n this.setState({ selectedChoice: choice });\n }\n\n private choose = (): void => {\n const { children, ...loadBalancerProps } = this.props;\n this.close();\n this.state.selectedChoice.component\n .show(loadBalancerProps)\n .then((loadBalancer) => {\n this.props.closeModal(loadBalancer);\n })\n .catch(() => {});\n };\n\n public close = (reason?: any): void => {\n this.props.dismissModal(reason);\n };\n\n private getIncompatibility(choice: IAmazonLoadBalancerConfig, cloudProvider: string): ILoadBalancerIncompatibility {\n const { loadBalancer = {} } = CloudProviderRegistry.getProvider(cloudProvider);\n const {\n incompatibleLoadBalancerTypes = [],\n }: { incompatibleLoadBalancerTypes: ILoadBalancerIncompatibility[] } = loadBalancer;\n\n return incompatibleLoadBalancerTypes.find((lb) => lb.type === choice.type);\n }\n\n private isIncompatibleWithAllProviders(choice: IAmazonLoadBalancerConfig) {\n const {\n app: { attributes },\n } = this.props;\n const { cloudProviders = [] }: { cloudProviders: string[] } = attributes;\n\n if (cloudProviders.length > 0) {\n return cloudProviders.every((cloudProvider: string) => !!this.getIncompatibility(choice, cloudProvider));\n }\n\n // If the list of cloud providers is empty, assume it is compatible by default\n return false;\n }\n\n public render() {\n const {\n app: { attributes },\n } = this.props;\n const { cloudProviders = [] }: { cloudProviders: string[] } = attributes;\n const { choices, selectedChoice } = this.state;\n\n // Remove any choices that are not compatible with all configured cloud providers\n const filteredChoices = choices.filter((choice) => !this.isIncompatibleWithAllProviders(choice));\n\n // Compute incompatibilities with the current selected choice so we can display a warning\n const incompatibilities: ILoadBalancerIncompatibility[] = cloudProviders\n .map((cloudProvider) => this.getIncompatibility(selectedChoice, cloudProvider))\n .filter((x: ILoadBalancerIncompatibility) => x);\n\n const loadBalancerWarning =\n AWSProviderSettings.createLoadBalancerWarnings &&\n AWSProviderSettings.createLoadBalancerWarnings[selectedChoice.type];\n\n return (\n <>\n <ModalClose dismiss={this.close} />\n <Modal.Header>\n <Modal.Title>Select Type of Load Balancer</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <div className=\"modal-body\">\n <div className=\"card-choices\">\n {filteredChoices.map((choice) => (\n <div\n key={choice.type}\n className={`card ${selectedChoice === choice ? 'active' : ''}`}\n onClick={() => this.choiceSelected(choice)}\n >\n <h3 className=\"load-balancer-label\">{choice.label}</h3>\n <h3>({choice.sublabel})</h3>\n <div>{choice.description}</div>\n </div>\n ))}\n </div>\n <>\n {incompatibilities.length > 0 &&\n incompatibilities.map((incompatibility) => (\n <div className=\"alert alert-warning\">\n <p>\n <i className=\"fa fa-exclamation-triangle\" /> {incompatibility.reason}\n </p>\n </div>\n ))}\n </>\n {!!loadBalancerWarning && (\n <div className=\"alert alert-warning\">\n <p>\n <i className=\"fa fa-exclamation-triangle\" />\n <Markdown message={loadBalancerWarning} style={{ display: 'inline-block', marginLeft: '2px' }} />\n </p>\n </div>\n )}\n <div className=\"load-balancer-description\" />\n </div>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={this.choose}>\n Configure Load Balancer <span className=\"glyphicon glyphicon-chevron-right\" />\n </Button>\n </Modal.Footer>\n </>\n );\n }\n}\n","import { get, values } from 'lodash';\nimport React from 'react';\nimport { Dropdown } from 'react-bootstrap';\n\nimport type { Application } from '@spinnaker/core';\nimport {\n AddEntityTagLinks,\n ApplicationReader,\n ConfirmationModalService,\n HelpField,\n LoadBalancerWriter,\n ManagedMenuItem,\n SETTINGS,\n} from '@spinnaker/core';\n\nimport { AWSProviderSettings } from '../../aws.settings';\nimport { LoadBalancerTypes } from '../configure/LoadBalancerTypes';\nimport type { IAmazonLoadBalancer, IAmazonLoadBalancerDeleteCommand } from '../../domain';\nimport type { ILoadBalancerFromStateParams } from './loadBalancerDetails.controller';\n\nexport interface ILoadBalancerActionsProps {\n app: Application;\n loadBalancer: IAmazonLoadBalancer;\n loadBalancerFromParams: ILoadBalancerFromStateParams;\n}\n\nexport interface ILoadBalancerActionsState {\n application: Application;\n}\n\nexport class LoadBalancerActions extends React.Component<ILoadBalancerActionsProps, ILoadBalancerActionsState> {\n constructor(props: ILoadBalancerActionsProps) {\n super(props);\n\n const { app, loadBalancer } = this.props;\n\n let application: Application;\n\n const loadBalancerAppName = loadBalancer.name.split('-')[0];\n if (loadBalancerAppName === app.name) {\n // Name matches the currently active application\n application = app;\n } else {\n // Load balancer is a part of a different application\n ApplicationReader.getApplication(loadBalancerAppName)\n .then((loadBalancerApp) => {\n this.setState({ application: loadBalancerApp });\n })\n .catch(() => {\n // We should not \"just use the current app\" in place of the (missing) app\n // that the load balancer actually belongs.\n // Instead, the user should be forced to create the application of the orphaned load balancer.\n // Otherwise, there will be unexpected behavior.\n });\n }\n\n this.state = {\n application,\n };\n }\n\n public editLoadBalancer = (): void => {\n const { loadBalancer } = this.props;\n const { application } = this.state;\n const LoadBalancerModal = LoadBalancerTypes.find((t) => t.type === loadBalancer.loadBalancerType).component;\n LoadBalancerModal.show({ app: application, loadBalancer });\n };\n\n public deleteLoadBalancer = (): void => {\n const { app, loadBalancer, loadBalancerFromParams } = this.props;\n\n if (loadBalancer.instances && loadBalancer.instances.length) {\n return;\n }\n\n const taskMonitor = {\n application: app,\n title: 'Deleting ' + loadBalancerFromParams.name,\n };\n\n const command: IAmazonLoadBalancerDeleteCommand = {\n cloudProvider: loadBalancer.cloudProvider,\n loadBalancerName: loadBalancer.name,\n loadBalancerType: loadBalancer.loadBalancerType || 'classic',\n regions: [loadBalancer.region],\n credentials: loadBalancer.account,\n vpcId: get(loadBalancer, 'elb.vpcId', null),\n };\n\n const submitMethod = () => LoadBalancerWriter.deleteLoadBalancer(command, app);\n\n ConfirmationModalService.confirm({\n header: `Really delete ${loadBalancerFromParams.name} in ${loadBalancerFromParams.region}: ${loadBalancerFromParams.accountId}?`,\n buttonText: `Delete ${loadBalancerFromParams.name}`,\n account: loadBalancerFromParams.accountId,\n taskMonitorConfig: taskMonitor,\n submitMethod,\n });\n };\n\n private entityTagUpdate = (): void => {\n this.props.app.loadBalancers.refresh();\n };\n\n public render() {\n const { app, loadBalancer } = this.props;\n const { application } = this.state;\n\n const { loadBalancerType, instances, instanceCounts } = loadBalancer;\n const loadBalancerAppName = loadBalancer.name.split('-')[0];\n\n const clbInstances =\n loadBalancerType === 'classic' && values(instanceCounts).filter((v: number | undefined) => v).length;\n const allowDeletion = !clbInstances && !instances.length;\n\n return (\n <div style={{ display: 'inline-block' }}>\n {AWSProviderSettings.adHocInfraWritesEnabled && (\n <Dropdown className=\"dropdown\" id=\"load-balancer-actions-dropdown\">\n <Dropdown.Toggle className=\"btn btn-sm btn-primary dropdown-toggle\">\n <span>Load Balancer Actions</span>\n </Dropdown.Toggle>\n <Dropdown.Menu className=\"dropdown-menu\">\n {application && (\n <ManagedMenuItem resource={loadBalancer} application={app} onClick={this.editLoadBalancer}>\n Edit Load Balancer\n </ManagedMenuItem>\n )}\n {!application && (\n <li className=\"disabled\">\n <a>\n Edit Load Balancer{' '}\n <HelpField\n content={`The application <b>${loadBalancerAppName}</b> must be configured before this load balancer can be edited.`}\n />\n </a>\n </li>\n )}\n {allowDeletion && (\n <ManagedMenuItem resource={loadBalancer} application={app} onClick={this.deleteLoadBalancer}>\n Delete Load Balancer\n </ManagedMenuItem>\n )}\n {!allowDeletion && (\n <li className=\"disabled\">\n <a>\n Delete Load Balancer{' '}\n <HelpField content=\"You must detach all instances before you can delete this load balancer.\" />\n </a>\n </li>\n )}\n {SETTINGS && SETTINGS.feature.entityTags && (\n <AddEntityTagLinks\n component={loadBalancer}\n application={app}\n entityType=\"loadBalancer\"\n onUpdate={this.entityTagUpdate}\n />\n )}\n </Dropdown.Menu>\n </Dropdown>\n )}\n </div>\n );\n }\n}\n","import { module } from 'angular';\nimport { react2angular } from 'react2angular';\n\nimport { withErrorBoundary } from '@spinnaker/core';\n\nimport { LoadBalancerActions } from './LoadBalancerActions';\n\nexport const LOAD_BALANCER_ACTIONS = 'spinnaker.amazon.loadBalancer.details.loadBalancerActions.component';\nmodule(LOAD_BALANCER_ACTIONS, []).component(\n 'loadBalancerActions',\n react2angular(withErrorBoundary(LoadBalancerActions, 'loadBalancerActions'), [\n 'app',\n 'loadBalancer',\n 'loadBalancerFromParams',\n ]),\n);\n","import type { StateService } from '@uirouter/angularjs';\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport type { IController, IQService, IScope } from 'angular';\nimport { module } from 'angular';\nimport { head, sortBy } from 'lodash';\n\nimport type {\n Application,\n IApplicationSecurityGroup,\n ILoadBalancer,\n ISecurityGroup,\n ISubnet,\n LoadBalancerReader,\n SecurityGroupReader,\n} from '@spinnaker/core';\nimport {\n FirewallLabels,\n LOAD_BALANCER_READ_SERVICE,\n MANAGED_RESOURCE_DETAILS_INDICATOR,\n SECURITY_GROUP_READER,\n SETTINGS,\n SubnetReader,\n} from '@spinnaker/core';\nimport type {\n IAmazonApplicationLoadBalancer,\n IAmazonLoadBalancer,\n IAmazonLoadBalancerSourceData,\n IApplicationLoadBalancerSourceData,\n IClassicLoadBalancerSourceData,\n IListenerAction,\n ITargetGroup,\n} from '../../domain';\n\nimport { LOAD_BALANCER_ACTIONS } from './loadBalancerActions.component';\n\nexport interface ILoadBalancerFromStateParams {\n accountId: string;\n region: string;\n name: string;\n}\n\nexport interface IActionDetails extends IListenerAction {\n targetGroup: ITargetGroup;\n}\n\nexport class AwsLoadBalancerDetailsController implements IController {\n public application: Application;\n public elbProtocol: string;\n public listeners: Array<{ in: string; actions: IActionDetails[] }>;\n public loadBalancerFromParams: ILoadBalancerFromStateParams;\n public loadBalancer: IAmazonLoadBalancer;\n public securityGroups: ISecurityGroup[];\n public ipAddressTypeDescription: string;\n public state = { loading: true };\n public firewallsLabel = FirewallLabels.get('Firewalls');\n public oidcConfigPath = SETTINGS.oidcConfigPath;\n\n public static $inject = [\n '$scope',\n '$state',\n '$q',\n 'loadBalancer',\n 'app',\n 'securityGroupReader',\n 'loadBalancerReader',\n ];\n constructor(\n private $scope: IScope,\n private $state: StateService,\n private $q: IQService,\n loadBalancer: ILoadBalancerFromStateParams,\n private app: Application,\n private securityGroupReader: SecurityGroupReader,\n private loadBalancerReader: LoadBalancerReader,\n ) {\n this.application = app;\n this.loadBalancerFromParams = loadBalancer;\n\n this.app\n .ready()\n .then(() => this.extractLoadBalancer())\n .then(() => {\n // If the user navigates away from the view before the initial extractLoadBalancer call completes,\n // do not bother subscribing to the refresh\n if (!$scope.$$destroyed) {\n app.getDataSource('loadBalancers').onRefresh($scope, () => this.extractLoadBalancer());\n }\n });\n }\n\n public autoClose(): void {\n if (this.$scope.$$destroyed) {\n return;\n }\n this.$state.params.allowModalToStayOpen = true;\n this.$state.go('^', null, { location: 'replace' });\n }\n\n public extractLoadBalancer(): PromiseLike<void> {\n const appLoadBalancer = this.app.loadBalancers.data.find((test: ILoadBalancer) => {\n return (\n test.name === this.loadBalancerFromParams.name &&\n test.region === this.loadBalancerFromParams.region &&\n test.account === this.loadBalancerFromParams.accountId\n );\n });\n\n if (appLoadBalancer) {\n const detailsLoader = this.loadBalancerReader.getLoadBalancerDetails(\n 'aws',\n this.loadBalancerFromParams.accountId,\n this.loadBalancerFromParams.region,\n this.loadBalancerFromParams.name,\n );\n return detailsLoader.then(\n (details: IAmazonLoadBalancerSourceData[]) => {\n this.loadBalancer = appLoadBalancer;\n this.state.loading = false;\n const securityGroups: IApplicationSecurityGroup[] = [];\n if (details.length) {\n this.loadBalancer.elb = details[0];\n this.loadBalancer.elb.vpcId = this.loadBalancer.elb.vpcId || this.loadBalancer.elb.vpcid;\n this.loadBalancer.account = this.loadBalancerFromParams.accountId;\n\n const sourceData = details[0] as IApplicationLoadBalancerSourceData;\n if (sourceData.loadBalancerType === 'application' || sourceData.loadBalancerType === 'network') {\n // Transform listener data\n const elb = details[0] as IApplicationLoadBalancerSourceData;\n if (elb.listeners && elb.listeners.length) {\n this.elbProtocol = 'http:';\n if (elb.listeners.some((l: any) => l.protocol === 'HTTPS')) {\n this.elbProtocol = 'https:';\n }\n\n this.listeners = [];\n\n // Sort the actions by the order specified since amazon does not return them in order of order\n elb.listeners.forEach((l) => {\n l.defaultActions.sort((a, b) => a.order - b.order);\n l.rules.forEach((r) => r.actions.sort((a, b) => a.order - b.order));\n });\n\n elb.listeners.forEach((listener) => {\n listener.rules.map((rule) => {\n let inMatch = [\n listener.protocol,\n (rule.conditions.find((c) => c.field === 'host-header') || { values: [''] }).values[0],\n listener.port,\n ]\n .filter((f) => f)\n .join(':');\n const path = (rule.conditions.find((c) => c.field === 'path-pattern') || { values: [] }).values[0];\n if (path) {\n inMatch = `${inMatch}${path}`;\n }\n const actions = rule.actions.map((a) => {\n const action = { ...a } as IActionDetails;\n if (action.type === 'forward') {\n action.targetGroup = (this.loadBalancer as IAmazonApplicationLoadBalancer).targetGroups.find(\n (tg) => tg.name === action.targetGroupName,\n );\n }\n return action;\n });\n this.listeners.push({ in: inMatch, actions });\n });\n });\n }\n\n if (elb.ipAddressType === 'dualstack') {\n this.ipAddressTypeDescription = 'IPv4 and IPv6';\n }\n if (elb.ipAddressType === 'ipv4') {\n this.ipAddressTypeDescription = 'IPv4';\n }\n } else {\n // Classic\n const elb = details[0] as IClassicLoadBalancerSourceData;\n if (elb.listenerDescriptions) {\n this.elbProtocol = 'http:';\n if (elb.listenerDescriptions.some((l: any) => l.listener.protocol === 'HTTPS')) {\n this.elbProtocol = 'https:';\n }\n }\n }\n\n (this.loadBalancer.elb.securityGroups || []).forEach((securityGroupId: string) => {\n const match = this.securityGroupReader.getApplicationSecurityGroup(\n this.app,\n this.loadBalancerFromParams.accountId,\n this.loadBalancerFromParams.region,\n securityGroupId,\n );\n if (match) {\n securityGroups.push(match);\n }\n });\n this.securityGroups = sortBy(securityGroups, 'name');\n\n if (this.loadBalancer.subnets) {\n this.loadBalancer.subnetDetails = this.loadBalancer.subnets.reduce(\n (subnetDetails: ISubnet[], subnetId: string) => {\n SubnetReader.getSubnetByIdAndProvider(subnetId, this.loadBalancer.provider).then(\n (subnetDetail: ISubnet) => {\n subnetDetails.push(subnetDetail);\n },\n );\n\n return subnetDetails;\n },\n [],\n );\n }\n }\n },\n () => this.autoClose(),\n );\n } else {\n this.autoClose();\n }\n if (!this.loadBalancer) {\n this.autoClose();\n }\n\n return this.$q.when(null);\n }\n\n public getFirstSubnetPurpose(subnetDetailsList: ISubnet[] = []) {\n return head(subnetDetailsList.map((subnet) => subnet.purpose)) || '';\n }\n}\n\nexport const AWS_LOAD_BALANCER_DETAILS_CTRL = 'spinnaker.amazon.loadBalancer.details.controller';\nmodule(AWS_LOAD_BALANCER_DETAILS_CTRL, [\n UIROUTER_ANGULARJS,\n SECURITY_GROUP_READER,\n LOAD_BALANCER_ACTIONS,\n LOAD_BALANCER_READ_SERVICE,\n MANAGED_RESOURCE_DETAILS_INDICATOR,\n]).controller('awsLoadBalancerDetailsCtrl', AwsLoadBalancerDetailsController);\n","import type { StateService } from '@uirouter/angularjs';\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport type { IController, IQService, IScope } from 'angular';\nimport { module } from 'angular';\n\nimport type { Application, ILoadBalancer } from '@spinnaker/core';\nimport { MANAGED_RESOURCE_DETAILS_INDICATOR } from '@spinnaker/core';\nimport type { IAmazonApplicationLoadBalancer, ITargetGroup } from '../../domain/IAmazonLoadBalancer';\n\nexport interface ITargetGroupFromStateParams {\n accountId: string;\n region: string;\n name: string;\n loadBalancerName: string;\n vpcId: string;\n}\n\nexport class AwsTargetGroupDetailsController implements IController {\n private targetGroupFromParams: ITargetGroupFromStateParams;\n public application: Application;\n public state = { loading: true };\n public elbProtocol: string;\n public targetGroup: ITargetGroup;\n public loadBalancer: IAmazonApplicationLoadBalancer;\n\n public static $inject = ['$scope', '$q', '$state', 'targetGroup', 'app'];\n constructor(\n private $scope: IScope,\n private $q: IQService,\n private $state: StateService,\n targetGroup: ITargetGroupFromStateParams,\n private app: Application,\n ) {\n this.application = app;\n this.targetGroupFromParams = targetGroup;\n\n this.app\n .ready()\n .then(() => this.extractTargetGroup())\n .then(() => {\n // If the user navigates away from the view before the initial extractTargetGroup call completes,\n // do not bother subscribing to the refresh\n if (!$scope.$$destroyed) {\n app.getDataSource('loadBalancers').onRefresh($scope, () => this.extractTargetGroup());\n }\n });\n }\n\n public autoClose(): void {\n if (this.$scope.$$destroyed) {\n return;\n }\n this.$state.params.allowModalToStayOpen = true;\n this.$state.go('^', null, { location: 'replace' });\n }\n\n public extractTargetGroup(): PromiseLike<void> {\n const { loadBalancerName, region, accountId, name } = this.targetGroupFromParams;\n\n const appLoadBalancer: IAmazonApplicationLoadBalancer = this.app.loadBalancers.data.find((test: ILoadBalancer) => {\n return test.name === loadBalancerName && test.region === region && test.account === accountId;\n });\n if (!appLoadBalancer) {\n this.autoClose();\n return this.$q.when(null);\n }\n\n const targetGroup = appLoadBalancer.targetGroups.find((tg) => tg.name === name);\n if (!targetGroup) {\n this.autoClose();\n return this.$q.when(null);\n }\n\n // All the other details controllers get the latest from the server again, since target groups are currently only returned\n // as a part of a load balancer, we don't have a good way of getting the latest from the server. If this small delay does\n // end up causing problems, we can add a /targetGroups controller to clouddriver and expose it in gate like the\n // loadBalancer controller.\n this.targetGroup = targetGroup;\n this.loadBalancer = appLoadBalancer;\n this.state.loading = false;\n\n this.elbProtocol = 'http:';\n if (this.loadBalancer.listeners && this.loadBalancer.listeners.some((l) => l.protocol === 'HTTPS')) {\n this.elbProtocol = 'https:';\n }\n\n return this.$q.when(null);\n }\n}\n\nexport const AWS_TARGET_GROUP_DETAILS_CTRL = 'spinnaker.amazon.loadBalancer.details.targetGroupDetails.controller';\nmodule(AWS_TARGET_GROUP_DETAILS_CTRL, [UIROUTER_ANGULARJS, MANAGED_RESOURCE_DETAILS_INDICATOR]).controller(\n 'awsTargetGroupDetailsCtrl',\n AwsTargetGroupDetailsController,\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 { TargetGroupDetails } from './TargetGroupDetails';\n\nexport const TARGET_GROUP_STATES = 'spinnaker.amazon.loadBalancer.targetGroup.states';\nmodule(TARGET_GROUP_STATES, [APPLICATION_STATE_PROVIDER]).config([\n 'applicationStateProvider',\n (applicationStateProvider: ApplicationStateProvider) => {\n const targetGroupDetails: INestedState = {\n name: 'targetGroupDetails',\n url: '/targetGroupDetails/: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: TargetGroupDetails,\n $type: 'react',\n },\n },\n resolve: {\n accountId: ['$stateParams', ($stateParams: StateParams) => $stateParams.accountId],\n targetGroup: [\n '$stateParams',\n ($stateParams: StateParams) => {\n return {\n loadBalancerName: $stateParams.loadBalancerName,\n name: $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(targetGroupDetails);\n },\n]);\n","import { module } from 'angular';\n\nimport { LOAD_BALANCER_ACTIONS } from './details/loadBalancerActions.component';\nimport { AWS_LOAD_BALANCER_DETAILS_CTRL } from './details/loadBalancerDetails.controller';\nimport { AWS_TARGET_GROUP_DETAILS_CTRL } from './details/targetGroupDetails.controller';\nimport { TARGET_GROUP_STATES } from './targetGroup.states';\n\nexport const AWS_LOAD_BALANCER_MODULE = 'spinnaker.amazon.loadBalancer';\n\nmodule(AWS_LOAD_BALANCER_MODULE, [\n AWS_LOAD_BALANCER_DETAILS_CTRL,\n AWS_TARGET_GROUP_DETAILS_CTRL,\n LOAD_BALANCER_ACTIONS,\n TARGET_GROUP_STATES,\n]);\n","export default \"amazon.logo352d4e042476837f.svg\"","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport { get } from 'lodash';\n\nimport { SETTINGS } from '@spinnaker/core';\n\nexport const AMAZON_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER =\n 'spinnaker.amazon.pipeline.stage.bake.executionDetails.controller';\nexport const name = AMAZON_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER; // for backwards compatibility\nmodule(AMAZON_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER, [UIROUTER_ANGULARJS]).controller(\n 'awsBakeExecutionDetailsCtrl',\n [\n '$scope',\n '$stateParams',\n 'executionDetailsSectionService',\n '$interpolate',\n function ($scope, $stateParams, executionDetailsSectionService, $interpolate) {\n $scope.configSections = ['bakeConfig', 'taskStatus'];\n\n const initialized = () => {\n $scope.detailsSection = $stateParams.details;\n $scope.provider = $scope.stage.context.cloudProviderType || 'aws';\n $scope.roscoMode =\n SETTINGS.feature.roscoMode ||\n (typeof SETTINGS.feature.roscoSelector === 'function' &&\n SETTINGS.feature.roscoSelector($scope.stage.context));\n $scope.bakeryDetailUrl = $interpolate(\n $scope.roscoMode && SETTINGS.roscoDetailUrl ? SETTINGS.roscoDetailUrl : SETTINGS.bakeryDetailUrl,\n );\n $scope.bakeFailedNoError =\n get($scope.stage, 'context.status.result') === 'FAILURE' && !$scope.stage.failureMessage;\n };\n\n const initialize = () => executionDetailsSectionService.synchronizeSection($scope.configSections, initialized);\n\n initialize();\n\n $scope.$on('$stateChangeSuccess', initialize);\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AuthenticationService } from '@spinnaker/core';\nimport { BakeExecutionLabel, BakeryReader, PipelineTemplates, Registry, SETTINGS } from '@spinnaker/core';\nimport { AWSProviderSettings } from '../../../aws.settings';\n\nimport { AMAZON_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER } from './bakeExecutionDetails.controller';\n\nexport const AMAZON_PIPELINE_STAGES_BAKE_AWSBAKESTAGE = 'spinnaker.amazon.pipeline.stage.bakeStage';\nexport const name = AMAZON_PIPELINE_STAGES_BAKE_AWSBAKESTAGE; // for backwards compatibility\nmodule(AMAZON_PIPELINE_STAGES_BAKE_AWSBAKESTAGE, [AMAZON_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'bake',\n cloudProvider: 'aws',\n label: 'Bake',\n description: 'Bakes an image',\n templateUrl: require('./bakeStage.html'),\n executionDetailsUrl: require('./bakeExecutionDetails.html'),\n executionLabelComponent: BakeExecutionLabel,\n extraLabelLines: (stage) => {\n return stage.masterStage.context.allPreviouslyBaked || stage.masterStage.context.somePreviouslyBaked ? 1 : 0;\n },\n supportsCustomTimeout: true,\n validators: [\n { type: 'requiredField', fieldName: 'package' },\n { type: 'requiredField', fieldName: 'regions' },\n {\n type: 'upstreamVersionProvided',\n checkParentTriggers: true,\n getMessage: (labels) =>\n 'Bake stages should always have a stage or trigger preceding them that provides version information: ' +\n '<ul>' +\n labels.map((label) => `<li>${label}</li>`).join('') +\n '</ul>' +\n 'Otherwise, Spinnaker will bake and deploy the most-recently built package.',\n },\n ],\n restartable: true,\n });\n })\n .controller('awsBakeStageCtrl', [\n '$scope',\n '$q',\n '$uibModal',\n function ($scope, $q, $uibModal) {\n $scope.stage.extendedAttributes = $scope.stage.extendedAttributes || {};\n $scope.stage.regions = ($scope.stage.regions && $scope.stage.regions.sort()) || [];\n\n if (!$scope.stage.user) {\n $scope.stage.user = AuthenticationService.getAuthenticatedUser().name;\n }\n\n $scope.viewState = {\n loading: true,\n roscoMode:\n SETTINGS.feature.roscoMode ||\n (typeof SETTINGS.feature.roscoSelector === 'function' && SETTINGS.feature.roscoSelector($scope.stage)),\n minRootVolumeSize: AWSProviderSettings.minRootVolumeSize,\n showVmTypeSelector: true,\n bakeWarning: AWSProviderSettings.bakeWarning,\n dockerBakeWarning: AWSProviderSettings.dockerBakeWarning,\n showDockerPreview: AWSProviderSettings.dockerBakeryDeprecated && $scope.stage.storeType === 'docker',\n showMigrationFields: $scope.pipeline.migrationStatus !== 'Started',\n showStoreType: !AWSProviderSettings.dockerBakeryDeprecated,\n };\n\n function initialize() {\n $q.all([\n BakeryReader.getRegions('aws'),\n BakeryReader.getBaseOsOptions('aws'),\n BakeryReader.getBaseLabelOptions(),\n ['ebs', 'docker'],\n ]).then(function ([regions, baseOsOptions, baseLabelOptions, storeTypes]) {\n $scope.regions = [...regions].sort();\n $scope.storeTypes = storeTypes;\n if (!$scope.stage.storeType && $scope.storeTypes && $scope.storeTypes.length) {\n $scope.stage.storeType = $scope.storeTypes[0];\n }\n if ($scope.regions.length === 1) {\n $scope.stage.region = $scope.regions[0];\n } else if (!$scope.regions.includes($scope.stage.region)) {\n delete $scope.stage.region;\n }\n if (!$scope.stage.regions.length && $scope.application.defaultRegions.aws) {\n $scope.stage.regions.push(...Object.keys($scope.application.defaultRegions.aws).sort());\n }\n $scope.baseOsOptions = baseOsOptions.baseImages;\n $scope.baseLabelOptions = baseLabelOptions;\n\n if (!$scope.stage.baseOs && $scope.baseOsOptions && $scope.baseOsOptions.length) {\n $scope.stage.baseOs = $scope.baseOsOptions[0].id;\n } else if (\n $scope.stage.baseOs &&\n !($scope.baseOsOptions || []).find((baseOs) => baseOs.id === $scope.stage.baseOs)\n ) {\n $scope.baseOsOptions.push({\n id: $scope.stage.baseOs,\n detailedDescription: 'Custom',\n vmTypes: ['hvm', 'pv'],\n });\n }\n if (!$scope.stage.baseLabel && $scope.baseLabelOptions && $scope.baseLabelOptions.length) {\n $scope.stage.baseLabel = $scope.baseLabelOptions[0];\n }\n setVmTypes();\n if (!$scope.stage.vmType && $scope.vmTypes && $scope.vmTypes.length) {\n $scope.stage.vmType = $scope.vmTypes[0];\n }\n $scope.showAdvancedOptions = showAdvanced();\n $scope.viewState.loading = false;\n });\n }\n\n function stageUpdated() {\n deleteEmptyProperties();\n if ($scope.stage.storeType === 'ebs' && $scope.stage.cloudProviderType !== 'aws') {\n $scope.stage.cloudProviderType = 'aws';\n }\n // Since the selector computes using stage as an input, it needs to be able to recompute roscoMode on updates\n if (typeof SETTINGS.feature.roscoSelector === 'function') {\n $scope.viewState.roscoMode = SETTINGS.feature.roscoSelector($scope.stage);\n }\n }\n\n function deleteEmptyProperties() {\n _.forOwn($scope.stage, function (val, key) {\n if (val === '') {\n delete $scope.stage[key];\n }\n });\n }\n\n function showAdvanced() {\n const stg = $scope.stage;\n return !!(\n stg.templateFileName ||\n (stg.extendedAttributes && _.size(stg.extendedAttributes) > 0) ||\n stg.varFileName ||\n stg.baseName ||\n stg.baseAmi ||\n stg.amiName ||\n stg.amiSuffix ||\n stg.rootVolumeSize\n );\n }\n\n function setVmTypes() {\n if ($scope.baseOsOptions.length && $scope.baseOsOptions.every(({ vmTypes }) => vmTypes)) {\n const allVmTypes =\n $scope.baseOsOptions.length &&\n new Set($scope.baseOsOptions.reduce((types, { vmTypes }) => types.concat(vmTypes), []));\n const baseOs = $scope.baseOsOptions.find(({ id }) => id === $scope.stage.baseOs);\n\n $scope.viewState.showVmTypeSelector = allVmTypes.size > 1;\n $scope.vmTypes = baseOs.vmTypes;\n } else {\n $scope.viewState.showVmTypeSelector = true;\n $scope.vmTypes = ['hvm', 'pv'];\n }\n }\n\n this.addExtendedAttribute = function () {\n if (!$scope.stage.extendedAttributes) {\n $scope.stage.extendedAttributes = {};\n }\n $uibModal\n .open({\n templateUrl: PipelineTemplates.addExtendedAttributes,\n controller: 'bakeStageAddExtendedAttributeController',\n controllerAs: 'addExtendedAttribute',\n resolve: {\n extendedAttribute: function () {\n return {\n key: '',\n value: '',\n };\n },\n },\n })\n .result.then(function (extendedAttribute) {\n $scope.stage.extendedAttributes[extendedAttribute.key] = extendedAttribute.value;\n })\n .catch(() => {});\n };\n\n this.removeExtendedAttribute = function (key) {\n delete $scope.stage.extendedAttributes[key];\n };\n\n this.showTemplateFileName = function () {\n return $scope.viewState.roscoMode || $scope.stage.templateFileName;\n };\n\n this.showExtendedAttributes = function () {\n return (\n $scope.viewState.roscoMode || ($scope.stage.extendedAttributes && _.size($scope.stage.extendedAttributes) > 0)\n );\n };\n\n this.showVarFileName = function () {\n return $scope.viewState.roscoMode || $scope.stage.varFileName;\n };\n\n this.handleBaseOsChange = function () {\n setVmTypes();\n if ($scope.vmTypes && $scope.vmTypes.length && !$scope.vmTypes.includes($scope.stage.vmType)) {\n $scope.stage.vmType = $scope.vmTypes[0];\n }\n };\n\n $scope.$watch('stage', stageUpdated, true);\n\n initialize();\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, AppListExtractor, NameUtils, Registry, StageConstants } from '@spinnaker/core';\n\nexport const AMAZON_PIPELINE_STAGES_CLONESERVERGROUP_AWSCLONESERVERGROUPSTAGE =\n 'spinnaker.amazon.pipeline.stage.cloneServerGroupStage';\nexport const name = AMAZON_PIPELINE_STAGES_CLONESERVERGROUP_AWSCLONESERVERGROUPSTAGE; // for backwards compatibility\nmodule(AMAZON_PIPELINE_STAGES_CLONESERVERGROUP_AWSCLONESERVERGROUPSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'cloneServerGroup',\n cloudProvider: 'aws',\n templateUrl: require('./cloneServerGroupStage.html'),\n executionStepLabelUrl: require('./cloneServerGroupStepLabel.html'),\n accountExtractor: (stage) => [stage.context.credentials],\n validators: [\n { type: 'requiredField', fieldName: 'targetCluster', fieldLabel: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'region' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('awsCloneServerGroupStageCtrl', [\n '$scope',\n function ($scope) {\n const stage = $scope.stage;\n\n $scope.viewState = {\n accountsLoaded: false,\n };\n\n AccountService.listAccounts('aws').then((accounts) => {\n $scope.accounts = accounts;\n $scope.viewState.accountsLoaded = true;\n });\n\n this.cloneTargets = StageConstants.TARGET_LIST;\n stage.target = stage.target || this.cloneTargets[0].val;\n stage.application = $scope.application.name;\n stage.cloudProvider = 'aws';\n stage.cloudProviderType = 'aws';\n stage.viewState = {\n mode: 'editPipeline',\n };\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Amazon'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.aws) {\n stage.credentials = $scope.application.defaultCredentials.aws;\n }\n\n if (stage.isNew) {\n stage.useAmiBlockDeviceMappings = _.get(\n $scope,\n 'application.attributes.providerSettings.aws.useAmiBlockDeviceMappings',\n false,\n );\n stage.copySourceCustomBlockDeviceMappings = false; // default to using block device mappings from current instance type\n }\n\n this.targetClusterUpdated = () => {\n if (stage.targetCluster) {\n const filterByCluster = AppListExtractor.monikerClusterNameFilter(stage.targetCluster);\n const moniker = _.first(AppListExtractor.getMonikers([$scope.application], filterByCluster));\n if (moniker) {\n stage.stack = moniker.stack;\n stage.freeFormDetails = moniker.detail;\n } else {\n // if the user has entered a free-form value for the target cluster, fall back to the naming service\n const nameParts = NameUtils.parseClusterName(stage.targetCluster);\n stage.stack = nameParts.stack;\n stage.freeFormDetails = nameParts.freeFormDetails;\n }\n } else {\n stage.stack = '';\n stage.freeFormDetails = '';\n }\n };\n\n $scope.$watch('stage.targetCluster', this.targetClusterUpdated);\n\n this.removeCapacity = () => {\n delete stage.capacity;\n };\n\n if (!_.has(stage, 'useSourceCapacity')) {\n stage.useSourceCapacity = true;\n }\n\n this.toggleSuspendedProcess = (process) => {\n stage.suspendedProcesses = stage.suspendedProcesses || [];\n const processIndex = stage.suspendedProcesses.indexOf(process);\n if (processIndex === -1) {\n stage.suspendedProcesses.push(process);\n } else {\n stage.suspendedProcesses.splice(processIndex, 1);\n }\n };\n\n this.processIsSuspended = (process) => {\n return stage.suspendedProcesses && stage.suspendedProcesses.includes(process);\n };\n\n this.getBlockDeviceMappingsSource = () => {\n if (stage.copySourceCustomBlockDeviceMappings) {\n return 'source';\n } else if (stage.useAmiBlockDeviceMappings) {\n return 'ami';\n }\n return 'default';\n };\n\n this.selectBlockDeviceMappingsSource = (selection) => {\n if (selection === 'source') {\n // copy block device mappings from source asg\n stage.copySourceCustomBlockDeviceMappings = true;\n stage.useAmiBlockDeviceMappings = false;\n } else if (selection === 'ami') {\n // use block device mappings from selected ami\n stage.copySourceCustomBlockDeviceMappings = false;\n stage.useAmiBlockDeviceMappings = true;\n } else {\n // use default block device mappings for selected instance type\n stage.copySourceCustomBlockDeviceMappings = false;\n stage.useAmiBlockDeviceMappings = false;\n }\n };\n\n this.onRedBlackFieldChange = (key, value) => {\n _.set(stage, key, value);\n };\n },\n ]);\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nexport interface IDeleteVersionConstant {\n description: string;\n label: string;\n value: string;\n}\n\nexport const DeleteVersionList: IDeleteVersionConstant[] = [\n {\n label: 'Newest Function Version',\n value: '$LATEST',\n description: 'Delete the most recently deployed function version when this stage starts.',\n },\n {\n label: 'Previous Function Version',\n value: '$PREVIOUS',\n description: 'Delete the second-most recently deployed function version when this stage starts.',\n },\n {\n label: 'Older Than N',\n value: '$MOVING',\n description: 'Delete all version but the N most recent versions.',\n },\n {\n label: 'Provide Version Number',\n value: '$PROVIDED',\n description: 'Provide a specific version number to delete.',\n },\n {\n label: 'All Function Versions',\n value: '$ALL',\n description:\n 'Delete all function versions and function infrastructure. This will completely delete the Lambda function.',\n },\n];\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport React from 'react';\n\nimport type { IFormikStageConfigInjectedProps } from '@spinnaker/core';\n\nimport type { IDeleteVersionConstant } from './deleteVersion.constants';\nimport { DeleteVersionList } from './deleteVersion.constants';\n\nexport interface IVersionPickerProps {\n config: IFormikStageConfigInjectedProps;\n value: string;\n showingDetails: boolean;\n}\n\nexport interface IVersionPickerState {\n value: string;\n label: string;\n description: string;\n}\n\nexport class DeleteVersionPicker extends React.Component<IVersionPickerProps, IVersionPickerState> {\n constructor(props: IVersionPickerProps) {\n super(props);\n\n const { value } = this.props;\n\n const versionDetails = DeleteVersionList.filter((v: IDeleteVersionConstant) => v.value === value)[0];\n\n this.state = {\n label: versionDetails.label,\n value: versionDetails.value,\n description: versionDetails.description,\n };\n }\n\n public render() {\n return (\n <div>\n <b> {this.state.label} </b>\n <br />\n <small> {this.state.description} </small>\n </div>\n );\n }\n}\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport React from 'react';\n\nimport type {\n IAccount,\n IAccountDetails,\n IFormikStageConfigInjectedProps,\n IFormInputProps,\n IFunction,\n IRegion,\n} from '@spinnaker/core';\nimport { AccountService, FormikFormField, HelpField, NumberInput, ReactSelectInput, useData } from '@spinnaker/core';\n\nimport { DeleteVersionList, DeleteVersionPicker } from './constants';\nimport type { IAmazonFunctionSourceData } from '../../../domain';\n\nexport function DeleteLambdaFunctionStageForm(props: IFormikStageConfigInjectedProps) {\n const { values } = props.formik;\n const { functions } = props.application;\n\n const { result: fetchAccountsResult, status: fetchAccountsStatus } = useData(\n () => AccountService.listAccounts('aws'),\n [],\n [],\n );\n\n const onAccountChange = (fieldName: string, fieldValue: any): void => {\n props.formik.setFieldValue('region', null);\n props.formik.setFieldValue('functionName', null);\n\n props.formik.setFieldValue(fieldName, fieldValue);\n };\n\n const onRegionChange = (fieldName: string, fieldValue: any): void => {\n props.formik.setFieldValue('functionName', null);\n\n props.formik.setFieldValue(fieldName, fieldValue);\n };\n\n const availableFunctions =\n values.account && values.region\n ? functions.data\n .filter((f: IFunction) => f.account === values.account)\n .filter((f: IFunction) => f.region === values.region)\n .map((f: IFunction) => f.functionName)\n : [];\n\n return (\n <div className=\"form-horizontal\">\n <FormikFormField\n label=\"Account\"\n name=\"account\"\n onChange={onAccountChange}\n required={true}\n input={(inputProps: IFormInputProps) => (\n <ReactSelectInput\n {...inputProps}\n clearable={false}\n isLoading={fetchAccountsStatus === 'PENDING'}\n stringOptions={fetchAccountsResult.map((acc: IAccount) => acc.name)}\n />\n )}\n />\n <FormikFormField\n label=\"Region\"\n name=\"region\"\n onChange={onRegionChange}\n input={(inputProps: IFormInputProps) => (\n <ReactSelectInput\n clearable={false}\n disabled={!values.account}\n placeholder={values.account ? 'Select...' : 'Select an Account...'}\n {...inputProps}\n isLoading={fetchAccountsStatus === 'PENDING'}\n stringOptions={fetchAccountsResult\n .filter((acc: IAccountDetails) => acc.name === values.account)\n .flatMap((acc: IAccountDetails) => acc.regions)\n .map((reg: IRegion) => reg.name)}\n />\n )}\n />\n <FormikFormField\n label=\"Function Name\"\n name=\"functionName\"\n input={(inputProps: IFormInputProps) => (\n <ReactSelectInput\n clearable={false}\n disabled={!(values.account && values.region)}\n placeholder={values.account && values.region ? 'Select...' : 'Select an Account and Region...'}\n {...inputProps}\n stringOptions={availableFunctions}\n />\n )}\n />\n <FormikFormField\n label=\"Target Version\"\n name=\"version\"\n input={(inputProps: IFormInputProps) => (\n <ReactSelectInput\n {...inputProps}\n clearable={false}\n options={DeleteVersionList}\n optionRenderer={(option) => (\n <DeleteVersionPicker config={props} value={option.value as any} showingDetails={true} />\n )}\n />\n )}\n />\n {values.version === '$PROVIDED' ? (\n <FormikFormField\n label=\"Version Number\"\n name=\"versionNumber\"\n input={(inputProps: IFormInputProps) => (\n <ReactSelectInput\n {...inputProps}\n clearable={false}\n stringOptions={functions.data\n .filter((f: IAmazonFunctionSourceData) => f.account === values.account)\n .filter((f: IAmazonFunctionSourceData) => f.region === values.region)\n .filter((f: IAmazonFunctionSourceData) => f.functionName === values.functionName)\n .flatMap((f: IAmazonFunctionSourceData) =>\n Object.values(f.revisions).sort(function (a: number, b: number) {\n return b - a;\n }),\n )\n .filter((r: any) => r !== '$LATEST')}\n />\n )}\n />\n ) : null}\n {values.version === '$MOVING' ? (\n <FormikFormField\n name=\"retentionNumber\"\n help={<HelpField content=\"The number of Lambda versions to retain\" />}\n label=\"Prior Versions to Retain\"\n input={(props) => <NumberInput {...props} min={1} max={100} />}\n />\n ) : null}\n </div>\n );\n}\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport React from 'react';\n\nimport type {\n IExecutionDetailsSectionProps,\n IFormikStageConfigInjectedProps,\n IStage,\n IStageConfigProps,\n IStageTypeConfig,\n} from '@spinnaker/core';\nimport {\n ExecutionDetailsSection,\n ExecutionDetailsTasks,\n FormikStageConfig,\n FormValidator,\n HelpContentsRegistry,\n StageFailureMessage,\n} from '@spinnaker/core';\n\nimport { DeleteLambdaFunctionStageForm } from './DeleteLambdaFunctionStageForm';\n\nexport function DeleteLambdaExecutionDetails(props: IExecutionDetailsSectionProps) {\n const { stage, name, current } = props;\n return (\n <ExecutionDetailsSection name={name} current={current}>\n <StageFailureMessage stage={stage} message={stage.outputs.failureMessage} />\n <div>\n <p>\n {' '}\n <b> Status: </b> {stage.outputs.deleteTask === 'done' ? 'COMPLETE' : stage.outputs.deleteTask}{' '}\n </p>\n <p>\n {' '}\n <b> Deleted Version: </b>{' '}\n {stage.outputs['deleteTask:deleteVersion'] ? stage.outputs['deleteTask:deleteVersion'] : 'N/A'}{' '}\n </p>\n </div>\n </ExecutionDetailsSection>\n );\n}\n\nfunction DeleteLambdaConfig(props: IStageConfigProps) {\n return (\n <div className=\"DeleteLambdaStageConfig\">\n <FormikStageConfig\n {...props}\n validate={validate}\n onChange={props.updateStage}\n render={(props: IFormikStageConfigInjectedProps) => <DeleteLambdaFunctionStageForm {...props} />}\n />\n </div>\n );\n}\n\nexport const initialize = () => {\n HelpContentsRegistry.register('aws.lambdaDeploymentStage.lambda', 'Lambda Name');\n};\n\nfunction validate(stageConfig: IStage) {\n const validator = new FormValidator(stageConfig);\n validator.field('account', 'Account Name').required();\n\n validator.field('region', 'Region').required();\n\n validator.field('functionName', 'Lambda Function Name').required();\n\n validator.field('version', 'Lambda Function Version').required();\n\n return validator.validateForm();\n}\n\n// eslint-disable-next-line\nexport namespace DeleteLambdaExecutionDetails {\n export const title = 'Delete Lambda Stage';\n}\n\nexport const lambdaDeleteStage: IStageTypeConfig = {\n key: 'Aws.LambdaDeleteStage',\n label: `AWS Lambda Delete`,\n description: 'Delete an AWS Lambda Function',\n component: DeleteLambdaConfig, // stage config\n executionDetailsSections: [DeleteLambdaExecutionDetails, ExecutionDetailsTasks],\n validateFn: validate,\n};\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { module } from 'angular';\n\nimport { Registry, SETTINGS } from '@spinnaker/core';\n\nimport { lambdaDeleteStage } from './LambdaDeleteStage';\nexport * from './LambdaDeleteStage';\n\nexport const AMAZON_PIPELINE_STAGES_LAMBDA_DELETE = 'spinnaker.amazon.pipeline.stage.Aws.LambdaDeleteStage';\n\nmodule(AMAZON_PIPELINE_STAGES_LAMBDA_DELETE, []).config(function () {\n if (SETTINGS.feature.lambdaAdditionalStages) {\n Registry.pipeline.registerStage(lambdaDeleteStage);\n }\n});\n","import { module } from 'angular';\nimport React, { useState } from 'react';\nimport { react2angular } from 'react2angular';\n\nimport type { IStage, IStageConfigProps } from '@spinnaker/core';\nimport { CheckboxInput, ReactSelectInput, StageConfigField, TextInput, withErrorBoundary } from '@spinnaker/core';\n\nexport interface ICloudFormationChangeSetInfoProps {\n stage: IStage[];\n stageconfig: IStageConfigProps;\n}\n\nexport const CloudFormationChangeSetInfo = (props: ICloudFormationChangeSetInfoProps) => {\n const { stage, stageconfig } = props;\n const [changeSetName, setChangeSetName] = useState(\n (stage as any).changeSetName ? (stage as any).changeSetName : \"ChangeSet-${execution['id']}\",\n );\n const [executeChangeSet, setExecuteChangeSet] = useState((stage as any).executeChangeSet);\n const [actionOnReplacement, setActionOnReplacement] = useState((stage as any).actionOnReplacement);\n\n const modifyChangeSetName = (value: string) => {\n setChangeSetName(value);\n stageconfig.updateStageField({ changeSetName: value });\n };\n\n const toggleExecuteChangeSet = (checked: boolean) => {\n setExecuteChangeSet(checked);\n stageconfig.updateStageField({ executeChangeSet: checked });\n };\n\n const modifyActionOnReplacement = (value: string) => {\n setActionOnReplacement(value);\n stageconfig.updateStageField({ actionOnReplacement: value });\n };\n\n const actionOnReplacementOptions = [\n { value: 'ask', label: 'ask' },\n { value: 'skip', label: 'skip it' },\n { value: 'execute', label: 'execute it' },\n { value: 'fail', label: 'fail stage' },\n ];\n\n return (\n <div>\n <hr />\n <h4>ChangeSet Configuration</h4>\n <StageConfigField label=\"ChangeSet Name\">\n <TextInput\n className=\"form-control\"\n type=\"text\"\n value={changeSetName}\n onChange={(e) => modifyChangeSetName(e.target.value)}\n />\n </StageConfigField>\n <StageConfigField label=\"Execute ChangeSet\">\n <CheckboxInput checked={executeChangeSet} onChange={(e) => toggleExecuteChangeSet(e.target.checked)} />\n </StageConfigField>\n {executeChangeSet && (\n <StageConfigField label=\"If ChangeSet contains a replacement\" help-key=\"aws.cloudformation.changeSet.options\">\n <ReactSelectInput\n clearable={false}\n value={actionOnReplacement}\n options={actionOnReplacementOptions}\n onChange={(e) => modifyActionOnReplacement(e.target.value)}\n />\n </StageConfigField>\n )}\n </div>\n );\n};\n\nexport const CLOUD_FORMATION_CHANGE_SET_INFO = 'spinnaker.amazon.cloudformation.changetset.info.component';\n\nmodule(CLOUD_FORMATION_CHANGE_SET_INFO, []).component(\n 'cloudFormationChangeSetInfo',\n react2angular(withErrorBoundary(CloudFormationChangeSetInfo, 'cloudFormationChangeSetInfo'), [\n 'stage',\n 'stageconfig',\n ]),\n);\n","import type { IComponentOptions, IController, IScope } from 'angular';\nimport { module } from 'angular';\nimport { yamlDocumentsToString } from '@spinnaker/core';\n\nclass CloudFormationTemplateController implements IController {\n public command: any;\n public templateBody: any;\n public rawTemplateBody: string;\n\n public static $inject = ['$scope'];\n constructor(private $scope: IScope) {\n 'ngInject';\n }\n\n public $onInit = (): void => {\n if (typeof this.command.templateBody === 'string') {\n this.rawTemplateBody = this.command.templateBody;\n } else {\n this.rawTemplateBody = yamlDocumentsToString(this.command.templateBody);\n }\n };\n\n public handleChange = (rawTemplateBody: string, templateBody: any): void => {\n this.command.templateBody = templateBody || rawTemplateBody;\n this.templateBody = templateBody || rawTemplateBody;\n this.rawTemplateBody = rawTemplateBody;\n this.$scope.$applyAsync();\n };\n}\n\nconst cloudFormationTemplateEntryComponent: IComponentOptions = {\n bindings: { command: '<', templateBody: '<' },\n controller: CloudFormationTemplateController,\n controllerAs: 'ctrl',\n template: `\n <yaml-editor\n value=\"ctrl.rawTemplateBody\"\n on-change=\"ctrl.handleChange\"\n ></yaml-editor>`,\n};\n\nexport const CLOUDFORMATION_TEMPLATE_ENTRY = 'spinnaker.amazon.cloudformation.entry.component';\nmodule(CLOUDFORMATION_TEMPLATE_ENTRY, []).component(\n 'cloudFormationTemplateEntry',\n cloudFormationTemplateEntryComponent,\n);\n","import * as React from 'react';\n\nimport type { IExecutionDetailsSectionProps } from '@spinnaker/core';\nimport { ExecutionDetailsSection, ExecutionStepDetails, StageFailureMessage } from '@spinnaker/core';\n\nexport class DeployExecutionDetails extends React.Component<IExecutionDetailsSectionProps> {\n public static title = 'Task Status';\n\n constructor(props: IExecutionDetailsSectionProps) {\n super(props);\n }\n\n public render() {\n const { stage, current, name } = this.props;\n\n return (\n <ExecutionDetailsSection name={name} current={current}>\n <ExecutionStepDetails item={stage} />\n <StageFailureMessage stage={stage} message={stage.failureMessage} />\n </ExecutionDetailsSection>\n );\n }\n}\n","import type { IController, IScope } from 'angular';\nimport { extend } from 'lodash';\nimport { $q } from 'ngimport';\n\nimport type { IAccountDetails, IArtifact, IExpectedArtifact } from '@spinnaker/core';\nimport { AccountService, ExpectedArtifactSelectorViewController, NgGenericArtifactDelegate } from '@spinnaker/core';\n\nexport class DeployCloudFormationStackConfigController implements IController {\n public state = {\n loaded: false,\n };\n\n public textSource = 'text';\n public artifactSource = 'artifact';\n public sources = [this.textSource, this.artifactSource];\n public showClusterSelect = false;\n public accounts: IAccountDetails[];\n\n public cloudFormationStackArtifactDelegate: NgGenericArtifactDelegate;\n public cloudFormationStackArtifactController: ExpectedArtifactSelectorViewController;\n\n public static $inject = ['$scope'];\n constructor(private $scope: IScope) {\n const dataToFetch = {\n accounts: AccountService.getAllAccountDetailsForProvider('aws'),\n artifactAccounts: AccountService.getArtifactAccounts(),\n };\n $q.all(dataToFetch).then((backingData) => {\n const { accounts, artifactAccounts } = backingData;\n this.accounts = accounts;\n this.state.loaded = true;\n this.cloudFormationStackArtifactDelegate.setAccounts(artifactAccounts);\n this.cloudFormationStackArtifactController.updateAccounts(\n this.cloudFormationStackArtifactDelegate.getSelectedExpectedArtifact(),\n );\n });\n this.cloudFormationStackArtifactDelegate = new NgGenericArtifactDelegate($scope, 'stack');\n this.cloudFormationStackArtifactController = new ExpectedArtifactSelectorViewController(\n this.cloudFormationStackArtifactDelegate,\n );\n }\n\n public canShowAccountSelect() {\n return (\n this.$scope.stage.source === this.artifactSource &&\n !this.$scope.showCreateArtifactForm &&\n this.cloudFormationStackArtifactController.accountsForArtifact.length > 1\n );\n }\n\n public toggleChangeSet() {\n this.$scope.stage.isChangeSet = !this.$scope.stage.isChangeSet;\n }\n\n public onStackArtifactEdited = (artifact: IArtifact) => {\n this.$scope.$applyAsync(() => {\n this.$scope.stage.stackArtifactId = null;\n this.$scope.stage.stackArtifact = artifact;\n });\n };\n\n public onStackArtifactSelected = (expectedArtifact: IExpectedArtifact) => {\n this.onChangeStackArtifactId(expectedArtifact.id);\n };\n\n public onChangeStackArtifactId = (artifactId: string) => {\n this.$scope.$applyAsync(() => {\n this.$scope.stage.stackArtifactId = artifactId;\n this.$scope.stage.stackArtifact = null;\n });\n };\n\n public onStackArtifactAccountSelected = (stackArtifactAccount: string) => {\n this.$scope.$applyAsync(() => {\n this.$scope.stage.stackArtifactAccount = stackArtifactAccount;\n });\n };\n\n public updatePipeline = (changes: any) => {\n this.$scope.$applyAsync(() => {\n extend(this.$scope.pipeline, changes);\n });\n };\n}\n","import React, { useState } from 'react';\n\nimport type { Application, IExecution, IExecutionStage } from '@spinnaker/core';\nimport { Spinner } from '@spinnaker/core';\nimport { AwsReactInjector } from '../../../reactShims';\n\nexport interface IEvaluateCloudFormationChangeSetExecutionApprovalProps {\n execution: IExecution;\n stage: IExecutionStage;\n application: Application;\n}\n\nexport interface IEvaluateCloudFormationChangeSetExecutionApprovalState {\n submitting: boolean;\n judgmentDecision: string;\n error: boolean;\n}\n\nexport const EvaluateCloudFormationChangeSetExecutionApproval = (\n props: IEvaluateCloudFormationChangeSetExecutionApprovalProps,\n) => {\n const { execution, stage, application } = props;\n const [submitting, setSubmitting] = useState(false);\n const [judgmentDecision, setJudgmentDecision] = useState('');\n const [error, setError] = useState(false);\n\n const provideJudgment = (judgmentDecision: string) => {\n setSubmitting(true);\n setJudgmentDecision(judgmentDecision);\n setError(false);\n AwsReactInjector.evaluateCloudFormationChangeSetExecutionService.evaluateExecution(\n application,\n execution,\n stage,\n judgmentDecision,\n );\n };\n\n const isSubmitting = (decision: string): boolean => {\n return stage.judgmentStatus === decision || (submitting && judgmentDecision === decision);\n };\n\n const handleContinueClick = (): void => {\n provideJudgment('skip');\n };\n\n const handleFailClick = (): void => {\n provideJudgment('fail');\n };\n\n const handleExecuteClick = (): void => {\n provideJudgment('execute');\n };\n\n return (\n <div>\n <div>\n <p>\n This ChangeSet contains a replacement, which means there will be <b>potential data loss</b> when executed.\n </p>\n <p>How do you want to proceed?</p>\n <div className=\"action-buttons\">\n <button className=\"btn btn-danger\" onClick={handleExecuteClick} disabled={submitting}>\n {isSubmitting('Execute') && <Spinner mode=\"circular\" />}\n {stage.context.stopButtonLabel || 'Execute'}\n </button>\n <button className=\"btn btn-primary\" disabled={submitting} onClick={handleContinueClick}>\n {isSubmitting('Skip') && <Spinner mode=\"circular\" />}\n {stage.context.skipButtonLabel || 'Skip'}\n </button>\n <button className=\"btn btn-primary\" disabled={submitting} onClick={handleFailClick}>\n {isSubmitting('Fail') && <Spinner mode=\"circular\" />}\n {stage.context.FailButtonLabel || 'Fail'}\n </button>\n </div>\n </div>\n {error && <div className=\"error-message\">There was an error recording your decision. Please try again.</div>}\n </div>\n );\n};\n","import * as React from 'react';\n\nimport type { IExecutionDetailsSectionProps } from '@spinnaker/core';\nimport { ExecutionDetailsSection } from '@spinnaker/core';\nimport { EvaluateCloudFormationChangeSetExecutionApproval } from './evaluateCloudFormationChangeSetExecutionApproval';\n\nexport class EvaluateCloudFormationChangeSetExecutionDetails extends React.Component<IExecutionDetailsSectionProps> {\n public static title = 'Change Set Execution';\n\n constructor(props: IExecutionDetailsSectionProps) {\n super(props);\n }\n\n public render() {\n const { application, execution, stage, current, name } = this.props;\n const hasReplacement = stage.context.changeSetContainsReplacement;\n const askAction = hasReplacement && stage.isRunning && stage.context.actionOnReplacement === 'ask';\n const isChangeSet = stage.context.isChangeSet;\n\n return (\n <ExecutionDetailsSection name={name} current={current}>\n {askAction ? (\n <EvaluateCloudFormationChangeSetExecutionApproval\n key={stage.refId}\n application={application}\n execution={execution}\n stage={stage}\n />\n ) : (\n <div>\n {isChangeSet ? (\n <div>\n <dl className=\"no-margin\">\n <dt>ChangeSet Name</dt>\n <dd>{stage.context.changeSetName}</dd>\n <dt>Replacement</dt>\n <dd>{String(hasReplacement)}</dd>\n {stage.context.changeSetExecutionChoice && (\n <div>\n <dt>Judgment</dt>\n <dd>{stage.context.changeSetExecutionChoice}</dd>\n <dt>Judged By</dt>\n <dd>{stage.context.lastModifiedBy}</dd>\n </div>\n )}\n </dl>\n </div>\n ) : (\n <div>No changeSets found</div>\n )}\n </div>\n )}\n </ExecutionDetailsSection>\n );\n }\n}\n","import * as React from 'react';\nimport { OverlayTrigger, Tooltip } from 'react-bootstrap';\n\nimport type { IExecution, IExecutionStageSummary } from '@spinnaker/core';\nimport type { Application } from '@spinnaker/core';\nimport { ExecutionBarLabel, HoverablePopover } from '@spinnaker/core';\n\nimport { EvaluateCloudFormationChangeSetExecutionApproval } from './evaluateCloudFormationChangeSetExecutionApproval';\n\nexport interface IEvaluateCloudFormationChangeSetExecutionProps {\n stage: IExecutionStageSummary;\n execution: IExecution;\n application: Application;\n executionMarker: boolean;\n}\n\nexport class EvaluateCloudFormationChangeSetExecutionLabel extends React.Component<\n IEvaluateCloudFormationChangeSetExecutionProps\n> {\n public render() {\n if (!this.props.executionMarker) {\n return <ExecutionBarLabel {...this.props} />;\n }\n\n const { stage } = this.props;\n if (\n stage.isRunning &&\n stage.stages[0].context.changeSetContainsReplacement &&\n stage.stages[0].context.actionOnReplacement === 'ask'\n ) {\n const template = (\n <div>\n <div>\n <b>{stage.name}</b>\n </div>\n\n <EvaluateCloudFormationChangeSetExecutionApproval\n stage={stage.masterStage}\n application={this.props.application}\n execution={this.props.execution}\n />\n </div>\n );\n return <HoverablePopover template={template}>{this.props.children}</HoverablePopover>;\n }\n const tooltip = <Tooltip id={stage.id}>{stage.name}</Tooltip>;\n return (\n <OverlayTrigger placement=\"top\" overlay={tooltip}>\n <span>{this.props.children}</span>\n </OverlayTrigger>\n );\n }\n}\n","import * as React from 'react';\nimport type { IExecutionMarkerIconProps } from '@spinnaker/core';\n\nexport class EvaluateCloudFormationChangeSetExecutionMarkerIcon extends React.Component<IExecutionMarkerIconProps> {\n constructor(props: IExecutionMarkerIconProps) {\n super(props);\n }\n\n public render() {\n if (\n this.props.stage.isRunning &&\n this.props.stage.stages[0].context.changeSetContainsReplacement &&\n this.props.stage.stages[0].context.actionOnReplacement === 'ask'\n ) {\n this.props.stage.requiresAttention = true;\n return <span className=\"fa fa-child\" />;\n }\n return null;\n }\n}\n","import { module } from 'angular';\n\nimport type { IStage } from '@spinnaker/core';\nimport { ArtifactReferenceService, ExpectedArtifactService, Registry } from '@spinnaker/core';\n\nimport { DeployExecutionDetails } from './deployCloudFormationExecutionDetails';\nimport { DeployCloudFormationStackConfigController } from './deployCloudFormationStackConfig.controller';\nimport { EvaluateCloudFormationChangeSetExecutionDetails } from './evaluateCloudFormationChangeSetExecutionDetails';\nimport { EvaluateCloudFormationChangeSetExecutionLabel } from './evaluateCloudFormationChangeSetExecutionLabel';\nimport { EvaluateCloudFormationChangeSetExecutionMarkerIcon } from './evaluateCloudFormationChangeSetExecutionMarkerIcon';\n\nexport const DEPLOY_CLOUDFORMATION_STACK_STAGE = 'spinnaker.amazon.pipeline.stages.deployCloudFormationStage';\n\nmodule(DEPLOY_CLOUDFORMATION_STACK_STAGE, [])\n .config(() => {\n Registry.pipeline.registerStage({\n label: 'Deploy (CloudFormation Stack)',\n description: 'Deploy a CloudFormation Stack',\n key: 'deployCloudFormation',\n cloudProvider: 'aws',\n templateUrl: require('./deployCloudFormationStackConfig.html'),\n controller: 'DeployCloudFormationStackConfigController',\n controllerAs: 'ctrl',\n useCustomTooltip: true,\n executionDetailsSections: [DeployExecutionDetails, EvaluateCloudFormationChangeSetExecutionDetails],\n executionLabelComponent: EvaluateCloudFormationChangeSetExecutionLabel,\n producesArtifacts: true,\n supportsCustomTimeout: true,\n validators: [],\n markerIcon: EvaluateCloudFormationChangeSetExecutionMarkerIcon,\n accountExtractor: (stage: IStage): string[] => (stage.account ? [stage.account] : []),\n configAccountExtractor: (stage: any): string[] => (stage.account ? [stage.account] : []),\n artifactExtractor: ExpectedArtifactService.accumulateArtifacts(['stackArtifactId', 'requiredArtifactIds']),\n artifactRemover: ArtifactReferenceService.removeArtifactFromFields(['stackArtifactId', 'requiredArtifactIds']),\n });\n })\n .controller('DeployCloudFormationStackConfigController', DeployCloudFormationStackConfigController);\n","import { module } from 'angular';\nimport type { ExecutionService } from '@spinnaker/core';\nimport { EXECUTION_SERVICE } from '@spinnaker/core';\nimport type { IExecution, IExecutionStage } from '@spinnaker/core';\nimport type { Application } from '@spinnaker/core';\n\nexport class EvaluateCloudFormationChangeSetExecutionService {\n public static $inject = ['executionService'];\n constructor(private executionService: ExecutionService) {}\n\n public evaluateExecution(\n application: Application,\n execution: IExecution,\n stage: IExecutionStage,\n changeSetExecutionChoice: string,\n ): PromiseLike<void> {\n const matcher = (result: IExecution) => {\n const match = result.stages.find((test: { id: any }) => test.id === stage.id);\n return match && match.status !== 'RUNNING';\n };\n return this.executionService\n .patchExecution(execution.id, stage.id, { changeSetExecutionChoice })\n .then(() => this.executionService.waitUntilExecutionMatches(execution.id, matcher))\n .then((updated: any) => this.executionService.updateExecution(application, updated));\n }\n}\n\nexport const AWS_EVALUATE_CLOUD_FORMATION_CHANGE_SET_EXECUTION_SERVICE =\n 'spinnaker.amazon.deployCloudFormation.service';\nmodule(AWS_EVALUATE_CLOUD_FORMATION_CHANGE_SET_EXECUTION_SERVICE, [EXECUTION_SERVICE]).service(\n 'evaluateCloudFormationChangeSetExecutionService',\n EvaluateCloudFormationChangeSetExecutionService,\n);\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { isNil, isString } from 'lodash';\n\nfunction isEmptyString(val: any) {\n if (isString(val)) {\n if (isNil(val) || val === '') {\n return true;\n }\n }\n return false;\n}\n\nexport function upsertDefaults(initialValues: any, defaultValues: any) {\n Object.entries(defaultValues).forEach(([key, value]) => {\n if (!initialValues[key] && !isEmptyString(value)) {\n initialValues[key] = value;\n }\n });\n return initialValues;\n}\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport React from 'react';\n\nimport type { Option } from 'react-select';\n\nimport type {\n IAccount,\n IAccountDetails,\n IFormikStageConfigInjectedProps,\n IFormInputProps,\n IRegion,\n} from '@spinnaker/core';\nimport {\n AccountService,\n CheckboxInput,\n FormikFormField,\n HelpField,\n NameUtils,\n ReactSelectInput,\n TetheredCreatable,\n TextInput,\n useData,\n} from '@spinnaker/core';\n\nimport { availableRuntimes, lambdaHelpFields } from './function.constants';\n\nexport function BasicSettingsForm(props: IFormikStageConfigInjectedProps) {\n const { values } = props.formik;\n\n const setFunctionName = () => {\n const ns = NameUtils.getClusterName(props.application.name, values.stackName, values.detailName);\n const fn = values.functionUid;\n\n props.formik.setFieldValue('functionName', `${ns}-${fn}`);\n };\n\n const onAliasChange = (o: Option, field: any) => {\n props.formik.setFieldValue(\n field,\n o.map((layer: any) => layer.value),\n );\n };\n\n const onRegionChange = (fieldValue: string) => {\n props.formik.setFieldValue('enableLambdaAtEdge', false);\n props.formik.setFieldValue('region', fieldValue);\n };\n\n const onFunctionUidChange = (fieldValue: string) => {\n props.formik.setFieldValue('functionUid', fieldValue);\n setFunctionName();\n };\n\n const onStackNameChange = (fieldValue: string) => {\n props.formik.setFieldValue('stackName', fieldValue);\n setFunctionName();\n };\n\n const onDetailChange = (fieldValue: string) => {\n props.formik.setFieldValue('detailName', fieldValue);\n setFunctionName();\n };\n\n const { result: fetchAccountsResult, status: fetchAccountsStatus } = useData(\n () => AccountService.listAccounts('aws'),\n [],\n [],\n );\n\n return (\n <div>\n <FormikFormField\n label=\"Account\"\n name=\"account\"\n input={(inputProps: IFormInputProps) => (\n <ReactSelectInput\n {...inputProps}\n clearable={false}\n isLoading={fetchAccountsStatus === 'PENDING'}\n stringOptions={fetchAccountsResult.map((acc: IAccount) => acc.name)}\n />\n )}\n />\n <FormikFormField\n label=\"Region\"\n name=\"region\"\n onChange={onRegionChange}\n input={(inputProps: IFormInputProps) => (\n <ReactSelectInput\n {...inputProps}\n clearable={false}\n isLoading={fetchAccountsStatus === 'PENDING'}\n stringOptions={fetchAccountsResult\n .filter((acc: IAccountDetails) => acc.name === values.account)\n .flatMap((acc: IAccountDetails) => acc.regions)\n .map((reg: IRegion) => reg.name)}\n />\n )}\n />\n\n <FormikFormField\n name=\"functionUid\"\n label=\"Function Name\"\n onChange={onFunctionUidChange}\n help={<HelpField id=\"aws.function.name\" />}\n input={(props) => <TextInput {...props} />}\n />\n\n <FormikFormField\n name=\"stackName\"\n label=\"Stack\"\n help={<HelpField content={lambdaHelpFields.stack} />}\n onChange={onStackNameChange}\n input={(props) => <TextInput {...props} />}\n />\n <FormikFormField\n name=\"detailName\"\n label=\"Detail\"\n help={<HelpField content={lambdaHelpFields.detail} />}\n onChange={onDetailChange}\n input={(props) => <TextInput {...props} />}\n />\n <FormikFormField\n name=\"aliasNames\"\n label=\"Alias Name\"\n help={\n <HelpField content=\"AWS Lambda aliases are like a pointer to a specific function version. Users can access the function version using the alias Amazon Resource Name (ARN). Input the alias name and select `Create option ALIAS-INPUT` to add the alias.\" />\n }\n input={(inputProps: IFormInputProps) => (\n <TetheredCreatable\n {...inputProps}\n multi={true}\n clearable={false}\n placeholder={'Input Alias Name...'}\n onChange={(e: Option) => {\n onAliasChange(e, 'aliases');\n }}\n value={values.aliases ? values.aliases.map((alias: string) => ({ value: alias, label: alias })) : []}\n />\n )}\n />\n <FormikFormField\n name=\"runtime\"\n label=\"Runtime\"\n help={<HelpField id=\"aws.function.runtime\" />}\n input={(props) => <ReactSelectInput {...props} stringOptions={availableRuntimes} clearable={true} />}\n />\n <FormikFormField\n name=\"s3bucket\"\n label=\"S3 Bucket\"\n help={<HelpField id=\"aws.function.s3bucket\" />}\n input={(props) => <TextInput {...props} placeholder=\"S3 bucket name\" />}\n />\n <FormikFormField\n name=\"s3key\"\n label=\"S3 Key\"\n help={<HelpField id=\"aws.function.s3key\" />}\n input={(props) => <TextInput {...props} placeholder=\"object.zip\" />}\n />\n <FormikFormField\n name=\"handler\"\n label=\"Handler\"\n help={<HelpField id=\"aws.function.handler\" />}\n input={(props) => <TextInput {...props} placeholder=\"filename.method\" />}\n />\n <FormikFormField\n name=\"publish\"\n label=\"Publish\"\n help={<HelpField id=\"aws.function.publish\" />}\n input={(props) => <CheckboxInput {...props} />}\n />\n </div>\n );\n}\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { uniqBy } from 'lodash';\nimport React from 'react';\nimport type { Option } from 'react-select';\n\nimport type { IFormikStageConfigInjectedProps, IFormInputProps, ISecurityGroup, ISubnet, IVpc } from '@spinnaker/core';\nimport {\n FormikFormField,\n NetworkReader,\n ReactInjector,\n ReactSelectInput,\n SubnetReader,\n TetheredSelect,\n useData,\n} from '@spinnaker/core';\n\nconst toSubnetOption = (value: ISubnet): Option<string> => {\n return { value: value.id, label: value.id };\n};\n\nexport function NetworkForm(props: IFormikStageConfigInjectedProps) {\n const { values } = props.formik;\n\n const onChangeVpc = (vpcs: any) => {\n props.formik.setFieldValue('securityGroupIds', null);\n props.formik.setFieldValue('subnetIds', null);\n props.formik.setFieldValue('vpcId', vpcs.target.value);\n };\n\n const onChangeSubnet = (subnets: any) => {\n const subnetsSelected = subnets.map((o: any) => o.value);\n props.formik.setFieldValue('subnetIds', subnetsSelected);\n };\n\n const onChangeSG = (sgs: any) => {\n const sgsSelected = sgs.map((o: any) => o.value);\n props.formik.setFieldValue('securityGroupIds', sgsSelected);\n };\n\n const { result: fetchVpcsResult, status: fetchVpcsStatus } = useData(\n () => NetworkReader.listNetworksByProvider('aws'),\n [],\n [],\n );\n\n const { result: fetchSubnetsResult } = useData(() => SubnetReader.listSubnetsByProvider('aws'), [], []);\n\n const { result: fetchSGsResult } = useData(\n () => ReactInjector.securityGroupReader.getAllSecurityGroups(),\n undefined,\n [],\n );\n\n const availableVpcs =\n values.account && values.region && fetchVpcsStatus !== 'PENDING'\n ? fetchVpcsResult\n .filter((v: IVpc) => v.deprecated === false)\n .filter((v: IVpc) => v.account === values.account)\n .filter((v: IVpc) => v.region === values.region)\n .map((v: IVpc) => v.id)\n : [];\n\n const dedupedSubnets = uniqBy(\n fetchSubnetsResult.filter((s: ISubnet) => s.vpcId === values.vpcId),\n 'id',\n );\n\n const availableSGs =\n values.account && values.region && values.vpcId\n ? fetchSGsResult[values.account]['aws'][values.region]\n .filter((sg: ISecurityGroup) => sg.vpcId === values.vpcId)\n .map((sg: ISecurityGroup) => ({ value: sg.id, label: sg.name }))\n : [];\n\n return (\n <div>\n <FormikFormField\n name=\"vpcId\"\n label=\"VPC Id\"\n input={(inputProps: IFormInputProps) => (\n <ReactSelectInput\n {...inputProps}\n onChange={onChangeVpc}\n isLoading={fetchVpcsStatus === 'PENDING'}\n stringOptions={availableVpcs}\n clearable={true}\n />\n )}\n />\n <div className=\"form-group\">\n <div className=\"col-md-4 sm-label-right\">\n <b>Subnets </b>\n </div>\n {dedupedSubnets.length === 0 ? (\n <div className=\"form-control-static\">No subnets found in the selected account/region/VPC </div>\n ) : (\n <div className=\"col-md-6\">\n <TetheredSelect\n multi={true}\n options={dedupedSubnets.map((s: ISubnet) => toSubnetOption(s))}\n value={values.subnetIds}\n onChange={onChangeSubnet}\n />\n </div>\n )}\n </div>\n <div className=\"form-group\">\n <div className=\"col-md-4 sm-label-right\">\n <b>Security Groups </b>\n </div>\n {availableSGs.length === 0 ? (\n <div className=\"form-control-static\">No security groups found in the selected account/region/VPC </div>\n ) : (\n <div className=\"col-md-6\">\n <TetheredSelect multi={true} options={availableSGs} value={values.securityGroupIds} onChange={onChangeSG} />\n </div>\n )}\n </div>\n </div>\n );\n}\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React from 'react';\n\nimport { FormikFormField, TextInput } from '@spinnaker/core';\n\nexport function ExecutionRoleForm() {\n return (\n <FormikFormField\n name=\"role\"\n label=\"Role ARN\"\n input={(props) => <TextInput {...props} placeholder=\"Enter role ARN\" name=\"role\" />}\n />\n );\n}\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport React from 'react';\n\nimport type { Option } from 'react-select';\n\nimport type { IFormikStageConfigInjectedProps, IFormInputProps } from '@spinnaker/core';\nimport { FormikFormField, HelpField, NumberInput, TetheredCreatable } from '@spinnaker/core';\n\nexport function TriggerEventsForm(props: IFormikStageConfigInjectedProps) {\n const { values } = props.formik;\n\n const onChange = (o: Option, field: any) => {\n props.formik.setFieldValue(\n field,\n o.map((arn: any) => arn.value),\n );\n };\n\n return (\n <div>\n <FormikFormField\n name=\"triggerArns\"\n label=\"Event ARNs\"\n help={\n <HelpField content=\"The resource ARNs for Lambda event trigger sources. Triggers created here will only be applied to the higher level function, and will NOT be applied to function aliases. Input the entire ARN and select `Create option TRIGGER-ARN-INPUT` to add the ARN.\" />\n }\n input={(inputProps: IFormInputProps) => (\n <TetheredCreatable\n {...inputProps}\n multi={true}\n placeholder={'Input ARN...'}\n onChange={(e: Option) => {\n onChange(e, 'triggerArns');\n }}\n value={values.triggerArns ? values.triggerArns.map((arn: string) => ({ value: arn, label: arn })) : []}\n />\n )}\n />\n\n <FormikFormField\n name=\"batchsize\"\n label=\"Event Batch Size\"\n input={(inputProps: IFormInputProps) => <NumberInput {...inputProps} min={1} max={1000} />}\n />\n </div>\n );\n}\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport React from 'react';\n\nimport type { IFormikStageConfigInjectedProps } from '@spinnaker/core';\nimport { CheckboxInput, FormikFormField, HelpField } from '@spinnaker/core';\n\nconst helpFieldContent = {\n lambdaAtEdge:\n 'Validate AWS Lambda function configuration against Lambda@Edge requirements. This will not enable Lambda@Edge on this function. ',\n};\nexport function LambdaAtEdgeForm(props: IFormikStageConfigInjectedProps) {\n const { values } = props.formik;\n if (values.region !== 'us-east-1') {\n return <div className=\"horizontal center\">Lambda@Edge is only available in region us-east-1.</div>;\n }\n return (\n <div>\n <FormikFormField\n name=\"enableLambdaAtEdge\"\n label=\"Enable Lambda@Edge Validation\"\n help={<HelpField content={helpFieldContent.lambdaAtEdge} />}\n input={(props) => <CheckboxInput {...props} />}\n />\n </div>\n );\n}\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport classNames from 'classnames';\nimport React from 'react';\nimport type { Option } from 'react-select';\n\nimport type { IFormikStageConfigInjectedProps, IFormInputProps } from '@spinnaker/core';\nimport {\n FormikFormField,\n HelpField,\n MapEditorInput,\n NumberInput,\n ReactSelectInput,\n TetheredCreatable,\n TextInput,\n} from '@spinnaker/core';\n\nimport { BasicSettingsForm, ExecutionRoleForm, LambdaAtEdgeForm, NetworkForm, TriggerEventsForm } from './index';\n\nexport function AwsLambdaFunctionStageForm(props: IFormikStageConfigInjectedProps) {\n const { values, errors } = props.formik;\n\n const className = classNames({\n well: true,\n 'alert-danger': !!errors.functionName,\n 'alert-info': !errors.functionName,\n });\n\n const onLayerChange = (o: Option, field: any) => {\n props.formik.setFieldValue(\n field,\n o.map((layer: any) => layer.value),\n );\n };\n\n return (\n <div className=\"form-horizontal\">\n <div className={className}>\n <strong>Your function will be named: </strong>\n <HelpField id=\"aws.function.name\" />\n <span>{values.functionName ? values.functionName : props.application.name}</span>\n <FormikFormField name=\"functionName\" input={() => null} />\n </div>\n <h4>Basic Settings</h4>\n <BasicSettingsForm {...props} />\n <h4> Execution Role </h4>\n <ExecutionRoleForm />\n <h4> Environment </h4>\n {values.enableLambdaAtEdge !== true ? (\n <>\n <FormikFormField\n name=\"envVariables\"\n label=\"Env Variables\"\n input={(props) => <MapEditorInput {...props} allowEmptyValues={true} addButtonLabel=\"Add\" />}\n />\n <FormikFormField\n name=\"encryptionKMSKeyArn\"\n label=\"Key ARN\"\n help={<HelpField id=\"aws.function.kmsKeyArn\" />}\n input={(props) => <TextInput {...props} />}\n />\n </>\n ) : (\n <div className=\"horizontal center\">Environment variables not available with Lambda@Edge functions.</div>\n )}\n <h4> Tags </h4>\n <FormikFormField\n name=\"tags\"\n input={(props) => <MapEditorInput {...props} allowEmptyValues={false} addButtonLabel=\"Add\" />}\n />\n <h4> Settings </h4>\n <FormikFormField name=\"description\" label=\"Description\" input={(props) => <TextInput {...props} />} />\n <FormikFormField\n name=\"layers\"\n label=\"Layer ARNs\"\n help={\n <HelpField content=\"The resource ARNs for Lambda layer. Input the entire ARN and select `Create option TRIGGER-ARN-INPUT` to add the ARN.\" />\n }\n input={(inputProps: IFormInputProps) => (\n <TetheredCreatable\n {...inputProps}\n multi={true}\n placeholder={'Layer ARN...'}\n onChange={(e: Option) => {\n onLayerChange(e, 'layers');\n }}\n value={values.layers ? values.layers.map((layer: string) => ({ value: layer, label: layer })) : []}\n />\n )}\n />\n <FormikFormField\n name=\"reservedConcurrentExecutions\"\n label=\"Reserved Concurrency\"\n help={\n <HelpField content=\"The total number of current executions of your Lambda function that can be instantiated at any time.\" />\n }\n input={(props) => <NumberInput {...props} min={0} max={3000} />}\n />\n <FormikFormField\n name=\"memorySize\"\n label=\"Memory (MB)\"\n help={<HelpField id=\"aws.functionBasicSettings.memorySize\" />}\n input={(props) => <NumberInput {...props} min={128} max={values.enableLambdaAtEdge === true ? 128 : 3008} />}\n />\n <FormikFormField\n name=\"timeout\"\n label=\"Timeout (seconds)\"\n help={<HelpField id=\"aws.functionBasicSettings.timeout\" />}\n input={(props) => <NumberInput {...props} min={1} max={values.enableLambdaAtEdge === true ? 5 : 900} />}\n />\n <LambdaAtEdgeForm {...props} />\n <h4> Network </h4>\n {values.enableLambdaAtEdge !== true ? (\n <NetworkForm {...props} />\n ) : (\n <div className=\"horizontal center\">VPC configuration not available with Lambda@Edge functions.</div>\n )}\n <h4> Event Triggers </h4>\n <TriggerEventsForm {...props} />\n <h4> Debugging and Error Handling </h4>\n Dead Letter Config\n <FormikFormField\n name=\"deadLetterConfig.targetArn\"\n label=\"Target ARN\"\n help={<HelpField id=\"aws.function.deadletterqueue\" />}\n input={(props) => <TextInput {...props} />}\n />\n X-Ray Tracing\n <FormikFormField\n name=\"tracingConfig.mode\"\n label=\"Mode\"\n help={<HelpField id=\"aws.function.tracingConfig.mode\" />}\n input={(props) => <ReactSelectInput {...props} stringOptions={['Active', 'PassThrough']} clearable={true} />}\n />\n </div>\n );\n}\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport type { IAmazonFunctionUpsertCommand } from '../../../../domain';\n\nexport function constructNewAwsFunctionTemplate(): IAmazonFunctionUpsertCommand {\n const defaultCredentials = '';\n const defaultRegion = '';\n return {\n role: '',\n runtime: '',\n s3key: '',\n s3bucket: '',\n handler: '',\n functionName: '',\n publish: false,\n tags: {},\n memorySize: 128,\n description: '',\n\n credentials: defaultCredentials,\n cloudProvider: 'aws',\n region: defaultRegion,\n envVariables: {},\n\n tracingConfig: {\n mode: 'PassThrough',\n },\n kmskeyArn: '',\n vpcId: '',\n subnetIds: [],\n securityGroupIds: [],\n timeout: 3,\n deadLetterConfig: {\n targetArn: '',\n },\n operation: '',\n targetGroups: '',\n };\n}\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React from 'react';\n\nimport type { IFormikStageConfigInjectedProps, IStage, IStageConfigProps } from '@spinnaker/core';\nimport { FormikStageConfig, FormValidator } from '@spinnaker/core';\n\nimport { upsertDefaults } from './UpsertDefaults';\nimport {\n awsArnValidator,\n iamRoleValidator,\n s3BucketNameValidator,\n simpleStringValidator,\n} from '../../../../aws.validators';\nimport { AwsLambdaFunctionStageForm } from '../components/AwsLambdaFunctionStageForm';\nimport { constructNewAwsFunctionTemplate } from './function.defaults';\n\nexport function LambdaDeploymentConfig(props: IStageConfigProps) {\n const defaultFunction = constructNewAwsFunctionTemplate();\n\n return (\n <div className=\"LambdaDeploymentConfig\">\n <FormikStageConfig\n {...props}\n stage={upsertDefaults(props.stage, defaultFunction)}\n validate={validate}\n onChange={props.updateStage}\n render={(props: IFormikStageConfigInjectedProps) => <AwsLambdaFunctionStageForm {...props} />}\n />\n </div>\n );\n}\n\nexport function validate(stageConfig: IStage) {\n const validator = new FormValidator(stageConfig);\n\n validator.field('runtime', 'Runtime').required();\n validator.field('s3key', 'S3 Object Key').required();\n validator.field('handler', 'Handler').required();\n validator.field('functionUid', 'Function Name').required();\n\n validator.field('stackName', 'Stack Name').optional().withValidators(simpleStringValidator);\n\n validator.field('detailName', 'Detail Name').optional().withValidators(simpleStringValidator);\n\n validator.field('s3bucket', 'S3 Bucket Name').required().withValidators(s3BucketNameValidator);\n\n validator.field('role', 'Role ARN').required().withValidators(iamRoleValidator);\n\n validator\n .field('triggerArns', 'Trigger ARNs')\n .optional()\n .withValidators((value: any, _: string) => {\n const tmp: any[] = value.map((arn: string) => {\n return awsArnValidator(arn, arn);\n });\n const ret: boolean = tmp.every((el) => el === undefined);\n return ret\n ? undefined\n : 'Invalid ARN. Event ARN must match regular expression: /^arn:aws[a-zA-Z-]?:[a-zA-Z_0-9.-]+:./';\n });\n\n return validator.validateForm();\n}\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport React from 'react';\n\nimport type { IExecutionDetailsSectionProps } from '@spinnaker/core';\nimport { ExecutionDetailsSection, StageFailureMessage } from '@spinnaker/core';\n\nexport function LambdaDeploymentExecutionDetails(props: IExecutionDetailsSectionProps) {\n const { stage, current, name } = props;\n return (\n <ExecutionDetailsSection name={name} current={current}>\n <StageFailureMessage stage={stage} message={stage.outputs.failureMessage} />\n <div>\n <p>\n {' '}\n <b> Function Name: </b> {stage.outputs.functionName ? stage.outputs.functionName : 'N/A'}{' '}\n </p>\n <p>\n {' '}\n <b> Function ARN: </b> {stage.outputs.functionARN ? stage.outputs.functionARN : 'N/A'}{' '}\n </p>\n </div>\n </ExecutionDetailsSection>\n );\n}\n\n// eslint-disable-next-line\nexport namespace LambdaDeploymentExecutionDetails {\n export const title = 'Lambda Deployment Stage';\n}\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport type { IStageTypeConfig } from '@spinnaker/core';\nimport { ExecutionDetailsTasks, HelpContentsRegistry } from '@spinnaker/core';\n\nimport { LambdaDeploymentConfig, validate } from './LambdaDeploymentStageConfig';\nimport { LambdaDeploymentExecutionDetails } from './LambdaDeploymentStageExecutionDetails';\n\nexport const initialize = () => {\n HelpContentsRegistry.register('aws.lambdaDeploymentStage.lambda', 'Lambda Name');\n};\n\nexport const lambdaDeploymentStage: IStageTypeConfig = {\n key: 'Aws.LambdaDeploymentStage',\n label: `AWS Lambda Deployment`,\n description: 'Create a Single AWS Lambda Function',\n component: LambdaDeploymentConfig, // stage config\n executionDetailsSections: [LambdaDeploymentExecutionDetails, ExecutionDetailsTasks],\n validateFn: validate,\n};\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { module } from 'angular';\n\nimport { Registry, SETTINGS } from '@spinnaker/core';\n\nimport { lambdaDeploymentStage } from './config/LambdaDeploymentStage';\n\nexport * from './config/LambdaDeploymentStage';\n\nexport const AMAZON_PIPELINE_STAGES_LAMBDA_DEPLOY = 'spinnaker.amazon.pipeline.stage.Aws.LambdaDeploymentStage';\n\nmodule(AMAZON_PIPELINE_STAGES_LAMBDA_DEPLOY, []).config(function () {\n if (SETTINGS.feature.lambdaAdditionalStages) {\n Registry.pipeline.registerStage(lambdaDeploymentStage);\n }\n});\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const AMAZON_PIPELINE_STAGES_DESTROYASG_AWSDESTROYASGSTAGE =\n 'spinnaker.amazon.pipeline.stage.aws.destroyAsgStage';\nexport const name = AMAZON_PIPELINE_STAGES_DESTROYASG_AWSDESTROYASGSTAGE; // for backwards compatibility\nmodule(AMAZON_PIPELINE_STAGES_DESTROYASG_AWSDESTROYASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'destroyServerGroup',\n alias: 'destroyAsg',\n cloudProvider: 'aws',\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('awsDestroyAsgStageCtrl', [\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('aws').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 = 'aws';\n\n if (!stage.credentials && $scope.application.defaultCredentials.aws) {\n stage.credentials = $scope.application.defaultCredentials.aws;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.aws) {\n stage.regions.push($scope.application.defaultRegions.aws);\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, StageConstants } from '@spinnaker/core';\n\nexport const AMAZON_PIPELINE_STAGES_DISABLEASG_AWSDISABLEASGSTAGE = 'spinnaker.amazon.pipeline.stage.disableAsgStage';\nexport const name = AMAZON_PIPELINE_STAGES_DISABLEASG_AWSDISABLEASGSTAGE; // for backwards compatibility\nmodule(AMAZON_PIPELINE_STAGES_DISABLEASG_AWSDISABLEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'disableServerGroup',\n alias: 'disableAsg',\n cloudProvider: 'aws',\n templateUrl: require('./disableAsgStage.html'),\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('awsDisableAsgStageCtrl', [\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('aws').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 = 'aws';\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Amazon'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.aws) {\n stage.credentials = $scope.application.defaultCredentials.aws;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.aws) {\n stage.regions.push($scope.application.defaultRegions.aws);\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 AMAZON_PIPELINE_STAGES_DISABLECLUSTER_AWSDISABLECLUSTERSTAGE =\n 'spinnaker.amazon.pipeline.stage.disableClusterStage';\nexport const name = AMAZON_PIPELINE_STAGES_DISABLECLUSTER_AWSDISABLECLUSTERSTAGE; // for backwards compatibility\nmodule(AMAZON_PIPELINE_STAGES_DISABLECLUSTER_AWSDISABLECLUSTERSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'disableCluster',\n cloudProvider: 'aws',\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('awsDisableClusterStageCtrl', [\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('aws').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 = 'aws';\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Amazon'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.aws) {\n stage.credentials = $scope.application.defaultCredentials.aws;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.aws) {\n stage.regions.push($scope.application.defaultRegions.aws);\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 AMAZON_PIPELINE_STAGES_ENABLEASG_AWSENABLEASGSTAGE = 'spinnaker.amazon.pipeline.stage.enableAsgStage';\nexport const name = AMAZON_PIPELINE_STAGES_ENABLEASG_AWSENABLEASGSTAGE; // for backwards compatibility\nmodule(AMAZON_PIPELINE_STAGES_ENABLEASG_AWSENABLEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'enableServerGroup',\n alias: 'enableAsg',\n cloudProvider: 'aws',\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('awsEnableAsgStageCtrl', [\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('aws').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 = 'aws';\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Amazon'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.aws) {\n stage.credentials = $scope.application.defaultCredentials.aws;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.aws) {\n stage.regions.push($scope.application.defaultRegions.aws);\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 * as angular from 'angular';\n\nimport { AccountService, Registry } from '@spinnaker/core';\n\nexport const AMAZON_PIPELINE_STAGES_FINDAMI_AWSFINDAMISTAGE = 'spinnaker.amazon.pipeline.stage.findAmiStage';\nexport const name = AMAZON_PIPELINE_STAGES_FINDAMI_AWSFINDAMISTAGE; // for backwards compatibility\nangular\n .module(AMAZON_PIPELINE_STAGES_FINDAMI_AWSFINDAMISTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'findImage',\n alias: 'findAmi',\n cloudProvider: 'aws',\n templateUrl: require('./findAmiStage.html'),\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'selectionStrategy', fieldLabel: 'Server Group Selection' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials' },\n ],\n });\n })\n .controller('awsFindAmiStageCtrl', [\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('aws').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n $scope.selectionStrategies = [\n {\n label: 'Largest',\n val: 'LARGEST',\n description: 'When multiple server groups exist, prefer the server group with the most instances',\n },\n {\n label: 'Newest',\n val: 'NEWEST',\n description: 'When multiple server groups exist, prefer the newest',\n },\n {\n label: 'Oldest',\n val: 'OLDEST',\n description: 'When multiple server groups exist, prefer the oldest',\n },\n {\n label: 'Fail',\n val: 'FAIL',\n description: 'When multiple server groups exist, fail',\n },\n ];\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'aws';\n stage.selectionStrategy = stage.selectionStrategy || $scope.selectionStrategies[0].val;\n\n if (angular.isUndefined(stage.onlyEnabled)) {\n stage.onlyEnabled = true;\n }\n if (!stage.credentials && $scope.application.defaultCredentials.aws) {\n stage.credentials = $scope.application.defaultCredentials.aws;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.aws) {\n stage.regions.push($scope.application.defaultRegions.aws);\n }\n\n $scope.$watch('stage.credentials', $scope.accountUpdated);\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { BakeryReader, Registry } from '@spinnaker/core';\n\nexport const AMAZON_PIPELINE_STAGES_FINDIMAGEFROMTAGS_AWSFINDIMAGEFROMTAGSSTAGE =\n 'spinnaker.amazon.pipeline.stage.findImageFromTagsStage';\nexport const name = AMAZON_PIPELINE_STAGES_FINDIMAGEFROMTAGS_AWSFINDIMAGEFROMTAGSSTAGE; // for backwards compatibility\nmodule(AMAZON_PIPELINE_STAGES_FINDIMAGEFROMTAGS_AWSFINDIMAGEFROMTAGSSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'findImageFromTags',\n cloudProvider: 'aws',\n templateUrl: require('./findImageFromTagsStage.html'),\n executionDetailsUrl: require('./findImageFromTagsExecutionDetails.html'),\n executionConfigSections: ['findImageConfig', 'taskStatus'],\n validators: [\n { type: 'requiredField', fieldName: 'packageName' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'tags' },\n ],\n });\n })\n .controller('awsFindImageFromTagsStageCtrl', [\n '$scope',\n function ($scope) {\n $scope.stage.tags = $scope.stage.tags || {};\n $scope.stage.regions = $scope.stage.regions || [];\n $scope.stage.cloudProvider = $scope.stage.cloudProvider || 'aws';\n\n BakeryReader.getRegions('aws').then(function (regions) {\n $scope.regions = regions;\n });\n },\n ]);\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport React from 'react';\n\nimport type { IArtifact, IExpectedArtifact, IFormikStageConfigInjectedProps } from '@spinnaker/core';\nimport {\n ArtifactTypePatterns,\n excludeAllTypesExcept,\n FormikFormField,\n NumberInput,\n StageArtifactSelectorDelegate,\n} from '@spinnaker/core';\n\nexport function InvokeLambdaOperation(props: IFormikStageConfigInjectedProps) {\n const { values } = props.formik;\n\n const excludedArtifactTypes = excludeAllTypesExcept(\n ArtifactTypePatterns.BITBUCKET_FILE,\n ArtifactTypePatterns.CUSTOM_OBJECT,\n ArtifactTypePatterns.EMBEDDED_BASE64,\n ArtifactTypePatterns.REMOTE_BASE64,\n ArtifactTypePatterns.GCS_OBJECT,\n ArtifactTypePatterns.GITHUB_FILE,\n ArtifactTypePatterns.GITLAB_FILE,\n ArtifactTypePatterns.S3_OBJECT,\n ArtifactTypePatterns.HTTP_FILE,\n );\n\n const onTemplateArtifactEdited = (artifact: IArtifact, name: string) => {\n props.formik.setFieldValue(`${name}.id`, null);\n props.formik.setFieldValue(`${name}.artifact`, artifact);\n props.formik.setFieldValue(`${name}.account`, artifact.artifactAccount);\n };\n\n const onTemplateArtifactSelected = (id: string, name: string) => {\n props.formik.setFieldValue(`${name}.id`, id);\n props.formik.setFieldValue(`${name}.artifact`, null);\n };\n\n const getInputArtifact = (stage: any, name: string) => {\n if (!stage[name]) {\n return {\n account: '',\n id: '',\n };\n } else {\n return stage[name];\n }\n };\n\n return (\n <div>\n <FormikFormField name=\"timeout\" label=\"Timeout\" input={(props) => <NumberInput {...props} min={0} max={900} />} />\n <FormikFormField\n name=\"executionCount\"\n label=\"Execution Count\"\n input={(props) => <NumberInput {...props} min={0} max={100} />}\n />\n\n <StageArtifactSelectorDelegate\n artifact={getInputArtifact(values, 'payloadArtifact').artifact}\n excludedArtifactTypePatterns={excludedArtifactTypes}\n expectedArtifactId={getInputArtifact(values, 'payloadArtifact').id}\n label=\"Payload Artifact\"\n onArtifactEdited={(artifact: any) => {\n onTemplateArtifactEdited(artifact, 'payloadArtifact');\n }}\n helpKey={''}\n onExpectedArtifactSelected={(artifact: IExpectedArtifact) =>\n onTemplateArtifactSelected(artifact.id, 'payloadrtifact')\n }\n pipeline={props.pipeline}\n stage={values}\n />\n </div>\n );\n}\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React from 'react';\n\nimport type {\n IAccount,\n IAccountDetails,\n IFormikStageConfigInjectedProps,\n IFormInputProps,\n IFunction,\n IRegion,\n} from '@spinnaker/core';\nimport { AccountService, FormikFormField, ReactSelectInput, TextInput, useData } from '@spinnaker/core';\n\nimport { InvokeLambdaOperation } from './components';\n\nexport function InvokeLambdaFunctionStageForm(props: IFormikStageConfigInjectedProps) {\n const { values } = props.formik;\n const { functions } = props.application;\n\n const { result: fetchAccountsResult, status: fetchAccountsStatus } = useData(\n () => AccountService.listAccounts('aws'),\n [],\n [],\n );\n\n const onAccountChange = (fieldValue: any): void => {\n props.formik.setFieldValue('region', null);\n props.formik.setFieldValue('functionName', null);\n\n props.formik.setFieldValue('account', fieldValue);\n };\n\n const onRegionChange = (fieldValue: any): void => {\n props.formik.setFieldValue('functionName', null);\n props.formik.setFieldValue('region', fieldValue);\n };\n\n const availableFunctions =\n values.account && values.region\n ? functions.data\n .filter((f: IFunction) => f.account === values.account)\n .filter((f: IFunction) => f.region === values.region)\n .map((f: IFunction) => f.functionName)\n : [];\n\n return (\n <div className=\"form-horizontal\">\n <h4> Basic Settings </h4>\n <FormikFormField\n label=\"Account\"\n name=\"account\"\n onChange={onAccountChange}\n required={true}\n input={(inputProps: IFormInputProps) => (\n <ReactSelectInput\n {...inputProps}\n clearable={false}\n isLoading={fetchAccountsStatus === 'PENDING'}\n stringOptions={fetchAccountsResult.map((acc: IAccount) => acc.name)}\n />\n )}\n />\n <FormikFormField\n label=\"Region\"\n name=\"region\"\n onChange={onRegionChange}\n input={(inputProps: IFormInputProps) => (\n <ReactSelectInput\n clearable={false}\n disabled={!values.account}\n placeholder={values.account ? 'Select...' : 'Select an Account...'}\n {...inputProps}\n isLoading={fetchAccountsStatus === 'PENDING'}\n stringOptions={fetchAccountsResult\n .filter((acc: IAccountDetails) => acc.name === values.account)\n .flatMap((acc: IAccountDetails) => acc.regions)\n .map((reg: IRegion) => reg.name)}\n />\n )}\n />\n <FormikFormField\n label=\"Function Name\"\n name=\"functionName\"\n input={(inputProps: IFormInputProps) => (\n <ReactSelectInput\n clearable={false}\n disabled={!(values.account && values.region)}\n placeholder={values.account && values.region ? 'Select...' : 'Select an Account and Region...'}\n {...inputProps}\n stringOptions={availableFunctions}\n />\n )}\n />\n\n <FormikFormField\n label=\"Alias\"\n name=\"aliasName\"\n input={(inputProps: IFormInputProps) => <TextInput {...inputProps} />}\n />\n\n <h4> Invoke Settings </h4>\n <InvokeLambdaOperation {...props} />\n </div>\n );\n}\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport React from 'react';\n\nimport type {\n IExecutionDetailsSectionProps,\n IFormikStageConfigInjectedProps,\n IStage,\n IStageConfigProps,\n IStageTypeConfig,\n} from '@spinnaker/core';\nimport {\n ExecutionDetailsSection,\n ExecutionDetailsTasks,\n FormikStageConfig,\n FormValidator,\n HelpContentsRegistry,\n StageFailureMessage,\n} from '@spinnaker/core';\n\nimport { InvokeLambdaFunctionStageForm } from './InvokeLambdaFunctionStageForm';\nimport { awsArnValidator } from '../../../aws.validators';\n\nexport function InvokeLambdaExecutionDetails(props: IExecutionDetailsSectionProps) {\n const { stage } = props;\n\n return (\n <ExecutionDetailsSection name={props.name} current={props.current}>\n <StageFailureMessage stage={stage} message={stage.outputs.failureMessage} />\n <div>\n <p> Function Name: {stage.outputs.functionName ? stage.outputs.functionName : 'N/A'} </p>\n <p>\n {' '}\n Deployed Alias:{' '}\n {stage.outputs['deployment:aliasDeployed'] ? stage.outputs['deployment:aliasDeployed'] : 'N/A'}{' '}\n </p>\n <p>\n {' '}\n Deployed Major Version:{' '}\n {stage.outputs['deployment:majorVersionDeployed']\n ? stage.outputs['deployment:majorVersionDeployed']\n : 'N/A'}{' '}\n </p>\n </div>\n </ExecutionDetailsSection>\n );\n}\n\n/*\n IStageConfigProps defines properties passed to all Spinnaker Stages.\n See IStageConfigProps.ts (https://github.com/spinnaker/deck/blob/master/app/scripts/modules/core/src/pipeline/config/stages/common/IStageConfigProps.ts) for a complete list of properties.\n Pass a JSON object to the `updateStageField` method to add the `account` to the Stage.\n\n This method returns JSX (https://reactjs.org/docs/introducing-jsx.html) that gets displayed in the Spinnaker UI.\n */\nfunction InvokeLambdaConfig(props: IStageConfigProps) {\n return (\n <div className=\"InvokeLambdaStageConfig\">\n <FormikStageConfig\n {...props}\n validate={validate}\n onChange={props.updateStage}\n render={(props: IFormikStageConfigInjectedProps) => <InvokeLambdaFunctionStageForm {...props} />}\n />\n </div>\n );\n}\n\n/*\n This is a contrived example of how to use an `initialize` function to hook into arbitrary Deck services.\n This `initialize` function provides the help field text for the `LambdaDeploymentConfig` stage form defined above.\n\n You can hook into any service exported by the `@spinnaker/core` NPM module, e.g.:\n - CloudProviderRegistry\n - DeploymentStrategyRegistry\n\n When you use a registry, you are diving into Deck's implementation to add functionality.\n These registries and their methods may change without warning.\n*/\nexport const initialize = () => {\n HelpContentsRegistry.register('aws.lambdaDeploymentStage.lambda', 'Lambda Name');\n};\n\nfunction validate(stageConfig: IStage) {\n const validator = new FormValidator(stageConfig);\n\n validator\n .field('triggerArns', 'Trigger ARNs')\n .optional()\n .withValidators((value: any, _: string) => {\n const tmp: any[] = value.map((arn: string) => {\n return awsArnValidator(arn, arn);\n });\n const ret: boolean = tmp.every((el) => el === undefined);\n return ret\n ? undefined\n : 'Invalid ARN. Event ARN must match regular expression: /^arn:aws[a-zA-Z-]?:[a-zA-Z_0-9.-]+:./';\n });\n\n return validator.validateForm();\n}\n\n// eslint-disable-next-line\nexport namespace InvokeLambdaExecutionDetails {\n export const title = 'Invoke Lambda Stage';\n}\n\n/*\n Define Spinnaker Stages with IStageTypeConfig.\n Required options: https://github.com/spinnaker/deck/master/app/scripts/modules/core/src/domain/IStageTypeConfig.ts\n - label -> The name of the Stage\n - description -> Long form that describes what the Stage actually does\n - key -> A unique name for the Stage in the UI; ties to Orca backend\n - component -> The rendered React component\n - validateFn -> A validation function for the stage config form.\n */\nexport const lambdaInvokeStage: IStageTypeConfig = {\n key: 'Aws.LambdaInvokeStage',\n label: `AWS Lambda Invoke`,\n description: 'Invoke a Lambda function',\n component: InvokeLambdaConfig, // stage config\n executionDetailsSections: [InvokeLambdaExecutionDetails, ExecutionDetailsTasks],\n validateFn: validate,\n};\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { module } from 'angular';\n\nimport { Registry, SETTINGS } from '@spinnaker/core';\n\nimport { lambdaInvokeStage } from './LambdaInvokeStage';\n\nexport * from './LambdaInvokeStage';\n\nexport const AMAZON_PIPELINE_STAGES_LAMBDA_INVOKE = 'spinnaker.amazon.pipeline.stage.Aws.LambdaInvokeStage';\n\nmodule(AMAZON_PIPELINE_STAGES_LAMBDA_INVOKE, []).config(function () {\n if (SETTINGS.feature.lambdaAdditionalStages) {\n Registry.pipeline.registerStage(lambdaInvokeStage);\n }\n});\n","'use strict';\n\nimport { module } from 'angular';\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const AMAZON_PIPELINE_STAGES_MODIFYSCALINGPROCESS_MODIFYSCALINGPROCESSSTAGE =\n 'spinnaker.amazon.pipeline.stage.modifyScalingProcessStage';\nexport const name = AMAZON_PIPELINE_STAGES_MODIFYSCALINGPROCESS_MODIFYSCALINGPROCESSSTAGE; // for backwards compatibility\nmodule(AMAZON_PIPELINE_STAGES_MODIFYSCALINGPROCESS_MODIFYSCALINGPROCESSSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n label: 'Modify Scaling Process',\n description: 'Suspend/Resume Scaling Processes',\n key: 'modifyAwsScalingProcess',\n alias: 'modifyScalingProcess',\n controller: 'ModifyScalingProcessStageCtrl',\n templateUrl: require('./modifyScalingProcessStage.html'),\n executionDetailsUrl: require('./modifyScalingProcessExecutionDetails.html'),\n executionConfigSections: ['modifyScalingProcessesConfig', 'taskStatus'],\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'action' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'processes' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n cloudProvider: 'aws',\n strategy: true,\n });\n })\n .controller('ModifyScalingProcessStageCtrl', [\n '$scope',\n 'stage',\n function ($scope, stage) {\n $scope.stage = stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('aws').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n $scope.targets = StageConstants.TARGET_LIST;\n\n $scope.actions = [\n {\n label: 'Suspend',\n val: 'suspend',\n },\n {\n label: 'Resume',\n val: 'resume',\n },\n ];\n $scope.processes = [\n 'Launch',\n 'Terminate',\n 'AddToLoadBalancer',\n 'AlarmNotification',\n 'AZRebalance',\n 'HealthCheck',\n 'ReplaceUnhealthy',\n 'ScheduledActions',\n ];\n\n stage.processes = stage.processes || [];\n stage.regions = stage.regions || [];\n stage.action = stage.action || $scope.actions[0].val;\n stage.target = stage.target || $scope.targets[0].val;\n stage.cloudProvider = 'aws';\n\n if (!stage.credentials && $scope.application.defaultCredentials.aws) {\n stage.credentials = $scope.application.defaultCredentials.aws;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.aws) {\n stage.regions.push($scope.application.defaultRegions.aws);\n }\n\n $scope.toggleProcess = function (process) {\n if (!stage.processes) {\n stage.processes = [];\n }\n const idx = stage.processes.indexOf(process);\n if (idx > -1) {\n stage.processes.splice(idx, 1);\n } else {\n stage.processes.push(process);\n }\n };\n\n $scope.$watch('stage.credentials', $scope.accountUpdated);\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const AMAZON_PIPELINE_STAGES_RESIZEASG_AWSRESIZEASGSTAGE = 'spinnaker.amazon.pipeline.stage.aws.resizeAsgStage';\nexport const name = AMAZON_PIPELINE_STAGES_RESIZEASG_AWSRESIZEASGSTAGE; // for backwards compatibility\nmodule(AMAZON_PIPELINE_STAGES_RESIZEASG_AWSRESIZEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'resizeServerGroup',\n alias: 'resizeAsg',\n cloudProvider: 'aws',\n templateUrl: require('./resizeAsgStage.html'),\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('awsResizeAsgStageCtrl', [\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('aws').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 = 'aws';\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Amazon'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.aws) {\n stage.credentials = $scope.application.defaultCredentials.aws;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.aws) {\n stage.regions.push($scope.application.defaultRegions.aws);\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, SETTINGS } from '@spinnaker/core';\n\nexport const AMAZON_PIPELINE_STAGES_ROLLBACKCLUSTER_AWSROLLBACKCLUSTERSTAGE =\n 'spinnaker.amazon.pipeline.stage.rollbackClusterStage';\nexport const name = AMAZON_PIPELINE_STAGES_ROLLBACKCLUSTER_AWSROLLBACKCLUSTERSTAGE; // for backwards compatibility\nmodule(AMAZON_PIPELINE_STAGES_ROLLBACKCLUSTER_AWSROLLBACKCLUSTERSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'rollbackCluster',\n cloudProvider: 'aws',\n templateUrl: require('./rollbackClusterStage.html'),\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('awsRollbackClusterStageCtrl', [\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('aws').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 = 'aws';\n stage.targetHealthyRollbackPercentage = stage.targetHealthyRollbackPercentage || 100;\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Amazon'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.aws) {\n stage.credentials = $scope.application.defaultCredentials.aws;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.aws) {\n stage.regions.push($scope.application.defaultRegions.aws);\n }\n\n $scope.viewState.dynamicRollbackTimeout = SETTINGS.feature.dynamicRollbackTimeout;\n },\n ]);\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport React from 'react';\n\nimport type { Option } from 'react-select';\n\nimport type { IFormikStageConfigInjectedProps, IFormInputProps } from '@spinnaker/core';\nimport { FormikFormField, HelpField, NumberInput, TetheredCreatable } from '@spinnaker/core';\n\nexport function TriggerEventsForm(props: IFormikStageConfigInjectedProps) {\n const { values } = props.formik;\n\n const onChange = (o: Option, field: any) => {\n props.formik.setFieldValue(\n field,\n o.map((arn: any) => arn.value),\n );\n };\n\n return (\n <div>\n <FormikFormField\n name=\"triggerArns\"\n label=\"Event ARNs\"\n help={\n <HelpField content=\"The resource ARNs for Lambda event trigger sources. Input the entire ARN and select `Create option TRIGGER-ARN-INPUT` to add the ARN.\" />\n }\n input={(inputProps: IFormInputProps) => (\n <TetheredCreatable\n {...inputProps}\n multi={true}\n placeholder={'Input ARN...'}\n onChange={(e: Option) => {\n onChange(e, 'triggerArns');\n }}\n value={values.triggerArns ? values.triggerArns.map((arn: string) => ({ value: arn, label: arn })) : []}\n />\n )}\n required={false}\n />\n\n <FormikFormField\n name=\"batchsize\"\n label=\"Event Batch Size\"\n input={(inputProps: IFormInputProps) => <NumberInput {...inputProps} min={1} max={10} />}\n required={false}\n />\n </div>\n );\n}\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport React from 'react';\n\nimport type { IArtifact, IExpectedArtifact, IFormikStageConfigInjectedProps } from '@spinnaker/core';\nimport {\n ArtifactTypePatterns,\n CheckboxInput,\n excludeAllTypesExcept,\n FormikFormField,\n NumberInput,\n StageArtifactSelectorDelegate,\n} from '@spinnaker/core';\n\nexport function InvokeLambdaHealthCheck(props: IFormikStageConfigInjectedProps) {\n const { values } = props.formik;\n\n const excludedArtifactTypes = excludeAllTypesExcept(\n ArtifactTypePatterns.BITBUCKET_FILE,\n ArtifactTypePatterns.CUSTOM_OBJECT,\n ArtifactTypePatterns.EMBEDDED_BASE64,\n ArtifactTypePatterns.GCS_OBJECT,\n ArtifactTypePatterns.GITHUB_FILE,\n ArtifactTypePatterns.GITLAB_FILE,\n ArtifactTypePatterns.S3_OBJECT,\n ArtifactTypePatterns.HTTP_FILE,\n );\n\n const onTemplateArtifactEdited = (artifact: IArtifact, name: string) => {\n props.formik.setFieldValue(`${name}.id`, null);\n props.formik.setFieldValue(`${name}.artifact`, artifact);\n props.formik.setFieldValue(`${name}.account`, artifact.artifactAccount);\n };\n\n const onTemplateArtifactSelected = (id: string, name: string) => {\n props.formik.setFieldValue(`${name}.id`, id);\n props.formik.setFieldValue(`${name}.artifact`, null);\n };\n\n const getInputArtifact = (stage: any, name: string) => {\n if (!stage[name]) {\n return {\n account: '',\n id: '',\n };\n } else {\n return stage[name];\n }\n };\n\n return (\n <div>\n <FormikFormField\n name=\"destroyOnFail\"\n label=\"On Fail\"\n input={(props) => <CheckboxInput text={'Destroy latest lambda version on fail.'} {...props} />}\n />\n <FormikFormField name=\"timeout\" label=\"Timeout\" input={(props) => <NumberInput {...props} min={0} max={900} />} />\n\n <StageArtifactSelectorDelegate\n artifact={getInputArtifact(values, 'payloadArtifact').artifact}\n excludedArtifactTypePatterns={excludedArtifactTypes}\n expectedArtifactId={getInputArtifact(values, 'payloadArtifact').id}\n label=\"Payload Artifact\"\n onArtifactEdited={(artifact) => {\n onTemplateArtifactEdited(artifact, 'payloadArtifact');\n }}\n helpKey={''}\n onExpectedArtifactSelected={(artifact: IExpectedArtifact) =>\n onTemplateArtifactSelected(artifact.id, 'payloadrtifact')\n }\n pipeline={props.pipeline}\n stage={values}\n />\n <StageArtifactSelectorDelegate\n artifact={getInputArtifact(values, 'outputArtifact').artifact}\n excludedArtifactTypePatterns={excludedArtifactTypes}\n expectedArtifactId={getInputArtifact(values, 'outputArtifact').id}\n label=\"Output Artifact\"\n onArtifactEdited={(artifact) => {\n onTemplateArtifactEdited(artifact, 'outputArtifact');\n }}\n helpKey={''}\n onExpectedArtifactSelected={(artifact: IExpectedArtifact) =>\n onTemplateArtifactSelected(artifact.id, 'outputArtifact')\n }\n pipeline={props.pipeline}\n stage={values}\n />\n </div>\n );\n}\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport React from 'react';\n\nimport type { IFormikStageConfigInjectedProps } from '@spinnaker/core';\n\nimport { InvokeLambdaHealthCheck } from './InvocationHealthCheck';\n\nexport function retrieveHealthCheck(value: string, props: IFormikStageConfigInjectedProps) {\n switch (value) {\n case '$LAMBDA':\n return <InvokeLambdaHealthCheck {...props} />;\n case '$WEIGHTED':\n return null;\n case '$BLUEGREEN':\n return null;\n default:\n return null;\n }\n}\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nexport interface IHealthConstant {\n label: string;\n value: string;\n}\n\nexport const HealthCheckList: IHealthConstant[] = [\n {\n label: 'Lambda Invocation',\n value: '$LAMBDA',\n },\n];\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport React from 'react';\n\nimport type { IFormikStageConfigInjectedProps, IFormInputProps } from '@spinnaker/core';\nimport { FormikFormField, ReactSelectInput } from '@spinnaker/core';\n\nimport { retrieveHealthCheck } from './HealthCheckStrategy';\nimport { HealthCheckList } from './health.constants';\n\nexport function BlueGreenDeploymentForm(props: IFormikStageConfigInjectedProps) {\n const { values } = props.formik;\n\n return (\n <div>\n <FormikFormField\n label=\"Health Check Type\"\n name=\"healthCheckType\"\n input={(inputProps: IFormInputProps) => (\n <ReactSelectInput {...inputProps} clearable={false} options={HealthCheckList} />\n )}\n />\n {values.healthCheckType ? retrieveHealthCheck(values.healthCheckType, props) : null}\n </div>\n );\n}\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nexport interface IStrategyConstant {\n description: string;\n label: string;\n value: string;\n}\n\nexport const DeploymentStrategyList: IStrategyConstant[] = [\n {\n label: 'Simple',\n value: '$SIMPLE',\n description: 'Route 100% of traffic to specified version',\n },\n {\n label: 'Weighted Deployment',\n value: '$WEIGHTED',\n description: 'Split the traffic weight between two function versions.',\n },\n {\n label: 'Blue/Green',\n value: '$BLUEGREEN',\n description: 'Disable all previous versions once the latest version passes health checks.',\n },\n];\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport React from 'react';\n\nimport type { IFormikStageConfigInjectedProps } from '@spinnaker/core';\n\nimport type { IStrategyConstant } from './strategy.constants';\nimport { DeploymentStrategyList } from './strategy.constants';\n\nexport interface IVersionPickerProps {\n config: IFormikStageConfigInjectedProps;\n value: string;\n showingDetails: boolean;\n}\n\nexport interface IVersionPickerState {\n value: string;\n label: string;\n description: string;\n}\n\nexport class DeploymentStrategyPicker extends React.Component<IVersionPickerProps, IVersionPickerState> {\n constructor(props: IVersionPickerProps) {\n super(props);\n\n const { value } = this.props;\n\n const strategyDetails = DeploymentStrategyList.filter((v: IStrategyConstant) => v.value === value)[0];\n\n this.state = {\n label: strategyDetails.label,\n value: strategyDetails.value,\n description: strategyDetails.description,\n };\n }\n\n public render() {\n return (\n <div>\n <b> {this.state.label} </b>\n <br />\n <small> {this.state.description} </small>\n </div>\n );\n }\n}\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nexport interface IVersionConstant {\n description: string;\n label: string;\n value: string;\n}\n\nexport const VersionList: IVersionConstant[] = [\n {\n label: 'Newest Function Version',\n value: '$LATEST',\n description: 'Selects the most recently deployed function when this stage starts.',\n },\n {\n label: 'Previous Function Version',\n value: '$PREVIOUS',\n description: 'Selects the second-most recently deployed function when this stage starts.',\n },\n {\n label: 'Oldest Function Verion',\n value: '$OLDEST',\n description: 'Selects the least recently deployed function when this stage starts.',\n },\n {\n label: 'Provide Version Number',\n value: '$PROVIDED',\n description: 'Provide a specific version number to destroy.',\n },\n];\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport React from 'react';\n\nimport type { IVersionConstant } from '../constants';\nimport { VersionList } from '../constants';\n\nexport interface IVersionPickerProps {\n value: string;\n showingDetails: boolean;\n}\n\nexport interface IVersionPickerState {\n value: string;\n label: string;\n description: string;\n}\n\nexport class VersionPicker extends React.Component<IVersionPickerProps, IVersionPickerState> {\n constructor(props: IVersionPickerProps) {\n super(props);\n\n // In here we will link the 'value' to an actual version id - when this is passed to Orca it will have the ID\n\n const { value } = this.props;\n const versionDetails = VersionList.filter((v: IVersionConstant) => v.value === value)[0];\n this.state = {\n label: versionDetails.label,\n value: versionDetails.value,\n description: versionDetails.description,\n };\n }\n\n public render() {\n return (\n <div>\n <b> {this.state.label} </b> <br />\n <small> {this.state.description} </small>\n </div>\n );\n }\n}\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport React from 'react';\n\nimport type { IFormikStageConfigInjectedProps, IFormInputProps } from '@spinnaker/core';\nimport { FormikFormField, NumberInput, ReactSelectInput } from '@spinnaker/core';\n\nimport { VersionPicker } from './VersionPicker';\nimport { VersionList } from '../constants';\nimport type { IAmazonFunctionSourceData } from '../../../../domain';\n\nexport function SimpleDeploymentForm(props: IFormikStageConfigInjectedProps) {\n const { values } = props.formik;\n const { functions } = props.application;\n\n const onVersionChange = (fieldValue: any): void => {\n props.formik.setFieldValue('trafficPercentA', 100);\n props.formik.setFieldValue('versionNameA', fieldValue);\n };\n\n return (\n <div className=\"form-horizontal\">\n <FormikFormField\n label=\"Target Version\"\n name=\"versionNameA\"\n onChange={onVersionChange}\n input={(inputProps: IFormInputProps) => (\n <ReactSelectInput\n {...inputProps}\n clearable={false}\n options={VersionList}\n optionRenderer={(option) => <VersionPicker value={option.value as any} showingDetails={true} />}\n />\n )}\n />\n {values.versionNameA === '$PROVIDED' ? (\n <FormikFormField\n label=\"Version Number\"\n name=\"versionNumberA\"\n input={(inputProps: IFormInputProps) => (\n <ReactSelectInput\n {...inputProps}\n clearable={false}\n stringOptions={functions.data\n .filter((f: IAmazonFunctionSourceData) => f.account === values.account)\n .filter((f: IAmazonFunctionSourceData) => f.region === values.region)\n .filter((f: IAmazonFunctionSourceData) => f.functionName === values.functionName)\n .flatMap((f: IAmazonFunctionSourceData) =>\n Object.values(f.revisions).sort(function (a: number, b: number) {\n return b - a;\n }),\n )\n .filter((r: any) => r !== '$LATEST')}\n />\n )}\n />\n ) : null}\n\n <FormikFormField\n name=\"trafficPercentA\"\n label=\"Traffic %\"\n input={(props) => <NumberInput {...props} min={0} max={100} value={100} disabled={true} />}\n />\n </div>\n );\n}\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React from 'react';\n\nimport type { IFormikStageConfigInjectedProps, IFormInputProps } from '@spinnaker/core';\nimport { FormikFormField, NumberInput, ReactSelectInput } from '@spinnaker/core';\n\nimport { VersionPicker } from './VersionPicker';\nimport { VersionList } from '../constants';\nimport type { IAmazonFunctionSourceData } from '../../../../domain';\n\nexport function WeightedDeploymentForm(props: IFormikStageConfigInjectedProps) {\n const { values } = props.formik;\n const { functions } = props.application;\n\n return (\n <div className=\"form-horizontal\">\n <FormikFormField\n label=\"Target Version\"\n name=\"versionNameA\"\n input={(inputProps: IFormInputProps) => (\n <ReactSelectInput\n {...inputProps}\n clearable={false}\n options={VersionList}\n optionRenderer={(option) => <VersionPicker value={option.value as any} showingDetails={true} />}\n />\n )}\n />\n {values.versionNameA === '$PROVIDED' ? (\n <FormikFormField\n label=\"Version Number\"\n name=\"versionNumberA\"\n input={(inputProps: IFormInputProps) => (\n <ReactSelectInput\n {...inputProps}\n clearable={false}\n stringOptions={functions.data\n .filter((f: IAmazonFunctionSourceData) => f.account === values.account)\n .filter((f: IAmazonFunctionSourceData) => f.region === values.region)\n .filter((f: IAmazonFunctionSourceData) => f.functionName === values.functionName)\n .flatMap((f: IAmazonFunctionSourceData) =>\n Object.values(f.revisions).sort(function (a: number, b: number) {\n return b - a;\n }),\n )\n .filter((r: any) => r !== '$LATEST')}\n />\n )}\n />\n ) : null}\n <FormikFormField\n name=\"trafficPercentA\"\n label=\"Traffic %\"\n input={(props) => <NumberInput {...props} min={0} max={100} />}\n />\n\n <FormikFormField\n label=\"Version Name\"\n name=\"versionNameB\"\n input={(inputProps: IFormInputProps) => (\n <ReactSelectInput\n {...inputProps}\n clearable={false}\n options={VersionList}\n optionRenderer={(option) => <VersionPicker value={option.value as any} showingDetails={true} />}\n />\n )}\n />\n {values.versionNameB === '$PROVIDED' ? (\n <FormikFormField\n label=\"Version Number\"\n name=\"versionNumberB\"\n input={(inputProps: IFormInputProps) => (\n <ReactSelectInput\n {...inputProps}\n clearable={false}\n stringOptions={functions.data\n .filter((f: IAmazonFunctionSourceData) => f.account === values.account)\n .filter((f: IAmazonFunctionSourceData) => f.region === values.region)\n .filter((f: IAmazonFunctionSourceData) => f.functionName === values.functionName)\n .flatMap((f: IAmazonFunctionSourceData) =>\n Object.values(f.revisions).sort(function (a: number, b: number) {\n return b - a;\n }),\n )\n .filter((r: any) => r !== '$LATEST')}\n />\n )}\n />\n ) : null}\n <FormikFormField\n name=\"trafficPercentB\"\n label=\"Traffic %\"\n input={(props) => (\n <NumberInput\n {...props}\n min={0}\n max={100}\n disabled={true}\n value={values.trafficPercentA || values.trafficPercentA === 0 ? 100 - values.trafficPercentA : null}\n />\n )}\n />\n </div>\n );\n}\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport React from 'react';\n\nimport type { IFormikStageConfigInjectedProps } from '@spinnaker/core';\n\nimport { BlueGreenDeploymentForm } from './BlueGreenDeployment';\nimport { SimpleDeploymentForm } from './SimpleDeploymentForm';\nimport { WeightedDeploymentForm } from './WeightedDeploymentForm';\n\nexport function retrieveComponent(value: string, props: IFormikStageConfigInjectedProps) {\n switch (value) {\n case '$SIMPLE':\n return <SimpleDeploymentForm {...props} />;\n case '$WEIGHTED':\n return <WeightedDeploymentForm {...props} />;\n case '$BLUEGREEN':\n return <BlueGreenDeploymentForm {...props} />;\n default:\n return null;\n }\n}\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport React from 'react';\n\nimport type { IFormikStageConfigInjectedProps } from '@spinnaker/core';\n\nimport { retrieveComponent } from './RenderStrategy';\n\nexport function DeploymentStrategyForm(props: IFormikStageConfigInjectedProps) {\n const { values } = props.formik;\n\n return (\n <div className=\"form-horizontal\">\n {values.deploymentStrategy ? retrieveComponent(values.deploymentStrategy, props) : null}\n </div>\n );\n}\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React from 'react';\n\nimport type {\n IAccount,\n IAccountDetails,\n IFormikStageConfigInjectedProps,\n IFormInputProps,\n IFunction,\n IRegion,\n} from '@spinnaker/core';\nimport {\n AccountService,\n FormikFormField,\n HelpField,\n NumberInput,\n ReactSelectInput,\n TextInput,\n useData,\n} from '@spinnaker/core';\n\nimport { TriggerEventsForm } from './TriggerEventsForm';\nimport { DeploymentStrategyForm } from './components';\nimport { DeploymentStrategyList, DeploymentStrategyPicker } from './constants';\n\nexport function RouteLambdaFunctionStageForm(props: IFormikStageConfigInjectedProps) {\n const { values } = props.formik;\n const { functions } = props.application;\n\n const { result: fetchAccountsResult, status: fetchAccountsStatus } = useData(\n () => AccountService.listAccounts('aws'),\n [],\n [],\n );\n\n const onAccountChange = (fieldValue: any): void => {\n props.formik.setFieldValue('region', null);\n props.formik.setFieldValue('functionName', null);\n\n props.formik.setFieldValue('account', fieldValue);\n };\n\n const onRegionChange = (fieldValue: any): void => {\n props.formik.setFieldValue('functionName', null);\n props.formik.setFieldValue('region', fieldValue);\n };\n\n const availableFunctions =\n values.account && values.region\n ? functions.data\n .filter((f: IFunction) => f.account === values.account)\n .filter((f: IFunction) => f.region === values.region)\n .map((f: IFunction) => f.functionName)\n : [];\n\n return (\n <div className=\"form-horizontal\">\n <h4> Basic Settings </h4>\n <FormikFormField\n label=\"Account\"\n name=\"account\"\n onChange={onAccountChange}\n required={true}\n input={(inputProps: IFormInputProps) => (\n <ReactSelectInput\n {...inputProps}\n clearable={false}\n isLoading={fetchAccountsStatus === 'PENDING'}\n stringOptions={fetchAccountsResult.map((acc: IAccount) => acc.name)}\n />\n )}\n />\n <FormikFormField\n label=\"Region\"\n name=\"region\"\n onChange={onRegionChange}\n input={(inputProps: IFormInputProps) => (\n <ReactSelectInput\n clearable={false}\n disabled={!values.account}\n placeholder={values.account ? 'Select...' : 'Select an Account...'}\n {...inputProps}\n isLoading={fetchAccountsStatus === 'PENDING'}\n stringOptions={fetchAccountsResult\n .filter((acc: IAccountDetails) => acc.name === values.account)\n .flatMap((acc: IAccountDetails) => acc.regions)\n .map((reg: IRegion) => reg.name)}\n />\n )}\n />\n <FormikFormField\n label=\"Function Name\"\n name=\"functionName\"\n input={(inputProps: IFormInputProps) => (\n <ReactSelectInput\n clearable={false}\n disabled={!(values.account && values.region)}\n placeholder={values.account && values.region ? 'Select...' : 'Select an Account and Region...'}\n {...inputProps}\n stringOptions={availableFunctions}\n />\n )}\n />\n\n <FormikFormField\n label=\"Alias\"\n name=\"aliasName\"\n input={(inputProps: IFormInputProps) => <TextInput {...inputProps} />}\n />\n\n <h4> Alias Settings </h4>\n <TriggerEventsForm {...props} />\n\n <FormikFormField\n name=\"provisionedConcurrentExecutions\"\n label=\"Provisioned Concurrency\"\n help={\n <HelpField content=\"To enable your function to scale without fluctuations in latency, use provisioned concurrency. Provisioned concurrency runs continually and has separate pricing for concurrency and execution duration. Concurrency cannot be provisioned with a weighted deployment strategy.\" />\n }\n input={(props) =>\n values.deploymentStrategy === '$WEIGHTED' ? (\n <NumberInput {...props} min={0} max={0} />\n ) : (\n <NumberInput {...props} min={0} max={3000} />\n )\n }\n required={false}\n />\n\n <h4> Deployment Strategy </h4>\n <FormikFormField\n label=\"Strategy\"\n name=\"deploymentStrategy\"\n help={<HelpField content=\"\" />}\n input={(inputProps: IFormInputProps) => (\n <ReactSelectInput\n {...inputProps}\n clearable={false}\n options={DeploymentStrategyList}\n optionRenderer={(option) => (\n <DeploymentStrategyPicker config={props} value={option.value as any} showingDetails={true} />\n )}\n />\n )}\n />\n {values.deploymentStrategy ? <DeploymentStrategyForm {...props} /> : null}\n </div>\n );\n}\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport React from 'react';\n\nimport type {\n IExecutionDetailsSectionProps,\n IFormikStageConfigInjectedProps,\n IStage,\n IStageConfigProps,\n IStageTypeConfig,\n} from '@spinnaker/core';\nimport {\n ExecutionDetailsSection,\n ExecutionDetailsTasks,\n FormikStageConfig,\n FormValidator,\n HelpContentsRegistry,\n StageFailureMessage,\n} from '@spinnaker/core';\n\nimport { RouteLambdaFunctionStageForm } from './RouteLambdaFunctionStageForm';\nimport { awsArnValidator } from '../../../aws.validators';\n\nexport function RouteLambdaExecutionDetails(props: IExecutionDetailsSectionProps) {\n const { stage } = props;\n\n return (\n <ExecutionDetailsSection name={props.name} current={props.current}>\n <StageFailureMessage stage={stage} message={stage.outputs.failureMessage} />\n <div>\n <p> Function Name: {stage.outputs.functionName ? stage.outputs.functionName : 'N/A'} </p>\n <p>\n {' '}\n Deployed Alias:{' '}\n {stage.outputs['deployment:aliasDeployed'] ? stage.outputs['deployment:aliasDeployed'] : 'N/A'}{' '}\n </p>\n <p>\n {' '}\n Deployed Major Version:{' '}\n {stage.outputs['deployment:majorVersionDeployed']\n ? stage.outputs['deployment:majorVersionDeployed']\n : 'N/A'}{' '}\n </p>\n </div>\n </ExecutionDetailsSection>\n );\n}\n\nfunction RouteLambdaConfig(props: IStageConfigProps) {\n return (\n <div className=\"RouteLambdaStageConfig\">\n <FormikStageConfig\n {...props}\n validate={validate}\n onChange={props.updateStage}\n render={(props: IFormikStageConfigInjectedProps) => <RouteLambdaFunctionStageForm {...props} />}\n />\n </div>\n );\n}\n\nexport const initialize = () => {\n HelpContentsRegistry.register('aws.lambdaDeploymentStage.lambda', 'Lambda Name');\n};\n\nfunction validate(stageConfig: IStage) {\n const validator = new FormValidator(stageConfig);\n\n validator\n .field('triggerArns', 'Trigger ARNs')\n .optional()\n .withValidators((value: any, _: string) => {\n const tmp: any[] = value.map((arn: string) => {\n return awsArnValidator(arn, arn);\n });\n const ret: boolean = tmp.every((el) => el === undefined);\n return ret\n ? undefined\n : 'Invalid ARN. Event ARN must match regular expression: /^arn:aws[a-zA-Z-]?:[a-zA-Z_0-9.-]+:./';\n });\n\n return validator.validateForm();\n}\n\n// eslint-disable-next-line\nexport namespace RouteLambdaExecutionDetails {\n export const title = 'Route Lambda Traffic Stage';\n}\n\nexport const lambdaRouteStage: IStageTypeConfig = {\n key: 'Aws.LambdaTrafficRoutingStage',\n label: `AWS Lambda Route`,\n description: 'Route traffic across various versions of your Lambda function',\n component: RouteLambdaConfig, // stage config\n executionDetailsSections: [RouteLambdaExecutionDetails, ExecutionDetailsTasks],\n validateFn: validate,\n};\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { module } from 'angular';\n\nimport { Registry, SETTINGS } from '@spinnaker/core';\n\nimport { lambdaRouteStage } from './LambdaRouteStage';\n\nexport * from './LambdaRouteStage';\n\nexport const AMAZON_PIPELINE_STAGES_LAMBDA_ROUTE = 'spinnaker.amazon.pipeline.stage.Aws.LambdaTrafficRoutingStage';\n\nmodule(AMAZON_PIPELINE_STAGES_LAMBDA_ROUTE, []).config(function () {\n if (SETTINGS.feature.lambdaAdditionalStages) {\n Registry.pipeline.registerStage(lambdaRouteStage);\n }\n});\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry } from '@spinnaker/core';\n\nexport const AMAZON_PIPELINE_STAGES_SCALEDOWNCLUSTER_AWSSCALEDOWNCLUSTERSTAGE =\n 'spinnaker.amazon.pipeline.stage.scaleDownClusterStage';\nexport const name = AMAZON_PIPELINE_STAGES_SCALEDOWNCLUSTER_AWSSCALEDOWNCLUSTERSTAGE; // for backwards compatibility\nmodule(AMAZON_PIPELINE_STAGES_SCALEDOWNCLUSTER_AWSSCALEDOWNCLUSTERSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'scaleDownCluster',\n cloudProvider: 'aws',\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('awsScaleDownClusterStageCtrl', [\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('aws').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'aws';\n\n if (!stage.credentials && $scope.application.defaultCredentials.aws) {\n stage.credentials = $scope.application.defaultCredentials.aws;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.aws) {\n stage.regions.push($scope.application.defaultRegions.aws);\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 AMAZON_PIPELINE_STAGES_SHRINKCLUSTER_AWSSHRINKCLUSTERSTAGE =\n 'spinnaker.amazon.pipeline.stage.aws.shrinkClusterStage';\nexport const name = AMAZON_PIPELINE_STAGES_SHRINKCLUSTER_AWSSHRINKCLUSTERSTAGE; // for backwards compatibility\nmodule(AMAZON_PIPELINE_STAGES_SHRINKCLUSTER_AWSSHRINKCLUSTERSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'shrinkCluster',\n cloudProvider: 'aws',\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('awsShrinkClusterStageCtrl', [\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('aws').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'aws';\n\n if (!stage.credentials && $scope.application.defaultCredentials.aws) {\n stage.credentials = $scope.application.defaultCredentials.aws;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.aws) {\n stage.regions.push($scope.application.defaultRegions.aws);\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","'use strict';\n\nimport { module } from 'angular';\n\nimport { PipelineConfigService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const AMAZON_PIPELINE_STAGES_TAGIMAGE_AWSTAGIMAGESTAGE = 'spinnaker.amazon.pipeline.stage.tagImageStage';\nexport const name = AMAZON_PIPELINE_STAGES_TAGIMAGE_AWSTAGIMAGESTAGE; // for backwards compatibility\nmodule(AMAZON_PIPELINE_STAGES_TAGIMAGE_AWSTAGIMAGESTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'upsertImageTags',\n cloudProvider: 'aws',\n templateUrl: require('./tagImageStage.html'),\n executionDetailsUrl: require('./tagImageExecutionDetails.html'),\n executionConfigSections: ['tagImageConfig', 'taskStatus'],\n });\n })\n .controller('awsTagImageStageCtrl', [\n '$scope',\n ($scope) => {\n $scope.stage.tags = $scope.stage.tags || {};\n $scope.stage.cloudProvider = $scope.stage.cloudProvider || 'aws';\n\n const initUpstreamStages = () => {\n const upstreamDependencies = PipelineConfigService.getAllUpstreamDependencies(\n $scope.pipeline,\n $scope.stage,\n ).filter((stage) => StageConstants.IMAGE_PRODUCING_STAGES.includes(stage.type));\n $scope.consideredStages = new Map(upstreamDependencies.map((stage) => [stage.refId, stage.name]));\n };\n $scope.$watch('stage.requisiteStageRefIds', initUpstreamStages);\n },\n ]);\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport React from 'react';\n\nimport type {\n IAccount,\n IAccountDetails,\n IFormikStageConfigInjectedProps,\n IFormInputProps,\n IFunction,\n IRegion,\n} from '@spinnaker/core';\nimport {\n AccountService,\n CheckboxInput,\n FormikFormField,\n HelpField,\n ReactSelectInput,\n TextInput,\n useData,\n} from '@spinnaker/core';\n\nexport function UpdateCodeLambdaFunctionStageForm(props: IFormikStageConfigInjectedProps) {\n const { values } = props.formik;\n const { functions } = props.application;\n\n const { result: fetchAccountsResult, status: fetchAccountsStatus } = useData(\n () => AccountService.listAccounts('aws'),\n [],\n [],\n );\n\n const onAccountChange = (fieldValue: any): void => {\n props.formik.setFieldValue('region', null);\n props.formik.setFieldValue('functionName', null);\n\n props.formik.setFieldValue('account', fieldValue);\n };\n\n const onRegionChange = (fieldValue: any): void => {\n props.formik.setFieldValue('functionName', null);\n props.formik.setFieldValue('region', fieldValue);\n };\n\n const availableFunctions =\n values.account && values.region\n ? functions.data\n .filter((f: IFunction) => f.account === values.account)\n .filter((f: IFunction) => f.region === values.region)\n .map((f: IFunction) => f.functionName)\n : [];\n\n return (\n <div className=\"form-horizontal\">\n <h4> Basic Settings </h4>\n <FormikFormField\n label=\"Account\"\n name=\"account\"\n onChange={onAccountChange}\n required={true}\n input={(inputProps: IFormInputProps) => (\n <ReactSelectInput\n {...inputProps}\n clearable={false}\n isLoading={fetchAccountsStatus === 'PENDING'}\n stringOptions={fetchAccountsResult.map((acc: IAccount) => acc.name)}\n />\n )}\n />\n <FormikFormField\n label=\"Region\"\n name=\"region\"\n onChange={onRegionChange}\n input={(inputProps: IFormInputProps) => (\n <ReactSelectInput\n clearable={false}\n disabled={!values.account}\n placeholder={values.account ? 'Select...' : 'Select an Account...'}\n {...inputProps}\n isLoading={fetchAccountsStatus === 'PENDING'}\n stringOptions={fetchAccountsResult\n .filter((acc: IAccountDetails) => acc.name === values.account)\n .flatMap((acc: IAccountDetails) => acc.regions)\n .map((reg: IRegion) => reg.name)}\n />\n )}\n />\n <FormikFormField\n label=\"Function Name\"\n name=\"functionName\"\n input={(inputProps: IFormInputProps) => (\n <ReactSelectInput\n clearable={false}\n disabled={!(values.account && values.region)}\n placeholder={values.account && values.region ? 'Select...' : 'Select an Account and Region...'}\n {...inputProps}\n stringOptions={availableFunctions}\n />\n )}\n />\n <FormikFormField\n name=\"s3bucket\"\n label=\"S3 Bucket\"\n help={<HelpField id=\"aws.function.s3bucket\" />}\n input={(props) => <TextInput {...props} placeholder=\"S3 bucket name\" />}\n />\n <FormikFormField\n name=\"s3key\"\n label=\"S3 Key\"\n help={<HelpField id=\"aws.function.s3key\" />}\n input={(props) => <TextInput {...props} placeholder=\"object.zip\" />}\n />\n <FormikFormField\n name=\"publish\"\n label=\"Publish\"\n help={<HelpField id=\"aws.function.publish\" />}\n input={(props) => <CheckboxInput {...props} />}\n />\n </div>\n );\n}\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport React from 'react';\n\nimport type { IFormikStageConfigInjectedProps, IStage, IStageConfigProps } from '@spinnaker/core';\nimport { FormikStageConfig, FormValidator } from '@spinnaker/core';\nimport { s3BucketNameValidator } from '../../../aws.validators';\n\nimport { UpdateCodeLambdaFunctionStageForm } from './components';\n\nimport './LambdaUpdateCodeStage.less';\n\nexport function LambdaUpdateCodeConfig(props: IStageConfigProps) {\n return (\n <div className=\"LambdaUpdateCodeConfig\">\n <FormikStageConfig\n {...props}\n validate={validate}\n onChange={props.updateStage}\n render={(props: IFormikStageConfigInjectedProps) => <UpdateCodeLambdaFunctionStageForm {...props} />}\n />\n </div>\n );\n}\n\nexport function validate(stageConfig: IStage) {\n const validator = new FormValidator(stageConfig);\n\n validator.field('account', 'Account Name').required();\n\n validator.field('region', 'Region').required();\n\n validator.field('functionName', 'Lambda Function Name').required();\n\n validator.field('s3key', 'S3 Object Key').required();\n\n validator.field('s3bucket', 'S3 Bucket Name').required().withValidators(s3BucketNameValidator);\n\n return validator.validateForm();\n}\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport React from 'react';\n\nimport type { IExecutionDetailsSectionProps } from '@spinnaker/core';\nimport { ExecutionDetailsSection, StageFailureMessage } from '@spinnaker/core';\n\nexport function LambdaUpdateCodeExecutionDetails(props: IExecutionDetailsSectionProps) {\n const { stage, current, name } = props;\n return (\n <ExecutionDetailsSection name={name} current={current}>\n <StageFailureMessage stage={stage} message={stage.outputs.failureMessage} />\n <div>\n <p>\n {' '}\n <b> Function Name: </b> {stage.outputs.functionName ? stage.outputs.functionName : 'N/A'}{' '}\n </p>\n <p>\n {' '}\n <b> Function ARN: </b> {stage.outputs.functionARN ? stage.outputs.functionARN : 'N/A'}{' '}\n </p>\n </div>\n </ExecutionDetailsSection>\n );\n}\n\n// eslint-disable-next-line\nexport namespace LambdaUpdateCodeExecutionDetails {\n export const title = 'Lambda Update Code Stage';\n}\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport type { IStageTypeConfig } from '@spinnaker/core';\nimport { ExecutionDetailsTasks, HelpContentsRegistry } from '@spinnaker/core';\n\nimport { LambdaUpdateCodeConfig, validate } from './LambdaUpdateCodeStageConfig';\nimport { LambdaUpdateCodeExecutionDetails } from './LambdaUpdateCodeStageExecutionDetails';\n\nexport const initialize = () => {\n HelpContentsRegistry.register('aws.lambdaDeploymentStage.lambda', 'Lambda Name');\n};\n\nexport const lambdaUpdateCodeStage: IStageTypeConfig = {\n key: 'Aws.LambdaUpdateCodeStage',\n label: `AWS Lambda Update Code`,\n description: 'Update code for a single AWS Lambda Function',\n component: LambdaUpdateCodeConfig, // stage config\n executionDetailsSections: [LambdaUpdateCodeExecutionDetails, ExecutionDetailsTasks],\n validateFn: validate,\n};\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { module } from 'angular';\n\nimport { Registry, SETTINGS } from '@spinnaker/core';\n\nimport { lambdaUpdateCodeStage } from './LambdaUpdateCodeStage';\n\nexport * from './LambdaUpdateCodeStage';\n\nexport const AMAZON_PIPELINE_STAGES_LAMBDA_UPDATE = 'spinnaker.amazon.pipeline.stage.Aws.LambdaUpdateCodeStage';\n\nmodule(AMAZON_PIPELINE_STAGES_LAMBDA_UPDATE, []).config(function () {\n if (SETTINGS.feature.lambdaAdditionalStages) {\n Registry.pipeline.registerStage(lambdaUpdateCodeStage);\n }\n});\n","import { module } from 'angular';\n\nimport { AwsReactInjector } from './aws.react.injector';\n\nexport const AWS_REACT_MODULE = 'spinnaker.amazon.react';\nmodule(AWS_REACT_MODULE, []).run([\n '$injector',\n function ($injector: any) {\n // Make angular services importable and (TODO when relevant) convert angular components to react\n AwsReactInjector.initialize($injector);\n },\n]);\n","import { module } from 'angular';\n\nimport type { ISecurityGroupSearchResult } from '@spinnaker/core';\nimport type { ISearchResultFormatter } from '@spinnaker/core';\n\nimport { VpcReader } from '../vpc/VpcReader';\n\nexport const AMAZON_SEARCH_SEARCHRESULTFORMATTER = 'spinnaker.amazon.search.searchResultFormatter';\nexport const name = AMAZON_SEARCH_SEARCHRESULTFORMATTER; // for backwards compatibility\nmodule(AMAZON_SEARCH_SEARCHRESULTFORMATTER, []).factory('awsSearchResultFormatter', function () {\n return {\n securityGroups: function (entry: ISecurityGroupSearchResult) {\n return VpcReader.getVpcName(entry.vpcId).then(function (vpcName) {\n const region = vpcName ? entry.region + ' - ' + vpcName.toLowerCase() : entry.region;\n return entry.name + ' (' + region + ')';\n });\n } as ISearchResultFormatter,\n };\n});\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport _ from 'lodash';\nimport { Subject } from 'rxjs';\n\nimport {\n AccountService,\n filterObjectValues,\n FirewallLabels,\n InfrastructureCaches,\n ModalWizard,\n NameUtils,\n SECURITY_GROUP_READER,\n SecurityGroupWriter,\n TaskMonitor,\n} from '@spinnaker/core';\nimport { AWSProviderSettings } from '../../aws.settings';\nimport { VpcReader } from '../../vpc/VpcReader';\n\nexport const AMAZON_SECURITYGROUP_CONFIGURE_CONFIGSECURITYGROUP_MIXIN_CONTROLLER =\n 'spinnaker.amazon.securityGroup.baseConfig.controller';\nexport const name = AMAZON_SECURITYGROUP_CONFIGURE_CONFIGSECURITYGROUP_MIXIN_CONTROLLER; // for backwards compatibility\nmodule(AMAZON_SECURITYGROUP_CONFIGURE_CONFIGSECURITYGROUP_MIXIN_CONTROLLER, [\n UIROUTER_ANGULARJS,\n SECURITY_GROUP_READER,\n]).controller('awsConfigSecurityGroupMixin', [\n '$scope',\n '$state',\n '$uibModalInstance',\n 'application',\n 'securityGroup',\n 'securityGroupReader',\n 'cacheInitializer',\n function ($scope, $state, $uibModalInstance, application, securityGroup, securityGroupReader, cacheInitializer) {\n let allSecurityGroups;\n const ctrl = this;\n $scope.self = $scope;\n $scope.application = application;\n $scope.customComponentIsvalid = true;\n\n $scope.state = {\n submitting: false,\n regionError: undefined,\n refreshingSecurityGroups: false,\n removedRules: [],\n infiniteScroll: {\n numToAdd: 20,\n currentItems: 20,\n },\n };\n\n $scope.allVpcs = [];\n $scope.wizard = ModalWizard;\n $scope.hideClassic = false;\n\n ctrl.addMoreItems = function () {\n $scope.state.infiniteScroll.currentItems += $scope.state.infiniteScroll.numToAdd;\n };\n\n const getAccount = () => $scope.securityGroup.accountName || $scope.securityGroup.credentials;\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 $uibModalInstance.close();\n const newStateParams = {\n name: $scope.securityGroup.name,\n accountId: getAccount(),\n region: $scope.securityGroup.regions[0],\n vpcId: $scope.securityGroup.vpcId,\n provider: 'aws',\n };\n if (!$state.includes('**.firewallDetails')) {\n $state.go('.firewallDetails', newStateParams);\n } else {\n $state.go('^.firewallDetails', newStateParams);\n }\n }\n\n function onTaskComplete() {\n application.securityGroups.refresh();\n application.securityGroups.onNextRefresh($scope, onApplicationRefresh);\n }\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: `Creating your ${FirewallLabels.get('firewall')}`,\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n $scope.securityGroup = securityGroup;\n\n ctrl.initializeAccounts = () => {\n return AccountService.listAllAccounts('aws').then(function (accounts) {\n $scope.accounts = accounts.filter((a) => a.authorized !== false);\n $scope.allAccounts = accounts;\n ctrl.accountUpdated();\n });\n };\n\n ctrl.upsert = function () {\n $scope.taskMonitor.submit(function () {\n return SecurityGroupWriter.upsertSecurityGroup($scope.securityGroup, application, 'Create');\n });\n };\n\n function clearSecurityGroups() {\n $scope.availableSecurityGroups = [];\n $scope.existingSecurityGroupNames = [];\n }\n\n ctrl.accountUpdated = function () {\n const securityGroup = $scope.securityGroup;\n // sigh.\n securityGroup.account = securityGroup.accountId = securityGroup.accountName = securityGroup.credentials;\n AccountService.getRegionsForAccount(getAccount()).then((regions) => {\n $scope.regions = regions.map((region) => region.name);\n clearSecurityGroups();\n ctrl.regionUpdated();\n if ($scope.state.isNew) {\n ctrl.updateName();\n }\n });\n };\n\n ctrl.regionUpdated = function () {\n const account = getAccount();\n const regions = $scope.securityGroup.regions || [];\n VpcReader.listVpcs().then(function (vpcs) {\n const vpcsByName = _.groupBy(\n vpcs.filter((vpc) => vpc.account === account),\n 'label',\n );\n $scope.allVpcs = vpcs;\n const available = [];\n _.forOwn(vpcsByName, function (vpcsToTest, label) {\n const foundInAllRegions = regions.every((region) => {\n return vpcsToTest.some((test) => test.region === region && test.account === account);\n });\n if (foundInAllRegions) {\n available.push({\n ids: vpcsToTest.filter((t) => regions.includes(t.region)).map((vpc) => vpc.id),\n label: label,\n deprecated: vpcsToTest[0].deprecated,\n });\n }\n });\n\n $scope.activeVpcs = available.filter(function (vpc) {\n return !vpc.deprecated;\n });\n $scope.deprecatedVpcs = available.filter(function (vpc) {\n return vpc.deprecated;\n });\n $scope.vpcs = available;\n $scope.state.regionError =\n $scope.state.isClone && ($scope.securityGroup.regions || []).includes($scope.state.originRegion);\n ctrl.updateVpcId(available);\n });\n };\n\n this.updateVpcId = (available) => {\n const lockoutDate = AWSProviderSettings.classicLaunchLockout;\n if (!securityGroup.id && lockoutDate) {\n const createTs = Number(_.get(application, 'attributes.createTs', 0));\n if (createTs >= lockoutDate) {\n $scope.hideClassic = true;\n if (!securityGroup.vpcId && available.length) {\n let defaultMatch;\n if (AWSProviderSettings.defaults.vpc) {\n const match = available.find((vpc) => vpc.label === AWSProviderSettings.defaults.vpc);\n if (match) {\n defaultMatch = match.ids[0];\n }\n }\n securityGroup.vpcId =\n defaultMatch || ($scope.activeVpcs.length ? $scope.activeVpcs[0].ids[0] : available[0].ids[0]);\n }\n }\n }\n\n // When cloning a security group, if a user chooses a different account to clone to, but wants to retain the same VPC in this new account, it was not possible.\n // We matched the vpc ids from one account to another but they are never the same. In order to ensure that users still retain their VPC choice, irrespective of the account, we switched to using vpc names instead of vpc ids\n const selectedVpc = $scope.allVpcs.find((vpc) => vpc.id === $scope.securityGroup.vpcId);\n const match = (available || []).find((vpc) => selectedVpc && selectedVpc.label === vpc.label);\n const defaultVpc =\n (available || []).find((vpc) => AWSProviderSettings.defaults.vpc === vpc.label) || ($scope.activeVpcs || [])[0];\n $scope.securityGroup.vpcId = (match && match.ids[0]) || (defaultVpc && defaultVpc.ids[0]);\n this.vpcUpdated();\n };\n\n this.vpcUpdated = function () {\n const account = getAccount();\n const regions = $scope.securityGroup.regions;\n if (account && regions.length) {\n configureFilteredSecurityGroups();\n } else {\n clearSecurityGroups();\n }\n $scope.coordinatesChanged.next();\n };\n\n function configureFilteredSecurityGroups() {\n const vpcId = $scope.securityGroup.vpcId || null;\n const account = getAccount();\n const regions = $scope.securityGroup.regions || [];\n let existingSecurityGroupNames = [];\n let availableSecurityGroups = [];\n\n regions.forEach(function (region) {\n let regionalVpcId = null;\n if (vpcId) {\n const baseVpc = _.find($scope.allVpcs, { id: vpcId });\n regionalVpcId = _.find($scope.allVpcs, { account: account, region: region, name: baseVpc.name }).id;\n }\n\n const regionalGroupNames = _.get(allSecurityGroups, [account, 'aws', region].join('.'), [])\n .filter((sg) => sg.vpcId === regionalVpcId)\n .map((sg) => sg.name);\n\n existingSecurityGroupNames = _.uniq(existingSecurityGroupNames.concat(regionalGroupNames));\n\n if (!availableSecurityGroups.length) {\n availableSecurityGroups = existingSecurityGroupNames;\n } else {\n availableSecurityGroups = _.intersection(availableSecurityGroups, regionalGroupNames);\n }\n });\n\n $scope.availableSecurityGroups = availableSecurityGroups;\n $scope.existingSecurityGroupNames = existingSecurityGroupNames;\n $scope.state.securityGroupsLoaded = true;\n clearInvalidSecurityGroups();\n }\n\n ctrl.mixinUpsert = function (descriptor) {\n $scope.taskMonitor.submit(function () {\n return SecurityGroupWriter.upsertSecurityGroup($scope.securityGroup, application, descriptor);\n });\n };\n\n function clearInvalidSecurityGroups() {\n const removed = $scope.state.removedRules;\n const securityGroup = $scope.securityGroup;\n $scope.securityGroup.securityGroupIngress = (securityGroup.securityGroupIngress || []).filter((rule) => {\n if (\n rule.accountName &&\n rule.vpcId &&\n (rule.accountName !== securityGroup.accountName || rule.vpcId !== securityGroup.vpcId)\n ) {\n return true;\n }\n if (rule.name && !$scope.availableSecurityGroups.includes(rule.name) && !removed.includes(rule.name)) {\n removed.push(rule.name);\n return false;\n }\n return true;\n });\n if (removed.length) {\n ModalWizard.markDirty('Ingress');\n }\n }\n\n ctrl.refreshSecurityGroups = function () {\n $scope.state.refreshingSecurityGroups = true;\n return cacheInitializer.refreshCache('securityGroups').then(function () {\n return ctrl.initializeSecurityGroups().then(function () {\n ctrl.vpcUpdated();\n $scope.state.refreshingSecurityGroups = false;\n setSecurityGroupRefreshTime();\n });\n });\n };\n\n function setSecurityGroupRefreshTime() {\n $scope.state.refreshTime = InfrastructureCaches.get('securityGroups').getStats().ageMax;\n }\n\n allSecurityGroups = {};\n\n $scope.allSecurityGroupsUpdated = new Subject();\n $scope.coordinatesChanged = new Subject();\n\n ctrl.initializeSecurityGroups = function () {\n return securityGroupReader.getAllSecurityGroups().then(function (securityGroups) {\n setSecurityGroupRefreshTime();\n allSecurityGroups = securityGroups;\n const account = $scope.securityGroup.credentials || $scope.securityGroup.accountName;\n const region = $scope.securityGroup.regions[0];\n const vpcId = $scope.securityGroup.vpcId || null;\n\n let availableGroups;\n if (account && region) {\n availableGroups = _.filter(securityGroups[account].aws[region], { vpcId: vpcId });\n } else {\n availableGroups = securityGroups;\n }\n\n $scope.availableSecurityGroups = _.map(availableGroups, 'name');\n const securityGroupExclusions = AWSProviderSettings.securityGroupExclusions;\n $scope.allSecurityGroups = securityGroupExclusions\n ? filterObjectValues(securityGroups, (name) => !securityGroupExclusions.includes(name))\n : securityGroups;\n $scope.allSecurityGroupsUpdated.next();\n $scope.state.regionError =\n $scope.state.isClone && ($scope.securityGroup.regions || []).includes($scope.state.originRegion);\n });\n };\n\n ctrl.cancel = function () {\n $uibModalInstance.dismiss();\n };\n\n const classicPattern = /^[\\x20-\\x7F]+$/;\n const vpcPattern = /^[a-zA-Z0-9\\s._\\-:/()#,@[\\]+=&;{}!$*]+$/;\n\n ctrl.getCurrentNamePattern = function () {\n return $scope.securityGroup.vpcId ? vpcPattern : classicPattern;\n };\n\n ctrl.updateName = function () {\n const { securityGroup } = $scope;\n const appName = application.isStandalone ? application.name.split('-')[0] : application.name;\n const name = NameUtils.getClusterName(appName, securityGroup.stack, securityGroup.detail);\n securityGroup.name = name;\n $scope.namePreview = name;\n };\n\n ctrl.namePattern = {\n test: function (name) {\n return ctrl.getCurrentNamePattern().test(name);\n },\n };\n\n ctrl.addRule = function (ruleset) {\n ruleset.push({\n type: 'tcp',\n startPort: 7001,\n endPort: 7001,\n });\n };\n\n ctrl.removeRule = function (ruleset, index) {\n ruleset.splice(index, 1);\n };\n\n ctrl.updateRuleType = function (type, ruleset, index) {\n const rule = ruleset[index];\n if (type === 'icmp' || type === 'icmpv6') {\n rule.startPort = 0;\n rule.endPort = 0;\n }\n };\n\n ctrl.dismissRemovedRules = function () {\n $scope.state.removedRules = [];\n ModalWizard.markClean('Ingress');\n ModalWizard.markComplete('Ingress');\n };\n },\n]);\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, FirewallLabels } from '@spinnaker/core';\nimport { AMAZON_SECURITYGROUP_CONFIGURE_CONFIGSECURITYGROUP_MIXIN_CONTROLLER } from '../configure/configSecurityGroup.mixin.controller';\n\nexport const AMAZON_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER =\n 'spinnaker.amazon.securityGroup.clone.controller';\nexport const name = AMAZON_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER; // for backwards compatibility\nangular\n .module(AMAZON_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER, [\n AMAZON_SECURITYGROUP_CONFIGURE_CONFIGSECURITYGROUP_MIXIN_CONTROLLER,\n ])\n .controller('awsCloneSecurityGroupController', [\n '$scope',\n '$uibModalInstance',\n '$controller',\n 'securityGroup',\n 'application',\n function ($scope, $uibModalInstance, $controller, securityGroup, application) {\n const vm = this;\n\n vm.firewallLabel = FirewallLabels.get('Firewall');\n\n $scope.pages = {\n location: require('../configure/createSecurityGroupProperties.html'),\n ingress: require('../configure/createSecurityGroupIngress.html'),\n };\n\n securityGroup.credentials = securityGroup.accountName;\n $scope.namePreview = securityGroup.name;\n\n angular.extend(\n this,\n $controller('awsConfigSecurityGroupMixin', {\n $scope: $scope,\n $uibModalInstance: $uibModalInstance,\n application: application,\n securityGroup: securityGroup,\n }),\n );\n $scope.state.isNew = true;\n // We want to let people clone as a means to copy security groups across\n // regions so don't block them because the names already exist.\n $scope.allowDuplicateNames = true;\n // Used to prevent cloning into an the exiting region\n $scope.state.isClone = true;\n $scope.state.originRegion = securityGroup.regions && securityGroup.regions[0];\n\n AccountService.listAccounts('aws').then(function (accounts) {\n $scope.accounts = accounts;\n vm.accountUpdated();\n });\n\n securityGroup.securityGroupIngress = _.chain(securityGroup.inboundRules)\n .filter(function (rule) {\n return rule.securityGroup;\n })\n .map(function (rule) {\n return rule.portRanges.map(function (portRange) {\n return {\n name: rule.securityGroup.name,\n type: rule.protocol,\n startPort: portRange.startPort,\n endPort: portRange.endPort,\n };\n });\n })\n .flatten()\n .value();\n\n securityGroup.ipIngress = _.chain(securityGroup.inboundRules)\n .filter(function (rule) {\n return rule.range;\n })\n .map(function (rule) {\n return rule.portRanges.map(function (portRange) {\n return {\n cidr: rule.range.ip + rule.range.cidr,\n type: rule.protocol,\n startPort: portRange.startPort,\n endPort: portRange.endPort,\n };\n });\n })\n .flatten()\n .value();\n\n vm.upsert = function () {\n // <account-select-field> only updates securityGroup.credentials, but Orca looks at account* before looking at credentials\n // Updating the rest of the attributes to send the correct (expected) account for all attributes\n const { credentials } = $scope.securityGroup;\n Object.assign($scope.securityGroup, {\n account: credentials,\n accountName: credentials,\n accountId: credentials,\n });\n\n vm.mixinUpsert('Clone');\n };\n\n vm.initializeSecurityGroups().then(vm.initializeAccounts);\n },\n ]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\n\nimport { CACHE_INITIALIZER_SERVICE, FirewallLabels } from '@spinnaker/core';\n\nexport const AMAZON_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL =\n 'spinnaker.amazon.securityGroup.create.controller';\nexport const name = AMAZON_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL; // for backwards compatibility\nangular\n .module(AMAZON_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL, [UIROUTER_ANGULARJS, CACHE_INITIALIZER_SERVICE])\n .controller('awsCreateSecurityGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n '$state',\n '$controller',\n 'cacheInitializer',\n 'application',\n 'securityGroup',\n function ($scope, $uibModalInstance, $state, $controller, cacheInitializer, application, securityGroup) {\n $scope.pages = {\n location: require('./createSecurityGroupProperties.html'),\n ingress: require('./createSecurityGroupIngress.html'),\n };\n\n const ctrl = this;\n\n ctrl.translate = (label) => FirewallLabels.get(label);\n\n angular.extend(\n this,\n $controller('awsConfigSecurityGroupMixin', {\n $scope: $scope,\n $uibModalInstance: $uibModalInstance,\n application: application,\n securityGroup: securityGroup,\n }),\n );\n\n $scope.state.isNew = true;\n\n ctrl.upsert = () => ctrl.mixinUpsert('Create');\n\n ctrl.initializeSecurityGroups().then(ctrl.initializeAccounts);\n },\n ]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { FirewallLabels, SecurityGroupWriter, TaskMonitor } from '@spinnaker/core';\n\nexport const AMAZON_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL = 'spinnaker.amazon.securityGroup.edit.controller';\nexport const name = AMAZON_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL; // for backwards compatibility\nangular\n .module(AMAZON_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL, [UIROUTER_ANGULARJS])\n .controller('awsEditSecurityGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n '$state',\n 'application',\n 'securityGroup',\n '$controller',\n function ($scope, $uibModalInstance, $state, application, securityGroup, $controller) {\n $scope.self = $scope;\n $scope.pages = {\n ingress: require('./createSecurityGroupIngress.html'),\n };\n\n $scope.securityGroup = securityGroup;\n\n $scope.state = {\n refreshingSecurityGroups: false,\n };\n\n $scope.securityGroup.regions = [$scope.securityGroup.region];\n $scope.securityGroup.credentials = $scope.securityGroup.accountName;\n\n angular.extend(\n this,\n $controller('awsConfigSecurityGroupMixin', {\n $scope: $scope,\n $uibModalInstance: $uibModalInstance,\n application: application,\n securityGroup: securityGroup,\n }),\n );\n\n $scope.state.isNew = false;\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: `Updating your ${FirewallLabels.get('firewall')}`,\n modalInstance: $uibModalInstance,\n onTaskComplete: () => application.securityGroups.refresh(),\n });\n\n securityGroup.securityGroupIngress = _.chain(securityGroup.inboundRules)\n .filter((rule) => rule.securityGroup)\n .map((rule) =>\n rule.portRanges.map((portRange) => {\n const vpcId = rule.securityGroup.vpcId === securityGroup.vpcId ? null : rule.securityGroup.vpcId;\n return {\n accountName: rule.securityGroup.accountName || rule.securityGroup.accountId,\n accountId: rule.securityGroup.accountId,\n vpcId: vpcId,\n id: rule.securityGroup.id,\n name: rule.securityGroup.inferredName ? null : rule.securityGroup.name,\n type: rule.protocol,\n startPort: portRange.startPort,\n endPort: portRange.endPort,\n existing: true,\n };\n }),\n )\n .flatten()\n .value();\n\n securityGroup.ipIngress = _.chain(securityGroup.inboundRules)\n .filter(function (rule) {\n return rule.range;\n })\n .map(function (rule) {\n return rule.portRanges.map(function (portRange) {\n return {\n cidr: rule.range.ip + rule.range.cidr,\n type: rule.protocol,\n startPort: portRange.startPort,\n endPort: portRange.endPort,\n };\n });\n })\n .flatten()\n .value();\n\n this.upsert = function () {\n const group = $scope.securityGroup;\n const command = {\n credentials: group.accountName,\n name: group.name,\n description: group.description,\n vpcId: group.vpcId,\n region: group.region,\n securityGroupIngress: group.securityGroupIngress,\n ipIngress: group.ipIngress,\n };\n\n $scope.taskMonitor.submit(function () {\n return SecurityGroupWriter.upsertSecurityGroup(command, application, 'Update');\n });\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n\n this.initializeSecurityGroups().then(this.initializeAccounts);\n },\n ]);\n","import type { IComponentOptions, IController } from 'angular';\nimport { module } from 'angular';\nimport { intersection, uniq } from 'lodash';\nimport type { Subject, Subscription } from 'rxjs';\n\nimport type {\n IAccountDetails,\n ISecurityGroup,\n ISecurityGroupRule,\n ISecurityGroupsByAccountSourceData,\n IVpc,\n} from '@spinnaker/core';\nimport { AWSProviderSettings } from '../../aws.settings';\n\ninterface IInfiniteScroll {\n currentItems: number;\n}\n\ninterface IRuleCommand extends ISecurityGroupRule {\n crossAccountEnabled?: boolean;\n accountName?: string;\n vpcId?: string;\n existing: boolean;\n name: string;\n}\n\ninterface ISecurityGroupCommand extends ISecurityGroup {\n regions: string[];\n credentials: string;\n}\n\nclass IngressRuleSelectorController implements IController {\n public rule: IRuleCommand;\n public securityGroup: ISecurityGroupCommand;\n public accounts: IAccountDetails[];\n public crossAccountAccounts: IAccountDetails[];\n public vpcs: IVpc[];\n public regionalVpcs: { [region: string]: IVpc[] };\n public allSecurityGroups: ISecurityGroupsByAccountSourceData;\n public coordinatesChanged: Subject<void>;\n public allSecurityGroupsUpdated: Subject<void>;\n public availableSecurityGroups: string[];\n public coordinatesChangedListener: Subscription;\n public securityGroupsUpdatedListener: Subscription;\n\n public infiniteScroll: IInfiniteScroll = {\n currentItems: 20,\n };\n\n public addMoreItems(): void {\n this.infiniteScroll.currentItems += 20;\n }\n\n public resetCurrentItems(): void {\n this.infiniteScroll.currentItems = 20;\n }\n\n public addRegionalVpc(vpc: IVpc): void {\n const account = vpc.account;\n if (!this.regionalVpcs[account]) {\n this.regionalVpcs[account] = [];\n }\n this.regionalVpcs[account].push({\n name: vpc.name,\n region: vpc.region,\n account,\n id: vpc.id,\n label: vpc.label,\n deprecated: vpc.deprecated,\n cloudProvider: vpc.cloudProvider,\n });\n }\n\n public enableCrossAccount(): void {\n this.rule.crossAccountEnabled = true;\n this.crossAccountAccounts = this.accounts;\n const exclusions = AWSProviderSettings?.crossAccountIngressExclusions[this.securityGroup.credentials];\n if (exclusions && Array.isArray(exclusions)) {\n this.crossAccountAccounts = this.accounts.filter((account) => !exclusions.includes(account.name));\n }\n this.rule.accountName = this.securityGroup.credentials;\n this.rule.vpcId = this.securityGroup.vpcId;\n }\n\n public disableCrossAccount(): void {\n this.rule.crossAccountEnabled = false;\n this.rule.accountName = undefined;\n this.rule.vpcId = undefined;\n }\n\n public $onInit(): void {\n this.setAvailableSecurityGroups();\n this.coordinatesChangedListener = this.coordinatesChanged.subscribe(() => this.setAvailableSecurityGroups());\n this.securityGroupsUpdatedListener = this.allSecurityGroupsUpdated.subscribe(() =>\n this.setAvailableSecurityGroups(),\n );\n }\n\n public $onDestroy() {\n this.coordinatesChangedListener.unsubscribe();\n this.securityGroupsUpdatedListener.unsubscribe();\n }\n\n public setAvailableSecurityGroups(): void {\n const account = this.rule.accountName || this.securityGroup.credentials;\n const regions = this.securityGroup.regions;\n const vpcId = this.rule.vpcId || this.securityGroup.vpcId || null;\n\n let existingSecurityGroupNames: string[] = [];\n let availableSecurityGroups: string[] = [];\n\n if (regions.length > 1) {\n this.disableCrossAccount();\n }\n\n regions.forEach((region) => {\n let regionalVpcId: string = null;\n if (vpcId) {\n const baseVpc: IVpc = this.vpcs.find((vpc) => vpc.id === vpcId);\n const regionalVpc: IVpc = this.vpcs.find(\n (vpc) => vpc.account === account && vpc.region === region && vpc.name === baseVpc.name,\n );\n regionalVpcId = regionalVpc ? regionalVpc.id : undefined;\n }\n\n const regionalGroupNames = (this.allSecurityGroups?.[account]?.aws?.[region] ?? [])\n .filter((sg) => sg.vpcId === regionalVpcId)\n .map((sg) => sg.name);\n\n existingSecurityGroupNames = uniq(existingSecurityGroupNames.concat(regionalGroupNames));\n\n if (!availableSecurityGroups.length) {\n availableSecurityGroups = existingSecurityGroupNames;\n } else {\n availableSecurityGroups = intersection(availableSecurityGroups, regionalGroupNames);\n }\n });\n if (regions.length === 1) {\n this.configureAvailableVpcs();\n }\n this.availableSecurityGroups = availableSecurityGroups;\n if (!availableSecurityGroups.includes(this.rule.name) && !this.rule.existing) {\n this.rule.name = null;\n }\n }\n\n public configureAvailableVpcs(): void {\n const region = this.securityGroup.regions[0];\n const filtered = this.vpcs.filter((vpc) => vpc.region === region);\n this.regionalVpcs = {};\n filtered.forEach((vpc) => this.addRegionalVpc(vpc));\n this.reconcileRuleVpc(filtered);\n }\n\n private reconcileRuleVpc(filtered: IVpc[]): void {\n if (this.rule.vpcId && !this.rule.existing) {\n if (!this.securityGroup.vpcId) {\n this.rule.vpcId = null;\n this.rule.name = null;\n return;\n }\n const baseVpc = filtered.find((vpc) => vpc.id === this.rule.vpcId);\n const regionalVpc = filtered.find((vpc) => vpc.account === this.rule.accountName && vpc.name === baseVpc.name);\n if (regionalVpc) {\n this.rule.vpcId = regionalVpc.id;\n } else {\n this.rule.vpcId = null;\n this.rule.name = null;\n }\n }\n }\n}\n\nconst ingressRuleSelector: IComponentOptions = {\n bindings: {\n rule: '=',\n securityGroup: '=',\n accounts: '=',\n vpcs: '=',\n allSecurityGroups: '=',\n coordinatesChanged: '=',\n allSecurityGroupsUpdated: '=',\n },\n templateUrl: require('./ingressRuleGroupSelector.component.html'),\n controller: IngressRuleSelectorController,\n};\n\nexport const INGRESS_RULE_GROUP_SELECTOR_COMPONENT =\n 'spinnaker.amazon.securityGroup.configure.ingressRuleGroupSelector';\nmodule(INGRESS_RULE_GROUP_SELECTOR_COMPONENT, []).component('ingressRuleGroupSelector', ingressRuleSelector);\n","import React from 'react';\nimport { Overridable } from '@spinnaker/core';\nimport type { ISecurityGroupDetail } from '@spinnaker/core';\n\nexport interface IAdditionalIpRulesProps {\n securityGroupDetails: ISecurityGroupDetail;\n ctrl: any;\n scope: any;\n}\n\n@Overridable('aws.securityGroup.details.custom')\nexport class SecurityGroupDetailsCustom extends React.Component<IAdditionalIpRulesProps> {\n public render(): any {\n return null;\n }\n}\n","import { module } from 'angular';\nimport { react2angular } from 'react2angular';\n\nimport { withErrorBoundary } from '@spinnaker/core';\n\nimport { SecurityGroupDetailsCustom } from './securityGroupDetailsCustom';\n\nexport const AWS_SECURITY_GROUP_DETAILS_CUSTOM = 'spinnaker.amazon.securityGroups.details.custom.component';\nmodule(AWS_SECURITY_GROUP_DETAILS_CUSTOM, []).component(\n 'securityGroupDetailsCustom',\n react2angular(withErrorBoundary(SecurityGroupDetailsCustom, 'securityGroupDetailsCustom'), [\n 'securityGroupDetails',\n 'ctrl',\n 'scope',\n ]),\n);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport {\n CloudProviderRegistry,\n ConfirmationModalService,\n confirmNotManaged,\n FirewallLabels,\n MANAGED_RESOURCE_DETAILS_INDICATOR,\n noop,\n RecentHistoryService,\n SECURITY_GROUP_READER,\n SecurityGroupWriter,\n SETTINGS,\n} from '@spinnaker/core';\n\nimport { AWSProviderSettings } from '../../aws.settings';\nimport { AMAZON_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER } from '../clone/cloneSecurityGroup.controller';\nimport { VpcReader } from '../../vpc/VpcReader';\n\nexport const AMAZON_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER =\n 'spinnaker.amazon.securityGroup.details.controller';\nexport const name = AMAZON_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER; // for backwards compatibility\nangular\n .module(AMAZON_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER, [\n UIROUTER_ANGULARJS,\n SECURITY_GROUP_READER,\n AMAZON_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER,\n MANAGED_RESOURCE_DETAILS_INDICATOR,\n ])\n .controller('awsSecurityGroupDetailsCtrl', [\n '$scope',\n '$state',\n 'resolvedSecurityGroup',\n 'app',\n 'securityGroupReader',\n '$uibModal',\n function ($scope, $state, resolvedSecurityGroup, app, securityGroupReader, $uibModal) {\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('aws', 'securityGroup.detailsTemplateUrl');\n\n $scope.isDisabled = !AWSProviderSettings.adHocInfraWritesEnabled;\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({\n startPort: range.startPort,\n endPort: range.endPort,\n protocol: rule.protocol,\n description: rule.description,\n });\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 function checkManagement() {\n return confirmNotManaged($scope.securityGroup, application);\n }\n\n this.editInboundRules = function editInboundRules() {\n confirmNotManaged($scope.securityGroup, application).then((notManaged) => {\n // Wait for the MD confirmation modal to go away first to avoid react/angular bootstrap fighting over the body.modal-open class\n return new Promise((resolve) => setTimeout(resolve, 500)).then(() => {\n if (notManaged) {\n $uibModal.open({\n templateUrl: require('../configure/editSecurityGroup.html'),\n controller: 'awsEditSecurityGroupCtrl as ctrl',\n size: 'lg',\n resolve: {\n securityGroup: function () {\n return angular.copy($scope.securityGroup);\n },\n application: function () {\n return application;\n },\n },\n });\n }\n });\n });\n };\n\n this.cloneSecurityGroup = function cloneSecurityGroup() {\n $uibModal.open({\n templateUrl: require('../clone/cloneSecurityGroup.html'),\n controller: 'awsCloneSecurityGroupController as ctrl',\n size: 'lg',\n resolve: {\n securityGroup: function () {\n const securityGroup = angular.copy($scope.securityGroup);\n if (securityGroup.region) {\n securityGroup.regions = [securityGroup.region];\n }\n return securityGroup;\n },\n application: function () {\n return application;\n },\n },\n });\n };\n\n this.deleteSecurityGroup = function deleteSecurityGroup() {\n let isRetry = false;\n const retryParams = { removeDependencies: true };\n\n const taskMonitor = {\n application: application,\n title: 'Deleting ' + securityGroup.name,\n onTaskRetry: () => {\n isRetry = true;\n },\n };\n\n const submitMethod = () => {\n const params = {\n cloudProvider: securityGroup.provider,\n vpcId: securityGroup.vpcId,\n };\n if (isRetry) {\n Object.assign(params, retryParams);\n }\n return SecurityGroupWriter.deleteSecurityGroup(securityGroup, application, params);\n };\n\n confirmNotManaged($scope.securityGroup, application).then((notManaged) => {\n notManaged &&\n ConfirmationModalService.confirm({\n header: 'Really delete ' + securityGroup.name + '?',\n buttonText: 'Delete ' + securityGroup.name,\n account: securityGroup.accountId,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n retryBody: `<div><p>Retry deleting the ${FirewallLabels.get(\n 'firewall',\n )} and revoke any dependent ingress rules?</p><p>Any instance or load balancer associations will have to removed manually.</p></div>`,\n });\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 React from 'react';\n\nimport { CollapsibleSection, LabeledValue, LabeledValueList, Overridable } from '@spinnaker/core';\n\nexport interface IIPRangeRulesProps {\n ipRules: IIPRangeRulesDetails[];\n}\nexport interface IIPRangeRulesDetails {\n rules: IRangeRule[];\n address: string;\n}\n\nexport interface IRangeRule {\n startPort: number;\n endPort: number;\n protocol: string;\n description: string;\n}\n\n@Overridable('aws.securityGroup.ip.rules')\nexport class IPRangeRules extends React.Component<IIPRangeRulesProps> {\n public render() {\n const ipRules = this.props.ipRules || [];\n const heading = `IP Range Rules (${ipRules.length})`;\n return (\n <CollapsibleSection heading={heading}>\n {ipRules.map((rule) => (\n <LabeledValueList className=\"horizontal-when-filters-collapsed\">\n <LabeledValue label=\"IP Range\" value={rule.address} />\n <LabeledValue\n label=\"Port Ranges\"\n value={rule.rules.map((r) =>\n r.protocol === '-1' ? (\n <span>\n All ports and protocols\n {rule.rules.length > 1 ? (\n <div>\n <em>Additional port ranges are specified, but redundant:</em>\n </div>\n ) : null}\n </span>\n ) : (\n <div>\n <span>\n {r.protocol}:{r.startPort} &rarr; {r.endPort}\n </span>\n </div>\n ),\n )}\n />\n </LabeledValueList>\n ))}\n </CollapsibleSection>\n );\n }\n}\n","import { module } from 'angular';\nimport { react2angular } from 'react2angular';\n\nimport { withErrorBoundary } from '@spinnaker/core';\n\nimport { IPRangeRules } from './IPRangeRules';\n\nexport const AWS_SECURITY_GROUP_IP_RANGE_RULES = 'spinnaker.amazon.securityGroups.details.securityGroups.component';\nmodule(AWS_SECURITY_GROUP_IP_RANGE_RULES, []).component(\n 'ipRangeRules',\n react2angular(withErrorBoundary(IPRangeRules, 'ipRangeRules'), ['ipRules']),\n);\n","import { module } from 'angular';\n\nimport type { ISecurityGroup, ISecurityGroupsByAccount } from '@spinnaker/core';\n\nexport class AwsSecurityGroupReader {\n public resolveIndexedSecurityGroup(\n indexedSecurityGroups: ISecurityGroupsByAccount,\n container: ISecurityGroup,\n securityGroupId: string,\n ): ISecurityGroup {\n return AwsSecurityGroupReader.resolveIndexedSecurityGroup(indexedSecurityGroups, container, securityGroupId);\n }\n\n public static 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 AWS_SECURITY_GROUP_READER = 'spinnaker.amazon.securityGroup.reader';\nmodule(AWS_SECURITY_GROUP_READER, []).service('awsSecurityGroupReader', AwsSecurityGroupReader);\n","'use strict';\n\nimport { module } from 'angular';\nimport { groupBy } from 'lodash';\n\nimport { VpcReader } from '../vpc/VpcReader';\n\nexport const AMAZON_SECURITYGROUP_SECURITYGROUP_TRANSFORMER = 'spinnaker.amazon.securityGroup.transformer';\nexport const name = AMAZON_SECURITYGROUP_SECURITYGROUP_TRANSFORMER; // for backwards compatibility\nmodule(AMAZON_SECURITYGROUP_SECURITYGROUP_TRANSFORMER, []).factory('awsSecurityGroupTransformer', function () {\n function normalizeSecurityGroup(securityGroup) {\n return VpcReader.listVpcs().then(addVpcNameToSecurityGroup(securityGroup));\n }\n\n function addVpcNameToSecurityGroup(securityGroup) {\n return function (vpcs) {\n const matches = vpcs.filter(function (test) {\n return test.id === securityGroup.vpcId;\n });\n securityGroup.vpcName = matches.length ? matches[0].name : '';\n };\n }\n\n function compress(securityGroups) {\n const grouped = groupBy(securityGroups, 'vpcId');\n Object.keys(grouped).forEach((vpcId) => {\n grouped[vpcId] = grouped[vpcId].map((g) => [g.name, g.id]);\n });\n return grouped;\n }\n\n function decompress(groupedGroups) {\n const flattened = [];\n Object.keys(groupedGroups).forEach((vpcId) => {\n groupedGroups[vpcId].forEach((g) => {\n flattened.push({ name: g[0], id: g[1], vpcId });\n });\n });\n return flattened;\n }\n\n return {\n normalizeSecurityGroup,\n compress,\n decompress,\n supportsCompression: true,\n };\n});\n","import { module } from 'angular';\n\nimport { AMAZON_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER } from './clone/cloneSecurityGroup.controller';\nimport { AMAZON_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL } from './configure/CreateSecurityGroupCtrl';\nimport { AMAZON_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL } from './configure/EditSecurityGroupCtrl';\nimport { AMAZON_SECURITYGROUP_CONFIGURE_CONFIGSECURITYGROUP_MIXIN_CONTROLLER } from './configure/configSecurityGroup.mixin.controller';\nimport { INGRESS_RULE_GROUP_SELECTOR_COMPONENT } from './configure/ingressRuleGroupSelector.component';\nimport { AWS_SECURITY_GROUP_DETAILS_CUSTOM } from './configure/securityGroupDetailsCustom.component';\nimport { AMAZON_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER } from './details/securityGroupDetail.controller';\nimport { AWS_SECURITY_GROUP_IP_RANGE_RULES } from './details/securityGroupIpRangeRules.component';\nimport { AWS_SECURITY_GROUP_READER } from './securityGroup.reader';\nimport { AMAZON_SECURITYGROUP_SECURITYGROUP_TRANSFORMER } from './securityGroup.transformer';\n\nexport const AWS_SECURITY_GROUP_MODULE = 'spinnaker.amazon.securityGroup';\nmodule(AWS_SECURITY_GROUP_MODULE, [\n AWS_SECURITY_GROUP_READER,\n AMAZON_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER,\n INGRESS_RULE_GROUP_SELECTOR_COMPONENT,\n AMAZON_SECURITYGROUP_CONFIGURE_CONFIGSECURITYGROUP_MIXIN_CONTROLLER,\n AMAZON_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL,\n AMAZON_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL,\n AMAZON_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER,\n AMAZON_SECURITYGROUP_SECURITYGROUP_TRANSFORMER,\n AWS_SECURITY_GROUP_IP_RANGE_RULES,\n AWS_SECURITY_GROUP_DETAILS_CUSTOM,\n]);\n","import React from 'react';\n\nimport type { Application, IServerGroupCommand, ITemplateSelectionText } from '@spinnaker/core';\nimport { DeployInitializer, FirewallLabels } from '@spinnaker/core';\n\nexport interface IServerGroupTemplateSelectionProps {\n app: Application;\n command: IServerGroupCommand;\n onDismiss: () => void;\n onTemplateSelected: () => void;\n}\n\nexport interface IServerGroupTemplateSelectionState {\n templateSelectionText: ITemplateSelectionText;\n}\n\nexport class ServerGroupTemplateSelection extends React.Component<\n IServerGroupTemplateSelectionProps,\n IServerGroupTemplateSelectionState\n> {\n constructor(props: IServerGroupTemplateSelectionProps) {\n super(props);\n this.state = {\n templateSelectionText: {\n copied: [\n 'account, region, subnet, cluster name (stack, details)',\n 'load balancers',\n FirewallLabels.get('firewalls'),\n 'instance type',\n 'all fields on the Advanced Settings page',\n ],\n notCopied: ['the following suspended scaling processes: Launch, Terminate, AddToLoadBalancer'],\n additionalCopyText:\n 'If a server group exists in this cluster at the time of deployment, its scaling policies will be copied over to the new server group.',\n },\n };\n\n if (!props.command.viewState.disableStrategySelection) {\n this.state.templateSelectionText.notCopied.push(\n 'the deployment strategy (if any) used to deploy the most recent server group',\n );\n }\n }\n\n public render() {\n const { app, command, onDismiss, onTemplateSelected } = this.props;\n const { templateSelectionText } = this.state;\n\n return (\n <DeployInitializer\n cloudProvider=\"aws\"\n application={app}\n command={command}\n onDismiss={onDismiss}\n onTemplateSelected={onTemplateSelected}\n templateSelectionText={templateSelectionText}\n />\n );\n }\n}\n","import { $q } from 'ngimport';\nimport React from 'react';\nimport type { HandlerRendererResult, MenuRendererProps, Option, OptionValues, ReactSelectProps } from 'react-select';\nimport {\n BehaviorSubject,\n combineLatest as observableCombineLatest,\n from as observableFrom,\n of as observableOf,\n Subject,\n} from 'rxjs';\nimport { catchError, debounceTime, distinctUntilChanged, map, switchMap, takeUntil, tap } from 'rxjs/operators';\n\nimport type { Application } from '@spinnaker/core';\nimport { HelpField, TetheredSelect, ValidationMessage } from '@spinnaker/core';\nimport type { IAmazonImage } from '../../image';\nimport { AwsImageReader } from '../../image';\n\nexport interface IAmazonImageSelectorProps {\n onChange: (value: IAmazonImage) => void;\n value: IAmazonImage;\n application: Application;\n credentials: string;\n region: string;\n}\n\nexport interface IAmazonImageSelectorState {\n errorMessage?: string;\n selectionMode: 'packageImages' | 'searchAllImages';\n searchString: string;\n searchResults: IAmazonImage[];\n isSearching: boolean;\n packageImages: IAmazonImage[];\n isLoadingPackageImages: boolean;\n}\n\ntype sortImagesByOptions = 'name' | 'ts';\n\nexport class AmazonImageSelectInput extends React.Component<IAmazonImageSelectorProps, IAmazonImageSelectorState> {\n public state: IAmazonImageSelectorState = {\n errorMessage: null,\n selectionMode: 'packageImages',\n searchString: '',\n searchResults: null,\n isSearching: false,\n packageImages: null,\n isLoadingPackageImages: true,\n };\n\n private awsImageReader = new AwsImageReader();\n private props$ = new Subject<IAmazonImageSelectorProps>();\n private searchInput$ = new Subject<string>();\n private destroy$ = new Subject();\n private sortImagesBy$ = new BehaviorSubject<sortImagesByOptions>('ts');\n\n public static makeFakeImage(imageName: string, imageId: string, region: string): IAmazonImage {\n if (!imageName && !imageId) {\n return null;\n }\n\n // assume that the specific image exists in the selected region\n const amis = { [region]: [imageId] };\n const attributes = { virtualizationType: '*', architecture: '*', creationDate: new Date().toISOString() };\n\n return { imageName, amis, attributes } as IAmazonImage;\n }\n\n private loadImagesFromApplicationName(application: Application): PromiseLike<IAmazonImage[]> {\n const query = application.name.replace(/_/g, '[_\\\\-]') + '*';\n return this.awsImageReader.findImages({ q: query });\n }\n\n private buildQueryForSimilarImages(imageName: string) {\n let addDashToQuery = false;\n let packageBase = imageName.split('_')[0];\n const parts = packageBase.split('-');\n if (parts.length > 3) {\n packageBase = parts.slice(0, -3).join('-');\n addDashToQuery = true;\n }\n\n const tooShort = !packageBase || packageBase.length < 3;\n return tooShort ? null : packageBase + (addDashToQuery ? '-*' : '*');\n }\n\n private loadImageById(imageId: string, region: string, credentials: string): PromiseLike<IAmazonImage> {\n return !imageId ? $q.when(null) : this.awsImageReader.getImage(imageId, region, credentials).catch(() => null);\n }\n\n private searchForImages(query: string): PromiseLike<IAmazonImage[]> {\n const hasMinLength = query && query.length >= 3;\n return hasMinLength ? this.awsImageReader.findImages({ q: query }) : $q.when([]);\n }\n\n private fetchPackageImages(\n value: IAmazonImage,\n region: string,\n credentials: string,\n application: Application,\n ): PromiseLike<IAmazonImage[]> {\n const imageId = value && value.amis && value.amis[region] && value.amis[region][0];\n\n return this.loadImageById(imageId, region, credentials).then((image) => {\n if (!image) {\n return this.loadImagesFromApplicationName(application);\n }\n\n return this.searchForImages(this.buildQueryForSimilarImages(image.imageName)).then((similarImages) => {\n if (!similarImages.find((img) => img.imageName === image.imageName)) {\n // findImages has a limit of 1000 and may not always include the current image, which is confusing\n return similarImages.concat(image);\n }\n return similarImages;\n });\n });\n }\n\n private selectImage(selectedImage: IAmazonImage) {\n if (this.props.value !== selectedImage) {\n this.props.onChange(selectedImage);\n }\n }\n\n private findMatchingImage(images: IAmazonImage[], selectedImage: IAmazonImage) {\n return images.find((img) => selectedImage && selectedImage.imageName === img.imageName);\n }\n\n public componentDidMount() {\n const region$ = this.props$.pipe(\n map((x) => x.region),\n distinctUntilChanged(),\n );\n const { value, region, credentials, application } = this.props;\n\n this.setState({ isLoadingPackageImages: true });\n const fetchPromise = this.fetchPackageImages(value, region, credentials, application);\n\n const packageImages$ = observableFrom(fetchPromise).pipe(\n catchError((err) => {\n console.error(err);\n this.setState({ errorMessage: 'Unable to load package images' });\n return observableOf([] as IAmazonImage[]);\n }),\n tap(() => this.setState({ isLoadingPackageImages: false })),\n );\n\n const packageImagesInRegion$ = observableCombineLatest([packageImages$, region$, this.sortImagesBy$]).pipe(\n map(([packageImages, latestRegion, sortImagesBy]) => {\n const images = packageImages.filter((img) => !!img.amis[latestRegion]);\n return this.sortImages(images, sortImagesBy);\n }),\n );\n\n const searchString$ = this.searchInput$.pipe(\n tap((searchString) => this.setState({ searchString })),\n distinctUntilChanged(),\n debounceTime(250),\n );\n\n const searchImages$ = searchString$.pipe(\n tap(() => this.setState({ isSearching: true })),\n switchMap((searchString) => this.searchForImages(searchString)),\n catchError((err) => {\n console.error(err);\n this.setState({ errorMessage: 'Unable to search for images' });\n return observableOf([] as IAmazonImage[]);\n }),\n tap(() => this.setState({ isSearching: false })),\n );\n\n const searchImagesInRegion$ = observableCombineLatest([searchImages$, region$, this.sortImagesBy$]).pipe(\n map(([searchResults, latestRegion, sortImagesBy]) => {\n const { searchString } = this.state;\n // allow 'advanced' users to continue with just an ami id (backing image may not have been indexed yet)\n if (searchResults.length === 0 && !!/ami-[0-9a-f]{8,17}/.exec(searchString)) {\n const fakeImage = AmazonImageSelectInput.makeFakeImage(searchString, searchString, latestRegion);\n return [fakeImage].filter((x) => !!x);\n }\n\n // Filter down to only images which have an ami in the currently selected region\n const images = searchResults.filter((img) => !!img.amis[latestRegion]);\n return this.sortImages(images, sortImagesBy);\n }),\n );\n\n searchImagesInRegion$.pipe(takeUntil(this.destroy$)).subscribe((searchResults) => this.setState({ searchResults }));\n packageImagesInRegion$.pipe(takeUntil(this.destroy$)).subscribe((packageImages) => {\n this.setState({ packageImages });\n this.selectImage(this.findMatchingImage(packageImages, this.props.value));\n });\n\n // Clear out the selected image if the region changes and the image is not found in the new region\n region$\n .pipe(\n switchMap((selectedRegion) => {\n const image = this.props.value;\n if (this.state.selectionMode === 'packageImages') {\n // in packageImages mode, wait for the packageImages to load then find the matching one, or undefined\n return packageImagesInRegion$.pipe(map((images) => this.findMatchingImage(images, image)));\n } else {\n // in searchImages mode, return undefined if the selected image is not found in the new region\n const hasAmiInRegion = !!(image && image.amis && image.amis[selectedRegion]);\n return observableOf(hasAmiInRegion ? image : undefined);\n }\n }),\n takeUntil(this.destroy$),\n )\n .subscribe((image) => this.selectImage(image));\n }\n\n private setSortImagesBy(sortImagesBy: sortImagesByOptions) {\n this.sortImagesBy$.next(sortImagesBy);\n }\n\n private buildImageMenu = (params: MenuRendererProps): HandlerRendererResult => {\n const { ImageMenuHeading, ImageLabel } = this;\n const { options } = params;\n return (\n <div className=\"Select-menu-outer\">\n <div className=\"Select-menu\" role=\"listbox\">\n {options.length > 0 && <ImageMenuHeading />}\n {options.map((o) => (\n <ImageLabel key={o.imageName} option={o} params={params} />\n ))}\n </div>\n </div>\n );\n };\n\n private ImageMenuHeading = () => {\n const sortImagesBy = this.sortImagesBy$.value;\n return (\n <div\n className=\"sp-padding-s-xaxis sp-padding-xs-yaxis small\"\n style={{\n borderBottom: '1px solid var(--color-silver)',\n position: 'sticky',\n top: 0,\n backgroundColor: 'var(--color-white)',\n }}\n >\n <b>Sort by: </b>\n <a className=\"clickable sp-padding-xs-xaxis\" onClick={() => this.setSortImagesBy('ts')}>\n {sortImagesBy === 'ts' ? <b>timestamp (newest first)</b> : 'timestamp (newest first)'}\n </a>\n <span> | </span>\n <a className=\"clickable sp-padding-xs-xaxis\" onClick={() => this.setSortImagesBy('name')}>\n {sortImagesBy === 'name' ? <b>name (A-Z)</b> : 'name (A-Z)'}\n </a>\n </div>\n );\n };\n\n private sortImages(images: IAmazonImage[], sortImagesBy: sortImagesByOptions): IAmazonImage[] {\n return images.slice().sort((a, b) => {\n if (sortImagesBy === 'ts') {\n return b.attributes.creationDate.localeCompare(a.attributes.creationDate);\n }\n return a.imageName.localeCompare(b.imageName);\n });\n }\n\n private ImageLabel = (imageLabelProps: { option: Option<OptionValues>; params: MenuRendererProps }) => {\n const { credentials, region } = this.props;\n const { option, params } = imageLabelProps;\n const amiLabel =\n option.amis[region] && option.amis[region][0]\n ? option.amis[region][0]\n : ` - not found in ${credentials}/${region}`;\n return (\n <div\n key={option.imageName}\n onClick={() => params.selectValue(option)}\n onMouseOver={() => params.focusOption(option)}\n className={`Select-option ${\n params.focusedOption && params.focusedOption.imageName === option.imageName ? 'is-focused' : ''\n }`}\n role=\"option\"\n >\n <div>{option.imageName}</div>\n <div className=\"small\">\n <b>Created: </b>\n {option.attributes.creationDate}\n <b className=\"sp-padding-s-left\">AMI: </b>\n {amiLabel}\n </div>\n </div>\n );\n };\n\n public componentDidUpdate() {\n this.props$.next(this.props);\n }\n\n public componentWillUnmount() {\n this.destroy$.next();\n }\n\n public render() {\n const { value, credentials, region, onChange } = this.props;\n const {\n isLoadingPackageImages,\n isSearching,\n selectionMode,\n packageImages,\n searchResults,\n searchString,\n } = this.state;\n const isPackageImagesLoaded = !!packageImages;\n\n const ImageOptionRenderer = (image: IAmazonImage) => {\n const amis = image.amis || {};\n const imageIdForSelectedRegion = amis[region] && amis[region][0];\n const message = imageIdForSelectedRegion\n ? `(${imageIdForSelectedRegion})`\n : ` - not found in ${credentials}/${region}`;\n\n return (\n <>\n <span>{image.imageName}</span>\n <span>{message}</span>\n </>\n );\n };\n\n const commonReactSelectProps: ReactSelectProps<any> = {\n clearable: false,\n required: true,\n valueKey: 'imageName',\n optionRenderer: ImageOptionRenderer,\n valueRenderer: ImageOptionRenderer,\n onSelectResetsInput: false,\n onBlurResetsInput: false,\n onCloseResetsInput: false,\n value,\n };\n\n const error = this.state.errorMessage ? <ValidationMessage message={this.state.errorMessage} type=\"error\" /> : null;\n\n const noResultsText = `No results found in ${credentials}/${region}`;\n\n if (selectionMode === 'searchAllImages') {\n // User can search for any image using the typeahead\n // Results are streamed from the back end as the user types\n const lessThanThreeChars = !searchString || searchString.length < 3;\n const searchNoResultsText = lessThanThreeChars\n ? 'Please enter at least 3 characters'\n : isSearching\n ? 'Searching...'\n : noResultsText;\n\n return (\n <div className=\"col-md-9\">\n {/* @ts-ignore */}\n <TetheredSelect\n {...commonReactSelectProps}\n menuRenderer={this.buildImageMenu}\n isLoading={isSearching}\n placeholder=\"Search for an image...\"\n filterOptions={false as any}\n noResultsText={searchNoResultsText}\n options={searchResults}\n onInputChange={(searchInput) => {\n this.searchInput$.next(searchInput);\n return searchInput;\n }}\n onChange={onChange}\n />\n {error}\n </div>\n );\n } else if (isPackageImagesLoaded) {\n // User can pick an image from the preloaded 'packageImages' using the typeahead\n return (\n <div className=\"col-md-9\">\n {/* @ts-ignore */}\n <TetheredSelect\n {...commonReactSelectProps}\n menuRenderer={this.buildImageMenu}\n isLoading={isLoadingPackageImages}\n placeholder=\"Pick an image\"\n noResultsText={noResultsText}\n options={packageImages}\n onChange={onChange}\n />\n {error}\n <button type=\"button\" className=\"link\" onClick={() => this.setState({ selectionMode: 'searchAllImages' })}>\n Search All Images\n </button>{' '}\n <HelpField id=\"aws.serverGroup.allImages\" />\n </div>\n );\n } else {\n // Show a disabled react-select while waiting for 'packageImages' to load\n return (\n <div className=\"col-md-9\">\n {/* @ts-ignore */}\n <TetheredSelect\n {...commonReactSelectProps}\n isLoading={isLoadingPackageImages}\n disabled={true}\n options={[value].filter((x) => !!x)}\n />\n {error}\n <button type=\"button\" className=\"link\" onClick={() => this.setState({ selectionMode: 'searchAllImages' })}>\n Search All Images\n </button>{' '}\n <HelpField id=\"aws.serverGroup.allImages\" />\n </div>\n );\n }\n }\n}\n","import type { FormikErrors, FormikProps } from 'formik';\nimport { Field } from 'formik';\nimport React from 'react';\n\nimport type { Application, IServerGroup, IWizardPageComponent } from '@spinnaker/core';\nimport {\n AccountSelectInput,\n DeployingIntoManagedClusterWarning,\n DeploymentStrategySelector,\n HelpField,\n Markdown,\n NameUtils,\n ReactInjector,\n RegionSelectField,\n ServerGroupDetailsField,\n ServerGroupNamePreview,\n SETTINGS,\n TaskReason,\n} from '@spinnaker/core';\n\nimport { AmazonImageSelectInput } from '../../AmazonImageSelectInput';\nimport { AWSProviderSettings } from '../../../../aws.settings';\nimport type { IAmazonImage } from '../../../../image';\nimport type { IAmazonServerGroupCommand } from '../../serverGroupConfiguration.service';\nimport { SubnetSelectField } from '../../../../subnet';\n\nconst isExpressionLanguage = (field: string) => field && field.includes('${');\nconst isStackPattern = (stack: string) =>\n !isExpressionLanguage(stack) ? /^([a-zA-Z_0-9._${}]*(\\${.+})*)*$/.test(stack) : true;\nconst isDetailPattern = (detail: string) =>\n !isExpressionLanguage(detail) ? /^([a-zA-Z_0-9._${}-]*(\\${.+})*)*$/.test(detail) : true;\n\nexport interface IServerGroupBasicSettingsProps {\n app: Application;\n formik: FormikProps<IAmazonServerGroupCommand>;\n}\n\nexport interface IServerGroupBasicSettingsState {\n selectedImage: IAmazonImage;\n namePreview: string;\n createsNewCluster: boolean;\n latestServerGroup: IServerGroup;\n}\n\nexport class ServerGroupBasicSettings\n extends React.Component<IServerGroupBasicSettingsProps, IServerGroupBasicSettingsState>\n implements IWizardPageComponent<IAmazonServerGroupCommand> {\n constructor(props: IServerGroupBasicSettingsProps) {\n super(props);\n const {\n amiName,\n region,\n viewState: { imageId },\n } = props.formik.values;\n const selectedImage = AmazonImageSelectInput.makeFakeImage(amiName, imageId, region);\n this.state = { ...this.getStateFromProps(props), selectedImage };\n }\n\n private getStateFromProps(props: IServerGroupBasicSettingsProps) {\n const { app } = props;\n const { values } = props.formik;\n\n const namePreview = NameUtils.getClusterName(app.name, values.stack, values.freeFormDetails);\n const createsNewCluster = !app.clusters.find((c) => c.name === namePreview);\n\n const inCluster = (app.serverGroups.data as IServerGroup[])\n .filter((serverGroup) => {\n return (\n serverGroup.cluster === namePreview &&\n serverGroup.account === values.credentials &&\n serverGroup.region === values.region\n );\n })\n .sort((a, b) => a.createdTime - b.createdTime);\n const latestServerGroup = inCluster.length ? inCluster.pop() : null;\n\n return { namePreview, createsNewCluster, latestServerGroup };\n }\n\n private imageChanged = (image: IAmazonImage) => {\n const { setFieldValue, values } = this.props.formik;\n this.setState({ selectedImage: image });\n\n const virtualizationType = image && image.attributes.virtualizationType;\n const amiArchitecture = image && image.attributes.architecture;\n const imageName = image && image.imageName;\n values.virtualizationType = virtualizationType;\n values.amiArchitecture = amiArchitecture;\n values.amiName = imageName;\n setFieldValue('amiArchitecture', amiArchitecture);\n setFieldValue('virtualizationType', virtualizationType);\n setFieldValue('amiName', imageName);\n values.imageChanged(values);\n\n if (image && SETTINGS.disabledImages?.length && AWSProviderSettings.serverGroups?.enableIPv6) {\n const isImageDisabled = SETTINGS.disabledImages.some((i) => image.imageName.includes(i));\n if (isImageDisabled) {\n setFieldValue('associateIPv6Address', false);\n }\n }\n\n // an image change might clear the single or multiple instance types previously selected with the image, validate the form to surface related errors.\n this.props.formik.validateForm();\n };\n\n private accountUpdated = (account: string): void => {\n const { setFieldValue, values } = this.props.formik;\n values.credentials = account;\n values.credentialsChanged(values);\n values.subnetChanged(values);\n setFieldValue('credentials', account);\n\n const accountDetails = values.backingData.credentialsKeyedByAccount[account];\n const enableIPv6InTest =\n AWSProviderSettings?.serverGroups?.enableIPv6 &&\n AWSProviderSettings?.serverGroups?.setIPv6InTest &&\n accountDetails.environment === 'test';\n\n setFieldValue('associateIPv6Address', enableIPv6InTest);\n\n if (AWSProviderSettings.serverGroups?.enableIMDSv2) {\n const isIMDSv2AllowedOnAccount = !AWSProviderSettings?.serverGroups?.accountDenyListIMDSv2?.includes(account);\n const appAgeRequirement = AWSProviderSettings.serverGroups?.defaultIMDSv2AppAgeLimit;\n const creationDate = this.props.app?.attributes?.createTs;\n const setIMDSv2 =\n isIMDSv2AllowedOnAccount && appAgeRequirement && creationDate && Number(creationDate) > appAgeRequirement;\n setFieldValue('requireIMDSv2', setIMDSv2);\n }\n };\n\n private regionUpdated = (region: string): void => {\n const { values, setFieldValue } = this.props.formik;\n values.region = region;\n values.regionChanged(values);\n setFieldValue('region', region);\n };\n\n private subnetUpdated = (): void => {\n const { setFieldValue, values } = this.props.formik;\n values.subnetChanged(values);\n setFieldValue('subnetType', values.subnetType);\n };\n\n public validate(values: IAmazonServerGroupCommand): FormikErrors<IAmazonServerGroupCommand> {\n const errors: FormikErrors<IAmazonServerGroupCommand> = {};\n\n if (!isStackPattern(values.stack)) {\n errors.stack = 'Only dot(.) and underscore(_) special characters are allowed in the Stack field.';\n }\n\n if (!isDetailPattern(values.freeFormDetails)) {\n errors.freeFormDetails =\n 'Only dot(.), underscore(_), and dash(-) special characters are allowed in the Detail field.';\n }\n\n if (!values.viewState.disableImageSelection && !values.amiName) {\n errors.amiName = 'Image required.';\n }\n\n // this error is added exclusively to disable the \"create/clone\" button - it is not visible aside from the warning\n // rendered by the DeployingIntoManagedClusterWarning component\n if (values.resourceSummary) {\n errors.resourceSummary = { id: 'Cluster is managed' };\n }\n\n return errors;\n }\n\n private clientRequestsChanged = () => {\n const { values, setFieldValue } = this.props.formik;\n values.toggleSuspendedProcess(values, 'AddToLoadBalancer');\n setFieldValue('suspendedProcesses', values.suspendedProcesses);\n this.setState({});\n };\n\n private navigateToLatestServerGroup = () => {\n const { values } = this.props.formik;\n const { latestServerGroup } = this.state;\n\n const params = {\n provider: values.selectedProvider,\n accountId: latestServerGroup.account,\n region: latestServerGroup.region,\n serverGroup: latestServerGroup.name,\n };\n\n const { $state } = ReactInjector;\n if ($state.is('home.applications.application.insight.clusters')) {\n $state.go('.serverGroup', params);\n } else {\n $state.go('^.serverGroup', params);\n }\n };\n\n private stackChanged = (stack: string) => {\n const { setFieldValue, values } = this.props.formik;\n values.stack = stack; // have to do it here to make sure it's done before calling values.clusterChanged\n setFieldValue('stack', stack);\n values.clusterChanged(values);\n };\n\n public componentWillReceiveProps(nextProps: IServerGroupBasicSettingsProps) {\n this.setState(this.getStateFromProps(nextProps));\n }\n\n private handleReasonChanged = (reason: string) => {\n this.props.formik.setFieldValue('reason', reason);\n };\n\n private strategyChanged = (values: IAmazonServerGroupCommand, strategy: any) => {\n values.onStrategyChange(values, strategy);\n this.props.formik.setFieldValue('strategy', strategy.key);\n };\n\n private onStrategyFieldChange = (key: string, value: any) => {\n this.props.formik.setFieldValue(key, value);\n };\n\n public render() {\n const { app, formik } = this.props;\n const { errors, values } = formik;\n const { createsNewCluster, latestServerGroup, namePreview } = this.state;\n\n const accounts = values.backingData.accounts;\n const readOnlyFields = values.viewState.readOnlyFields || {};\n return (\n <div className=\"container-fluid form-horizontal\">\n {values.regionIsDeprecated(values) && (\n <div className=\"form-group row\">\n <div className=\"col-md-12 error-message\">\n <div className=\"alert alert-danger\">\n You are deploying into a deprecated region within the {values.credentials} account!\n </div>\n </div>\n </div>\n )}\n <DeployingIntoManagedClusterWarning app={app} formik={formik} />\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">Account</div>\n <div className=\"col-md-7\">\n <AccountSelectInput\n value={values.credentials}\n onChange={(evt: any) => this.accountUpdated(evt.target.value)}\n readOnly={readOnlyFields.credentials}\n accounts={accounts}\n provider=\"aws\"\n />\n </div>\n </div>\n <RegionSelectField\n readOnly={readOnlyFields.region}\n labelColumns={3}\n component={values}\n field=\"region\"\n account={values.credentials}\n regions={values.backingData.filtered.regions}\n onChange={this.regionUpdated}\n />\n <SubnetSelectField\n readOnly={readOnlyFields.subnet}\n labelColumns={3}\n helpKey=\"aws.serverGroup.subnet\"\n component={values}\n field=\"subnetType\"\n region={values.region}\n application={app}\n subnets={values.backingData.filtered.subnetPurposes}\n onChange={this.subnetUpdated}\n showSubnetWarning={true}\n />\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">\n Stack <HelpField id=\"aws.serverGroup.stack\" />\n </div>\n <div className=\"col-md-7\">\n <input\n type=\"text\"\n className=\"form-control input-sm no-spel\"\n value={values.stack}\n onChange={(e) => this.stackChanged(e.target.value)}\n />\n </div>\n </div>\n {errors.stack && (\n <div className=\"form-group row slide-in\">\n <div className=\"col-sm-9 col-sm-offset-2 error-message\">\n <span>{errors.stack}</span>\n </div>\n </div>\n )}\n <ServerGroupDetailsField app={app} formik={formik} />\n {values.viewState.imageSourceText && (\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">Image Source</div>\n <div className=\"col-md-7\" style={{ marginTop: '5px' }}>\n <Markdown tag=\"span\" message={values.viewState.imageSourceText} />\n </div>\n </div>\n )}\n {!values.viewState.disableImageSelection && (\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">\n Image <HelpField id=\"aws.serverGroup.imageName\" />\n </div>\n {isExpressionLanguage(values.amiName) ? (\n <Field name=\"amiName\" />\n ) : (\n <AmazonImageSelectInput\n onChange={(image) => this.imageChanged(image)}\n value={this.state.selectedImage}\n application={app}\n credentials={values.credentials}\n region={values.region}\n />\n )}\n </div>\n )}\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">\n Traffic <HelpField id=\"aws.serverGroup.traffic\" />\n </div>\n <div className=\"col-md-9 checkbox\">\n <label>\n <input\n type=\"checkbox\"\n onChange={this.clientRequestsChanged}\n checked={!values.processIsSuspended(values, 'AddToLoadBalancer')}\n disabled={values.strategy !== '' && values.strategy !== 'custom'}\n />\n Send client requests to new instances\n </label>\n </div>\n </div>\n {!values.viewState.disableStrategySelection && values.selectedProvider && (\n <DeploymentStrategySelector\n command={values}\n onFieldChange={this.onStrategyFieldChange}\n onStrategyChange={this.strategyChanged}\n />\n )}\n {!values.viewState.hideClusterNamePreview && (\n <ServerGroupNamePreview\n createsNewCluster={createsNewCluster}\n latestServerGroupName={latestServerGroup?.name}\n mode={values.viewState.mode}\n namePreview={namePreview}\n navigateToLatestServerGroup={this.navigateToLatestServerGroup}\n />\n )}\n <TaskReason reason={values.reason} onChange={this.handleReasonChanged} />\n </div>\n );\n }\n}\n","import React from 'react';\nimport type { Option } from 'react-select';\nimport Select from 'react-select';\n\nimport type { IServerGroupCommand } from '@spinnaker/core';\nimport { HelpField, SpelNumberInput } from '@spinnaker/core';\nimport type { IMinMaxDesiredProps } from './MinMaxDesired';\n\nexport interface ICapacitySelectorProps {\n command: IServerGroupCommand;\n setFieldValue: (field: keyof IServerGroupCommand, value: any, shouldValidate?: boolean) => void;\n MinMaxDesired: React.ComponentClass<IMinMaxDesiredProps>;\n}\n\nexport class CapacitySelector extends React.Component<ICapacitySelectorProps> {\n private preferSourceCapacityOptions = [\n { label: 'fail the stage', value: false },\n { label: 'use fallback values', value: true },\n ];\n\n private useSourceCapacityUpdated = (event: React.ChangeEvent<HTMLInputElement>): void => {\n const value = event.target.value === 'true';\n const { command } = this.props;\n this.props.setFieldValue('useSourceCapacity', value);\n\n if (!value) {\n delete command.preferSourceCapacity;\n this.props.setFieldValue('preferSourceCapacity', undefined);\n }\n this.setState({});\n };\n\n private setSimpleCapacity(simpleCapacity: boolean) {\n const { command } = this.props;\n const newViewState = {\n ...command.viewState,\n useSimpleCapacity: simpleCapacity,\n };\n this.props.setFieldValue('useSourceCapacity', false);\n this.props.setFieldValue('viewState', newViewState);\n this.setMinMax(command.capacity.desired);\n this.setState({});\n }\n\n private simpleInstancesChanged = (value: number | string) => {\n this.setMinMax(value);\n };\n\n private setMinMax(value: number | string) {\n const { command } = this.props;\n if (command.viewState.useSimpleCapacity) {\n command.capacity = { min: value, max: value, desired: value };\n this.props.setFieldValue('useSourceCapacity', false);\n this.props.setFieldValue('capacity', command.capacity);\n }\n this.setState({});\n }\n\n private preferSourceCapacityChanged = (option: Option<boolean>) => {\n this.props.setFieldValue('preferSourceCapacity', option && option.value ? true : undefined);\n this.setState({});\n };\n\n private capacityFieldChanged = (fieldName: 'min' | 'max' | 'desired', value: number | string) => {\n const { command, setFieldValue } = this.props;\n command.capacity = { ...command.capacity };\n command.capacity[fieldName] = value;\n setFieldValue('capacity', command.capacity);\n };\n\n public render() {\n const { command, MinMaxDesired } = this.props;\n\n const readOnlyFields = command.viewState.readOnlyFields || {};\n\n if (!command.viewState.useSimpleCapacity || command.useSourceCapacity) {\n return (\n <div>\n <div className=\"form-group\">\n <div className=\"col-md-12\">\n <p>Sets up auto-scaling constraints for this server group.</p>\n <p>\n To set min, max, and desired instance counts to the same value use the{' '}\n <a className=\"clickable\" onClick={() => this.setSimpleCapacity(true)}>\n Simple Mode\n </a>\n .\n </p>\n </div>\n </div>\n\n {/* // TODO: Test this in a clone server group dialog or an edit pipeline dialog */}\n {!readOnlyFields.useSourceCapacity && command.viewState.mode === 'editPipeline' && (\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">Capacity</div>\n <div className=\"col-md-9 radio\">\n <label>\n <input\n type=\"radio\"\n checked={command.useSourceCapacity}\n value=\"true\"\n id=\"useSourceCapacityTrue\"\n onChange={this.useSourceCapacityUpdated}\n />\n Copy the capacity from the current server group\n <HelpField id=\"serverGroupCapacity.useSourceCapacityTrue\" />\n </label>\n </div>\n {command.useSourceCapacity && (\n <div className=\"col-md-9 col-md-offset-3 radio\" style={{ paddingLeft: '35px' }}>\n <div>\n If no current server group is found,\n <Select\n clearable={false}\n value={!!command.preferSourceCapacity}\n options={this.preferSourceCapacityOptions}\n onChange={this.preferSourceCapacityChanged}\n />\n </div>\n {command.preferSourceCapacity && (\n <div>\n <b>Fallback values</b>\n <MinMaxDesired command={command} fieldChanged={this.capacityFieldChanged} />\n </div>\n )}\n </div>\n )}\n\n <div className=\"col-md-9 col-md-offset-3 radio\">\n <label>\n <input\n type=\"radio\"\n checked={!command.useSourceCapacity}\n value=\"false\"\n id=\"useSourceCapacityFalse\"\n onChange={this.useSourceCapacityUpdated}\n />\n Let me specify the capacity\n <HelpField id=\"serverGroupCapacity.useSourceCapacityFalse\" />\n </label>\n </div>\n </div>\n )}\n\n {(!command.useSourceCapacity || command.viewState.mode !== 'editPipeline') && (\n <div>\n <div className=\"col-md-9 col-md-offset-3\">\n <MinMaxDesired command={command} fieldChanged={this.capacityFieldChanged} />\n </div>\n </div>\n )}\n </div>\n );\n }\n\n return (\n <div>\n <div className=\"form-group\">\n <div className=\"col-md-12\">\n <p>Sets the min, max, and desired instance counts to the same value.</p>\n\n <p>\n {' '}\n To set capacity for auto-scaling, use the{' '}\n <a className=\"clickable\" onClick={() => this.setSimpleCapacity(false)}>\n Advanced Mode\n </a>\n .\n </p>\n </div>\n </div>\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">Number of Instances</div>\n <div className=\"col-md-8\">\n <SpelNumberInput value={command.capacity.desired} min={0} onChange={this.simpleInstancesChanged} />\n </div>\n </div>\n </div>\n );\n }\n}\n","import React from 'react';\nimport type { IServerGroupCommand } from '@spinnaker/core';\nimport { SpelNumberInput } from '@spinnaker/core';\n\nexport interface IMinMaxDesiredProps {\n command: IServerGroupCommand;\n fieldChanged: (fieldName: string, value: number | string) => void;\n}\n\nexport interface IMinMaxDesiredState {}\n\nexport class MinMaxDesired extends React.Component<IMinMaxDesiredProps, IMinMaxDesiredState> {\n public render() {\n const {\n command: {\n capacity: { min, max, desired },\n },\n fieldChanged,\n } = this.props;\n return (\n <div>\n <div className=\"form-group\">\n <div className=\"col-md-2\">Min</div>\n <div className=\"col-md-8\">\n <SpelNumberInput\n value={min}\n min={0}\n max={typeof max === 'number' ? max : undefined}\n onChange={(v) => fieldChanged('min', v)}\n required={true}\n />\n </div>\n </div>\n <div className=\"form-group\">\n <div className=\"col-md-2\">Max</div>\n <div className=\"col-md-8\">\n <SpelNumberInput\n value={max}\n min={typeof min === 'number' ? min : undefined}\n onChange={(v) => fieldChanged('max', v)}\n required={true}\n />\n </div>\n </div>\n <div className=\"form-group\">\n <div className=\"col-md-2\">Desired</div>\n <div className=\"col-md-8\">\n <SpelNumberInput\n value={desired}\n min={typeof min === 'number' ? min : undefined}\n max={typeof max === 'number' ? max : undefined}\n onChange={(v) => fieldChanged('desired', v)}\n required={true}\n />\n </div>\n </div>\n </div>\n );\n }\n}\n","import type { FormikProps } from 'formik';\nimport { Field } from 'formik';\nimport React from 'react';\n\nimport type { IServerGroupCommand, IWizardPageComponent } from '@spinnaker/core';\nimport { parseNum } from '@spinnaker/core';\n\nimport { CapacitySelector } from '../capacity/CapacitySelector';\nimport { MinMaxDesired } from '../capacity/MinMaxDesired';\nimport type { IAmazonServerGroupCommand } from '../../serverGroupConfiguration.service';\n\nexport interface IServerGroupCapacityProps {\n formik: FormikProps<IServerGroupCommand>;\n}\n\nexport class ServerGroupCapacity\n extends React.Component<IServerGroupCapacityProps>\n implements IWizardPageComponent<IAmazonServerGroupCommand> {\n public validate(values: IServerGroupCommand): { [key: string]: string } {\n const errors: { [key: string]: string } = {};\n\n if (\n parseNum(values.capacity.min) < 0 ||\n parseNum(values.capacity.max) < 0 ||\n parseNum(values.capacity.desired) < 0\n ) {\n errors.capacity = 'Capacity min, max, and desired all have to be non-negative values.';\n }\n\n const amazonValues = values as IAmazonServerGroupCommand;\n if (\n amazonValues.targetHealthyDeployPercentage === undefined ||\n amazonValues.targetHealthyDeployPercentage === null\n ) {\n errors.targetHealthyDeployPercentage = 'Target Healthy Deploy Percentage required.';\n }\n return errors;\n }\n\n public render() {\n const { setFieldValue, values } = this.props.formik;\n\n return (\n <div className=\"container-fluid form-horizontal\">\n <div className=\"row\">\n <div className=\"col-md-12\">\n <CapacitySelector command={values} setFieldValue={setFieldValue} MinMaxDesired={MinMaxDesired} />\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-md-12\">\n <div className=\"form-group form-inline\" style={{ marginTop: '20px' }}>\n <div className=\"col-md-12\">\n Consider deployment successful when{' '}\n <Field\n type=\"number\"\n name=\"targetHealthyDeployPercentage\"\n min=\"0\"\n max=\"100\"\n className=\"form-control input-sm inline-number\"\n required={true}\n />{' '}\n percent of instances are healthy.\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n }\n}\n","import React from 'react';\n\nimport type { IAmazonInstanceTypeCategory } from '../../../../../instance/awsInstanceType.service';\n\nimport './advancedMode.less';\n\nexport interface IInstanceProfileSelectorProps {\n currentProfile: string;\n handleProfileChange: (profile: string) => void;\n instanceProfileList: IAmazonInstanceTypeCategory[];\n}\n\nexport function InstanceProfileSelector(props: IInstanceProfileSelectorProps) {\n return (\n <div>\n <h4 style={{ marginTop: '10px' }}>This application is</h4>\n {props.instanceProfileList.map((profile) => (\n <div key={profile.type} className={`instance-profile-header profile-button`}>\n <button\n type=\"button\"\n onClick={() => props.handleProfileChange(profile.type)}\n className={props.currentProfile === profile.type ? 'instance-profile active' : 'instance-profile'}\n >\n {props.currentProfile === profile.type && <span className=\"far fa-check-circle selected-indicator\" />}\n <div className=\"panel-heading\">\n <h4>\n <span className={`glyphicon glyphicon-${profile.icon}`} />\n <div>{profile.label}</div>\n </h4>\n </div>\n </button>\n </div>\n ))}\n </div>\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { ToggleButtonGroup, ToggleSize } from '@spinnaker/core';\nimport { AwsReactInjector } from '../../../../reactShims';\n\nexport interface ICpuCreditsToggleProps {\n unlimitedCpuCredits?: boolean;\n selectedInstanceTypes: string[];\n currentProfile: string;\n setUnlimitedCpuCredits: (unlimitedCpuCredits: boolean | undefined) => void;\n}\n\nexport function CpuCreditsToggle(props: ICpuCreditsToggleProps) {\n const { selectedInstanceTypes, currentProfile } = props;\n const isBurstingSupportedForAllTypes = AwsReactInjector.awsInstanceTypeService.isBurstingSupportedForAllTypes(\n selectedInstanceTypes,\n );\n const isAtleastOneTypeInProfile = AwsReactInjector.awsInstanceTypeService.getInstanceTypesInCategory(\n selectedInstanceTypes,\n currentProfile,\n ).length\n ? true\n : false;\n\n const [showToggle, setShowToggle] = useState(false);\n useEffect(() => {\n if (selectedInstanceTypes && selectedInstanceTypes.length) {\n if (!isBurstingSupportedForAllTypes) {\n props.setUnlimitedCpuCredits(undefined);\n }\n setShowToggle(isBurstingSupportedForAllTypes);\n }\n\n if (currentProfile) {\n setShowToggle(\n selectedInstanceTypes &&\n selectedInstanceTypes.length > 0 &&\n isBurstingSupportedForAllTypes &&\n isAtleastOneTypeInProfile,\n );\n }\n }, [currentProfile, selectedInstanceTypes]);\n\n return (\n <div className={'row'} style={{ fontSize: '110%' }}>\n {showToggle && (\n <div>\n <ToggleButtonGroup\n toggleSize={ToggleSize.XSMALL}\n propLabel={'Unlimited CPU credits '}\n propHelpFieldId={'aws.serverGroup.unlimitedCpuCredits'}\n tooltipPropOffBtn={'Toggle to turn OFF unlimited CPU credits'}\n displayTextPropOffBtn={'Off'}\n tooltipPropOnBtn={'Toggle to turn ON unlimited CPU credits'}\n displayTextPropOnBtn={'On'}\n onClick={(b) => props.setUnlimitedCpuCredits(b)}\n isPropertyActive={props.unlimitedCpuCredits}\n />\n </div>\n )}\n </div>\n );\n}\n","import _ from 'lodash';\nimport React from 'react';\n\nimport type { IAmazonInstanceType } from '../../../../../instance/awsInstanceType.service';\n\nexport function AmazonInstanceTypeInfoRenderer(props: { instanceType: IAmazonInstanceType }) {\n const spotSupport = props.instanceType?.supportedUsageClasses?.includes('spot') ? '| SPOT supported' : '';\n const CpuMem = `${props.instanceType?.defaultVCpus} vCPU | ${props.instanceType?.memoryInGiB} Gib Memory ${spotSupport}`;\n const instanceStorageInfo = props.instanceType?.instanceStorageSupported && (\n <span>\n <br />\n <span className={`select-option-label-attributes`}>\n {`Instance Storage: ${_.toUpper(props.instanceType?.instanceStorageInfo?.storageTypes)} | ${\n props.instanceType?.instanceStorageInfo?.totalSizeInGB\n } Gib total size`}\n </span>\n </span>\n );\n const ebsInfo = props.instanceType?.ebsInfo && (\n <span>\n <br />\n <span className={`select-option-label-attributes`}>\n {`EBS: optimization ${props.instanceType?.ebsInfo?.ebsOptimizedSupport} | NVMe ${props.instanceType?.ebsInfo?.nvmeSupport} | Encryption ${props.instanceType?.ebsInfo?.encryptionSupport}`}\n </span>\n </span>\n );\n const gpuInfo = props.instanceType?.gpuInfo && (\n <span>\n <br />\n <span className={`select-option-label-attributes`}>\n {`GPU: ${props.instanceType?.gpuInfo?.totalGpuMemoryInMiB} MiB total memory`}\n {props.instanceType?.gpuInfo?.gpus.map(\n (g) => ` | ${g.count} ${g.manufacturer} ${g.name} GPUs, size: ${g.gpuSizeInMiB} MiB`,\n )}\n </span>\n </span>\n );\n const generationInfo = typeof props.instanceType?.currentGeneration !== 'undefined' &&\n props.instanceType?.currentGeneration !== null && (\n <span>\n <br />\n <span className={`select-option-label-attributes`}>\n {props.instanceType?.currentGeneration ? 'Current Generation' : 'Previous Generation'}\n </span>\n </span>\n );\n\n return (\n <span>\n <span className={`select-option-label`}>{props.instanceType?.name}</span>\n <br />\n <span className={`select-option-label-attributes`}>{CpuMem}</span>\n {instanceStorageInfo}\n {ebsInfo}\n {gpuInfo}\n {generationInfo}\n </span>\n );\n}\n","import React from 'react';\n\nexport interface ICostFactorProps {\n min: number;\n max?: number;\n}\n\nexport const CostFactor = ({ min, max }: ICostFactorProps) => {\n const MAX_DOLLARS = 4;\n const minDollars = (\n <>\n <span className=\"cost\">{'$'.repeat(min)}</span>\n {'$'.repeat(MAX_DOLLARS - min)}\n </>\n );\n const maxDollars = (\n <>\n <span className=\"cost\">{'$'.repeat(Math.min(MAX_DOLLARS, max))}</span>\n {'$'.repeat(MAX_DOLLARS - Math.min(MAX_DOLLARS, max))}\n </>\n );\n\n return (\n <span className={'cost-factor'}>\n {minDollars}\n {max ? ` - ${maxDollars}` : ''}\n </span>\n );\n};\n","import React, { useState } from 'react';\nimport { Checkbox } from 'react-bootstrap';\nimport { SortableHandle } from 'react-sortable-hoc';\n\nimport { HoverablePopover, TextInput, Tooltip } from '@spinnaker/core';\n\nimport { AmazonInstanceTypeInfoRenderer } from './AmazonInstanceTypeInfoRenderer';\nimport type { IAmazonPreferredInstanceType } from '../../../../../instance/awsInstanceType.service';\nimport type { IAmazonInstanceType } from '../../../../../instance/awsInstanceType.service';\nimport { CostFactor } from '../../../../../instance/details/CostFactor';\nimport type { IAmazonInstanceTypeOverride } from '../../../serverGroupConfiguration.service';\n\nexport interface IRowProps {\n isCustom: boolean;\n selectedType?: IAmazonInstanceTypeOverride;\n selectedTypeInfo?: IAmazonInstanceType;\n instanceTypeDetails?: IAmazonPreferredInstanceType;\n removeInstanceType?: (typeToRemove: string) => void;\n addOrUpdateInstanceType: (instanceType: string, weight: string) => void;\n}\n\nexport function InstanceTypeRow(props: IRowProps) {\n const isRowSelected = props.selectedType ? true : false;\n const [newWeightedCap, setNewWeightedCap] = useState('');\n const instanceType = isRowSelected ? props.selectedType.instanceType : props.instanceTypeDetails.name;\n const disableRow = isRowSelected ? false : props.instanceTypeDetails.unavailable;\n\n const selectOrUpdateRow = (instanceType: string, weight: string) => {\n if (!disableRow) {\n props.addOrUpdateInstanceType(instanceType, weight);\n }\n setNewWeightedCap('');\n };\n\n const handleWeightChange = (e: React.ChangeEvent<any>): void => {\n setNewWeightedCap(e.target.value);\n if (isRowSelected) {\n selectOrUpdateRow(instanceType, e.target.value);\n } else {\n document.getElementById(`selectInstanceType-${instanceType}`).focus();\n }\n };\n\n let row;\n if (props.isCustom) {\n const instanceTypeInfo = <AmazonInstanceTypeInfoRenderer instanceType={props.selectedTypeInfo} />;\n row = (\n <tr key={instanceType} className={'sortable clickable'}>\n <td>\n <DragHandle />\n </td>\n <td>\n {`${instanceType} `}\n <HoverablePopover placement={'right'} template={instanceTypeInfo} className={'custom-profile'}>\n <span className=\"clickable help-field\">\n <i className=\"small glyphicon glyphicon-info-sign\" />\n </span>\n </HoverablePopover>\n </td>\n <td title={'Enter optional weight (allowed values: 1 to 999).'}>\n <TextInput\n className={'form-control input input-sm'}\n pattern=\"[0-9]*\"\n placeholder=\"Enter optional weight (allowed values: 1 to 999).\"\n value={props.selectedType?.weightedCapacity || ''}\n onChange={(e) => selectOrUpdateRow(instanceType, e.target.value)}\n />\n </td>\n <td>\n <div>\n <span>\n <a\n className=\"btn btn-sm btn-link clickable\"\n onClick={() => props.removeInstanceType(instanceType)}\n style={{ padding: '5px' }}\n >\n <Tooltip value={'Remove instance type'}>\n <span className=\"glyphicon glyphicon-trash\" />\n </Tooltip>\n </a>\n </span>\n </div>\n </td>\n </tr>\n );\n } else {\n const { cpu, memory, cpuCreditsPerHour, storage, costFactor } = props.instanceTypeDetails;\n row = (\n <tr\n key={instanceType}\n className={isRowSelected ? 'sortable clickable' : `non-sortable ${disableRow ? 'unavailable' : 'clickable'}`}\n title={\n isRowSelected\n ? 'Click to unselect instance type'\n : disableRow\n ? 'This instance type is not available for the selected configuration'\n : 'Click to select instance type'\n }\n onClick={(e) => {\n if (!$(e.target).is('input')) {\n isRowSelected ? props.removeInstanceType(instanceType) : selectOrUpdateRow(instanceType, newWeightedCap);\n }\n }}\n >\n {isRowSelected ? (\n <td>\n <DragHandle />\n </td>\n ) : (\n <td></td>\n )}\n <td>\n <Checkbox\n id={`selectInstanceType-${instanceType}`}\n checked={isRowSelected ? true : false}\n disabled={disableRow}\n onChange={() => {\n isRowSelected ? props.removeInstanceType(instanceType) : selectOrUpdateRow(instanceType, newWeightedCap);\n }}\n />\n </td>\n <td>{instanceType}</td>\n <td>{cpu}</td>\n <td>{memory}</td>\n {cpuCreditsPerHour ? (\n <td>{cpuCreditsPerHour}</td>\n ) : (\n <td title={'Cpu credits not applicable to instance type.'}>-</td>\n )}\n {storage.type === 'EBS' && <td>EBS Only</td>}\n {storage.type === 'SSD' && <td>{storage.count + 'x' + storage.size}</td>}\n <td>\n <CostFactor min={costFactor} />\n </td>\n <td title={!disableRow ? 'Enter optional weight (allowed values: 1 to 999).' : ''}>\n <TextInput\n inputClassName={'form-control input input-sm'}\n id={`weightedCapacity-${instanceType}`}\n pattern=\"[0-9]*\"\n placeholder=\"Enter optional weight (allowed values: 1 to 999).\"\n disabled={disableRow}\n value={props.selectedType?.weightedCapacity || newWeightedCap || ''}\n onChange={handleWeightChange}\n />\n </td>\n </tr>\n );\n }\n\n return row;\n}\n\nconst DragHandle = SortableHandle(() => (\n <Tooltip value={'Drag to change priority'}>\n <span className=\"instance-type-drag-handle glyphicon glyphicon-resize-vertical\" />\n </Tooltip>\n));\n","import { difference, flatten, keyBy } from 'lodash';\nimport React from 'react';\nimport type { SortEnd } from 'react-sortable-hoc';\nimport { SortableContainer, SortableElement } from 'react-sortable-hoc';\n\nimport type { IInstanceTypeFamily } from '@spinnaker/core';\n\nimport { InstanceTypeRow } from './InstanceTypeRow';\nimport type {\n IAmazonInstanceType,\n IAmazonPreferredInstanceType,\n} from '../../../../../instance/awsInstanceType.service';\nimport type { IAmazonInstanceTypeOverride } from '../../../serverGroupConfiguration.service';\n\nexport function InstanceTypeTableBody(props: {\n isCustom: boolean;\n profileFamiliesDetails?: IInstanceTypeFamily[];\n selectedInstanceTypesMap: Map<string, IAmazonInstanceTypeOverride>;\n selectedInstanceTypesInfo?: IAmazonInstanceType[];\n addOrUpdateInstanceType: (instanceType: string, weight: string) => void;\n removeInstanceType: (instanceType: string) => void;\n handleSortEnd: (sortEnd: SortEnd) => void;\n}) {\n return (\n <TableRows\n isCustom={props.isCustom}\n selectedInstanceTypesMap={props.selectedInstanceTypesMap}\n selectedInstanceTypesInfo={props.selectedInstanceTypesInfo}\n removeInstanceType={props.removeInstanceType}\n addOrUpdateInstanceType={props.addOrUpdateInstanceType}\n instanceTypeDetails={\n props.isCustom\n ? null\n : new Map(\n Object.entries(\n keyBy(flatten(props.profileFamiliesDetails.map((f: IInstanceTypeFamily) => f.instanceTypes)), 'name'),\n ),\n )\n }\n onSortEnd={(sortEnd) => props.handleSortEnd(sortEnd)}\n distance={1}\n />\n );\n}\n\nconst TableRows = SortableContainer(\n (props: {\n isCustom: boolean;\n instanceTypeDetails?: Map<string, IAmazonPreferredInstanceType>;\n selectedInstanceTypesMap: Map<string, IAmazonInstanceTypeOverride>;\n selectedInstanceTypesInfo?: IAmazonInstanceType[];\n removeInstanceType: (typeToRemove: string) => void;\n addOrUpdateInstanceType: (instanceType: string, weight: string) => void;\n }) => {\n const { isCustom, selectedInstanceTypesMap } = props;\n\n let selectedRows, unselectedRows;\n if (isCustom) {\n selectedRows =\n selectedInstanceTypesMap.size > 0 &&\n Array.from(selectedInstanceTypesMap.values())\n .sort((i1, i2) => i1.priority - i2.priority)\n .map((selectedType, index: number) => (\n <SortableRow\n key={`${selectedType.instanceType}-${index}`}\n index={index}\n isCustom={true}\n selectedType={selectedType}\n selectedTypeInfo={props.selectedInstanceTypesInfo.find((it) => it.name === selectedType.instanceType)}\n removeInstanceType={props.removeInstanceType}\n addOrUpdateInstanceType={props.addOrUpdateInstanceType}\n />\n ));\n } else {\n const { instanceTypeDetails } = props;\n const instanceTypesInProfile: string[] = Array.from(instanceTypeDetails?.keys());\n const unselectedInstanceTypes: string[] = difference(\n instanceTypesInProfile,\n Array.from(selectedInstanceTypesMap.keys()),\n );\n\n const selectedRowsOrdered: IAmazonInstanceTypeOverride[] = Array.from(selectedInstanceTypesMap.values())\n .filter((selectedType: IAmazonInstanceTypeOverride) =>\n instanceTypesInProfile.includes(selectedType.instanceType),\n )\n .sort((i1, i2) => i1.priority - i2.priority);\n\n selectedRows =\n selectedRowsOrdered &&\n selectedRowsOrdered.length > 0 &&\n selectedRowsOrdered.map((selectedType: IAmazonInstanceTypeOverride, index: number) => (\n <SortableRow\n key={`${selectedType.instanceType}-${index}`}\n index={index}\n isCustom={false}\n selectedType={selectedType}\n instanceTypeDetails={instanceTypeDetails}\n removeInstanceType={props.removeInstanceType}\n addOrUpdateInstanceType={props.addOrUpdateInstanceType}\n />\n ));\n\n unselectedRows =\n unselectedInstanceTypes &&\n unselectedInstanceTypes.length > 0 &&\n unselectedInstanceTypes.map((instanceType) => (\n <InstanceTypeRow\n key={instanceType}\n isCustom={false}\n instanceTypeDetails={instanceTypeDetails.get(instanceType)}\n addOrUpdateInstanceType={props.addOrUpdateInstanceType}\n />\n ));\n }\n\n return (\n <tbody>\n {selectedRows}\n {!isCustom ? unselectedRows : null}\n </tbody>\n );\n },\n);\n\nconst SortableRow = SortableElement(\n (props: {\n isCustom: boolean;\n selectedType: IAmazonInstanceTypeOverride;\n selectedTypeInfo?: IAmazonInstanceType;\n instanceTypeDetails?: Map<string, IAmazonPreferredInstanceType>;\n removeInstanceType: (typeToRemove: string) => void;\n addOrUpdateInstanceType: (instanceType: string, weight: string) => void;\n }) => (\n <InstanceTypeRow\n key={props.selectedType.instanceType}\n isCustom={props.isCustom}\n selectedType={props.selectedType}\n selectedTypeInfo={props.selectedTypeInfo}\n instanceTypeDetails={!props.isCustom ? props.instanceTypeDetails.get(props.selectedType.instanceType) : null}\n removeInstanceType={props.removeInstanceType}\n addOrUpdateInstanceType={props.addOrUpdateInstanceType}\n />\n ),\n);\n","import _ from 'lodash';\nimport React from 'react';\nimport type { Option } from 'react-select';\nimport Select from 'react-select';\n\nimport { HelpField } from '@spinnaker/core';\n\nimport { AmazonInstanceTypeInfoRenderer } from './AmazonInstanceTypeInfoRenderer';\nimport type { IAmazonInstanceType } from '../../../../../instance/awsInstanceType.service';\n\nexport interface InstanceTypeSelectProps {\n availableInstanceTypesList: IAmazonInstanceType[];\n addOrUpdateInstanceType: (type: string, weight: string) => void;\n}\n\nexport function InstanceTypeSelect(props: InstanceTypeSelectProps) {\n /**\n * Filters implemented:\n * - instance family / size / type e.g. c3/ large/ c3.large\n * - min vcpu e.g. 16vcpu\n * - min memory e.g 32gib\n * - instance storage type e.g. ssd, hdd\n * - spot support\n * - ebs support\n * - gpu support\n * - current generation v/s old generation like 'currentGen' / 'oldGen'\n */\n const filterOption = (option: IAmazonInstanceType, inputValue: string) => {\n const {\n name,\n defaultVCpus,\n memoryInGiB,\n instanceStorageInfo,\n ebsInfo,\n gpuInfo,\n supportedUsageClasses,\n currentGeneration,\n } = option;\n\n return inputValue.split(',').every((inputVal: string) => {\n const searchVal = _.toLower(inputVal.trim());\n return (\n (searchVal.match(/\\d+\\s*vcpu/) && defaultVCpus >= _.toNumber(searchVal.split('vcpu')[0].trim())) ||\n (searchVal.match(/\\d+\\s*gib/) && memoryInGiB >= _.toNumber(searchVal.split('gib')[0].trim())) ||\n (searchVal.match(/\\b(ssd|hdd)\\b/) && instanceStorageInfo?.storageTypes.includes(searchVal)) ||\n (searchVal === 'spot' && supportedUsageClasses?.includes(searchVal)) ||\n (searchVal === 'ebs' && ebsInfo) ||\n (searchVal === 'gpu' && gpuInfo) ||\n (searchVal === 'currentgen' && currentGeneration) ||\n (searchVal === 'oldgen' && !currentGeneration) ||\n name.match(searchVal)\n );\n });\n };\n\n const optionRenderer = (option: IAmazonInstanceType) => {\n return <AmazonInstanceTypeInfoRenderer instanceType={option} />;\n };\n\n return (\n <div className={'custom-profile'}>\n <Select\n className={`select`}\n clearable={false}\n multi={false}\n placeholder={'Filter like 16vcpu, 32gib, spot, oldGen or Select an instance type to add'}\n removeSelected={true}\n searchable={true}\n options={props.availableInstanceTypesList}\n optionRenderer={optionRenderer}\n filterOption={filterOption}\n valueRenderer={(o) => <>{o.name}</>}\n onChange={(o: Option<IAmazonInstanceType>) => props.addOrUpdateInstanceType(o.name, undefined)}\n />{' '}\n <HelpField id=\"aws.serverGroup.instanceTypesSelect\" />\n </div>\n );\n}\n","import React from 'react';\n\nimport { HelpField } from '@spinnaker/core';\n\nimport { InstanceTypeSelect } from './InstanceTypeSelect';\nimport type { IAmazonInstanceType } from '../../../../../instance/awsInstanceType.service';\n\nimport './advancedMode.less';\n\nexport function Heading(props: { isCustom: boolean; profileLabel?: string; profileDescriptionArr?: string[] }) {\n let description;\n if (props.isCustom) {\n description = <p>Choose the instance types that best suit the needs of your application.</p>;\n } else {\n description = (\n <>\n <p>\n <b>{props.profileLabel}</b>\n </p>\n <ul>\n {props.profileDescriptionArr.map((d, index) => (\n <li key={index}>{d}</li>\n ))}\n </ul>\n </>\n );\n }\n\n return (\n <div className={'row sub-section'}>\n <h4>Instance Types</h4>\n <div className={'description'}>\n {description}\n <p>\n Learn about AWS recommended best practices in{' '}\n <a\n target=\"_blank\"\n href=\"https://spinnaker.io/docs/setup/other_config/server-group-launch-settings/aws-ec2/launch-templates/#create-a-server-group-with-aws-recommended-best-practices-for-ec2-spot\"\n >\n examples and docs\n </a>\n .\n </p>\n <i>\n <b>Note:</b>\n <ul>\n <li>\n The order of instance types sets their priority when On-Demand capacity is launched; instance type at the\n top is prioritized the highest.\n </li>\n <li>Some instance types might not be available for the selected configuration.</li>\n </ul>\n </i>\n </div>\n </div>\n );\n}\n\nexport function Header(props: { isCustom: boolean; showCpuCredits?: boolean }) {\n let emptyHeaders, instanceTypeHeader, otherHeaders, tailingEmptyHeader;\n if (props.isCustom) {\n emptyHeaders = <th />;\n instanceTypeHeader = (\n <th>\n Instance Type <HelpField id=\"aws.serverGroup.instanceTypes\" />\n </th>\n );\n otherHeaders = null;\n tailingEmptyHeader = <th />;\n } else {\n emptyHeaders = (\n <>\n <th />\n <th />\n </>\n );\n instanceTypeHeader = <th>InstanceType</th>;\n otherHeaders = (\n <>\n <th>vCPU</th>\n <th>Mem (GiB)</th>\n {props.showCpuCredits && <th>CPU Credits</th>}\n <th>\n Storage (GB)\n <HelpField id={'aws.serverGroup.storageType'} />\n </th>\n <th>Cost</th>\n </>\n );\n tailingEmptyHeader = null;\n }\n\n return (\n <thead>\n <tr>\n {emptyHeaders}\n {instanceTypeHeader}\n {otherHeaders}\n <th>\n Weight <HelpField id=\"aws.serverGroup.instanceTypeWeight\" />\n </th>\n {tailingEmptyHeader}\n </tr>\n </thead>\n );\n}\n\nexport function Footer(props: {\n isCustom: boolean;\n availableInstanceTypesList: IAmazonInstanceType[];\n addOrUpdateInstanceType: (type: string, weight: string) => void;\n}) {\n return props.isCustom ? (\n <tfoot>\n <tr>\n <td>\n <span className={'glyphicon glyphicon-plus-sign'} style={{ paddingTop: '8px' }} />\n </td>\n <td colSpan={2}>\n <InstanceTypeSelect\n availableInstanceTypesList={props.availableInstanceTypesList}\n addOrUpdateInstanceType={props.addOrUpdateInstanceType}\n />\n </td>\n <td></td>\n </tr>\n </tfoot>\n ) : null;\n}\n","import React from 'react';\n\nimport type { IAmazonServerGroupCommandDirty } from '../../serverGroupConfiguration.service';\n\nexport function InstanceTypeWarning(props: { dirty: IAmazonServerGroupCommandDirty; clearWarnings: () => void }) {\n if (\n props.dirty.instanceType ||\n (props.dirty.launchTemplateOverridesForInstanceType &&\n props.dirty.launchTemplateOverridesForInstanceType.length > 0)\n ) {\n return (\n <div className=\"col-md-12\">\n <div className=\"alert alert-warning\">\n <p>\n <i className=\"fa fa-exclamation-triangle\" />\n {props.dirty.instanceType &&\n 'The following instance type was found incompatible with the selected image/region and was removed:'}\n {props.dirty.launchTemplateOverridesForInstanceType &&\n props.dirty.launchTemplateOverridesForInstanceType.length > 0 &&\n 'The following instance type(s) were found incompatible with the selected image/region and were removed:'}\n </p>\n <ul>\n {props.dirty.instanceType && <li key={props.dirty.instanceType}>{props.dirty.instanceType}</li>}\n {props.dirty.launchTemplateOverridesForInstanceType &&\n props.dirty.launchTemplateOverridesForInstanceType.length > 0 &&\n props.dirty.launchTemplateOverridesForInstanceType.map((it) => (\n <li key={it.instanceType}>\n {it.instanceType}\n {it.weightedCapacity ? ' with weight ' + it.weightedCapacity : ''}\n </li>\n ))}\n </ul>\n <p className=\"text-right\">\n <a className=\"btn btn-sm btn-default dirty-flag-dismiss clickable\" onClick={() => props.clearWarnings()}>\n Okay\n </a>\n </p>\n </div>\n </div>\n );\n } else {\n return null;\n }\n}\n","import React from 'react';\nimport type { SortEnd } from 'react-sortable-hoc';\nimport { arrayMove } from 'react-sortable-hoc';\n\nimport { CpuCreditsToggle } from '../CpuCreditsToggle';\nimport { InstanceTypeTableBody } from './InstanceTypeTableBody';\nimport { Header, Heading } from './InstanceTypeTableParts';\nimport { Footer } from './InstanceTypeTableParts';\nimport { InstanceTypeWarning } from '../InstanceTypeWarning';\nimport { AWSProviderSettings } from '../../../../../aws.settings';\nimport type { IAmazonInstanceTypeCategory } from '../../../../../instance/awsInstanceType.service';\nimport type { IAmazonInstanceType } from '../../../../../instance/awsInstanceType.service';\nimport type { IAmazonInstanceTypeOverride } from '../../../serverGroupConfiguration.service';\nimport type { IAmazonServerGroupCommandViewState } from '../../../serverGroupConfiguration.service';\n\nimport './advancedMode.less';\n\nexport interface IInstanceTypeTableProps {\n currentProfile: string;\n selectedInstanceTypesMap: Map<string, IAmazonInstanceTypeOverride>;\n unlimitedCpuCreditsInCmd: boolean;\n profileDetails: IAmazonInstanceTypeCategory;\n availableInstanceTypesList: IAmazonInstanceType[];\n handleInstanceTypesChange: (instanceTypes: IAmazonInstanceTypeOverride[]) => void;\n setUnlimitedCpuCredits: (unlimitedCpuCredits: boolean | undefined) => void;\n viewState: IAmazonServerGroupCommandViewState;\n clearWarnings: () => void;\n}\n\nexport function InstanceTypeTable(props: IInstanceTypeTableProps) {\n const { currentProfile, selectedInstanceTypesMap } = props;\n\n const handleSortEnd = (sortEnd: SortEnd): void => {\n const sortedInstanceTypes: string[] = Array.from(selectedInstanceTypesMap.values())\n .sort((i1, i2) => i1.priority - i2.priority)\n .map((it) => it.instanceType);\n const instanceTypesInNewOrder = arrayMove(sortedInstanceTypes, sortEnd.oldIndex, sortEnd.newIndex);\n\n updatePriorityForSelectedTypes(instanceTypesInNewOrder);\n };\n\n const updatePriorityForSelectedTypes = (instanceTypesInNewOrder: string[]): void => {\n selectedInstanceTypesMap.forEach((value, key) => {\n const newPriority = 1 + instanceTypesInNewOrder.indexOf(key);\n if (value.priority !== newPriority) {\n value.priority = newPriority;\n }\n });\n props.handleInstanceTypesChange(Array.from(selectedInstanceTypesMap.values()));\n };\n\n const removeInstanceType = (instanceType: string): void => {\n const selectedInstanceTypesMapNew = new Map(selectedInstanceTypesMap);\n selectedInstanceTypesMapNew.delete(instanceType);\n props.handleInstanceTypesChange(Array.from(selectedInstanceTypesMapNew.values()));\n };\n\n const addOrUpdateInstanceType = (type: string, weight: string) => {\n const weightNum = Number(weight);\n const weightedCapacity = isNaN(weightNum) || weightNum === 0 ? undefined : weightNum.toString();\n const itemToUpdate = selectedInstanceTypesMap.has(type)\n ? {\n ...selectedInstanceTypesMap.get(type), // update existing item\n weightedCapacity,\n }\n : {\n instanceType: type, // new item\n weightedCapacity,\n priority:\n 1 +\n Array.from(selectedInstanceTypesMap.values()).reduce(\n (max, it) => (it.priority > max ? it.priority : max),\n 0,\n ),\n };\n selectedInstanceTypesMap.set(type, itemToUpdate);\n props.handleInstanceTypesChange(Array.from(selectedInstanceTypesMap.values()));\n };\n\n const isCpuCreditsEnabled: boolean = AWSProviderSettings.serverGroups?.enableCpuCredits;\n const selectedInstanceTypeNames = Array.from(selectedInstanceTypesMap.keys());\n const cpuCreditsToggle = (\n <div>\n <CpuCreditsToggle\n unlimitedCpuCredits={props.unlimitedCpuCreditsInCmd}\n currentProfile={currentProfile}\n selectedInstanceTypes={selectedInstanceTypeNames}\n setUnlimitedCpuCredits={props.setUnlimitedCpuCredits}\n />\n </div>\n );\n\n if (currentProfile && currentProfile !== 'custom') {\n const { label, descriptionListOverride, families, showCpuCredits } = props.profileDetails;\n const isCustom = false;\n return (\n <div className={'row sub-section'}>\n <Heading\n isCustom={isCustom}\n profileLabel={label}\n profileDescriptionArr={descriptionListOverride ? descriptionListOverride : families.map((f) => f.description)}\n />\n <InstanceTypeWarning dirty={props.viewState.dirty} clearWarnings={props.clearWarnings} />\n {isCpuCreditsEnabled && cpuCreditsToggle}\n <table className=\"table table-hover\">\n <Header isCustom={isCustom} showCpuCredits={showCpuCredits} />\n <InstanceTypeTableBody\n isCustom={isCustom}\n profileFamiliesDetails={families}\n selectedInstanceTypesMap={selectedInstanceTypesMap}\n addOrUpdateInstanceType={addOrUpdateInstanceType}\n removeInstanceType={removeInstanceType}\n handleSortEnd={handleSortEnd}\n />\n </table>\n </div>\n );\n } else {\n const isCustom = true;\n return (\n <div className={'row sub-section'}>\n <Heading isCustom={isCustom} />\n <InstanceTypeWarning dirty={props.viewState.dirty} clearWarnings={props.clearWarnings} />\n {isCpuCreditsEnabled && cpuCreditsToggle}\n <table className=\"table table-hover\">\n <Header isCustom={isCustom} />\n <InstanceTypeTableBody\n isCustom={isCustom}\n selectedInstanceTypesMap={selectedInstanceTypesMap}\n selectedInstanceTypesInfo={props.availableInstanceTypesList.filter((it) =>\n selectedInstanceTypeNames.includes(it.name),\n )}\n addOrUpdateInstanceType={addOrUpdateInstanceType}\n removeInstanceType={removeInstanceType}\n handleSortEnd={handleSortEnd}\n />\n <Footer\n isCustom={isCustom}\n availableInstanceTypesList={props.availableInstanceTypesList.filter(\n (it) => !selectedInstanceTypeNames.includes(it.name),\n )}\n addOrUpdateInstanceType={addOrUpdateInstanceType}\n />\n </table>\n </div>\n );\n }\n}\n","import type { FormikProps } from 'formik';\nimport { get } from 'lodash';\nimport React from 'react';\n\nimport { FormikFormField, HelpField, NumberInput, ReactSelectInput, TextInput, Tooltip } from '@spinnaker/core';\nimport type { IAmazonServerGroupCommand } from '../../../serverGroupConfiguration.service';\n\nimport './InstancesDistribution.less';\n\nexport interface IInstancesDistributionProps {\n formik: FormikProps<IAmazonServerGroupCommand>;\n}\n\nfunction useDefaultFormikValue(formik: FormikProps<IAmazonServerGroupCommand>, field: string, defaultValue: any) {\n const value = get(formik.values, field);\n React.useEffect(() => {\n if (value === undefined && defaultValue !== undefined) {\n formik.setFieldValue(field, defaultValue);\n }\n }, [field, defaultValue, value]);\n}\n\nexport function InstancesDistribution(props: IInstancesDistributionProps) {\n const { values: command, setFieldValue } = props.formik;\n\n const spotAllocStrategyOptions = [\n { label: 'capacity-optimized (recommended)', value: 'capacity-optimized' },\n { label: 'capacity-optimized-prioritized', value: 'capacity-optimized-prioritized' },\n { label: 'lowest-price', value: 'lowest-price' },\n ];\n\n // When allocation strategy toggles to/from lowest-price, update spotInstancePools\n React.useEffect(() => {\n if (command.spotAllocationStrategy !== 'lowest-price') {\n setFieldValue('spotInstancePools', undefined);\n } else if (command.spotInstancePools === undefined) {\n setFieldValue('spotInstancePools', 2);\n }\n }, [command.spotAllocationStrategy]);\n\n useDefaultFormikValue(props.formik, 'spotAllocationStrategy', 'capacity-optimized');\n\n // prioritized is the only supported strategy for now\n useDefaultFormikValue(props.formik, 'onDemandAllocationStrategy', 'prioritized');\n\n // AWS defaults\n useDefaultFormikValue(props.formik, 'onDemandBaseCapacity', 0);\n useDefaultFormikValue(props.formik, 'onDemandPercentageAboveBaseCapacity', 100);\n\n return (\n <div className={'InstancesDistribution row sub-section form-group'}>\n <h4>Instances Distribution</h4>\n <div className={'description'}>\n Diversify and distribute instance types across purchase options.{' '}\n <HelpField id={'aws.serverGroup.instancesDistribution'} />\n </div>\n <br />\n\n <FormikFormField\n label={'Spot Allocation Strategy'}\n name={'spotAllocationStrategy'}\n help={<HelpField id={'aws.serverGroup.spotAllocationStrategy'} />}\n input={(inputProps) => <ReactSelectInput {...inputProps} mode=\"PLAIN\" options={spotAllocStrategyOptions} />}\n />\n\n {props.formik.values.spotAllocationStrategy === 'lowest-price' && (\n <FormikFormField\n label={'Spot Instance Pools Count'}\n name={'spotInstancePools'}\n help={<HelpField id={'aws.serverGroup.spotInstancePoolCount'} />}\n input={(inputProps) => <NumberInput {...inputProps} />}\n />\n )}\n\n <FormikFormField\n label={'On-Demand Allocation Strategy'}\n name={'onDemandAllocationStrategy'}\n help={<HelpField id={'aws.serverGroup.odAllocationStrategy'} />}\n input={(inputProps) => <TextInput {...inputProps} disabled={true} />}\n />\n\n <FormikFormField\n label={'On-Demand Base Capacity'}\n name={'onDemandBaseCapacity'}\n help={<HelpField id={'aws.serverGroup.odBase'} />}\n input={(inputProps) => <NumberInput {...inputProps} />}\n />\n\n <FormikFormField\n label={'On-Demand Percentage Above Base Capacity'}\n name={'onDemandPercentageAboveBaseCapacity'}\n help={<HelpField id={'aws.serverGroup.odPercentAboveBase'} />}\n input={(inputProps) => <NumberInput {...inputProps} />}\n />\n\n <FormikFormField\n label={'Spot Max Price'}\n name={'spotPrice'}\n help={<HelpField id={'aws.serverGroup.spotMaxPrice'} />}\n input={(inputProps) => (\n <Tooltip value={'Recommended to leave empty and use AWS default i.e. On-Demand price'}>\n <TextInput\n {...inputProps}\n placeholder={'Recommended to leave empty and use AWS default i.e. On-Demand price'}\n />\n </Tooltip>\n )}\n />\n </div>\n );\n}\n","import type { FormikProps } from 'formik/dist/types';\nimport { keyBy } from 'lodash';\nimport React, { useEffect, useState } from 'react';\n\nimport { usePrevious } from '@spinnaker/core';\n\nimport { InstanceProfileSelector } from './InstanceProfileSelector';\nimport { InstanceTypeTable } from './InstanceTypeTable';\nimport { InstancesDistribution } from './InstancesDistribution';\nimport type { IAmazonInstanceTypeCategory } from '../../../../../instance/awsInstanceType.service';\nimport { AwsReactInjector } from '../../../../../reactShims';\nimport type { IAmazonInstanceTypeOverride, IAmazonServerGroupCommand } from '../../../serverGroupConfiguration.service';\n\nexport interface IAdvancedModeSelectorProps {\n formik: FormikProps<IAmazonServerGroupCommand>;\n instanceTypeDetails: IAmazonInstanceTypeCategory[];\n setUnlimitedCpuCredits: (unlimitedCpuCredits: boolean | undefined) => void;\n clearWarnings: () => void;\n}\n\n/**\n * Note: Launch templates support is expected to be enabled if this component is rendered.\n */\nexport function AdvancedModeSelector(props: IAdvancedModeSelectorProps) {\n const { instanceTypeDetails, setUnlimitedCpuCredits } = props;\n const { values: command, setFieldValue } = props.formik;\n\n // for the case of MixedInstancesPolicy without overrides, copy command.instanceType to command.launchTemplateOverridesForInstanceType\n const { instanceType, launchTemplateOverridesForInstanceType } = command;\n useEffect(() => {\n if (!launchTemplateOverridesForInstanceType && instanceType) {\n props.formik.setFieldValue('launchTemplateOverridesForInstanceType', [\n { instanceType: command.instanceType, priority: 1 },\n ]);\n }\n });\n\n const instanceTypesInProps: IAmazonInstanceTypeOverride[] = command.launchTemplateOverridesForInstanceType\n ? command.launchTemplateOverridesForInstanceType\n : undefined;\n\n const selectedInstanceTypesMap = new Map<string, IAmazonInstanceTypeOverride>(\n Object.entries(keyBy(instanceTypesInProps, 'instanceType')),\n );\n\n const [instanceProfile, setInstanceProfile] = useState(command.viewState.instanceProfile || 'custom');\n const prevInstanceProfile = usePrevious(instanceProfile);\n\n const handleProfileChange = (newProfile: string) => {\n setInstanceProfile(newProfile);\n setFieldValue('viewState', {\n ...command.viewState,\n instanceProfile: newProfile,\n });\n\n // update instance types on profile change\n const hasProfileChanged = prevInstanceProfile && newProfile && prevInstanceProfile !== newProfile;\n const isInstanceTypesUpdateNeeded = newProfile !== 'custom' && instanceTypesInProps && instanceTypesInProps.length;\n if (hasProfileChanged && isInstanceTypesUpdateNeeded) {\n const instanceTypesInProfile: string[] = AwsReactInjector.awsInstanceTypeService.getInstanceTypesInCategory(\n instanceTypesInProps.map((it) => it.instanceType),\n newProfile,\n );\n const newMultipleTypes = instanceTypesInProps.filter((o) => instanceTypesInProfile.includes(o.instanceType));\n setFieldValue('launchTemplateOverridesForInstanceType', newMultipleTypes);\n command.launchTemplateOverridesChanged(command);\n }\n };\n\n const handleInstanceTypesChange = (types: IAmazonInstanceTypeOverride[]): void => {\n setFieldValue('launchTemplateOverridesForInstanceType', types);\n command.launchTemplateOverridesChanged(command);\n };\n\n if (!(instanceTypeDetails && instanceTypeDetails.length > 0)) {\n return null;\n }\n\n return (\n <div className={'advanced-mode-selector'}>\n <InstanceProfileSelector\n currentProfile={instanceProfile}\n handleProfileChange={handleProfileChange}\n instanceProfileList={instanceTypeDetails}\n />\n <InstancesDistribution formik={props.formik} />\n <InstanceTypeTable\n currentProfile={instanceProfile}\n selectedInstanceTypesMap={selectedInstanceTypesMap}\n unlimitedCpuCreditsInCmd={command.unlimitedCpuCredits}\n profileDetails={instanceTypeDetails.find((p) => p.type === instanceProfile)}\n availableInstanceTypesList={\n (command.backingData && command.backingData.filtered && command.backingData.filtered.instanceTypesInfo) || []\n }\n handleInstanceTypesChange={handleInstanceTypesChange}\n setUnlimitedCpuCredits={setUnlimitedCpuCredits}\n viewState={command.viewState}\n clearWarnings={props.clearWarnings}\n />\n </div>\n );\n}\n","import React from 'react';\n\nimport { NgReact } from '@spinnaker/core';\n\nimport { CpuCreditsToggle } from '../CpuCreditsToggle';\nimport { InstanceTypeWarning } from '../InstanceTypeWarning';\nimport { AWSProviderSettings } from '../../../../../aws.settings';\nimport type { IAmazonServerGroupCommand } from '../../../serverGroupConfiguration.service';\n\nexport interface ISimpleModeSelectorProps {\n command: IAmazonServerGroupCommand;\n setUnlimitedCpuCredits: (unlimitedCpuCredits: boolean | undefined) => void;\n setFieldValue: (field: keyof IAmazonServerGroupCommand, value: any, shouldValidate?: boolean) => void;\n clearWarnings: () => void;\n}\n\nexport function SimpleModeSelector(props: ISimpleModeSelectorProps) {\n const { command } = props;\n const { InstanceArchetypeSelector, InstanceTypeSelector } = NgReact;\n const isLaunchTemplatesEnabled = AWSProviderSettings.serverGroups?.enableLaunchTemplates;\n const isCpuCreditsEnabled = AWSProviderSettings.serverGroups?.enableCpuCredits;\n\n const instanceProfileChanged = (newProfile: string) => {\n // Instance profile is already set on values.viewState, so just use that value.\n // Once angular is gone from this component tree, we can move all the viewState stuff\n // into react state\n props.setFieldValue('viewState', {\n ...command.viewState,\n instanceProfile: newProfile,\n });\n };\n\n const instanceTypeChanged = (type: string) => {\n command.instanceTypeChanged(command);\n props.setFieldValue('instanceType', type);\n };\n\n return (\n <div className=\"container-fluid form-horizontal\">\n <div className=\"row\">\n <InstanceArchetypeSelector\n command={command}\n onTypeChanged={instanceTypeChanged}\n onProfileChanged={instanceProfileChanged}\n />\n <InstanceTypeWarning dirty={command.viewState.dirty} clearWarnings={props.clearWarnings} />\n <div style={{ padding: '0 15px' }}>\n {command.viewState.instanceProfile && command.viewState.instanceProfile !== 'custom' && (\n <InstanceTypeSelector command={command} onTypeChanged={instanceTypeChanged} />\n )}\n </div>\n </div>\n {isLaunchTemplatesEnabled && isCpuCreditsEnabled && (\n <div className=\"row\">\n <CpuCreditsToggle\n unlimitedCpuCredits={command.unlimitedCpuCredits}\n selectedInstanceTypes={[command.instanceType]}\n currentProfile={command.viewState.instanceProfile}\n setUnlimitedCpuCredits={props.setUnlimitedCpuCredits}\n />\n </div>\n )}\n </div>\n );\n}\n","import type { FormikProps } from 'formik/dist/types';\nimport React, { useEffect, useState } from 'react';\n\nimport type { IInstanceTypeCategory } from '@spinnaker/core';\nimport { HelpField } from '@spinnaker/core';\n\nimport { AdvancedModeSelector } from './advancedMode/AdvancedModeSelector';\nimport { AWSProviderSettings } from '../../../../aws.settings';\nimport type { IAmazonInstanceTypeOverride, IAmazonServerGroupCommand } from '../../serverGroupConfiguration.service';\nimport { SimpleModeSelector } from './simpleMode/SimpleModeSelector';\n\nexport interface IInstanceTypeSelectorProps {\n formik: FormikProps<IAmazonServerGroupCommand>;\n instanceTypeDetails: IInstanceTypeCategory[];\n}\n\nexport function InstanceTypeSelector(props: IInstanceTypeSelectorProps) {\n const { instanceTypeDetails } = props;\n const { values, setFieldValue } = props.formik;\n const isLaunchTemplatesEnabled = AWSProviderSettings.serverGroups?.enableLaunchTemplates;\n\n const useSimpleMode = values.viewState.useSimpleInstanceTypeSelector;\n const [unlimitedCpuCredits, setUnlimitedCpuCredits] = useState(values.unlimitedCpuCredits);\n\n useEffect(() => {\n if (values.unlimitedCpuCredits !== unlimitedCpuCredits) {\n setFieldValue('unlimitedCpuCredits', unlimitedCpuCredits);\n }\n }, [unlimitedCpuCredits]);\n\n const clearWarnings = () => {\n const { formik } = props;\n\n // clear for both keys to support consistency between simple and advanced modes\n formik.values.viewState.dirty['instanceType'] = null;\n formik.values.viewState.dirty['launchTemplateOverridesForInstanceType'] = null;\n\n formik.validateForm();\n };\n\n const handleModeChange = (useSimpleModeNew: boolean) => {\n if (useSimpleMode !== useSimpleModeNew) {\n setFieldValue('viewState', {\n ...values.viewState,\n useSimpleInstanceTypeSelector: useSimpleModeNew,\n });\n\n // update selected instance type(s) if mode changed.\n // Simple mode uses command.instanceType to track selected type. Advanced mode uses command.launchTemplateOverridesForInstanceType to track selected types.\n if (useSimpleModeNew) {\n const multipleInstanceTypesInProps = values.launchTemplateOverridesForInstanceType;\n const dirtyMultipleInstanceTypesInProps = values.viewState.dirty.launchTemplateOverridesForInstanceType;\n\n if (multipleInstanceTypesInProps?.length) {\n const instanceTypeWithHighestPriority = multipleInstanceTypesInProps.reduce((prev, current) => {\n return prev.priority < current.priority ? prev : current;\n }).instanceType;\n setFieldValue('instanceType', instanceTypeWithHighestPriority);\n setFieldValue('launchTemplateOverridesForInstanceType', []);\n values.instanceTypeChanged(values);\n }\n\n if (dirtyMultipleInstanceTypesInProps?.length) {\n const instanceTypeWithHighestPriorityDirty = dirtyMultipleInstanceTypesInProps.reduce((prev, current) => {\n return prev.priority < current.priority ? prev : current;\n }).instanceType;\n setFieldValue('viewState.dirty.instanceType', instanceTypeWithHighestPriorityDirty);\n setFieldValue('viewState.dirty.launchTemplateOverridesForInstanceType', []);\n }\n } else if (!useSimpleModeNew) {\n const singleInstanceTypeInProps = values.instanceType;\n const dirtySingleInstanceTypeInProps = values.viewState.dirty.instanceType;\n\n if (singleInstanceTypeInProps) {\n const instanceTypes: IAmazonInstanceTypeOverride[] = [\n {\n instanceType: singleInstanceTypeInProps,\n priority: 1,\n },\n ];\n setFieldValue('instanceType', undefined);\n setFieldValue('launchTemplateOverridesForInstanceType', instanceTypes);\n values.launchTemplateOverridesChanged(values);\n }\n\n if (dirtySingleInstanceTypeInProps) {\n const dirtyInstanceTypes: IAmazonInstanceTypeOverride[] = [\n {\n instanceType: dirtySingleInstanceTypeInProps,\n priority: 1,\n },\n ];\n setFieldValue('viewState.dirty.instanceType', undefined);\n setFieldValue('viewState.dirty.launchTemplateOverridesForInstanceType', dirtyInstanceTypes);\n }\n }\n }\n };\n\n const showAdvancedMode = isLaunchTemplatesEnabled && !useSimpleMode;\n if (showAdvancedMode) {\n return (\n <div className=\"container-fluid form-horizontal\" style={{ padding: '0 15px' }}>\n <div>\n <p>\n Switch to\n <a className=\"clickable\" onClick={() => handleModeChange(true)}>\n <span> Simple Mode</span>\n </a>\n .\n </p>\n <i>\n <b>Note:</b> If multiple instance types are already selected in advanced mode, the instance type with\n highest priority will be preserved in simple mode.\n </i>\n </div>\n <AdvancedModeSelector\n formik={props.formik}\n instanceTypeDetails={instanceTypeDetails}\n setUnlimitedCpuCredits={setUnlimitedCpuCredits}\n clearWarnings={clearWarnings}\n />\n </div>\n );\n }\n\n return (\n <div className=\"container-fluid form-horizontal\" style={{ padding: '0 15px' }}>\n <div>\n <span>To configure mixed server groups and/or multiple instance types,</span>\n {!isLaunchTemplatesEnabled && (\n <span>\n <a\n href={\n 'https://spinnaker.io/docs/setup/other_config/server-group-launch-settings/aws-ec2/launch-templates-setup/'\n }\n >\n <span> enable launch templates</span>\n </a>\n <span> and</span>\n </span>\n )}\n <span>\n <a\n className={isLaunchTemplatesEnabled ? 'clickable' : 'disabled'}\n onClick={isLaunchTemplatesEnabled ? () => handleModeChange(false) : () => {}}\n >\n <span> use Advanced Mode </span>\n </a>\n <HelpField id={'aws.serverGroup.advancedMode'} />.\n </span>\n <p></p>\n {isLaunchTemplatesEnabled && (\n <i>\n <b>Note:</b> If an instance type is already selected in simple mode, it will be preserved in advanced mode.\n </i>\n )}\n </div>\n <SimpleModeSelector\n command={values}\n setUnlimitedCpuCredits={setUnlimitedCpuCredits}\n setFieldValue={setFieldValue}\n clearWarnings={clearWarnings}\n />\n </div>\n );\n}\n","import type { FormikErrors, FormikProps } from 'formik';\nimport { some } from 'lodash';\nimport React from 'react';\nimport { Subject } from 'rxjs';\n\nimport type { IWizardPageComponent } from '@spinnaker/core';\nimport { parseNum } from '@spinnaker/core';\n\nimport type { IAmazonInstanceTypeCategory } from '../../../../instance/awsInstanceType.service';\nimport { InstanceTypeSelector } from '../instanceType/InstanceTypeSelector';\nimport { AwsReactInjector } from '../../../../reactShims';\nimport type { IAmazonServerGroupCommand } from '../../serverGroupConfiguration.service';\n\nexport interface IServerGroupInstanceTypeProps {\n formik: FormikProps<IAmazonServerGroupCommand>;\n}\n\nexport interface IServerGroupInstanceTypeState {\n instanceTypeDetails: IAmazonInstanceTypeCategory[];\n}\n\nexport class ServerGroupInstanceType\n extends React.Component<IServerGroupInstanceTypeProps, IServerGroupInstanceTypeState>\n implements IWizardPageComponent<IAmazonServerGroupCommand> {\n public state: IServerGroupInstanceTypeState = {\n instanceTypeDetails: [],\n };\n private props$ = new Subject<IServerGroupInstanceTypeProps>();\n private destroy$ = new Subject<void>();\n\n public validate(values: IAmazonServerGroupCommand): FormikErrors<IAmazonServerGroupCommand> {\n const errors: FormikErrors<IAmazonServerGroupCommand> = {};\n\n if (values.viewState.useSimpleInstanceTypeSelector) {\n // For the clone scenario, when values.instanceType is cleared for various reasons (see serverGroupConfiguration.service.ts),\n // the previously selected instance type might be cleared/ unselected to fail-fast and this might look like unexpected behavior. But, there is always a reason when this happens.\n // The error handling below adds transparency around what changed and why.\n if (values.viewState.dirty.instanceType) {\n errors.instanceType = 'You must confirm removed instance type and pick a compatible instance type.';\n } else if (!values.instanceType) {\n errors.instanceType = 'Instance Type required.';\n }\n } else {\n const prevInstanceTypes = values.viewState.dirty.launchTemplateOverridesForInstanceType;\n if (prevInstanceTypes && prevInstanceTypes.length > 0) {\n errors.instanceType = 'You must confirm removed instance types and/or pick more instance types.';\n } else {\n const advancedModeErrors = this.validateAdvancedModeFields(values, errors);\n Object.assign(errors, { ...advancedModeErrors });\n }\n }\n\n return errors;\n }\n\n private validateAdvancedModeFields(\n values: IAmazonServerGroupCommand,\n errors: FormikErrors<IAmazonServerGroupCommand>,\n ): FormikErrors<IAmazonServerGroupCommand> {\n if (!values.launchTemplateOverridesForInstanceType.length) {\n errors.instanceType = 'At least one instance type required.';\n }\n if (values.launchTemplateOverridesForInstanceType.length > 40) {\n errors.instanceType = 'Maximum of 40 instance types are allowed.';\n }\n const weightsSpecified = values.launchTemplateOverridesForInstanceType.filter(\n (it) => it.weightedCapacity !== undefined,\n );\n if (\n !(\n weightsSpecified.length === values.launchTemplateOverridesForInstanceType.length ||\n weightsSpecified.length === 0\n )\n ) {\n errors.instanceType = 'Weighted capacity must be specified for all instance types selected or none.';\n }\n if (\n some(weightsSpecified, function (instanceType) {\n const weightedCapacity = Number(instanceType.weightedCapacity);\n return weightedCapacity < 1 || weightedCapacity > 999;\n })\n ) {\n errors.instanceType = 'Weighted capacity must be a number between 1 and 999.';\n }\n\n if (values.onDemandBaseCapacity < 0) {\n errors.onDemandBaseCapacity = 'On-Demand base capacity must be non-negative.';\n }\n\n if (values.onDemandBaseCapacity > parseNum(values.capacity.max)) {\n errors.onDemandBaseCapacity = 'On-Demand base capacity must be less than or equal to max capacity.';\n }\n\n if (values.onDemandPercentageAboveBaseCapacity < 0 || values.onDemandPercentageAboveBaseCapacity > 100) {\n errors.onDemandPercentageAboveBaseCapacity =\n 'On-Demand percentage above base capacity must be a number between 0 and 100.';\n }\n\n if (values.spotPrice) {\n const spotPriceNum = Number(values.spotPrice);\n if (Number.isNaN(spotPriceNum)) {\n errors.spotPrice = 'Spot Max Price must be a number or empty string, used to unset previous max price.';\n }\n if (spotPriceNum <= 0) {\n errors.spotPrice = 'Spot Max Price must be greater than 0, if specified.';\n }\n }\n\n if (values.spotInstancePools && values.spotAllocationStrategy !== 'lowest-price') {\n errors.spotInstancePools = \"Spot Instance Pools is only supported for 'lowest-price' Spot Allocation Strategy.\";\n }\n if (values.spotInstancePools <= 0 || values.spotInstancePools > 20) {\n errors.spotInstancePools = 'Spot Instance Pools count must be a number between 1 and 20, when applicable.';\n }\n\n return errors;\n }\n\n public componentDidMount(): void {\n Promise.resolve(AwsReactInjector.awsInstanceTypeService.getCategories()).then(\n (categories: IAmazonInstanceTypeCategory[]) => {\n this.setState({ instanceTypeDetails: categories });\n },\n );\n }\n\n public componentDidUpdate() {\n this.props$.next(this.props);\n }\n\n public componentWillUnmount() {\n this.destroy$.next();\n }\n\n public render() {\n const { values } = this.props.formik;\n const showTypeSelector = !!(values.viewState.disableImageSelection || values.amiName);\n\n // mark unavailable instance types for all profiles\n const availableInstanceTypesForConfig: string[] = values.backingData?.filtered?.instanceTypes ?? [];\n const markedInstanceTypeDetails: IAmazonInstanceTypeCategory[] = Array.from(this.state.instanceTypeDetails);\n if (!values.viewState.disableImageSelection && availableInstanceTypesForConfig.length) {\n markedInstanceTypeDetails.forEach((profile) => {\n profile.families.forEach((family) => {\n family.instanceTypes.forEach((instanceType) => {\n instanceType.unavailable = !availableInstanceTypesForConfig.includes(instanceType.name);\n });\n });\n });\n }\n\n if (showTypeSelector && values) {\n return <InstanceTypeSelector formik={this.props.formik} instanceTypeDetails={markedInstanceTypeDetails} />;\n }\n\n return <h5 className=\"text-center\">Please select an image.</h5>;\n }\n}\n","import type { FormikProps } from 'formik';\nimport React from 'react';\n\nimport type { IWizardPageComponent } from '@spinnaker/core';\n\nimport { AvailabilityZoneSelector } from '../../../AvailabilityZoneSelector';\nimport type { IAmazonServerGroupCommand } from '../../serverGroupConfiguration.service';\n\nexport interface IServerGroupZonesProps {\n formik: FormikProps<IAmazonServerGroupCommand>;\n}\n\nexport class ServerGroupZones\n extends React.Component<IServerGroupZonesProps>\n implements IWizardPageComponent<IAmazonServerGroupCommand> {\n public validate(values: IAmazonServerGroupCommand) {\n const errors = {} as any;\n\n if (!values.availabilityZones || values.availabilityZones.length === 0) {\n errors.availabilityZones = 'You must select at least one availability zone.';\n }\n return errors;\n }\n\n private handleAvailabilityZonesChanged = (zones: string[]): void => {\n const { values, setFieldValue } = this.props.formik;\n values.usePreferredZonesChanged(values);\n setFieldValue('availabilityZones', zones);\n };\n\n private rebalanceToggled = () => {\n const { values, setFieldValue } = this.props.formik;\n values.toggleSuspendedProcess(values, 'AZRebalance');\n setFieldValue('suspendedProcesses', values.suspendedProcesses);\n this.setState({});\n };\n\n public render() {\n const { values } = this.props.formik;\n return (\n <div className=\"container-fluid form-horizontal\">\n <AvailabilityZoneSelector\n credentials={values.credentials}\n region={values.region}\n onChange={this.handleAvailabilityZonesChanged}\n selectedZones={values.availabilityZones}\n allZones={values.backingData.filtered.availabilityZones}\n usePreferredZones={values.viewState.usePreferredZones}\n />\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">\n <b>AZ Rebalance</b>\n </div>\n <div className=\"col-md-7 checkbox\">\n <label>\n <input\n type=\"checkbox\"\n onChange={this.rebalanceToggled}\n checked={!values.processIsSuspended(values, 'AZRebalance')}\n />\n Keep instances evenly distributed across zones\n </label>\n </div>\n </div>\n </div>\n );\n }\n}\n","import type { FormikProps } from 'formik';\nimport React from 'react';\nimport type { Option } from 'react-select';\n\nimport type { IWizardPageComponent } from '@spinnaker/core';\nimport { HelpField, ReactInjector, TetheredSelect } from '@spinnaker/core';\n\nimport type { IAmazonServerGroupCommand } from '../../serverGroupConfiguration.service';\n\nexport interface IServerGroupLoadBalancersProps {\n hideLoadBalancers?: boolean;\n hideTargetGroups?: boolean;\n targetGroupTypeHelpText?: 'instance' | 'ip';\n formik: FormikProps<IAmazonServerGroupCommand>;\n}\n\nexport interface IServerGroupLoadBalancersState {\n refreshed: boolean;\n refreshing: boolean;\n showVpcLoadBalancers: boolean;\n}\n\nconst stringToOption = (value: string): Option<string> => {\n return { value, label: value };\n};\n\nexport class ServerGroupLoadBalancers\n extends React.Component<IServerGroupLoadBalancersProps, IServerGroupLoadBalancersState>\n implements IWizardPageComponent<IAmazonServerGroupCommand> {\n public state = {\n refreshing: false,\n refreshed: false,\n showVpcLoadBalancers: false,\n };\n\n public validate(values: IAmazonServerGroupCommand) {\n const errors = {} as any;\n\n if (values.viewState.dirty.targetGroups) {\n errors.targetGroups = 'You must confirm the removed target groups.';\n }\n if (values.viewState.dirty.loadBalancers) {\n errors.loadBalancers = 'You must confirm the removed load balancers.';\n }\n\n return errors;\n }\n\n public refreshLoadBalancers = () => {\n const { values } = this.props.formik;\n this.setState({ refreshing: true });\n const configurationService: any = ReactInjector.providerServiceDelegate.getDelegate(\n values.cloudProvider || values.selectedProvider,\n 'serverGroup.configurationService',\n );\n configurationService.refreshLoadBalancers(values).then(() => {\n this.setState({\n refreshing: false,\n refreshed: true,\n });\n });\n };\n\n public clearWarnings(key: 'loadBalancers' | 'targetGroups'): void {\n this.props.formik.values.viewState.dirty[key] = null;\n this.props.formik.validateForm();\n }\n\n private targetGroupsChanged = (options: Array<Option<string>>) => {\n const targetGroups = options.map((o) => o.value);\n this.props.formik.setFieldValue('targetGroups', targetGroups);\n };\n\n private loadBalancersChanged = (options: Array<Option<string>>) => {\n const loadBalancers = options.map((o) => o.value);\n this.props.formik.setFieldValue('loadBalancers', loadBalancers);\n };\n\n private vpcLoadBalancersChanged = (options: Array<Option<string>>) => {\n const vpcLoadBalancers = options.map((o) => o.value);\n this.props.formik.setFieldValue('vpcLoadBalancers', vpcLoadBalancers);\n };\n\n public render() {\n const { hideLoadBalancers, hideTargetGroups } = this.props;\n const { values } = this.props.formik;\n const { dirty } = values.viewState;\n const { refreshed, refreshing, showVpcLoadBalancers } = this.state;\n\n let targetGroupSection = null;\n if (!hideTargetGroups) {\n const targetGroupOptions = (values.backingData.filtered.targetGroups || [])\n .concat(values.viewState.spelTargetGroups || [])\n .map(stringToOption);\n\n targetGroupSection = (\n <>\n {dirty.targetGroups && (\n <div className=\"col-md-12\">\n <div className=\"alert alert-warning\">\n <p>\n <i className=\"fa fa-exclamation-triangle\" />\n The following target groups could not be found in the selected account/region/VPC and were removed:\n </p>\n <ul>\n {dirty.targetGroups.map((tg) => (\n <li key={tg}>{tg}</li>\n ))}\n </ul>\n <p className=\"text-right\">\n <a\n className=\"btn btn-sm btn-default dirty-flag-dismiss clickable\"\n onClick={() => this.clearWarnings('targetGroups')}\n >\n Okay\n </a>\n </p>\n </div>\n </div>\n )}\n <div className=\"form-group\">\n <div className=\"col-md-4 sm-label-right\">\n <b>Target Groups </b>\n <HelpField id=\"aws.loadBalancer.targetGroups\" />\n </div>\n <div className=\"col-md-7\">\n {targetGroupOptions.length === 0 && (\n <div className=\"form-control-static\">\n No <b>{this.props.targetGroupTypeHelpText ?? 'instance'}</b> target groups found in the selected\n account/region/VPC\n </div>\n )}\n {targetGroupOptions.length > 0 && (\n <TetheredSelect\n multi={true}\n options={targetGroupOptions}\n value={values.targetGroups}\n onChange={this.targetGroupsChanged}\n />\n )}\n </div>\n </div>\n </>\n );\n }\n\n let loadBalancersSection = null;\n if (!hideLoadBalancers) {\n const loadBalancerOptions = (values.backingData.filtered.loadBalancers || [])\n .concat(values.viewState.spelLoadBalancers || [])\n .map(stringToOption);\n\n const vpcLoadBalancerOptions = (values.backingData.filtered.vpcLoadBalancers || []).map(stringToOption);\n\n const hasVpcLoadBalancers = values.vpcLoadBalancers && values.vpcLoadBalancers.length > 0;\n loadBalancersSection = (\n <>\n {dirty.loadBalancers && (\n <div className=\"col-md-12\">\n <div className=\"alert alert-warning\">\n <p>\n <i className=\"fa fa-exclamation-triangle\" />\n The following load balancers could not be found in the selected account/region/VPC and were removed:\n </p>\n <ul>\n {dirty.loadBalancers.map((lb) => (\n <li key={lb}>{lb}</li>\n ))}\n </ul>\n <p className=\"text-right\">\n <a\n className=\"btn btn-sm btn-default dirty-flag-dismiss clickable\"\n onClick={() => this.clearWarnings('loadBalancers')}\n >\n Okay\n </a>\n </p>\n </div>\n </div>\n )}\n <div className=\"form-group\">\n <div className=\"col-md-4 sm-label-right\">\n <b>Classic Load Balancers </b>\n <HelpField id=\"aws.loadBalancer.loadBalancers\" />\n </div>\n <div className=\"col-md-7\">\n {loadBalancerOptions.length === 0 && (\n <div className=\"form-control-static\">No load balancers found in the selected account/region/VPC</div>\n )}\n {loadBalancerOptions.length > 0 && (\n <TetheredSelect\n multi={true}\n options={loadBalancerOptions}\n value={values.loadBalancers}\n onChange={this.loadBalancersChanged}\n />\n )}\n </div>\n </div>\n {!values.vpcId && (\n <div className=\"form-group\">\n {!hasVpcLoadBalancers && !showVpcLoadBalancers && (\n <div>\n <div className=\"col-md-8 col-md-offset-3\">\n <a className=\"clickable\" onClick={() => this.setState({ showVpcLoadBalancers: true })}>\n Add VPC Load Balancers\n </a>\n </div>\n </div>\n )}\n {hasVpcLoadBalancers && (\n <div>\n <div className=\"col-md-4 sm-label-right\">\n <b>VPC Load Balancers</b>\n </div>\n <div className=\"col-md-8\">\n {vpcLoadBalancerOptions.length > 0 && (\n <TetheredSelect\n multi={true}\n options={vpcLoadBalancerOptions}\n value={values.vpcLoadBalancers}\n onChange={this.vpcLoadBalancersChanged}\n />\n )}\n </div>\n </div>\n )}\n </div>\n )}\n {!refreshed && (\n <div className=\"form-group small\" style={{ marginTop: '20px' }}>\n <div className=\"col-md-8 col-md-offset-4\">\n {refreshing && (\n <p>\n <span className=\"fa fa-sync-alt fa-spin\" />\n <span> refreshing...</span>\n </p>\n )}\n {!refreshing && (\n <p>\n If you are looking for a load balancer or target group from a different application, <br />\n <a className=\"clickable\" onClick={this.refreshLoadBalancers}>\n click here\n </a>{' '}\n to load all load balancers.\n </p>\n )}\n </div>\n </div>\n )}\n </>\n );\n }\n\n return (\n <div className=\"container-fluid form-horizontal\">\n {targetGroupSection}\n {loadBalancersSection}\n </div>\n );\n }\n}\n","import React from 'react';\nimport type { Option } from 'react-select';\nimport VirtualizedSelect from 'react-virtualized-select';\n\nimport type { ISecurityGroup } from '@spinnaker/core';\nimport { FirewallLabels, HelpField, InfrastructureCaches, ReactInjector, timestamp } from '@spinnaker/core';\n\nimport type { IAmazonServerGroupCommand } from '../../serverGroupConfiguration.service';\n\nexport interface ISecurityGroupSelectorProps {\n command: IAmazonServerGroupCommand;\n availableGroups: ISecurityGroup[];\n hideLabel?: boolean;\n refresh?: () => Promise<void>;\n groupsToEdit: string[];\n helpKey?: string;\n onChange: (securityGroups: string[]) => void;\n}\n\nexport interface ISecurityGroupSelectorState {\n refreshing: boolean;\n refreshTime: number;\n}\n\nexport class SecurityGroupSelector extends React.Component<ISecurityGroupSelectorProps, ISecurityGroupSelectorState> {\n constructor(props: ISecurityGroupSelectorProps) {\n super(props);\n this.state = {\n refreshing: false,\n refreshTime: InfrastructureCaches.get('securityGroups').getStats().ageMax,\n };\n }\n\n private refreshSecurityGroups = () => {\n this.setState({ refreshing: true });\n if (this.props.refresh) {\n this.props.refresh().then(() => this.setState({ refreshing: false }));\n } else {\n (ReactInjector.providerServiceDelegate.getDelegate(\n this.props.command.selectedProvider,\n 'serverGroup.configurationService',\n ) as any)\n .refreshSecurityGroups(this.props.command)\n .then(() => {\n this.setState({\n refreshing: false,\n refreshTime: InfrastructureCaches.get('securityGroups').getStats().ageMax,\n });\n });\n }\n };\n\n private onChange = (options: Option[]) => {\n const securityGroups = options.map((o) => o.value as string);\n this.props.onChange(securityGroups);\n };\n\n public render() {\n const { availableGroups, groupsToEdit, helpKey, hideLabel } = this.props;\n const { refreshing, refreshTime } = this.state;\n\n const availableGroupOptions = availableGroups.map((g) => ({ label: `${g.name} (${g.id})`, value: g.id }));\n\n return (\n <>\n <div className=\"form-group\">\n {!hideLabel && (\n <div className=\"col-md-3 sm-label-right\">\n <b>{FirewallLabels.get('Firewalls')}</b>\n {helpKey && <HelpField key={helpKey} />}\n </div>\n )}\n <div className=\"col-md-8\">\n <VirtualizedSelect\n ignoreAccents={true}\n options={availableGroupOptions}\n onChange={this.onChange}\n value={groupsToEdit}\n multi={true}\n />\n </div>\n </div>\n\n <div className=\"form-group small\" style={{ marginTop: '20px' }}>\n <div className={`col-md-${hideLabel ? 12 : 9} col-md-offset-${hideLabel ? 0 : 3}`}>\n <p>\n {refreshing && (\n <span>\n <span className=\"fa fa-sync-alt fa-spin\" />\n </span>\n )}\n {FirewallLabels.get('Firewalls')}\n {!refreshing && <span> last refreshed {timestamp(refreshTime)}</span>}\n {refreshing && <span> refreshing...</span>}\n </p>\n <p>\n If you're not finding a {FirewallLabels.get('firewall')} that was recently added,{' '}\n <a className=\"clickable\" onClick={this.refreshSecurityGroups}>\n click here\n </a>{' '}\n to refresh the list.\n </p>\n </div>\n </div>\n </>\n );\n }\n}\n","import React from 'react';\n\nimport { FirewallLabels, noop } from '@spinnaker/core';\n\nimport type { IAmazonServerGroupCommand } from '../../serverGroupConfiguration.service';\n\nexport interface IServerGroupSecurityGroupsRemovedProps {\n command?: IAmazonServerGroupCommand;\n removed?: string[];\n onClear?: () => void;\n}\n\nexport class ServerGroupSecurityGroupsRemoved extends React.Component<IServerGroupSecurityGroupsRemovedProps> {\n public static defaultProps: Partial<IServerGroupSecurityGroupsRemovedProps> = {\n onClear: noop,\n };\n\n public render() {\n const { command, onClear, removed } = this.props;\n\n const dirtySecurityGroups = ((command && command.viewState.dirty.securityGroups) || []).concat(removed || []);\n\n if (dirtySecurityGroups.length === 0) {\n return null;\n }\n\n return (\n <div className=\"col-md-12\">\n <div className=\"alert alert-warning\">\n <p>\n <i className=\"fa fa-exclamation-triangle\" />\n The following {FirewallLabels.get('firewalls')} could not be found in the selected account/region/VPC and\n were removed:\n </p>\n <ul>\n {dirtySecurityGroups.map((s) => (\n <li key={s}>{s}</li>\n ))}\n </ul>\n <p className=\"text-right\">\n <a className=\"btn btn-sm btn-default dirty-flag-dismiss clickable\" onClick={onClear}>\n Okay\n </a>\n </p>\n </div>\n </div>\n );\n }\n}\n","import type { FormikProps } from 'formik';\nimport React from 'react';\n\nimport type { IWizardPageComponent } from '@spinnaker/core';\n\nimport { SecurityGroupSelector } from '../securityGroups/SecurityGroupSelector';\nimport { ServerGroupSecurityGroupsRemoved } from '../securityGroups/ServerGroupSecurityGroupsRemoved';\nimport type { IAmazonServerGroupCommand } from '../../serverGroupConfiguration.service';\n\nexport interface IServerGroupSecurityGroupsProps {\n formik: FormikProps<IAmazonServerGroupCommand>;\n}\n\nexport class ServerGroupSecurityGroups\n extends React.Component<IServerGroupSecurityGroupsProps>\n implements IWizardPageComponent<IAmazonServerGroupCommand> {\n public validate(values: IAmazonServerGroupCommand) {\n const errors = {} as any;\n\n if (values.viewState.dirty.securityGroups) {\n errors.securityGroups = 'You must acknowledge removed security groups.';\n }\n\n return errors;\n }\n\n private onChange = (securityGroups: string[]) => {\n this.props.formik.setFieldValue('securityGroups', securityGroups);\n };\n\n private acknowledgeRemovedGroups = () => {\n const { viewState } = this.props.formik.values;\n viewState.dirty.securityGroups = null;\n this.props.formik.setFieldValue('viewState', viewState);\n };\n\n public render() {\n const { values } = this.props.formik;\n\n return (\n <div className=\"container-fluid form-horizontal\">\n <ServerGroupSecurityGroupsRemoved command={values} onClear={this.acknowledgeRemovedGroups} />\n <SecurityGroupSelector\n command={values}\n availableGroups={values.backingData.filtered.securityGroups}\n groupsToEdit={values.securityGroups}\n onChange={this.onChange}\n />\n </div>\n );\n }\n}\n","import { Field } from 'formik';\nimport React from 'react';\nimport type { Option } from 'react-select';\nimport Select from 'react-select';\n\nimport { HelpField, MapEditor, PlatformHealthOverride } from '@spinnaker/core';\n\nimport type { IServerGroupAdvancedSettingsProps } from './ServerGroupAdvancedSettings';\nimport { AWSProviderSettings } from '../../../../../aws.settings';\nimport type { IAmazonServerGroupCommand } from '../../../serverGroupConfiguration.service';\n\nexport class ServerGroupAdvancedSettingsCommon extends React.Component<IServerGroupAdvancedSettingsProps> {\n private duplicateKeys = false;\n\n public validate = (values: IAmazonServerGroupCommand) => {\n const errors = {} as any;\n\n if (!values.keyPair) {\n errors.keyPair = 'Key Name is required';\n }\n if (this.duplicateKeys) {\n errors.tags = 'Tags have duplicate keys.';\n }\n\n return errors;\n };\n\n private selectBlockDeviceMappingsSource = (source: string) => {\n const { values } = this.props.formik;\n values.selectBlockDeviceMappingsSource(values, source);\n this.setState({});\n };\n\n private toggleSuspendedProcess = (process: string) => {\n const { values, setFieldValue } = this.props.formik;\n values.toggleSuspendedProcess(values, process);\n setFieldValue('suspendedProcesses', values.suspendedProcesses);\n this.setState({});\n };\n\n private platformHealthOverrideChanged = (healthNames: string[]) => {\n this.props.formik.setFieldValue('interestingHealthProviderNames', healthNames);\n };\n\n private tagsChanged = (tags: { [key: string]: string }, duplicateKeys: boolean) => {\n this.duplicateKeys = duplicateKeys;\n this.props.formik.setFieldValue('tags', tags);\n };\n\n public render() {\n const { app } = this.props;\n const { setFieldValue, values } = this.props.formik;\n\n const blockDeviceMappingsSource = values.getBlockDeviceMappingsSource(values);\n const keyPairs = values.backingData.filtered.keyPairs || [];\n const asgSettings = AWSProviderSettings.serverGroups;\n\n return (\n <div className=\"container-fluid form-horizontal\">\n <div className=\"form-group\">\n <div className=\"col-md-5 sm-label-right\">\n <b>Cooldown</b>\n </div>\n <div className=\"col-md-2\">\n <Field type=\"text\" required={true} name=\"cooldown\" className=\"form-control input-sm no-spel\" />\n </div>{' '}\n seconds\n </div>\n <div className=\"form-group\">\n <div className=\"col-md-5 sm-label-right\">\n <b>Enabled Metrics </b>\n <HelpField id=\"aws.serverGroup.enabledMetrics\" />\n </div>\n <div className=\"col-md-6\">\n <Select\n multi={true}\n value={values.enabledMetrics}\n options={values.backingData.enabledMetrics.map((m) => ({ label: m, value: m }))}\n onChange={(option: Option[]) =>\n setFieldValue(\n 'enabledMetrics',\n option.map((o) => o.value),\n )\n }\n />\n </div>\n </div>\n\n <div className=\"form-group\">\n <div className=\"col-md-5 sm-label-right\">\n <b>Health Check Type</b>\n </div>\n <div className=\"col-md-6\">\n <Select\n value={values.healthCheckType}\n clearable={false}\n placeholder=\"Select...\"\n options={values.backingData.healthCheckTypes.map((t) => ({ label: t, value: t }))}\n onChange={(option: Option) => setFieldValue('healthCheckType', option.value)}\n />\n </div>\n </div>\n <div className=\"form-group\">\n <div className=\"col-md-5 sm-label-right\">\n <b>Health Check Grace Period</b>\n </div>\n <div className=\"col-md-2\">\n <Field\n type=\"text\"\n required={true}\n className=\"form-control input-sm no-spel\"\n name=\"healthCheckGracePeriod\"\n />\n </div>{' '}\n seconds\n </div>\n <div className=\"form-group\">\n <div className=\"col-md-5 sm-label-right\">\n <b>Termination Policies</b>\n </div>\n <div className=\"col-md-6\">\n <Select\n multi={true}\n value={values.terminationPolicies}\n options={values.backingData.terminationPolicies.map((m) => ({ label: m, value: m }))}\n onChange={(option: Option[]) =>\n setFieldValue(\n 'terminationPolicies',\n option.map((o) => o.value),\n )\n }\n />\n </div>\n </div>\n\n <div className=\"form-group\">\n <div className=\"col-md-5 sm-label-right\">\n <b>Key Name</b>\n </div>\n <div className=\"col-md-6\">\n <Select\n value={values.keyPair}\n required={true}\n clearable={false}\n options={keyPairs.map((t) => ({ label: t, value: t }))}\n onChange={(option: Option) => setFieldValue('keyPair', option.value)}\n />\n </div>\n </div>\n <div className=\"form-group\">\n <div className=\"col-md-5 sm-label-right\">\n <b>Ramdisk Id (optional)</b>\n </div>\n <div className=\"col-md-6\">\n <Field type=\"text\" name=\"ramdiskId\" className=\"form-control input-sm no-spel\" />\n </div>\n </div>\n <div className=\"form-group\">\n <div className=\"col-md-5 sm-label-right\">\n <b>IAM Instance Profile (optional)</b>\n </div>\n <div className=\"col-md-6\">\n <Field type=\"text\" className=\"form-control input-sm no-spel\" name=\"iamRole\" />\n </div>\n </div>\n <div className=\"form-group\">\n <div className=\"col-md-5 sm-label-right\">\n <b>UserData (optional) </b>\n <HelpField id=\"aws.serverGroup.base64UserData\" />\n </div>\n <div className=\"col-md-6\">\n <Field type=\"text\" className=\"form-control input-sm no-spel\" name=\"base64UserData\" />\n </div>\n </div>\n <div className=\"form-group\">\n <div className=\"col-md-5 sm-label-right\">\n <b>Instance Monitoring </b>\n <HelpField id=\"aws.serverGroup.instanceMonitoring\" />\n </div>\n\n <div className=\"col-md-6 checkbox\">\n <label>\n <input\n type=\"checkbox\"\n checked={values.instanceMonitoring}\n onChange={(e) => setFieldValue('instanceMonitoring', e.target.checked)}\n />{' '}\n Enforce Instance Monitoring{' '}\n </label>\n </div>\n </div>\n <div className=\"form-group\">\n <div className=\"col-md-5 sm-label-right\">\n <b>EBS Optimized</b>\n </div>\n <div className=\"col-md-6 checkbox\">\n <label>\n <input\n type=\"checkbox\"\n checked={values.ebsOptimized}\n onChange={(e) => setFieldValue('ebsOptimized', e.target.checked)}\n />{' '}\n Optimize Instances for EBS\n </label>\n </div>\n </div>\n {asgSettings?.enableIMDSv2 && (\n <div className=\"form-group\">\n <div className=\"col-md-5 sm-label-right\">\n <b>IMDSv2 </b>\n <HelpField id=\"aws.serverGroup.imdsv2\" />\n </div>\n <div className=\"col-md-6 checkbox\">\n <label>\n <input\n type=\"checkbox\"\n checked={values.requireIMDSv2 === true}\n onChange={(e) => setFieldValue('requireIMDSv2', e.target.checked)}\n />{' '}\n Require IMDSv2{' '}\n </label>\n </div>\n </div>\n )}\n {!AWSProviderSettings.disableSpotPricing && values.viewState.useSimpleInstanceTypeSelector && (\n <div className=\"form-group\">\n <div className=\"col-md-5 sm-label-right\">\n <b>Spot Instances Price (optional)</b> <HelpField id=\"aws.serverGroup.spotMaxPrice\" />\n </div>\n <div className=\"col-md-2\">\n <Field type=\"text\" className=\"form-control input-sm\" name=\"spotPrice\" />\n </div>\n </div>\n )}\n <div className=\"form-group\">\n <div className=\"col-md-5 sm-label-right\">\n <b>AMI Block Device Mappings</b>\n </div>\n <div className=\"col-md-6 radio\">\n <div>\n <label>\n <input\n type=\"radio\"\n onChange={() => this.selectBlockDeviceMappingsSource('source')}\n checked={blockDeviceMappingsSource === 'source'}\n name=\"blockDeviceMappingsSource\"\n />\n Copy from current server group <HelpField id=\"aws.blockDeviceMappings.useSource\" />\n </label>\n </div>\n <div>\n <label>\n <input\n type=\"radio\"\n onChange={() => this.selectBlockDeviceMappingsSource('ami')}\n checked={blockDeviceMappingsSource === 'ami'}\n name=\"blockDeviceMappingsSource\"\n />\n Prefer AMI block device mappings <HelpField id=\"aws.blockDeviceMappings.useAMI\" />\n </label>\n </div>\n <div>\n <label>\n <input\n type=\"radio\"\n onChange={() => this.selectBlockDeviceMappingsSource('default')}\n checked={blockDeviceMappingsSource === 'default'}\n name=\"blockDeviceMappingsSource\"\n />\n Defaults for selected instance type <HelpField id=\"aws.blockDeviceMappings.useDefaults\" />\n </label>\n </div>\n </div>\n </div>\n <div className=\"form-group\">\n <div className=\"col-md-5 sm-label-right\">\n <b>{`Associate ${asgSettings?.enableIPv6 ? 'IPv6 (Recommended)' : 'Public IPv4'} Address`}</b>\n <HelpField id=\"serverGroup.ipv6\" />\n </div>\n {asgSettings?.enableIPv6 && (\n <div className=\"col-md-6 checkbox\">\n <label>\n <input\n type=\"checkbox\"\n checked={values.associateIPv6Address === true}\n onChange={(e) => setFieldValue('associateIPv6Address', e.target.checked)}\n id=\"associateIPv6AddressToggle\"\n />{' '}\n Assign an IPv6 address to instances{' '}\n </label>\n </div>\n )}\n {!asgSettings?.enableIPv6 && (\n <div>\n <div className=\"col-md-2 radio\">\n <label>\n <input\n type=\"radio\"\n checked={values.associatePublicIpAddress === true}\n onChange={() => setFieldValue('associatePublicIpAddress', true)}\n id=\"associatePublicIpAddressTrue\"\n />\n Yes\n </label>\n </div>\n <div className=\"col-md-2 radio\">\n <label>\n <input\n type=\"radio\"\n checked={values.associatePublicIpAddress === false}\n onChange={() => setFieldValue('associatePublicIpAddress', false)}\n id=\"associatePublicIpAddressFalse\"\n />\n No\n </label>\n </div>\n <div className=\"col-md-2 radio\">\n <label>\n <input\n type=\"radio\"\n checked={values.associatePublicIpAddress === null}\n onChange={() => setFieldValue('associatePublicIpAddress', null)}\n id=\"associatePublicIpAddressDefault\"\n />\n Default\n </label>\n </div>\n </div>\n )}\n </div>\n <div className=\"form-group\">\n <div className=\"col-md-5 sm-label-right\">\n <b>Scaling Processes</b>\n </div>\n <div className=\"col-md-6 checkbox\">\n {values.backingData.scalingProcesses.map((process) => (\n <div key={process.name}>\n <label>\n <input\n type=\"checkbox\"\n onChange={() => this.toggleSuspendedProcess(process.name)}\n checked={!values.suspendedProcesses.includes(process.name)}\n />{' '}\n {process.name} <HelpField content={process.description} />\n </label>\n </div>\n ))}\n </div>\n </div>\n {app.attributes.platformHealthOnlyShowOverride && (\n <div className=\"form-group\">\n <div className=\"col-md-5 sm-label-right\">\n <b>Task Completion</b>\n </div>\n <div className=\"col-md-6\">\n <PlatformHealthOverride\n interestingHealthProviderNames={values.interestingHealthProviderNames}\n platformHealthType=\"Amazon\"\n onChange={this.platformHealthOverrideChanged}\n />\n </div>\n </div>\n )}\n <div className=\"form-group\">\n <div className=\"sm-label-left\">\n <b>Tags (optional)</b>\n <HelpField id=\"aws.serverGroup.tags\" />\n </div>\n <MapEditor model={values.tags as any} allowEmpty={true} onChange={this.tagsChanged} />\n </div>\n </div>\n );\n }\n}\n","import type { FormikErrors } from 'formik';\nimport React from 'react';\n\nimport type { IWizardPageComponent } from '@spinnaker/core';\nimport { Overridable } from '@spinnaker/core';\n\nimport type { IServerGroupAdvancedSettingsProps } from './ServerGroupAdvancedSettings';\nimport { ServerGroupAdvancedSettingsCommon } from './ServerGroupAdvancedSettingsCommon';\nimport type { IAmazonServerGroupCommand } from '../../../serverGroupConfiguration.service';\n\n@Overridable('aws.serverGroup.advancedSettings')\nexport class ServerGroupAdvancedSettingsInner\n extends React.Component<IServerGroupAdvancedSettingsProps>\n implements IWizardPageComponent<IAmazonServerGroupCommand> {\n private validators = new Map();\n\n public validate = (values: IAmazonServerGroupCommand) => {\n const errors: FormikErrors<IAmazonServerGroupCommand> = {};\n\n this.validators.forEach((validator) => {\n const subErrors = validator(values);\n Object.assign(errors, { ...subErrors });\n });\n\n return errors;\n };\n\n private handleRef = (ele: any) => {\n if (ele) {\n this.validators.set('common', ele.validate);\n } else {\n this.validators.delete('common');\n }\n };\n\n public render() {\n const { formik, app } = this.props;\n return <ServerGroupAdvancedSettingsCommon formik={formik} app={app} ref={this.handleRef as any} />;\n }\n}\n","import type { FormikProps } from 'formik';\nimport React from 'react';\n\nimport type { Application, IWizardPageComponent } from '@spinnaker/core';\n\nimport { ServerGroupAdvancedSettingsInner } from './ServerGroupAdvancedSettingsInner';\nimport type { IAmazonServerGroupCommand } from '../../../serverGroupConfiguration.service';\n\nexport interface IServerGroupAdvancedSettingsProps {\n app: Application;\n formik: FormikProps<IAmazonServerGroupCommand>;\n}\n\nexport class ServerGroupAdvancedSettings\n extends React.Component<IServerGroupAdvancedSettingsProps>\n implements IWizardPageComponent<IAmazonServerGroupCommand> {\n private ref: any = React.createRef();\n\n public validate(values: IAmazonServerGroupCommand) {\n if (this.ref && this.ref.current) {\n return this.ref.current.validate(values);\n }\n return {};\n }\n\n public render() {\n const { app, formik } = this.props;\n return <ServerGroupAdvancedSettingsInner formik={formik} app={app} ref={this.ref} />;\n }\n}\n","import { get } from 'lodash';\nimport React from 'react';\n\nimport type { Application, IModalComponentProps, IStage } from '@spinnaker/core';\nimport { FirewallLabels, noop, ReactInjector, ReactModal, TaskMonitor, WizardModal, WizardPage } from '@spinnaker/core';\n\nimport { ServerGroupTemplateSelection } from './ServerGroupTemplateSelection';\nimport {\n ServerGroupAdvancedSettings,\n ServerGroupBasicSettings,\n ServerGroupCapacity,\n ServerGroupInstanceType,\n ServerGroupLoadBalancers,\n ServerGroupSecurityGroups,\n ServerGroupZones,\n} from './pages';\nimport { AwsReactInjector } from '../../../reactShims';\nimport type { IAmazonServerGroupCommand } from '../serverGroupConfiguration.service';\n\nexport interface IAmazonCloneServerGroupModalProps extends IModalComponentProps {\n title: string;\n application: Application;\n command: IAmazonServerGroupCommand;\n}\n\nexport interface IAmazonCloneServerGroupModalState {\n firewallsLabel: string;\n loaded: boolean;\n requiresTemplateSelection: boolean;\n taskMonitor: TaskMonitor;\n}\n\nexport class AmazonCloneServerGroupModal extends React.Component<\n IAmazonCloneServerGroupModalProps,\n IAmazonCloneServerGroupModalState\n> {\n public static defaultProps: Partial<IAmazonCloneServerGroupModalProps> = {\n closeModal: noop,\n dismissModal: noop,\n };\n\n private _isUnmounted = false;\n private refreshUnsubscribe: () => void;\n\n public static show(props: IAmazonCloneServerGroupModalProps): Promise<IAmazonServerGroupCommand> {\n const modalProps = { dialogClassName: 'wizard-modal modal-lg' };\n return ReactModal.show(AmazonCloneServerGroupModal, props, modalProps);\n }\n\n constructor(props: IAmazonCloneServerGroupModalProps) {\n super(props);\n\n const requiresTemplateSelection = get(props, 'command.viewState.requiresTemplateSelection', false);\n if (!requiresTemplateSelection) {\n this.configureCommand();\n }\n\n this.state = {\n firewallsLabel: FirewallLabels.get('Firewalls'),\n loaded: false,\n requiresTemplateSelection,\n taskMonitor: new TaskMonitor({\n application: props.application,\n title: 'Creating your server group',\n modalInstance: TaskMonitor.modalInstanceEmulation(() => this.props.dismissModal()),\n onTaskComplete: this.onTaskComplete,\n }),\n };\n }\n\n private templateSelected = () => {\n this.setState({ requiresTemplateSelection: false });\n this.configureCommand();\n };\n\n private onTaskComplete = () => {\n this.props.application.serverGroups.refresh();\n this.props.application.serverGroups.onNextRefresh(null, this.onApplicationRefresh);\n };\n\n protected onApplicationRefresh = (): void => {\n if (this._isUnmounted) {\n return;\n }\n\n const { command } = this.props;\n const { taskMonitor } = this.state;\n const cloneStage = taskMonitor.task.execution.stages.find((stage: IStage) => stage.type === 'cloneServerGroup');\n if (cloneStage && cloneStage.context['deploy.server.groups']) {\n const newServerGroupName = cloneStage.context['deploy.server.groups'][command.region];\n if (newServerGroupName) {\n const newStateParams = {\n serverGroup: newServerGroupName,\n accountId: command.credentials,\n region: command.region,\n provider: 'aws',\n };\n let transitionTo = '^.^.^.clusters.serverGroup';\n if (ReactInjector.$state.includes('**.clusters.serverGroup')) {\n // clone via details, all view\n transitionTo = '^.serverGroup';\n }\n if (ReactInjector.$state.includes('**.clusters.cluster.serverGroup')) {\n // clone or create with details open\n transitionTo = '^.^.serverGroup';\n }\n if (ReactInjector.$state.includes('**.clusters')) {\n // create new, no details open\n transitionTo = '.serverGroup';\n }\n ReactInjector.$state.go(transitionTo, newStateParams);\n }\n }\n };\n\n private initializeCommand = () => {\n const { command } = this.props;\n\n command.credentialsChanged(command);\n command.regionChanged(command);\n AwsReactInjector.awsServerGroupConfigurationService.configureSubnetPurposes(command);\n };\n\n private configureCommand = () => {\n const { application, command } = this.props;\n AwsReactInjector.awsServerGroupConfigurationService.configureCommand(application, command).then(() => {\n this.initializeCommand();\n this.setState({ loaded: true, requiresTemplateSelection: false });\n });\n };\n\n private normalizeCommand = ({ tags }: IAmazonServerGroupCommand) => {\n if (!tags) {\n return;\n }\n Object.keys(tags).forEach((key) => {\n if (!key.length && !tags[key].length) {\n delete tags[key];\n }\n });\n };\n\n public componentWillUnmount(): void {\n this._isUnmounted = true;\n if (this.refreshUnsubscribe) {\n this.refreshUnsubscribe();\n }\n }\n\n private submit = (command: IAmazonServerGroupCommand): void => {\n this.normalizeCommand(command);\n const forPipelineConfig = command.viewState.mode === 'editPipeline' || command.viewState.mode === 'createPipeline';\n if (forPipelineConfig) {\n this.props.closeModal && this.props.closeModal(command);\n } else {\n this.state.taskMonitor.submit(() =>\n ReactInjector.serverGroupWriter.cloneServerGroup(command, this.props.application),\n );\n }\n };\n\n public render() {\n const { application, command, dismissModal, title } = this.props;\n const { loaded, taskMonitor, requiresTemplateSelection } = this.state;\n\n if (requiresTemplateSelection) {\n return (\n <ServerGroupTemplateSelection\n app={application}\n command={command}\n onDismiss={dismissModal}\n onTemplateSelected={this.templateSelected}\n />\n );\n }\n\n return (\n <WizardModal<IAmazonServerGroupCommand>\n heading={title}\n initialValues={command}\n loading={!loaded}\n taskMonitor={taskMonitor}\n dismissModal={dismissModal}\n closeModal={this.submit}\n submitButtonLabel={command.viewState.submitButtonLabel}\n render={({ formik, nextIdx, wizard }) => (\n <>\n <WizardPage\n label=\"Basic Settings\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => <ServerGroupBasicSettings ref={innerRef} formik={formik} app={application} />}\n />\n\n <WizardPage\n label=\"Load Balancers\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => <ServerGroupLoadBalancers ref={innerRef} formik={formik} />}\n />\n\n <WizardPage\n label={FirewallLabels.get('Firewalls')}\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => <ServerGroupSecurityGroups ref={innerRef} formik={formik} />}\n />\n\n <WizardPage\n label={command.viewState.useSimpleInstanceTypeSelector ? 'Instance Type' : 'Instance Types'}\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => <ServerGroupInstanceType ref={innerRef} formik={formik} />}\n />\n\n <WizardPage\n label=\"Capacity\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => <ServerGroupCapacity ref={innerRef} formik={formik} />}\n />\n\n <WizardPage\n label=\"Availability Zones\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => <ServerGroupZones ref={innerRef} formik={formik} />}\n />\n\n <WizardPage\n label=\"Advanced Settings\"\n wizard={wizard}\n order={nextIdx()}\n render={({ innerRef }) => (\n <ServerGroupAdvancedSettings ref={innerRef} formik={formik} app={application} />\n )}\n />\n </>\n )}\n />\n );\n }\n}\n","import React from 'react';\nimport { ModalFooter } from 'react-bootstrap';\nimport { map, take } from 'rxjs/operators';\n\nimport type { IAccountDetails } from '@spinnaker/core';\nimport { AccountService, UserVerification } from '@spinnaker/core';\n\nexport interface IAwsModalFooterProps {\n account: string;\n isValid?: boolean;\n onCancel: () => void;\n onSubmit: () => void;\n}\n\nexport interface IAwsModalFooterState {\n verified: boolean;\n requireVerification: boolean;\n}\n\nexport class AwsModalFooter extends React.Component<IAwsModalFooterProps, IAwsModalFooterState> {\n public static defaultProps: Partial<IAwsModalFooterProps> = {\n isValid: true,\n };\n\n public state = { verified: false, requireVerification: false };\n\n public componentDidMount() {\n AccountService.accounts$\n .pipe(\n take(1),\n map((accounts: IAccountDetails[]) => accounts.find((account) => account.name === this.props.account)),\n )\n .subscribe((account: IAccountDetails) => {\n this.setState({ requireVerification: !!account && account.challengeDestructiveActions });\n });\n }\n\n private handleVerification = (verified: boolean) => {\n this.setState({ verified });\n };\n\n public render() {\n const { account, onCancel, onSubmit, isValid } = this.props;\n const { verified, requireVerification } = this.state;\n const handleSubmit = () => {\n this.props.onSubmit();\n return false;\n };\n\n return (\n <ModalFooter>\n <form onSubmit={handleSubmit}>\n {requireVerification && <UserVerification expectedValue={account} onValidChange={this.handleVerification} />}\n </form>\n\n <button className=\"btn btn-default\" onClick={onCancel}>\n Cancel\n </button>\n <button\n type=\"submit\"\n className=\"btn btn-primary\"\n onClick={onSubmit}\n disabled={!isValid || (requireVerification && !verified)}\n >\n Submit\n </button>\n </ModalFooter>\n );\n }\n}\n","import type { Formik, FormikErrors, FormikProps } from 'formik';\nimport { Form } from 'formik';\nimport { pickBy } from 'lodash';\nimport React from 'react';\nimport { Modal } from 'react-bootstrap';\n\nimport type { Application, ICapacity, IModalComponentProps, IServerGroupJob } from '@spinnaker/core';\nimport {\n CheckboxInput,\n confirmNotManaged,\n FormikFormField,\n HelpField,\n MinMaxDesiredChanges,\n ModalClose,\n noop,\n NumberInput,\n PlatformHealthOverride,\n ReactInjector,\n ReactModal,\n SpinFormik,\n TaskMonitor,\n TaskMonitorWrapper,\n TaskReason,\n ValidationMessage,\n} from '@spinnaker/core';\nimport { AwsModalFooter } from '../../../common';\nimport type { IAmazonServerGroup } from '../../../domain';\n\nexport interface IAmazonResizeServerGroupModalProps extends IModalComponentProps {\n application: Application;\n serverGroup: IAmazonServerGroup;\n}\n\nexport interface IAmazonResizeServerGroupModalState {\n advancedMode: boolean;\n interestingHealthProviderNames: string[]; // managed by a separate component\n initialValues: IAmazonResizeServerGroupValues;\n taskMonitor: TaskMonitor;\n platformHealthOnlyShowOverride?: boolean;\n}\n\nexport interface IAmazonResizeServerGroupValues {\n min: number;\n max: number;\n desired: number;\n enforceCapacityConstraints: boolean;\n reason?: string;\n}\n\nexport interface IResizeJob extends IServerGroupJob {\n constraints?: { capacity: ICapacity };\n reason?: string;\n interestingHealthProviderNames: string[];\n}\n\nexport class AmazonResizeServerGroupModal extends React.Component<\n IAmazonResizeServerGroupModalProps,\n IAmazonResizeServerGroupModalState\n> {\n public static defaultProps: Partial<IAmazonResizeServerGroupModalProps> = {\n closeModal: noop,\n dismissModal: noop,\n };\n\n private formikRef = React.createRef<Formik<IAmazonResizeServerGroupValues>>();\n\n public static show(props: IAmazonResizeServerGroupModalProps) {\n const modalProps = {};\n const { serverGroup, application } = props;\n return confirmNotManaged(serverGroup, application).then((notManaged) => {\n notManaged && ReactModal.show(AmazonResizeServerGroupModal, props, modalProps);\n });\n }\n\n constructor(props: IAmazonResizeServerGroupModalProps) {\n super(props);\n\n const { minSize, maxSize, desiredCapacity } = props.serverGroup.asg;\n const { attributes } = props.application;\n this.state = {\n advancedMode: minSize !== maxSize,\n initialValues: {\n min: minSize,\n max: maxSize,\n desired: desiredCapacity,\n enforceCapacityConstraints: false,\n },\n taskMonitor: new TaskMonitor({\n application: props.application,\n title: 'Resizing your server group',\n modalInstance: TaskMonitor.modalInstanceEmulation(() => this.props.dismissModal()),\n onTaskComplete: () => this.props.application.serverGroups.refresh(),\n }),\n platformHealthOnlyShowOverride: attributes.platformHealthOnlyShowOverride,\n interestingHealthProviderNames:\n attributes.platformHealthOnlyShowOverride && attributes.platformHealthOnly ? ['Amazon'] : null,\n };\n }\n\n private validate = (\n values: IAmazonResizeServerGroupValues,\n ): Partial<FormikErrors<IAmazonResizeServerGroupValues>> => {\n const { min, max, desired } = values;\n const errors: Partial<FormikErrors<IAmazonResizeServerGroupValues>> = {};\n\n if (!this.state.advancedMode) {\n return errors;\n }\n\n // try to only show one error message at a time\n if (min > max && min > desired) {\n errors.min = 'Min cannot be larger than Max/Desired';\n } else if (max < min && max < desired) {\n errors.max = 'Max cannot be smaller than Min/Desired';\n } else {\n if (min > max) {\n errors.min = 'Min cannot be larger than Max';\n }\n if (!this.isDesiredControlledByAutoscaling()) {\n if (desired < min) {\n errors.desired = 'Desired cannot be smaller than Min';\n }\n if (desired > max) {\n errors.desired = 'Desired cannot be larger than Max';\n }\n }\n }\n\n return errors;\n };\n\n private toggleAdvancedMode = (): void => {\n const { desired } = this.formikRef.current.getFormikContext().values;\n this.formikRef.current.setFieldValue('min', desired);\n this.formikRef.current.setFieldValue('max', desired);\n this.setState({ advancedMode: !this.state.advancedMode });\n };\n\n private close = (args?: any): void => {\n this.props.dismissModal.apply(null, args);\n };\n\n private autoIncrementDesiredIfNeeded(): void {\n if (!this.isDesiredControlledByAutoscaling()) {\n return;\n }\n\n const formik = this.formikRef.current.getFormikContext();\n const { asg } = this.props.serverGroup;\n const { min, max, desired } = formik.values;\n const newDesired = Math.min(max, Math.max(min, asg.desiredCapacity));\n if (desired !== newDesired) {\n formik.setFieldValue('desired', newDesired);\n }\n }\n\n private platformHealthOverrideChanged = (interestingHealthProviderNames: string[]) => {\n this.setState({ interestingHealthProviderNames });\n };\n\n private isDesiredControlledByAutoscaling = (): boolean => {\n const { serverGroup } = this.props;\n const { suspendedProcesses } = serverGroup.asg;\n const { advancedMode } = this.state;\n const scalingPolicies = serverGroup.scalingPolicies || [];\n return (\n scalingPolicies.length && advancedMode && suspendedProcesses.every((p) => p.processName !== 'AlarmNotification')\n );\n };\n\n private submit = (values: IAmazonResizeServerGroupValues): void => {\n const { min, max, desired, enforceCapacityConstraints, reason } = values;\n const { interestingHealthProviderNames } = this.state;\n const { serverGroup, application } = this.props;\n const { asg } = serverGroup;\n\n const capacity = pickBy(\n {\n min: min !== asg.minSize ? min : undefined,\n max: max !== asg.maxSize ? max : undefined,\n desired: desired !== asg.desiredCapacity ? desired : undefined,\n },\n (x) => x !== undefined,\n );\n\n const command: IResizeJob = {\n capacity,\n reason,\n interestingHealthProviderNames,\n };\n\n if (enforceCapacityConstraints) {\n command.constraints = {\n capacity: {\n min: asg.minSize,\n max: asg.maxSize,\n desired: asg.desiredCapacity,\n },\n };\n }\n this.state.taskMonitor.submit(() => {\n return ReactInjector.serverGroupWriter.resizeServerGroup(serverGroup, application, command);\n });\n };\n\n private renderSimpleMode(formik: FormikProps<IAmazonResizeServerGroupValues>): JSX.Element {\n const { serverGroup } = this.props;\n const { asg } = serverGroup;\n return (\n <div>\n <p>Sets min, max, and desired instance counts to the same value.</p>\n <p>\n To allow autoscaling, use the{' '}\n <a className=\"clickable\" onClick={() => this.toggleAdvancedMode()}>\n Advanced Mode\n </a>\n .\n </p>\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">Current size</div>\n <div className=\"col-md-4\">\n <div className=\"horizontal middle\">\n <input type=\"number\" className=\"NumberInput form-control\" value={asg.desiredCapacity} disabled={true} />\n <div className=\"sp-padding-xs-xaxis\">instances</div>\n </div>\n </div>\n </div>\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">Resize to</div>\n <div className=\"col-md-4\">\n <div className=\"horizontal middle\">\n <FormikFormField\n name=\"desired\"\n input={(props) => <NumberInput {...props} min={0} />}\n touched={true}\n onChange={(value) => {\n formik.setFieldValue('min', value);\n formik.setFieldValue('max', value);\n }}\n />\n <div className=\"sp-padding-xs-xaxis\">instances</div>\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n private renderAdvancedMode(formik: FormikProps<IAmazonResizeServerGroupValues>): JSX.Element {\n const { serverGroup } = this.props;\n const { errors } = formik;\n const { asg } = serverGroup;\n\n const surfacedErrorMessage: string = errors.min || errors.max || errors.desired;\n\n return (\n <div>\n <p>Sets up autoscaling for this server group.</p>\n <p>\n To disable autoscaling, use the{' '}\n <a className=\"clickable\" onClick={() => this.toggleAdvancedMode()}>\n Simple Mode\n </a>\n .\n </p>\n <div className=\"form-group bold\">\n <div className=\"col-md-2 col-md-offset-3\">Min</div>\n <div className=\"col-md-2\">Max</div>\n <div className=\"col-md-2\">Desired</div>\n </div>\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">Current</div>\n <div className=\"col-md-2\">\n <input type=\"number\" className=\"NumberInput form-control\" value={asg.minSize} disabled={true} />\n </div>\n <div className=\"col-md-2\">\n <input type=\"number\" className=\"NumberInput form-control\" value={asg.maxSize} disabled={true} />\n </div>\n <div className=\"col-md-2\">\n <input type=\"number\" className=\"NumberInput form-control\" value={asg.desiredCapacity} disabled={true} />\n </div>\n </div>\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">Resize to</div>\n <div className=\"col-md-2\">\n <FormikFormField\n name=\"min\"\n input={(props) => <NumberInput {...props} min={0} />}\n onChange={() => this.autoIncrementDesiredIfNeeded()}\n layout={({ input }) => <>{input}</>}\n touched={true}\n />\n </div>\n <div className=\"col-md-2\">\n <FormikFormField\n name=\"max\"\n input={(props) => <NumberInput {...props} min={0} />}\n onChange={() => this.autoIncrementDesiredIfNeeded()}\n layout={({ input }) => <>{input}</>}\n touched={true}\n />\n </div>\n <div className=\"col-md-2\">\n <FormikFormField\n name=\"desired\"\n input={(props) => <NumberInput {...props} min={0} disabled={this.isDesiredControlledByAutoscaling()} />}\n layout={({ input }) => <>{input}</>}\n touched={true}\n />\n </div>\n </div>\n\n {!!surfacedErrorMessage && (\n <div className=\"col-md-offset-3 col-md-9\">\n <ValidationMessage message={surfacedErrorMessage} type=\"error\" />\n </div>\n )}\n </div>\n );\n }\n\n private renderCapacityConstraintSelector(): JSX.Element {\n return (\n <div className=\"form-group\">\n <div className=\"col-md-7 col-md-offset-3\">\n <FormikFormField\n name=\"enforceCapacityConstraints\"\n input={(props) => (\n <>\n <CheckboxInput {...props} text=\"Enforce Capacity Constraints\" />\n <HelpField id=\"aws.serverGroup.capacityConstraint\" />\n </>\n )}\n />\n </div>\n </div>\n );\n }\n\n private renderScalingPolicyWarning(formik: FormikProps<IAmazonResizeServerGroupValues>): JSX.Element {\n const { serverGroup } = this.props;\n const { min, max } = formik.values;\n const { advancedMode } = this.state;\n const scalingPolicies = serverGroup.scalingPolicies || [];\n if (scalingPolicies.length && min === max) {\n return (\n <div className=\"form-group\">\n <div className=\"col-md-7 col-md-offset-3\">\n <div className=\"well-compact alert alert-warning\">\n <b>Warning</b>: this server group has\n {scalingPolicies.length === 1 && <span> a scaling policy. </span>}\n {scalingPolicies.length > 1 && <span> scaling policies. </span>}\n {!advancedMode && (\n <span>\n Scaling policies will not take effect in Simple Mode. Switch to{' '}\n <a className=\"clickable\" onClick={() => this.toggleAdvancedMode()}>\n Advanced Mode\n </a>\n .\n </span>\n )}\n {advancedMode && (\n <span>\n Scaling policies will not take effect when <b>Min</b> is the same as <b>Max</b>.\n </span>\n )}\n </div>\n </div>\n </div>\n );\n }\n if (this.isDesiredControlledByAutoscaling()) {\n return (\n <div className=\"form-group\">\n <div className=\"col-md-8 col-md-offset-1\">\n <div className=\"well-compact alert alert-warning\">\n <p>\n <b>Desired</b> capacity is managed by Autoscaling Policies.\n </p>\n <p>\n If you need to scale <b>down</b> this server group, set <b>Max</b> to the new desired size.\n </p>\n <p>\n If you need to scale <b>up</b> this server group, set <b>Min</b> to the new desired size.\n </p>\n </div>\n </div>\n </div>\n );\n }\n return null;\n }\n\n public render() {\n const { serverGroup } = this.props;\n const { advancedMode, initialValues, platformHealthOnlyShowOverride } = this.state;\n return (\n <>\n <TaskMonitorWrapper monitor={this.state.taskMonitor} />\n <SpinFormik<IAmazonResizeServerGroupValues>\n ref={this.formikRef}\n initialValues={initialValues}\n validate={this.validate}\n onSubmit={this.submit}\n render={(formik) => {\n const { asg } = serverGroup;\n const currentCapacity = { min: asg.minSize, max: asg.maxSize, desired: asg.desiredCapacity };\n const nextCapacity = formik.values;\n\n return (\n <>\n <ModalClose dismiss={this.close} />\n <Modal.Header>\n <Modal.Title>Resize {serverGroup.name}</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <Form className=\"form-horizontal\">\n {advancedMode && this.renderAdvancedMode(formik)}\n {!advancedMode && this.renderSimpleMode(formik)}\n {this.renderScalingPolicyWarning(formik)}\n {this.renderCapacityConstraintSelector()}\n {platformHealthOnlyShowOverride && (\n <div className=\"form-group\">\n <div className=\"col-md-8 col-md-offset-3\">\n <PlatformHealthOverride\n interestingHealthProviderNames={this.state.interestingHealthProviderNames}\n platformHealthType=\"Amazon\"\n onChange={this.platformHealthOverrideChanged}\n showHelpDetails={true}\n />\n </div>\n </div>\n )}\n\n <TaskReason reason={formik.values.reason} onChange={(val) => formik.setFieldValue('reason', val)} />\n\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">Changes</div>\n <div className=\"col-md-9 sm-control-field\">\n <MinMaxDesiredChanges current={currentCapacity} next={nextCapacity} />\n </div>\n </div>\n </Form>\n </Modal.Body>\n <AwsModalFooter\n onSubmit={() => this.submit(formik.values)}\n onCancel={this.close}\n isValid={formik.isValid}\n account={serverGroup.account}\n />\n </>\n );\n }}\n />\n </>\n );\n }\n}\n","import { filter, find, get, orderBy } from 'lodash';\nimport React from 'react';\nimport { Dropdown, MenuItem, Tooltip } from 'react-bootstrap';\n\nimport type { IOwnerOption, IServerGroupActionsProps, IServerGroupJob } from '@spinnaker/core';\nimport {\n AddEntityTagLinks,\n ClusterTargetBuilder,\n ConfirmationModalService,\n ManagedMenuItem,\n ModalInjector,\n Overridable,\n ReactInjector,\n ServerGroupWarningMessageService,\n SETTINGS,\n} from '@spinnaker/core';\n\nimport { AWSProviderSettings } from '../../aws.settings';\nimport type { IAmazonServerGroupCommand } from '../configure';\nimport { AmazonCloneServerGroupModal } from '../configure/wizard/AmazonCloneServerGroupModal';\nimport type { IAmazonServerGroup, IAmazonServerGroupView } from '../../domain';\nimport { AwsReactInjector } from '../../reactShims';\nimport type { IAmazonResizeServerGroupModalProps } from './resize/AmazonResizeServerGroupModal';\nimport { AmazonResizeServerGroupModal } from './resize/AmazonResizeServerGroupModal';\n\nexport interface IAmazonServerGroupActionsProps extends IServerGroupActionsProps {\n serverGroup: IAmazonServerGroupView;\n}\n\n@Overridable('AmazonServerGroupActions.resize')\nexport class AmazonServerGroupActionsResize extends React.Component<IAmazonResizeServerGroupModalProps> {\n private resizeServerGroup = (): void => {\n AmazonResizeServerGroupModal.show(this.props);\n };\n\n public render(): JSX.Element {\n return <MenuItem onClick={this.resizeServerGroup}>Resize</MenuItem>;\n }\n}\n\nexport class AmazonServerGroupActions extends React.Component<IAmazonServerGroupActionsProps> {\n private isEnableLocked(): boolean {\n if (this.props.serverGroup.isDisabled) {\n const resizeTasks = (this.props.serverGroup.runningTasks || []).filter((task) =>\n get(task, 'execution.stages', []).some((stage) => stage.type === 'resizeServerGroup'),\n );\n if (resizeTasks.length) {\n return true;\n }\n }\n return false;\n }\n\n private isRollbackEnabled(): boolean {\n const { app, serverGroup } = this.props;\n\n if (!serverGroup.isDisabled) {\n // enabled server groups are always a candidate for rollback\n return true;\n }\n\n // if the server group selected for rollback is disabled, ensure that at least one enabled server group exists\n return app\n .getDataSource('serverGroups')\n .data.some(\n (g: IAmazonServerGroup) =>\n g.cluster === serverGroup.cluster &&\n g.region === serverGroup.region &&\n g.account === serverGroup.account &&\n !g.isDisabled,\n );\n }\n\n private hasDisabledInstances(): boolean {\n // server group may have disabled instances (out of service) but NOT itself be disabled\n return this.props.serverGroup.isDisabled || get(this.props.serverGroup, 'instanceCounts.outOfService', 0) > 0;\n }\n\n private destroyServerGroup = (): void => {\n const { app, serverGroup } = this.props;\n\n const taskMonitor = {\n application: app,\n title: 'Destroying ' + serverGroup.name,\n onTaskComplete: () => {\n if (ReactInjector.$state.includes('**.serverGroup', stateParams)) {\n ReactInjector.$state.go('^');\n }\n },\n };\n\n const submitMethod = (params: IServerGroupJob) =>\n ReactInjector.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 interestingHealthProviderNames: undefined as string[],\n submitMethod,\n askForReason: true,\n platformHealthOnlyShowOverride: app.attributes.platformHealthOnlyShowOverride,\n platformHealthType: 'Amazon',\n };\n\n ServerGroupWarningMessageService.addDestroyWarningMessage(app, serverGroup, confirmationModalParams);\n\n if (app.attributes.platformHealthOnlyShowOverride && app.attributes.platformHealthOnly) {\n confirmationModalParams.interestingHealthProviderNames = ['Amazon'];\n }\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n private disableServerGroup = (): void => {\n const { app, serverGroup } = this.props;\n\n const taskMonitor = {\n application: app,\n title: 'Disabling ' + serverGroup.name,\n };\n\n const submitMethod = (params: IServerGroupJob) => {\n return ReactInjector.serverGroupWriter.disableServerGroup(serverGroup, app.name, params);\n };\n\n const confirmationModalParams = {\n header: 'Really disable ' + serverGroup.name + '?',\n buttonText: 'Disable ' + serverGroup.name,\n account: serverGroup.account,\n interestingHealthProviderNames: undefined as string[],\n taskMonitorConfig: taskMonitor,\n platformHealthOnlyShowOverride: app.attributes.platformHealthOnlyShowOverride,\n platformHealthType: 'Amazon',\n submitMethod,\n askForReason: true,\n };\n\n ServerGroupWarningMessageService.addDisableWarningMessage(app, serverGroup, confirmationModalParams);\n\n if (app.attributes.platformHealthOnlyShowOverride && app.attributes.platformHealthOnly) {\n confirmationModalParams.interestingHealthProviderNames = ['Amazon'];\n }\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n private enableServerGroup = (): void => {\n if (!this.isRollbackEnabled()) {\n this.showEnableServerGroupModal();\n return;\n }\n\n const confirmationModalParams = {\n header: 'Rolling back?',\n body: `Spinnaker provides an orchestrated rollback feature to carefully restore a different version of this\n server group. Do you want to use the orchestrated rollback?`,\n buttonText: `Yes, take me to the rollback settings modal`,\n cancelButtonText: 'No, I just want to enable the server group',\n };\n\n ConfirmationModalService.confirm(confirmationModalParams)\n // Wait for the confirmation modal to go away first to avoid react/angular bootstrap fighting\n // over the body.modal-open class\n .then(() => new Promise((resolve) => setTimeout(resolve, 500)))\n .then(() => this.rollbackServerGroup())\n .catch((error) => {\n // don't show the enable modal if the user cancels with the header button\n if (error?.source === 'footer') {\n this.showEnableServerGroupModal();\n }\n });\n };\n\n private showEnableServerGroupModal(): void {\n const { app, serverGroup } = this.props;\n\n const taskMonitor = {\n application: app,\n title: 'Enabling ' + serverGroup.name,\n };\n\n const submitMethod = (params: IServerGroupJob) => {\n return ReactInjector.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 interestingHealthProviderNames: undefined as string[],\n taskMonitorConfig: taskMonitor,\n platformHealthOnlyShowOverride: app.attributes.platformHealthOnlyShowOverride,\n platformHealthType: 'Amazon',\n submitMethod,\n askForReason: true,\n };\n\n if (app.attributes.platformHealthOnlyShowOverride && app.attributes.platformHealthOnly) {\n confirmationModalParams.interestingHealthProviderNames = ['Amazon'];\n }\n\n ConfirmationModalService.confirm(confirmationModalParams);\n }\n\n private rollbackServerGroup = (): void => {\n const { app } = this.props;\n\n let serverGroup: IAmazonServerGroup = this.props.serverGroup;\n let previousServerGroup: IAmazonServerGroup;\n let allServerGroups = app\n .getDataSource('serverGroups')\n .data.filter(\n (g: IAmazonServerGroup) =>\n g.cluster === serverGroup.cluster && g.region === serverGroup.region && g.account === serverGroup.account,\n );\n\n if (serverGroup.isDisabled) {\n // if the selected server group is disabled, it represents the server group that should be _rolled back to_\n previousServerGroup = serverGroup;\n\n /*\n * Find an existing server group to rollback, prefer the largest enabled server group.\n *\n * isRollbackEnabled() ensures that at least one enabled server group exists.\n */\n serverGroup = orderBy(\n allServerGroups.filter((g: IAmazonServerGroup) => g.name !== previousServerGroup.name && !g.isDisabled),\n ['instanceCounts.total', 'createdTime'],\n ['desc', 'desc'],\n )[0] as IAmazonServerGroup;\n }\n\n // the set of all server groups should not include the server group selected for rollback\n allServerGroups = allServerGroups.filter((g: IAmazonServerGroup) => g.name !== serverGroup.name);\n\n if (allServerGroups.length === 1 && !previousServerGroup) {\n // if there is only one other server group, default to it being the rollback target\n previousServerGroup = allServerGroups[0];\n }\n\n ModalInjector.modalService.open({\n templateUrl: ReactInjector.overrideRegistry.getTemplate(\n 'aws.rollback.modal',\n require('./rollback/rollbackServerGroup.html'),\n ),\n controller: 'awsRollbackServerGroupCtrl as ctrl',\n resolve: {\n serverGroup: () => serverGroup,\n previousServerGroup: () => previousServerGroup,\n disabledServerGroups: () => {\n const cluster = find(app.clusters, {\n name: serverGroup.cluster,\n account: serverGroup.account,\n serverGroups: [],\n });\n return filter(cluster.serverGroups, { isDisabled: true, region: serverGroup.region });\n },\n allServerGroups: () => allServerGroups,\n application: () => app,\n },\n });\n };\n\n private cloneServerGroup = (): void => {\n const { app, serverGroup } = this.props;\n AwsReactInjector.awsServerGroupCommandBuilder\n .buildServerGroupCommandFromExisting(app, serverGroup)\n .then((command: IAmazonServerGroupCommand) => {\n const title = `Clone ${serverGroup.name}`;\n AmazonCloneServerGroupModal.show({ title, application: app, command });\n });\n };\n\n public render(): JSX.Element {\n const { app, serverGroup } = this.props;\n\n const showEntityTags = SETTINGS.feature && SETTINGS.feature.entityTags;\n const entityTagTargets: IOwnerOption[] = ClusterTargetBuilder.buildClusterTargets(serverGroup);\n\n return (\n <>\n {AWSProviderSettings.adHocInfraWritesEnabled && (\n <Dropdown className=\"dropdown\" id=\"server-group-actions-dropdown\">\n <Dropdown.Toggle className=\"btn btn-sm btn-primary dropdown-toggle\">Server Group Actions</Dropdown.Toggle>\n <Dropdown.Menu className=\"dropdown-menu\">\n {this.isRollbackEnabled() && (\n <ManagedMenuItem resource={serverGroup} application={app} onClick={this.rollbackServerGroup}>\n Rollback\n </ManagedMenuItem>\n )}\n {this.isRollbackEnabled() && <li role=\"presentation\" className=\"divider\" />}\n <AmazonServerGroupActionsResize application={app} serverGroup={serverGroup} />\n {!serverGroup.isDisabled && (\n <ManagedMenuItem resource={serverGroup} application={app} onClick={this.disableServerGroup}>\n Disable\n </ManagedMenuItem>\n )}\n {this.hasDisabledInstances() && !this.isEnableLocked() && (\n <ManagedMenuItem resource={serverGroup} application={app} onClick={this.enableServerGroup}>\n Enable\n </ManagedMenuItem>\n )}\n {this.isEnableLocked() && (\n <li className=\"disabled\">\n <Tooltip value=\"Cannot enable this server group until resize operation completes\" placement=\"left\">\n <a>\n <span className=\"small glyphicon glyphicon-lock\" /> Enable\n </a>\n </Tooltip>\n </li>\n )}\n <ManagedMenuItem resource={serverGroup} application={app} onClick={this.destroyServerGroup}>\n Destroy\n </ManagedMenuItem>\n <li>\n <a className=\"clickable\" onClick={this.cloneServerGroup}>\n Clone\n </a>\n </li>\n {showEntityTags && (\n <AddEntityTagLinks\n component={serverGroup}\n application={app}\n entityType=\"serverGroup\"\n ownerOptions={entityTagTargets}\n onUpdate={() => app.serverGroups.refresh()}\n />\n )}\n </Dropdown.Menu>\n </Dropdown>\n )}\n </>\n );\n }\n}\n","import type { IAmazonServerGroup, IScalingProcess } from '../../../domain';\n\nexport class AutoScalingProcessService {\n public static getDisabledDate(serverGroup: IAmazonServerGroup): number {\n if (serverGroup.isDisabled) {\n const processes = this.normalizeScalingProcesses(serverGroup);\n const disabledProcess = processes.find((process) => process.name === 'AddToLoadBalancer' && !process.enabled);\n if (disabledProcess) {\n return disabledProcess.suspensionDate;\n }\n }\n return null;\n }\n\n public static normalizeScalingProcesses(serverGroup: IAmazonServerGroup): IScalingProcess[] {\n if (!serverGroup.asg || !serverGroup.asg.suspendedProcesses) {\n return [];\n }\n const disabled = serverGroup.asg.suspendedProcesses;\n const allProcesses = this.listProcesses();\n return allProcesses.map((process) => {\n const disabledProcess = disabled.find((p) => p.processName === process.name);\n const scalingProcess: IScalingProcess = {\n name: process.name,\n enabled: !disabledProcess,\n description: process.description,\n };\n if (disabledProcess) {\n const suspensionDate = disabledProcess.suspensionReason.replace('User suspended at ', '');\n scalingProcess.suspensionDate = new Date(suspensionDate).getTime();\n }\n return scalingProcess;\n });\n }\n\n public static listProcesses(): IScalingProcess[] {\n return [\n {\n name: 'Launch',\n description:\n 'Controls if new instances should be launched into the ASG. If this is disabled, scale-up ' +\n 'events will not produce new instances.',\n },\n {\n name: 'Terminate',\n description: 'Controls if instances should be terminated during a scale-down event.',\n },\n {\n name: 'AddToLoadBalancer',\n description: 'Controls if new instances should be added to the ASG’s ELB.',\n },\n {\n name: 'AlarmNotification',\n description: 'This disables autoscaling.',\n },\n {\n name: 'AZRebalance',\n description:\n 'Controls whether AWS should attempt to maintain an even distribution of instances across all ' +\n 'healthy Availability Zones configured for the ASG.',\n },\n {\n name: 'HealthCheck',\n description: 'If disabled, the instance’s health will no longer be reported to the autoscaling processor.',\n },\n {\n name: 'ReplaceUnhealthy',\n description: 'Controls whether instances should be replaced if they failed the health check.',\n },\n {\n name: 'ScheduledActions',\n description: 'Controls whether scheduled actions should be executed.',\n },\n ];\n }\n}\n","import { isEmpty } from 'lodash';\nimport { Observable } from 'rxjs';\n\nimport type { IServerGroupDetailsProps, ISubnet } from '@spinnaker/core';\nimport { AccountService, ServerGroupReader, SubnetReader } from '@spinnaker/core';\nimport type { IAmazonLoadBalancer, IAmazonServerGroup, IAmazonServerGroupView } from '../../domain';\nimport { AwsReactInjector } from '../../reactShims';\n\nimport { AutoScalingProcessService } from './scalingProcesses/AutoScalingProcessService';\n\nfunction extractServerGroupSummary(props: IServerGroupDetailsProps): PromiseLike<IAmazonServerGroup> {\n const { app, serverGroup } = props;\n return app.ready().then(() => {\n let summary: IAmazonServerGroup = app.serverGroups.data.find((toCheck: IAmazonServerGroup) => {\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: IAmazonLoadBalancer) => {\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 return false;\n });\n }\n return false;\n });\n }\n return summary;\n });\n}\n\nexport function amazonServerGroupDetailsGetter(\n props: IServerGroupDetailsProps,\n autoClose: () => void,\n): Observable<IAmazonServerGroup> {\n const { app, serverGroup: serverGroupInfo } = props;\n return new Observable<IAmazonServerGroupView>((observer) => {\n extractServerGroupSummary(props).then((summary) => {\n ServerGroupReader.getServerGroup(\n app.name,\n serverGroupInfo.accountId,\n serverGroupInfo.region,\n serverGroupInfo.name,\n ).then((details: IAmazonServerGroup) => {\n // it's possible the summary was not found because the clusters are still loading\n Object.assign(details, summary, { account: serverGroupInfo.accountId });\n\n const serverGroup = AwsReactInjector.awsServerGroupTransformer.normalizeServerGroupDetails(details);\n\n AccountService.getAccountDetails(serverGroup.account).then((accountDetails) => {\n serverGroup.accountDetails = accountDetails;\n observer.next(serverGroup);\n });\n\n if (!isEmpty(serverGroup)) {\n const vpc = serverGroup.asg ? serverGroup.asg.vpczoneIdentifier : '';\n\n if (vpc !== '') {\n const subnetId = vpc.split(',')[0];\n SubnetReader.listSubnets().then((subnets: ISubnet[]) => {\n const subnet = subnets.find((s) => s.id === subnetId);\n serverGroup.subnetType = subnet.purpose;\n observer.next(serverGroup);\n });\n }\n\n serverGroup.disabledDate = AutoScalingProcessService.getDisabledDate(serverGroup);\n\n observer.next(serverGroup);\n } else {\n autoClose();\n }\n }, autoClose);\n }, autoClose);\n });\n}\n","import type {\n CartesianScaleOptions,\n ChartConfiguration,\n ChartDataset,\n LinearScaleOptions,\n TimeScaleOptions,\n TooltipItem,\n} from 'chart.js';\nimport {\n Chart,\n Filler,\n Legend,\n LinearScale,\n LineController,\n LineElement,\n PointElement,\n TimeScale,\n Title,\n Tooltip,\n} from 'chart.js';\nimport 'chartjs-adapter-luxon';\nimport * as React from 'react';\n\nChart.register(LineController, LineElement, PointElement, LinearScale, Title, TimeScale, Tooltip, Legend, Filler);\n\ninterface IDateSeriesTuple {\n x: Date;\n y: number;\n}\n\nexport type IDateLine = ChartDataset<'line', IDateSeriesTuple[]>;\n\nexport interface IDateLineChartProps {\n lines: IDateLine[];\n style?: object;\n className?: string;\n}\n\nfunction makeChart(canvasElement: HTMLCanvasElement) {\n const xScaleOptions: TimeScaleOptions & any = {\n type: 'time',\n display: true,\n scaleLabel: {\n labelString: 'Date',\n },\n ticks: {\n major: { enabled: true },\n },\n };\n\n const yScaleOptions: Partial<CartesianScaleOptions & LinearScaleOptions> = {\n min: 0,\n stacked: true,\n };\n\n const chartConfig: ChartConfiguration<'line'> = {\n type: 'line',\n data: {\n labels: [],\n datasets: [{ data: [] }],\n },\n options: {\n plugins: {\n tooltip: {\n mode: 'index',\n itemSort: (a: TooltipItem<any>, b: TooltipItem<any>) => {\n const labels = a.chart.data.datasets.map((d) => d.label);\n const labelA = (a.dataset as { label?: string }).label ?? labels[0];\n const labelB = (b.dataset as { label?: string }).label ?? labels[0];\n return labels.indexOf(labelB) - labels.indexOf(labelA);\n },\n },\n },\n hover: {\n mode: 'index',\n },\n elements: {\n point: {\n hitRadius: 12,\n radius: 1,\n hoverRadius: 5,\n },\n },\n scales: {\n x: xScaleOptions,\n y: yScaleOptions,\n },\n },\n };\n\n return new Chart(canvasElement, chartConfig);\n}\n\nexport function DateLineChart(props: IDateLineChartProps) {\n const chartContainerRef = React.useRef<HTMLCanvasElement>();\n const chartRef = React.useRef<Chart<'line', Array<{ x: Date; y: number }>>>();\n const { lines, className = '', style = {} } = props;\n\n React.useEffect(() => {\n if (chartContainerRef) {\n chartRef.current = makeChart(chartContainerRef.current) as any;\n return () => chartRef.current?.destroy();\n }\n return null;\n }, [chartContainerRef.current]);\n\n React.useEffect(() => {\n const chart = chartRef.current;\n if (chart && lines) {\n chart.options.animation = false;\n chart.data.datasets = lines;\n chart.update();\n }\n }, [chartRef.current, lines]);\n\n return <canvas ref={chartContainerRef} {...style} className={className} />;\n}\n","import { get } from 'lodash';\nimport * as React from 'react';\n\nimport type { ICloudMetricStatistics } from '@spinnaker/core';\nimport { CloudMetricsReader, Spinner, useData } from '@spinnaker/core';\n\nimport type { IDateLine } from './DateLineChart';\nimport { DateLineChart } from './DateLineChart';\nimport type { IAmazonServerGroup, IScalingPolicyAlarm } from '../../../../domain';\n\ninterface IMetricAlarmChartProps {\n serverGroup: IAmazonServerGroup;\n alarm: IScalingPolicyAlarm;\n onChartLoaded?: (stats: ICloudMetricStatistics) => void;\n}\n\nexport function MetricAlarmChart(props: IMetricAlarmChartProps) {\n return props.serverGroup && props.alarm ? <MetricAlarmChartImpl {...props} /> : null;\n}\n\nexport function MetricAlarmChartImpl(props: IMetricAlarmChartProps) {\n const alarm = props.alarm ?? ({} as IScalingPolicyAlarm);\n const serverGroup = props.serverGroup ?? ({} as IAmazonServerGroup);\n const { account, awsAccount, region, type } = serverGroup;\n const { metricName, namespace, statistic, period } = alarm;\n\n const { status, result } = useData<ICloudMetricStatistics>(\n async () => {\n const parameters: Record<string, string | number> = { namespace, statistics: statistic, period };\n alarm.dimensions.forEach((dimension) => (parameters[dimension.name] = dimension.value));\n\n const metricAccount = type === 'aws' ? account : awsAccount;\n const result = await CloudMetricsReader.getMetricStatistics('aws', metricAccount, region, metricName, parameters);\n result.datapoints = result.datapoints || [];\n props.onChartLoaded?.(result);\n\n return result;\n },\n { datapoints: [], unit: '' },\n [namespace, statistic, period, type, account, region, metricName, alarm.dimensions],\n );\n\n if (status === 'PENDING') {\n return (\n <div className=\"flex-container-v middle center sp-margin-xl\">\n <Spinner />\n </div>\n );\n } else if (status === 'REJECTED') {\n // Metrics with a \"%\" in the name such as \"EBSIOBalance%\" return 500\n // by spring boot due to a security check. For now just say \"no data\" :(\n return (\n <>\n <div>no data</div>\n <div>something went wrong fetching stats</div>\n </>\n );\n } else if (result.datapoints.length === 0) {\n return <>no data</>;\n }\n\n const now = new Date();\n const oneDayAgo = new Date(Date.now() - 1000 * 60 * 60 * 24);\n const line: IDateLine = {\n label: metricName,\n fill: 'stack',\n borderColor: 'green',\n borderWidth: 2,\n data: result.datapoints.map((dp) => ({\n x: new Date(dp.timestamp),\n y: get(dp, [alarm.statistic.toLowerCase()], undefined),\n })),\n };\n\n const setline: IDateLine = {\n label: 'threshold',\n borderWidth: 1,\n borderColor: 'red',\n data: [\n { x: oneDayAgo, y: alarm.threshold },\n { x: now, y: alarm.threshold },\n ],\n };\n return <DateLineChart lines={[line, setline]} />;\n}\n","import type { Dictionary } from 'lodash';\nimport * as React from 'react';\n\nimport type { ICloudMetricStatistics } from '@spinnaker/core';\n\nimport { MetricAlarmChart } from '../chart/MetricAlarmChart';\nimport type { IAmazonServerGroup, IScalingPolicyAlarm, ITargetTrackingConfiguration } from '../../../../domain';\n\nexport interface ITargetTrackingChartProps {\n config: ITargetTrackingConfiguration;\n serverGroup: IAmazonServerGroup;\n unit?: string;\n updateUnit?: (unit: string) => void;\n}\n\nconst predefinedMetricTypeMapping: Dictionary<string> = {\n ASGAverageCPUUtilization: 'CPUUtilization',\n ASGAverageNetworkIn: 'NetworkIn',\n ASGAverageNetworkOut: 'NetworkOut',\n ALBRequestCountPerTarget: 'RequestCountPerTarget',\n};\n\nexport const TargetTrackingChart = ({ config, serverGroup, updateUnit }: ITargetTrackingChartProps) => {\n const [alarm, setAlarm] = React.useState<IScalingPolicyAlarm>({\n alarmName: null,\n alarmArn: null,\n metricName: null,\n namespace: null,\n statistic: 'Average',\n dimensions: [],\n period: 60,\n threshold: config.targetValue,\n comparisonOperator: 'GreaterThanThreshold',\n okactions: [],\n insufficientDataActions: [],\n alarmActions: [],\n evaluationPeriods: null,\n alarmDescription: null,\n unit: null,\n });\n\n const synchronizeAlarm = () => {\n const customMetric = config?.customizedMetricSpecification;\n const predefMetric = config?.predefinedMetricSpecification;\n const updatedAlarm = {\n ...alarm,\n dimensions: customMetric?.dimensions || [{ name: 'AutoScalingGroupName', value: serverGroup.name }],\n metricName: customMetric?.metricName || predefinedMetricTypeMapping[predefMetric?.predefinedMetricType],\n namespace: customMetric?.namespace || 'AWS/EC2',\n threshold: config?.targetValue,\n };\n\n if (customMetric) {\n updatedAlarm.statistic = customMetric?.statistic;\n }\n\n if (predefMetric && predefMetric.predefinedMetricType === 'ALBRequestCountPerTarget') {\n updatedAlarm.statistic = 'Sum';\n updatedAlarm.namespace = 'AWS/ApplicationELB';\n if (predefMetric?.resourceLabel) {\n const parts = predefMetric?.resourceLabel.split('/');\n const loadBalancer = parts.slice(0, 3).join('/');\n const targetGroup = parts.slice(3).join('/');\n updatedAlarm.dimensions = [\n { name: 'LoadBalancer', value: loadBalancer },\n { name: 'TargetGroup', value: targetGroup },\n ];\n }\n }\n\n setAlarm(updatedAlarm);\n };\n\n React.useEffect(() => {\n synchronizeAlarm();\n }, [config]);\n\n const onChartLoaded = (stats: ICloudMetricStatistics) => {\n if (updateUnit) {\n updateUnit(stats.unit);\n }\n };\n\n return <MetricAlarmChart alarm={alarm} onChartLoaded={onChartLoaded} serverGroup={serverGroup} />;\n};\n","import { flatMap, uniq } from 'lodash';\nimport * as React from 'react';\nimport type { Subject } from 'rxjs';\n\nimport type { IMetricAlarmDimension, IServerGroup } from '@spinnaker/core';\nimport { CloudMetricsReader, ReactSelectInput, TextInput, useData } from '@spinnaker/core';\n\nimport type { IScalingPolicyAlarmView } from '../../../../../domain';\n\nimport './dimensionsEditor.less';\n\nexport interface IDimensionsEditorProps {\n alarm: IScalingPolicyAlarmView;\n namespaceUpdated?: Subject<void>;\n serverGroup: IServerGroup;\n updateAvailableMetrics: (dimensions: IMetricAlarmDimension[]) => void;\n}\n\nexport const DimensionsEditor = ({ alarm, serverGroup, updateAvailableMetrics }: IDimensionsEditorProps) => {\n const dimensions = alarm.dimensions || [];\n\n const fetchDimensions = () => {\n return CloudMetricsReader.listMetrics('aws', serverGroup.account, serverGroup.region, {\n namespace: alarm.namespace,\n })\n .then((results) => {\n const allDimensions = flatMap(results, (r) => r.dimensions);\n const sortedDimensions = uniq(allDimensions.filter((d) => d).map((d) => d.name)).sort();\n return sortedDimensions;\n })\n .catch(() => {\n return [];\n });\n };\n const { result: dimensionOptions } = useData(fetchDimensions, [], [alarm.namespace, serverGroup.name]);\n\n const addDimension = () => {\n const newDimensions = [...dimensions, {} as IMetricAlarmDimension];\n updateAvailableMetrics(newDimensions);\n };\n const removeDimension = (index: number) => {\n const newDimensions = alarm.dimensions.filter((_d, i) => i !== index);\n updateAvailableMetrics(newDimensions);\n };\n const updateDimension = (key: 'name' | 'value', value: string, index: number) => {\n const newDimensions = [...dimensions];\n const updatedDimension = newDimensions[index];\n updatedDimension[key] = value;\n updateAvailableMetrics(newDimensions);\n };\n return (\n <div>\n <div className=\"row\">\n <div className=\"col-md-12 small\">\n <h5>Dimensions</h5>\n </div>\n </div>\n {dimensions.map((dimension, i) => (\n <div key={`dimension-${i}`} className=\"row dimensions-row horizontal middle\">\n <div className=\"col-md-6\">\n <ReactSelectInput\n onChange={(e) => updateDimension('name', e.target.value, i)}\n value={dimension.name}\n stringOptions={dimensionOptions}\n />\n </div>\n <TextInput onChange={(e) => updateDimension('value', e.target.value, i)} value={dimension.value} />\n {!alarm.disableEditingDimensions && (\n <div className=\"col-md-1\" onClick={() => removeDimension(i)}>\n <a>\n <i className=\"glyphicon glyphicon-trash clickable\" />\n </a>\n </div>\n )}\n </div>\n ))}\n {!alarm.disableEditingDimensions && (\n <div className=\"row\">\n <div>\n <button type=\"button\" className=\"btn btn-block btn-xs add-new\" onClick={addDimension}>\n <span className=\"glyphicon glyphicon-plus-sign sp-margin-xs-left\"></span>\n Add dimension\n </button>\n </div>\n </div>\n )}\n </div>\n );\n};\n","export const NAMESPACES = [\n 'AWS/ApplicationELB',\n 'AWS/AutoScaling',\n 'AWS/AmazonMQ',\n 'AWS/Billing',\n 'AWS/CloudFront',\n 'AWS/CloudSearch',\n 'AWS/Events',\n 'AWS/DynamoDB',\n 'AWS/ECS',\n 'AWS/ElastiCache',\n 'AWS/EBS',\n 'AWS/EC2',\n 'AWS/ELB',\n 'AWS/ElasticMapReduce',\n 'AWS/ES',\n 'AWS/Kinesis',\n 'AWS/Lambda',\n 'AWS/ML',\n 'AWS/OpsWorks',\n 'AWS/Redshift',\n 'AWS/RDS',\n 'AWS/Route53',\n 'AWS/SNS',\n 'AWS/SQS',\n 'AWS/S3',\n 'AWS/SWF',\n 'AWS/StorageGateway',\n 'AWS/WAF',\n 'AWS/WorkSpaces',\n];\n","import type { Dictionary } from 'lodash';\nimport * as React from 'react';\n\nimport type { ICloudMetricDescriptor, IMetricAlarmDimension } from '@spinnaker/core';\nimport { CloudMetricsReader, HelpField, ReactSelectInput, useData } from '@spinnaker/core';\n\nimport { DimensionsEditor } from './DimensionsEditor';\nimport { AWSProviderSettings } from '../../../../../aws.settings';\nimport type { IAmazonServerGroup, IScalingPolicyAlarmView } from '../../../../../domain';\nimport { NAMESPACES } from './namespaces';\n\nimport './MetricSelector.less';\n\nexport interface IMetricOption extends ICloudMetricDescriptor {\n label: string;\n dimensionValues: string;\n value: ICloudMetricDescriptor;\n}\n\nexport interface IMetricSelectorProps {\n alarm: IScalingPolicyAlarmView;\n serverGroup: IAmazonServerGroup;\n updateAlarm: (alarm: IScalingPolicyAlarmView) => void;\n}\n\nexport const MetricSelector = ({ alarm, updateAlarm, serverGroup }: IMetricSelectorProps) => {\n const namespaces = (AWSProviderSettings?.metrics?.customNamespaces || []).concat(NAMESPACES);\n const [advancedMode, setAdvancedMode] = React.useState<boolean>(false);\n\n const dimensionsObject = (alarm?.dimensions || []).reduce(\n (acc: Dictionary<string>, dimension: IMetricAlarmDimension) => {\n acc[dimension.name] = dimension.value;\n return acc;\n },\n {} as Dictionary<string>,\n );\n\n const buildDimensionValues = (dimensions: IMetricAlarmDimension[]) =>\n dimensions\n .sort((a: IMetricAlarmDimension, b: IMetricAlarmDimension) => a.name?.localeCompare(b.name))\n .map((d: IMetricAlarmDimension) => d.value)\n .join(', ');\n\n const fetchCloudMetrics = () => {\n const account = serverGroup.cloudProvider === 'aws' ? serverGroup.account : serverGroup?.awsAccount;\n const queryParams = advancedMode ? { namespace: alarm?.namespace } : { AutoScalingGroupName: serverGroup.name };\n return CloudMetricsReader.listMetrics('aws', account, serverGroup.region, queryParams)\n .then((results: ICloudMetricDescriptor[]) => {\n const sortedMetrics: IMetricOption[] = (results || [])\n .map((m) => ({\n label: `(${m.namespace}) ${m.name}`,\n dimensions: [],\n dimensionValues: buildDimensionValues(m.dimensions || []),\n value: m,\n ...m,\n }))\n .sort((a, b) => a.label?.localeCompare(b.label));\n return sortedMetrics;\n })\n .catch(() => {\n return [];\n });\n };\n\n const { result: metrics } = useData(fetchCloudMetrics, [], [serverGroup, alarm?.namespace]);\n const metricsByNamespace = (metrics || []).filter((m) => m.namespace === alarm?.namespace);\n const selectedMetric =\n metricsByNamespace.find((m: IMetricOption) => m.name === alarm?.metricName && m.namespace === alarm?.namespace) ||\n metricsByNamespace.find((m) => m.name.match('CPUUtilization')) ||\n metricsByNamespace[0];\n const { name: metricName, namespace } = selectedMetric || {};\n\n const toggleMode = () => {\n const newMode = !advancedMode;\n if (newMode) {\n dimensionsObject.namespace = alarm?.namespace;\n } else {\n const newAlarm = {\n ...alarm,\n dimension: [{ name: 'AutoScalingGroupName', value: serverGroup.name }],\n };\n updateAlarm(newAlarm);\n }\n setAdvancedMode(newMode);\n };\n\n const onMetricChange = (metric: IMetricOption) => {\n const newAlarm = {\n ...alarm,\n metricName: metric.name,\n namespace: metric.namespace,\n dimensions: metric.dimensions,\n };\n updateAlarm(newAlarm);\n };\n\n const onAdvancedChange = (newNamespace: string, newName: string) => {\n const newAlarm = {\n ...alarm,\n metricName: newName,\n namespace: newNamespace,\n };\n updateAlarm(newAlarm);\n };\n\n const updateDimensions = (dimensions: IMetricAlarmDimension[]) => {\n const newAlarm = {\n ...alarm,\n dimensions: dimensions,\n };\n updateAlarm(newAlarm);\n };\n\n React.useEffect(() => {\n if (selectedMetric) {\n onMetricChange(selectedMetric);\n }\n }, [selectedMetric]);\n\n if (!advancedMode) {\n return (\n <div className=\"MetricSelector horizontal middle\">\n <ReactSelectInput\n value={selectedMetric}\n onChange={(e) => onMetricChange(e.target.value)}\n options={metrics}\n clearable={false}\n inputClassName=\"sp-margin-s-right simple-input\"\n />\n <a className=\"clickable\" onClick={toggleMode}>\n <span className=\"sp-margin-xs-right\">Search all metrics</span>\n <HelpField id=\"aws.scalingPolicy.search.all\" />\n </a>\n </div>\n );\n }\n\n return (\n <div className=\"MetricSelector\">\n <div className=\"horizontal middle\">\n <ReactSelectInput\n value={namespace}\n onChange={(e) => onAdvancedChange(e.target.value, alarm?.metricName)}\n stringOptions={namespaces}\n inputClassName=\"advanced-input-namespace sp-margin-m-right\"\n />\n <ReactSelectInput\n value={metricName}\n onChange={(e) => onAdvancedChange(alarm?.namespace, e.target.value)}\n stringOptions={metrics.map((m) => m.name)}\n placeholder=\"name\"\n searchable={true}\n inputClassName=\"advanced-input-metric\"\n />\n </div>\n <div className=\"vertical\">\n {!Boolean(metrics.length) && (\n <span className=\"input-label\">\n <b>Note:</b> no metrics found for selected namespace + dimensions\n </span>\n )}\n <a className=\"clickable\" onClick={toggleMode}>\n <span className=\"sp-margin-s-yaxis sp-margin-xs-right\">Only show metrics for this auto scaling group</span>\n <HelpField id=\"aws.scalingPolicy.search.restricted\" />\n </a>\n </div>\n <DimensionsEditor alarm={alarm} serverGroup={serverGroup} updateAvailableMetrics={updateDimensions} />\n </div>\n );\n};\n","import { cloneDeep, set } from 'lodash';\nimport * as React from 'react';\n\nimport { NumberInput, ReactSelectInput } from '@spinnaker/core';\nimport type { Application, ILoadBalancer } from '@spinnaker/core';\n\nimport type { ITargetTrackingPolicyCommand } from '../ScalingPolicyWriter';\nimport { TargetTrackingChart } from './TargetTrackingChart';\nimport type {\n IAmazonApplicationLoadBalancer,\n IAmazonServerGroup,\n ICustomizedMetricSpecification,\n IScalingPolicyAlarmView,\n ITargetGroup,\n} from '../../../../domain';\nimport { MetricSelector } from '../upsert/alarm/MetricSelector';\n\nimport './TargetMetricFields.less';\n\nexport type MetricType = 'custom' | 'predefined';\nexport interface ITargetMetricFieldsProps {\n allowDualMode?: boolean;\n cloudwatch?: boolean;\n command: ITargetTrackingPolicyCommand;\n isCustomMetric: boolean;\n app: Application;\n serverGroup: IAmazonServerGroup;\n toggleMetricType?: (type: MetricType) => void;\n updateCommand: (command: ITargetTrackingPolicyCommand) => void;\n}\n\ninterface IalbArn {\n loadBalancerArn: string;\n}\n\ninterface ItargetGroupArn {\n targetGroupArn: string;\n}\n\nexport const TargetMetricFields = ({\n allowDualMode,\n cloudwatch,\n command,\n isCustomMetric,\n app,\n serverGroup,\n toggleMetricType,\n updateCommand,\n}: ITargetMetricFieldsProps) => {\n const predefinedMetrics = [\n 'ASGAverageCPUUtilization',\n 'ASGAverageNetworkOut',\n 'ASGAverageNetworkIn',\n 'ALBRequestCountPerTarget',\n ];\n const statistics = ['Average', 'Maximum', 'Minimum', 'SampleCount', 'Sum'];\n const [unit, setUnit] = React.useState<string>(null);\n\n const setCommandField = (path: string, value: any) => {\n const newCommand = cloneDeep(command);\n set(newCommand, path, value);\n updateCommand(newCommand);\n };\n\n const updateAlarm = (newAlarm: ICustomizedMetricSpecification) => {\n setCommandField('targetTrackingConfiguration.customizedMetricSpecification', newAlarm);\n };\n\n const onMetricTypeChange = () => {\n const newCommand = cloneDeep(command);\n if (isCustomMetric) {\n set(newCommand, 'targetTrackingConfiguration.predefinedMetricSpecification', {\n predefinedMetricType: 'ASGAverageCPUUtilization',\n });\n set(newCommand, 'targetTrackingConfiguration.customizedMetricSpecification', null);\n } else {\n set(newCommand, 'targetTrackingConfiguration.predefinedMetricSpecification', null);\n set(newCommand, 'targetTrackingConfiguration.customizedMetricSpecification', {\n metricName: 'CPUUtilization',\n namespace: 'AWS/EC2',\n dimensions: [{ name: 'AutoScalingGroupName', value: serverGroup.name }],\n statistic: 'Average',\n });\n }\n\n updateCommand(newCommand);\n toggleMetricType(isCustomMetric ? 'predefined' : 'custom');\n };\n\n const targetGroupOptions = () => {\n const loadBalancers = app.loadBalancers.data as ILoadBalancer[];\n const albs = loadBalancers.filter(\n (lb) => lb.account === serverGroup.account && lb.region === serverGroup.region,\n ) as Array<IAmazonApplicationLoadBalancer & IalbArn>;\n const targetGroups = albs.flatMap((alb) =>\n alb.targetGroups\n .filter((tg) => serverGroup.targetGroups.some((serverGroupTg) => serverGroupTg === tg.name))\n .map((tg) => ({ ...tg, loadBalancerArn: alb.loadBalancerArn })),\n ) as Array<ITargetGroup & IalbArn & ItargetGroupArn>;\n return targetGroups.map((tg) => ({\n label: tg.name,\n value: `${tg.loadBalancerArn.substring(tg.loadBalancerArn.indexOf('app'))}/${tg.targetGroupArn.substring(\n tg.targetGroupArn.indexOf('targetgroup'),\n )}`,\n }));\n };\n\n return (\n <div className=\"TargetMetricFields sp-margin-l-xaxis\">\n <p>\n With target tracking policies, Amazon will automatically adjust the size of your ASG to keep the selected metric\n as close as possible to the selected value.\n </p>\n {cloudwatch && (\n <p>\n <b>Note:</b> metrics must be sent to Amazon CloudWatch before they can be used in auto scaling. If you do not\n see a metric below, click \"Configure available metrics\" in the server group details to set up forwarding from\n Atlas to CloudWatch.\n </p>\n )}\n <div className=\"row sp-margin-s-yaxis\">\n <div className=\"col-md-2 sm-label-right\">Metric</div>\n <div className=\"col-md-10 content-fields\">\n {!isCustomMetric && (\n <ReactSelectInput\n value={command.targetTrackingConfiguration.predefinedMetricSpecification?.predefinedMetricType}\n stringOptions={predefinedMetrics}\n onChange={(e) =>\n setCommandField(\n 'targetTrackingConfiguration.predefinedMetricSpecification.predefinedMetricType',\n e.target.value,\n )\n }\n inputClassName=\"metric-select-input\"\n />\n )}\n\n {isCustomMetric && (\n <MetricSelector\n alarm={command.targetTrackingConfiguration.customizedMetricSpecification as IScalingPolicyAlarmView}\n serverGroup={serverGroup}\n updateAlarm={updateAlarm}\n />\n )}\n {allowDualMode && (\n <a className=\"clickable\" onClick={onMetricTypeChange}>\n {isCustomMetric ? 'Use a predefined metric' : 'Select a custom metric'}\n </a>\n )}\n </div>\n </div>\n {!isCustomMetric &&\n command.targetTrackingConfiguration.predefinedMetricSpecification?.predefinedMetricType ===\n 'ALBRequestCountPerTarget' && (\n <div className=\"row sp-margin-s-yaxis\">\n <div className=\"col-md-2 sm-label-right\">Target Group</div>\n <div className=\"col-md-10 content-fields horizontal\">\n <ReactSelectInput\n value={command.targetTrackingConfiguration.predefinedMetricSpecification?.resourceLabel}\n options={targetGroupOptions()}\n onChange={(e) =>\n setCommandField(\n 'targetTrackingConfiguration.predefinedMetricSpecification.resourceLabel',\n e.target.value,\n )\n }\n inputClassName=\"metric-select-input\"\n />\n </div>\n </div>\n )}\n <div className=\"row sp-margin-s-yaxis\">\n <div className=\"col-md-2 sm-label-right\">Target</div>\n <div className=\"col-md-10 content-fields horizontal\">\n {isCustomMetric && (\n <div className=\"horizontal middle\">\n <ReactSelectInput\n value={command.targetTrackingConfiguration.customizedMetricSpecification?.statistic}\n stringOptions={statistics}\n onChange={(e) =>\n setCommandField('targetTrackingConfiguration.customizedMetricSpecification.statistic', e.target.value)\n }\n inputClassName=\"form-control input-sm target-input\"\n />\n <span className=\"sp-margin-xs-xaxis\">of</span>\n </div>\n )}\n <div className=\"horizontal middle\">\n <NumberInput\n value={command.targetTrackingConfiguration.targetValue}\n onChange={(e) =>\n setCommandField('targetTrackingConfiguration.targetValue', Number.parseInt(e.target.value))\n }\n inputClassName=\"form-control input-sm sp-margin-xs-right\"\n />\n <span>{unit}</span>\n </div>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-md-10 col-md-offset-1\">\n <TargetTrackingChart\n config={command.targetTrackingConfiguration}\n serverGroup={serverGroup}\n unit={unit}\n updateUnit={(u) => setUnit(u)}\n />\n </div>\n </div>\n </div>\n );\n};\n","import { set } from 'lodash';\nimport * as React from 'react';\nimport { CheckboxInput, HelpField, NumberInput } from '@spinnaker/core';\nimport type { IUpsertScalingPolicyCommand } from '../ScalingPolicyWriter';\n\nimport './TargetTrackingAdditionalSettings.less';\n\nexport interface ITargetTrackingAdditionalSettingsProps {\n command: IUpsertScalingPolicyCommand;\n cooldowns?: Boolean;\n policyName?: string;\n updateCommand: (command: IUpsertScalingPolicyCommand) => void;\n}\n\nexport const TargetTrackingAdditionalSettings = ({\n command,\n cooldowns,\n policyName,\n updateCommand,\n}: ITargetTrackingAdditionalSettingsProps) => {\n const setCommandField = (path: string, value: number) => {\n const newCommand = { ...command };\n set(newCommand, path, value);\n updateCommand(newCommand);\n };\n const scaleInDisabled = command.targetTrackingConfiguration?.disableScaleIn;\n return (\n <div className=\"section-body TargetTrackingAdditionalSettings\">\n {policyName && (\n <div className=\"row\">\n <div className=\"col-md-2 sm-label-right\">Policy Name</div>\n <div className=\"col-md-10 horizontal middle\">{policyName}</div>\n </div>\n )}\n {Boolean(command.estimatedInstanceWarmup) && (\n <div className=\"row\">\n <div className=\"col-md-2 sm-label-right\">Warmup</div>\n <div className=\"col-md-10 horizontal middle\">\n <span className=\"form-control-static\">Instances need</span>\n <NumberInput\n value={command.estimatedInstanceWarmup}\n onChange={(e) => setCommandField('estimatedInstanceWarmup', Number.parseInt(e.target.value))}\n inputClassName=\"form-control number-input-sm sp-margin-xs-xaxis\"\n />\n <span className=\"input-label\"> seconds to warm up </span>\n </div>\n </div>\n )}\n <div className=\"row\">\n <div className=\"col-md-2 sm-label-right\">Scale In</div>\n <div className=\"col-md-9\">\n <div className=\"checkbox\">\n <CheckboxInput\n text=\"Disable Scale-downs\"\n checked={scaleInDisabled}\n onChange={(e) => setCommandField('targetTrackingConfiguration.disableScaleIn', e.target.checked)}\n />\n <div className=\"small\">\n <p>\n This option disables scale-downs for the target tracking policy, while keeping the scale-ups. This means\n that ASG will not scale down unless you explicitly set up a separate step policy to scale it down.\n </p>\n <p>This is useful when you have special requirements, such as gradual or delayed scale-down.</p>\n </div>\n </div>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-md-10 col-md-offset-1\">\n {scaleInDisabled && (\n <div className=\"well\">\n This policy will not scale down. Make sure you have another policy (either TT or Step) that will scale\n down this ASG.\n </div>\n )}\n {scaleInDisabled === false && (\n <div className=\"well\">\n This policy will scale both up and down. Make sure you don't have other scaling policies, as they will\n likely interfere with each other.\n </div>\n )}\n </div>\n </div>\n {cooldowns && !scaleInDisabled && (\n <div className=\"row\">\n <div className=\"col-md-3 sm-label-right\">\n <span className=\"sp-margin-xs-right\">Scale In Cooldown</span>\n <HelpField id=\"titus.autoscaling.scaleIn.cooldown\" />\n </div>\n <div className=\"col-md-9 horizontal middle\">\n <NumberInput\n value={command.targetTrackingConfiguration.scaleInCooldown}\n onChange={(e) =>\n setCommandField('targetTrackingConfiguration.scaleInCooldown', Number.parseInt(e.target.value))\n }\n inputClassName=\"sp-margin-xs-xaxis number-input-sm\"\n />\n <span className=\"input-label\"> seconds </span>\n </div>\n </div>\n )}\n {cooldowns && (\n <div className=\"row\">\n <div className=\"col-md-3 sm-label-right\">\n <span className=\"sp-margin-xs-right\">Scale Out Cooldown</span>\n <HelpField id=\"titus.autoscaling.scaleOut.cooldown\" />\n </div>\n <div className=\"col-md-9 horizontal middle\">\n <NumberInput\n value={command.targetTrackingConfiguration.scaleOutCooldown}\n onChange={(e) =>\n setCommandField('targetTrackingConfiguration.scaleOutCooldown', Number.parseInt(e.target.value))\n }\n inputClassName=\"sp-margin-xs-xaxis number-input-sm\"\n />\n <span className=\"input-label\"> seconds </span>\n </div>\n </div>\n )}\n </div>\n );\n};\n","import { cloneDeep } from 'lodash';\n\nimport type {\n ISimplePolicyDescription,\n IStepPolicyDescription,\n IUpsertAlarmDescription,\n IUpsertScalingPolicyCommand,\n} from '../ScalingPolicyWriter';\nimport type {\n IAmazonServerGroup,\n IScalingPolicy,\n IScalingPolicyAlarm,\n IStepAdjustment,\n ITargetTrackingPolicy,\n} from '../../../../domain';\n\ntype PolicyType = 'Step' | 'TargetTracking';\n\nexport const ScalingPolicyCommandBuilder = {\n buildAlarm: (policy: IScalingPolicy, region: string, asgName: string): IUpsertAlarmDescription => {\n const alarm = policy?.alarms ? policy.alarms[0] : ({} as IScalingPolicyAlarm);\n return {\n name: alarm.alarmName,\n actionsEnabled: true,\n alarmActionArns: alarm.alarmActions,\n alarmDescription: alarm.alarmDescription,\n asgName: asgName,\n comparisonOperator: alarm.comparisonOperator,\n dimensions: alarm.dimensions,\n evaluationPeriods: alarm.evaluationPeriods,\n insufficientDataActionArns: alarm.insufficientDataActions,\n metricName: alarm.metricName,\n namespace: alarm.namespace,\n okActionArns: alarm.okactions,\n period: alarm.period,\n region,\n statistic: alarm.statistic,\n threshold: alarm.threshold,\n unit: alarm.unit,\n };\n },\n\n buildStepPolicy: (policy: IScalingPolicy, threshold: number, cooldown: number): IStepPolicyDescription => {\n const stepAdjustments = policy.stepAdjustments.map((adjustment) => {\n const step = {\n scalingAdjustment: Math.abs(adjustment.scalingAdjustment),\n } as IStepAdjustment;\n\n if (adjustment.metricIntervalUpperBound !== undefined) {\n step.metricIntervalUpperBound = adjustment.metricIntervalUpperBound + threshold;\n }\n if (adjustment.metricIntervalLowerBound !== undefined) {\n step.metricIntervalLowerBound = adjustment.metricIntervalLowerBound + threshold;\n }\n\n return step;\n });\n\n return {\n estimatedInstanceWarmup: policy.estimatedInstanceWarmup ?? cooldown ?? 600,\n metricAggregationType: 'Average',\n stepAdjustments,\n };\n },\n\n buildSimplePolicy: (policy: IScalingPolicy): ISimplePolicyDescription => ({\n cooldown: policy.cooldown ?? 600,\n scalingAdjustment: Math.abs(policy.scalingAdjustment) ?? 1,\n }),\n\n buildNewCommand: (\n type: PolicyType,\n serverGroup: IAmazonServerGroup,\n policy: ITargetTrackingPolicy,\n ): IUpsertScalingPolicyCommand => {\n const command = {\n name: policy.policyName,\n adjustmentType: type === 'Step' ? policy.adjustmentType : null,\n cloudProvider: serverGroup.cloudProvider,\n credentials: serverGroup.account,\n provider: serverGroup.type,\n region: serverGroup.region,\n serverGroupName: serverGroup.name,\n } as IUpsertScalingPolicyCommand;\n\n if (type === 'Step') {\n command.alarm = ScalingPolicyCommandBuilder.buildAlarm(policy, serverGroup.region, serverGroup.name);\n command.minAdjustmentMagnitude = policy.minAdjustmentMagnitude ?? 1;\n\n if (policy.stepAdjustments?.length) {\n command.step = ScalingPolicyCommandBuilder.buildStepPolicy(policy, command.alarm.threshold, command.cooldown);\n } else {\n command.simple = ScalingPolicyCommandBuilder.buildSimplePolicy(policy);\n }\n }\n\n if (type === 'TargetTracking') {\n command.estimatedInstanceWarmup = policy.estimatedInstanceWarmup ?? 600;\n command.targetTrackingConfiguration = { ...policy.targetTrackingConfiguration };\n }\n\n return command;\n },\n\n prepareCommandForUpsert: (command: IUpsertScalingPolicyCommand, isRemove: boolean): IUpsertScalingPolicyCommand => {\n const commandToSubmit = cloneDeep(command);\n\n if (commandToSubmit.adjustmentType !== 'PercentChangeInCapacity') {\n delete commandToSubmit.minAdjustmentMagnitude;\n }\n\n if (commandToSubmit.step) {\n // adjust metricIntervalLowerBound/UpperBound for each step based on alarm threshold\n commandToSubmit.step.stepAdjustments.forEach((step) => {\n if (isRemove) {\n step.scalingAdjustment = 0 - step.scalingAdjustment;\n delete commandToSubmit.step.estimatedInstanceWarmup;\n }\n if (step.metricIntervalLowerBound !== undefined) {\n step.metricIntervalLowerBound -= commandToSubmit.alarm.threshold;\n }\n if (step.metricIntervalUpperBound !== undefined) {\n step.metricIntervalUpperBound -= commandToSubmit.alarm.threshold;\n }\n });\n } else {\n if (isRemove) {\n command.simple.scalingAdjustment = 0 - command.simple.scalingAdjustment;\n }\n }\n return commandToSubmit;\n },\n};\n","import * as React from 'react';\n\nimport type { Application, IModalComponentProps } from '@spinnaker/core';\nimport { TaskMonitorModal } from '@spinnaker/core';\n\nimport type { ITargetTrackingPolicyCommand, IUpsertScalingPolicyCommand } from '../ScalingPolicyWriter';\nimport { TargetMetricFields } from './TargetMetricFields';\nimport { TargetTrackingAdditionalSettings } from './TargetTrackingAdditionalSettings';\nimport type { IAmazonServerGroup, ITargetTrackingPolicy } from '../../../../domain';\nimport { ScalingPolicyCommandBuilder } from '../upsert/ScalingPolicyCommandBuilderService';\n\nexport interface IUpsertTargetTrackingModalProps extends IModalComponentProps {\n app: Application;\n policy: ITargetTrackingPolicy;\n serverGroup: IAmazonServerGroup;\n}\n\nexport const UpsertTargetTrackingModal = ({\n app,\n closeModal,\n dismissModal,\n policy,\n serverGroup,\n}: IUpsertTargetTrackingModalProps) => {\n const [isCustom, setIsCustom] = React.useState<boolean>(\n Boolean(policy.targetTrackingConfiguration?.customizedMetricSpecification),\n );\n\n const [command, setCommand] = React.useState<IUpsertScalingPolicyCommand>({} as IUpsertScalingPolicyCommand);\n React.useEffect(() => {\n const baseCommand = ScalingPolicyCommandBuilder.buildNewCommand('TargetTracking', serverGroup, policy);\n setCommand(baseCommand);\n }, []);\n\n const mode = policy.policyName ? 'Update' : 'Create';\n return (\n <TaskMonitorModal<IUpsertScalingPolicyCommand>\n closeModal={closeModal}\n dismissModal={dismissModal}\n title={`${mode} scaling policy`}\n application={app}\n description={`${mode} scaling policy for ${serverGroup.name}`}\n initialValues={command}\n mapValuesToTask={() => ({\n application: app,\n job: [\n {\n type: 'upsertScalingPolicy',\n ...command,\n },\n ],\n })}\n render={() => (\n <div className=\"modal-body\">\n <h4 className=\"section-heading\">Target Metric</h4>\n <TargetMetricFields\n allowDualMode={true}\n cloudwatch={false}\n command={command as ITargetTrackingPolicyCommand}\n isCustomMetric={isCustom}\n app={app}\n serverGroup={serverGroup}\n toggleMetricType={(t) => setIsCustom(t === 'custom')}\n updateCommand={setCommand}\n />\n <h4 className=\"section-heading\">Additional Settings</h4>\n <TargetTrackingAdditionalSettings\n command={command}\n cooldowns={false}\n policyName={policy.policyName}\n updateCommand={setCommand}\n />\n </div>\n )}\n />\n );\n};\n","import React from 'react';\nimport { Modal } from 'react-bootstrap';\n\nimport { HelpContentsRegistry, HelpField, ValidationMessage } from '@spinnaker/core';\n\nexport interface IPolicyTypeSelectionModalProps {\n showCallback: () => void;\n typeSelectedCallback: (type: string) => void;\n warnOnMinMaxCapacity?: boolean;\n}\n\nexport function PolicyTypeSelectionModal(props: IPolicyTypeSelectionModalProps) {\n const [typeSelection, setTypeSelection] = React.useState(null);\n\n const selectType = (e: React.MouseEvent<HTMLElement>): void => {\n setTypeSelection(e.currentTarget.id);\n };\n\n const confirmTypeSelection = (): void => {\n props.typeSelectedCallback(typeSelection);\n };\n\n const stepClass = typeSelection === 'step' ? 'card active' : 'card';\n const targetClass = typeSelection === 'targetTracking' ? 'card active' : 'card';\n const customHelpKey = 'aws.scalingPolicy.additionalHelp';\n const hasCustomHelpMessage = !!HelpContentsRegistry.getHelpField(customHelpKey);\n return (\n <Modal show={true} onHide={props.showCallback}>\n <Modal.Header closeButton={true}>\n <h3>Select a policy type</h3>\n </Modal.Header>\n <Modal.Body>\n <div className=\"card-choices\">\n <div className={targetClass} onClick={selectType} id=\"targetTracking\">\n <h3>Target Tracking</h3>\n <div>Continuously adjusts the size of the ASG to keep a specified metric at the target value</div>\n </div>\n <div className={stepClass} onClick={selectType} id=\"step\">\n <h3>Step</h3>\n <div>\n Rule-based scaling, with the ability to define different scaling amounts depending on the magnitude of the\n alarm breach\n </div>\n </div>\n </div>\n {hasCustomHelpMessage && (\n <ValidationMessage type=\"info\" message={<HelpField id={customHelpKey} expand={true} />} />\n )}\n {props.warnOnMinMaxCapacity && (\n <ValidationMessage\n type=\"warning\"\n message={\n <>\n <p>\n This server group's <em>min</em> and <em>max</em> capacity are identical, so scaling policies will\n have <b>no effect.</b>\n </p>\n <p>\n Scaling policies work by adjusting the server group's <em>desired</em> capacity to a value between the\n min and max.\n </p>\n </>\n }\n />\n )}\n </Modal.Body>\n <Modal.Footer>\n <button className=\"btn btn-default\" onClick={props.showCallback}>\n Cancel\n </button>\n <button className=\"btn btn-primary\" disabled={!typeSelection} onClick={confirmTypeSelection}>\n Next\n </button>\n </Modal.Footer>\n </Modal>\n );\n}\n","import { set } from 'lodash';\nimport * as React from 'react';\n\nimport { HelpField, NumberInput } from '@spinnaker/core';\n\nimport type { IUpsertScalingPolicyCommand } from '../ScalingPolicyWriter';\nimport './ScalingPolicyAdditionalSettings.less';\n\nexport interface IScalingPolicyAdditionalSettingsProps {\n command: IUpsertScalingPolicyCommand;\n isInstanceType: boolean;\n isNew: boolean;\n operator: string;\n updateCommand: (command: IUpsertScalingPolicyCommand) => void;\n}\n\nexport const ScalingPolicyAdditionalSettings = ({\n command,\n isInstanceType,\n isNew,\n operator,\n updateCommand,\n}: IScalingPolicyAdditionalSettingsProps) => {\n const setCommandField = (path: string, value: number) => {\n const newCommand = { ...command };\n set(newCommand, path, value);\n updateCommand(newCommand);\n };\n\n return (\n <div className=\"ScalingPolicyAdditionalSettings\">\n <h4 className=\"section-heading\">Additional Settings</h4>\n <div className=\"section-body section-additional-settings\">\n {!isNew && (\n <div className=\"row\">\n <div className=\"col-md-2 sm-label-right\">Policy Name</div>\n <div className=\"col-md-10 horizontal middle\">\n <span className=\"form-control-static select-placeholder\">{command.name}</span>\n </div>\n </div>\n )}\n {!isInstanceType && (\n <div className=\"row\">\n <div className=\"col-md-2 sm-label-right\">Adjustment Step</div>\n <div className=\"col-md-10 horizontal middle\">\n <span className=\"form-control-static select-placeholder\">\n {`${operator} instances in increments of at least `}\n </span>\n <NumberInput\n value={command.minAdjustmentMagnitude}\n onChange={(e) => setCommandField('minAdjustmentMagnitude', Number.parseInt(e.target.value))}\n inputClassName=\"sp-margin-xs-xaxis input-sm number-input-sm\"\n />\n <span className=\"input-label\"> instance(s) </span>\n </div>\n </div>\n )}\n {Boolean(command.simple) && (\n <div className=\"row\">\n <div className=\"col-md-2 sm-label-right\">Cooldown</div>\n <div className=\"col-md-10 horizontal middle\">\n <span className=\"form-control-static select-placeholder\"> Wait at least </span>\n <NumberInput\n value={command.simple?.cooldown}\n onChange={(e) => setCommandField('simple.cooldown', Number.parseInt(e.target.value))}\n inputClassName=\"sp-margin-xs-xaxis input-sm number-input-sm\"\n />\n <span className=\"input-label\"> seconds before another scaling event </span>\n </div>\n </div>\n )}\n {Boolean(command.step?.estimatedInstanceWarmup) && operator !== 'Remove' && (\n <div className=\"row\">\n <div className=\"col-md-2 sm-label-right\">Warmup</div>\n <div className=\"col-md-10 horizontal middle\">\n <span className=\"form-control-static select-placeholder\">Instances need</span>\n <NumberInput\n value={command.step.estimatedInstanceWarmup}\n onChange={(e) => setCommandField('step.estimatedInstanceWarmup', Number.parseInt(e.target.value))}\n inputClassName=\"sp-margin-xs-xaxis input-sm number-input-sm\"\n />\n <span className=\"input-label\"> seconds to warm up after each step </span>\n </div>\n </div>\n )}\n {Boolean(command.step?.cooldown) && operator !== 'Remove' && (\n <div className=\"row\">\n <div className=\"col-md-2 sm-label-right\">\n <span className=\"sp-margin-xs-right\">Cooldown</span>\n <HelpField id={`${command.cloudProvider || command.provider}.autoscaling.cooldown`} />\n </div>\n <div className=\"col-md-10 horizontal middle\">\n <NumberInput\n value={command.step?.cooldown}\n onChange={(e) => setCommandField('step.cooldown', Number.parseInt(e.target.value))}\n inputClassName=\"sp-margin-xs-xaxis input-sm number-input-sm\"\n />\n <span className=\"input-label\"> seconds </span>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n};\n","import * as React from 'react';\n\nimport type { ICloudMetricStatistics } from '@spinnaker/core';\nimport { NumberInput, ReactSelectInput, usePrevious } from '@spinnaker/core';\n\nimport { MetricSelector } from './MetricSelector';\nimport { MetricAlarmChart } from '../../chart/MetricAlarmChart';\nimport type { IAmazonServerGroup, IScalingPolicyAlarm, IStepAdjustment } from '../../../../../domain';\n\nimport './AlarmConfigurer.less';\n\nexport interface IAlarmConfigurerProps {\n alarm: IScalingPolicyAlarm;\n multipleAlarms: boolean;\n serverGroup: IAmazonServerGroup;\n stepAdjustments: IStepAdjustment[];\n stepsChanged: (steps: IStepAdjustment[]) => void;\n updateAlarm: (alarm: IScalingPolicyAlarm) => void;\n}\n\nconst STATISTICS = ['Average', 'Maximum', 'Minimum', 'SampleCount', 'Sum'];\n\nexport const COMPARATORS = [\n { label: '>=', value: 'GreaterThanOrEqualToThreshold' },\n { label: '>', value: 'GreaterThanThreshold' },\n { label: '<=', value: 'LessThanOrEqualToThreshold' },\n { label: '<', value: 'LessThanThreshold' },\n];\n\nconst PERIODS = [\n { label: '1 minute', value: 60 },\n { label: '5 minutes', value: 60 * 5 },\n { label: '15 minutes', value: 60 * 15 },\n { label: '1 hour', value: 60 * 60 },\n { label: '4 hours', value: 60 * 60 * 4 },\n { label: '1 day', value: 60 * 60 * 24 },\n];\n\nexport const AlarmConfigurer = ({\n alarm,\n multipleAlarms,\n serverGroup,\n stepAdjustments,\n stepsChanged,\n updateAlarm,\n}: IAlarmConfigurerProps) => {\n const comparatorBound = alarm.comparisonOperator?.indexOf('Greater') === 0 ? 'max' : 'min';\n const [unit, setUnit] = React.useState<string>(alarm?.unit);\n const prevComparator = usePrevious(comparatorBound);\n\n React.useEffect(() => {\n if (stepAdjustments && prevComparator !== undefined) {\n const source = comparatorBound === 'max' ? 'metricIntervalLowerBound' : 'metricIntervalUpperBound';\n const newStep: IStepAdjustment = {\n scalingAdjustment: 1,\n [source]: alarm.threshold,\n };\n stepsChanged([newStep]);\n }\n }, [comparatorBound]);\n\n React.useEffect(() => {\n const source = comparatorBound === 'max' ? 'metricIntervalLowerBound' : 'metricIntervalUpperBound';\n if (stepAdjustments?.length) {\n const updatedStepAdjustments = [...stepAdjustments];\n // Always set the first step at the alarm threshold\n updatedStepAdjustments[0][source] = alarm.threshold;\n stepsChanged(updatedStepAdjustments);\n }\n }, [alarm.threshold]);\n\n const onChartLoaded = (stats: ICloudMetricStatistics) => setUnit(stats.unit);\n\n const onAlarmChange = (key: string, value: any) => {\n const newAlarm = {\n ...alarm,\n [key]: value,\n };\n updateAlarm(newAlarm);\n };\n\n const onMetricChange = (newAlarm: IScalingPolicyAlarm) => {\n updateAlarm(newAlarm);\n };\n\n return (\n <div className=\"AlarmConfigurer\">\n {multipleAlarms && (\n <div className=\"row\">\n <div className=\"col-md-12\">\n <div className=\"alert alert-warning\">\n <p>\n <i className=\"fa fa-exclamation-triangle\"></i> This scaling policy is configured with multiple alarms.\n You are only editing the first alarm.\n </p>\n <p>To edit or remove the additional alarms, you will need to use the AWS console.</p>\n </div>\n </div>\n </div>\n )}\n {alarm.alarmActionArns?.length > 1 && (\n <div className=\"row\">\n <div className=\"col-md-12\">\n <div className=\"alert alert-warning\">\n <p>\n <i className=\"fa fa-exclamation-triangle\"></i> This alarm is used in multiple scaling policies. Any\n changes here will affect those other scaling policies.\n </p>\n </div>\n </div>\n </div>\n )}\n <div className=\"row sp-margin-s-yaxis\">\n <div className=\"col-md-2 sm-label-right\">Whenever</div>\n <div className=\"col-md-10 horizontal\">\n <ReactSelectInput\n value={alarm.statistic}\n onChange={(e) => onAlarmChange('statistic', e.target.value)}\n stringOptions={STATISTICS}\n clearable={false}\n inputClassName=\"sp-margin-xs-right configurer-field-lg\"\n />\n <span className=\"input-label sp-margin-xs-right sp-margin-s-top\"> of </span>\n <MetricSelector alarm={alarm} serverGroup={serverGroup} updateAlarm={onMetricChange} />\n </div>\n </div>\n <div className=\"row sp-margin-s-yaxis\">\n <div className=\"col-md-2 sm-label-right\">is</div>\n <div className=\"col-md-10 horizontal middle\">\n <ReactSelectInput\n value={alarm.comparisonOperator}\n onChange={(e) => onAlarmChange('comparisonOperator', e.target.value)}\n options={COMPARATORS}\n clearable={false}\n inputClassName=\"sp-margin-s-right configurer-field-small\"\n />\n <div className=\"sp-margin-xl-left\">\n <NumberInput\n value={alarm.threshold}\n onChange={(e) => onAlarmChange('threshold', Number.parseInt(e.target.value))}\n inputClassName=\"sp-margin-xs-right configurer-field-lg\"\n />\n </div>\n <span className=\"input-label\">{unit}</span>\n </div>\n </div>\n <div className=\"row sp-margin-s-yaxis\">\n <div className=\"col-md-2 sm-label-right\">for at least</div>\n <div className=\"col-md-10 horizontal middle\">\n <NumberInput\n value={alarm.evaluationPeriods}\n onChange={(e) => onAlarmChange('evaluationPeriods', Number.parseInt(e.target.value))}\n inputClassName=\"configurer-field-med number-input-field\"\n />\n <span className=\"input-label sp-margin-s-xaxis\"> consecutive period(s) of </span>\n <ReactSelectInput\n value={alarm.period}\n onChange={(e) => onAlarmChange('period', e.target.value)}\n options={PERIODS}\n clearable={false}\n inputClassName=\"sp-margin-xs-right configurer-field-lg\"\n />\n </div>\n </div>\n <div className=\"row sp-margin-s-yaxis\">\n <div className=\"col-md-10 col-md-offset-1\">\n {alarm && (\n <div>\n <MetricAlarmChart alarm={alarm} serverGroup={serverGroup} onChartLoaded={onChartLoaded} />\n </div>\n )}\n </div>\n </div>\n </div>\n );\n};\n","import * as React from 'react';\n\nimport { NumberInput, ReactSelectInput } from '@spinnaker/core';\n\nimport './SimplePolicyAction.less';\n\ntype Operator = 'Add' | 'Remove' | 'Set to';\ntype AdjustmentTypeView = 'instances' | 'percent of group';\n\nexport interface ISimplePolicyActionProps {\n adjustmentType: AdjustmentTypeView;\n adjustmentTypeChanged: (action: Operator, type: AdjustmentTypeView) => void;\n operator: Operator;\n scalingAdjustment: number;\n updateScalingAdjustment: (adjustment: number) => void;\n}\n\nexport const SimplePolicyAction = ({\n adjustmentType,\n adjustmentTypeChanged,\n operator,\n scalingAdjustment,\n updateScalingAdjustment,\n}: ISimplePolicyActionProps) => {\n const availableActions = ['Add', 'Remove', 'Set to'];\n\n const adjustmentTypeOptions = operator === 'Set to' ? ['instances'] : ['instances', 'percent of group'];\n const onActionChange = (val: Operator) => {\n adjustmentTypeChanged(val, adjustmentType);\n };\n\n const [adjustmentTypeView, setAdjustmentTypeView] = React.useState<AdjustmentTypeView>(adjustmentType);\n const onAdjustmentTypeChange = (type: AdjustmentTypeView) => {\n setAdjustmentTypeView(type);\n adjustmentTypeChanged(operator, type);\n };\n\n const [adjustment, setAdjustment] = React.useState<number>(scalingAdjustment);\n const onScalingAdjustmentChange = (adj: number) => {\n setAdjustment(adj);\n updateScalingAdjustment(adj);\n };\n\n return (\n <div className=\"SimplePolicyAction row\">\n <div className=\"col-md-10 col-md-offset-1 horizontal middle\">\n <ReactSelectInput\n value={operator}\n stringOptions={availableActions}\n onChange={(e) => onActionChange(e.target.value)}\n clearable={false}\n inputClassName=\"action-input\"\n />\n <NumberInput\n value={adjustment}\n min={1}\n onChange={(e) => onScalingAdjustmentChange(Number.parseInt(e.target.value))}\n inputClassName=\"action-input\"\n />\n <ReactSelectInput\n value={adjustmentTypeView}\n stringOptions={adjustmentTypeOptions}\n onChange={(e) => onAdjustmentTypeChange(e.target.value)}\n clearable={false}\n inputClassName=\"adjustment-type-input\"\n />\n </div>\n </div>\n );\n};\n","import * as React from 'react';\n\nimport { NumberInput, ReactSelectInput } from '@spinnaker/core';\n\nimport type { IScalingPolicyAlarm, IStepAdjustment } from '../../../../../domain';\n\nimport './StepPolicyAction.less';\n\nexport type Operator = 'Add' | 'Remove' | 'Set to';\nexport type AdjustmentTypeView = 'instances' | 'percent of group';\n\nexport interface IStepPolicyActionProps {\n adjustmentType: AdjustmentTypeView;\n adjustmentTypeChanged: (action: Operator, type: AdjustmentTypeView) => void;\n alarm: IScalingPolicyAlarm;\n isMin: boolean;\n operator: Operator;\n step: { stepAdjustments: IStepAdjustment[] };\n stepAdjustments?: IStepAdjustment[];\n stepsChanged: (steps: IStepAdjustment[]) => void;\n}\n\nexport const StepPolicyAction = ({\n adjustmentType,\n adjustmentTypeChanged,\n alarm,\n isMin,\n operator,\n step,\n stepAdjustments,\n stepsChanged,\n}: IStepPolicyActionProps) => {\n const hasEqualTo = alarm?.comparisonOperator.includes('Equal');\n const availableActions = ['Add', 'Remove', 'Set to'];\n\n const adjustmentTypeOptions = operator === 'Set to' ? ['instances'] : ['instances', 'percent of group'];\n const onActionChange = (val: Operator) => {\n adjustmentTypeChanged(val, adjustmentType);\n };\n\n const onAdjustmentTypeChange = (type: AdjustmentTypeView) => {\n adjustmentTypeChanged(operator, type);\n };\n\n const steps = step?.stepAdjustments || stepAdjustments;\n const addStep = () => {\n const newStep = { scalingAdjustment: 1 } as IStepAdjustment;\n const newSteps = [...steps, newStep];\n stepsChanged(newSteps);\n };\n const removeStep = (index: number) => {\n const newSteps = steps.filter((_s, i) => i !== index);\n stepsChanged(newSteps);\n };\n const updateStep = (updatedStep: IStepAdjustment, index: number) => {\n const newSteps = [...steps];\n newSteps[index] = updatedStep;\n stepsChanged(newSteps);\n };\n\n return (\n <div className=\"StepPolicyAction row\">\n {steps?.map((step: IStepAdjustment, index: number) => (\n <div key={`step-adjustment-${index}`} className=\"step-policy-row col-md-10 col-md-offset-1 horizontal middle\">\n {Boolean(index) ? (\n <span className=\"action-input sp-margin-xs-left\">{operator}</span>\n ) : (\n <ReactSelectInput\n value={operator}\n stringOptions={availableActions}\n onChange={(e) => onActionChange(e.target.value)}\n clearable={false}\n inputClassName=\"action-input sp-margin-xs-right\"\n />\n )}\n <NumberInput\n value={step.scalingAdjustment}\n min={1}\n onChange={(e) => updateStep({ ...step, scalingAdjustment: Number.parseInt(e.target.value) }, index)}\n inputClassName=\"action-input\"\n />\n {Boolean(index) ? (\n <span className=\"sp-margin-xs-left\">{adjustmentType}</span>\n ) : (\n <ReactSelectInput\n value={adjustmentType}\n stringOptions={adjustmentTypeOptions}\n onChange={(e) => onAdjustmentTypeChange(e.target.value)}\n clearable={false}\n inputClassName=\"adjustment-type-input sp-margin-xs-left\"\n />\n )}\n <span className=\"sp-margin-xs-xaxis\">\n {' '}\n when <b>{alarm?.metricName}</b> is{' '}\n </span>\n {index === steps.length - 1 && (\n <span>{` ${isMin ? 'less' : 'greater'} than${!Boolean(index) || hasEqualTo ? ' or equal to' : ''} ${\n isMin ? step.metricIntervalUpperBound || '' : step.metricIntervalLowerBound || ''\n } `}</span>\n )}\n {index < steps.length - 1 && (\n <>\n <span className=\"sp-margin-xs-xaxis\">between</span>\n {isMin ? (\n <NumberInput\n value={step.metricIntervalLowerBound}\n max={step.metricIntervalUpperBound}\n step={0.1}\n onChange={(e) =>\n updateStep({ ...step, metricIntervalLowerBound: Number.parseFloat(e.target.value) }, index)\n }\n inputClassName=\"action-input\"\n />\n ) : (\n <span>{step.metricIntervalLowerBound}</span>\n )}\n <span className=\"sp-margin-xs-xaxis\">and</span>\n {isMin ? (\n <span>{step.metricIntervalUpperBound}</span>\n ) : (\n <NumberInput\n value={step.metricIntervalUpperBound}\n min={step.metricIntervalLowerBound}\n step={0.1}\n onChange={(e) =>\n updateStep({ ...step, metricIntervalUpperBound: Number.parseFloat(e.target.value) }, index)\n }\n inputClassName=\"action-input\"\n />\n )}\n </>\n )}\n {Boolean(index) && (\n <a\n className=\"glyphicon glyphicon-trash clickable sp-margin-xs-xaxis remove-step-action-icon\"\n onClick={() => removeStep(index)}\n />\n )}\n </div>\n ))}\n <div className=\"row sp-margin-s\">\n <div className=\"col-md-10 col-md-offset-1\">\n <button type=\"button\" className=\"btn btn-block btn-sm add-new\" onClick={addStep}>\n <span className=\"glyphicon glyphicon-plus-sign\"></span>\n Add step\n </button>\n </div>\n </div>\n <div className=\"row sp-margin-s-xaxis\">\n <div className=\"col-md-10 col-md-offset-1\">\n <a\n href=\"http://docs.aws.amazon.com/autoscaling/latest/userguide/as-scale-based-on-demand.html#as-scaling-steps\"\n target=\"_blank\"\n >\n <i className=\"far fa-file-alt sp-margin-xs-right\" />\n Documentation\n </a>\n </div>\n </div>\n </div>\n );\n};\n","import { cloneDeep } from 'lodash';\nimport * as React from 'react';\n\nimport type { Application, IModalComponentProps } from '@spinnaker/core';\nimport { TaskMonitorModal } from '@spinnaker/core';\n\nimport { ScalingPolicyAdditionalSettings } from './ScalingPolicyAdditionalSettings';\nimport { ScalingPolicyCommandBuilder } from './ScalingPolicyCommandBuilderService';\nimport type { IStepPolicyDescription, IUpsertScalingPolicyCommand } from '../ScalingPolicyWriter';\nimport { AlarmConfigurer } from './alarm/AlarmConfigurer';\nimport type { IAmazonServerGroup, IScalingPolicy, IStepAdjustment, ITargetTrackingPolicy } from '../../../../domain';\nimport { SimplePolicyAction } from './simple/SimplePolicyAction';\nimport type { AdjustmentTypeView, Operator } from './step/StepPolicyAction';\nimport { StepPolicyAction } from './step/StepPolicyAction';\n\nexport interface IUpsertScalingPolicyModalProps extends IModalComponentProps {\n app: Application;\n policy: IScalingPolicy;\n serverGroup: IAmazonServerGroup;\n}\n\nexport const UpsertScalingPolicyModal = ({\n app,\n closeModal,\n dismissModal,\n policy,\n serverGroup,\n}: IUpsertScalingPolicyModalProps) => {\n const modalProps = { closeModal, dismissModal };\n const [command, setCommand] = React.useState<IUpsertScalingPolicyCommand>({} as IUpsertScalingPolicyCommand);\n React.useEffect(() => {\n const baseCommand = ScalingPolicyCommandBuilder.buildNewCommand(\n 'Step',\n serverGroup,\n policy as ITargetTrackingPolicy,\n );\n setCommand(baseCommand);\n }, []);\n\n const adjustmentBasis = policy.stepAdjustments?.length\n ? policy.stepAdjustments[0].scalingAdjustment\n : policy.scalingAdjustment;\n const [action, setAction] = React.useState<Operator>(\n command.adjustmentType === 'ExactCapacity' ? 'Set to' : adjustmentBasis > 0 ? 'Add' : 'Remove',\n );\n const adjustmentTypeView =\n command.adjustmentType === 'ExactCapacity' || command.adjustmentType === 'ChangeInCapacity'\n ? 'instances'\n : 'percent of group';\n\n const isStep = command.step;\n const mode = !policy.policyARN ? 'Create' : 'Edit';\n const comparatorBound = command?.alarm?.comparisonOperator?.indexOf('Greater') === 0 ? 'max' : 'min';\n\n const boundsChanged = (step: IStepPolicyDescription) => {\n const source = comparatorBound === 'min' ? 'metricIntervalLowerBound' : 'metricIntervalUpperBound';\n const target = source === 'metricIntervalLowerBound' ? 'metricIntervalUpperBound' : 'metricIntervalLowerBound';\n\n const adjustments = step.stepAdjustments;\n (adjustments || []).forEach((a, index) => {\n if (adjustments.length > index + 1) {\n adjustments[index + 1][target] = a[source];\n }\n });\n // Remove the source boundary from the last step\n delete adjustments[adjustments.length - 1][source];\n };\n\n const scalingAdjustmentChanged = (adjustment: number) => {\n const newCommand = cloneDeep(command);\n newCommand.simplescalingAdjustment = adjustment;\n setCommand(newCommand);\n };\n\n const stepsChanged = (newSteps: IStepAdjustment[]) => {\n const newCommand = cloneDeep(command);\n newCommand.step.stepAdjustments = newSteps;\n boundsChanged(newCommand.step);\n setCommand(newCommand);\n };\n\n const adjustmentTypeChanged = (action: Operator, type: AdjustmentTypeView) => {\n setAction(action);\n\n const newType =\n type !== 'instances' ? 'PercentChangeInCapacity' : action === 'Set to' ? 'ExactCapacity' : 'ChangeInCapacity';\n setCommand({\n ...command,\n adjustmentType: newType,\n });\n };\n\n const toggleMode = () => {\n const updatedCommand = cloneDeep(command);\n const cooldownOrWarmup = command.step ? command.step.estimatedInstanceWarmup : command.simple.cooldown;\n\n if (command.step) {\n delete updatedCommand.step;\n updatedCommand.simple = ScalingPolicyCommandBuilder.buildSimplePolicy({\n cooldown: cooldownOrWarmup,\n } as IScalingPolicy);\n } else {\n const stepAdjustments = [\n {\n scalingAdjustment: command.simple.scalingAdjustment,\n },\n ] as IStepAdjustment[];\n if (comparatorBound === 'min') {\n stepAdjustments[0].metricIntervalUpperBound = 0;\n } else {\n stepAdjustments[0].metricIntervalLowerBound = 0;\n }\n const stepPolicy = {\n estimatedInstanceWarmup: cooldownOrWarmup,\n stepAdjustments: stepAdjustments,\n };\n delete updatedCommand.simple;\n updatedCommand.step = ScalingPolicyCommandBuilder.buildStepPolicy(\n stepPolicy as IScalingPolicy,\n updatedCommand.alarm.threshold,\n cooldownOrWarmup,\n );\n\n boundsChanged(updatedCommand.step);\n }\n\n setCommand(updatedCommand);\n };\n\n return (\n <TaskMonitorModal<IUpsertScalingPolicyCommand>\n {...modalProps}\n title={`${mode} scaling policy`}\n application={app}\n description={`${mode} scaling policy for ${serverGroup.name}`}\n initialValues={command}\n mapValuesToTask={() => {\n const preppedValues = ScalingPolicyCommandBuilder.prepareCommandForUpsert(command, action === 'Remove');\n return {\n application: app,\n job: [\n {\n type: preppedValues.type || 'upsertScalingPolicy',\n ...preppedValues,\n },\n ],\n };\n }}\n render={() => (\n <div>\n <h4 className=\"section-heading\">Conditions</h4>\n <div className=\"section-body\">\n <AlarmConfigurer\n alarm={command.alarm}\n multipleAlarms={Boolean(policy?.alarms?.length > 1)}\n serverGroup={serverGroup}\n stepAdjustments={command.step.stepAdjustments}\n stepsChanged={stepsChanged}\n updateAlarm={(alarm) => setCommand({ ...command, alarm } as IUpsertScalingPolicyCommand)}\n />\n </div>\n <h4 className=\"section-heading\">Actions</h4>\n <div className=\"section-body\">\n {!command.alarm?.metricName && <h4 className=\"text-center\">Select a metric</h4>}\n {command.alarm?.metricName && !isStep && (\n <div>\n <div className=\"row\">\n <div className=\"col-md-10 col-md-offset-1\">\n <p>\n This is a simple scaling policy. To declare different actions based on the magnitude of the alarm,\n <b>\n switch to a\n <a className=\"clickable sp-margin-xs-l\" onClick={toggleMode}>\n step policy\n </a>\n .\n </b>\n </p>\n </div>\n </div>\n <SimplePolicyAction\n adjustmentType={adjustmentTypeView}\n adjustmentTypeChanged={adjustmentTypeChanged}\n operator={action}\n scalingAdjustment={command.simple?.scalingAdjustment}\n updateScalingAdjustment={scalingAdjustmentChanged}\n />\n </div>\n )}\n {command.alarm?.metricName && isStep && (\n <StepPolicyAction\n adjustmentType={adjustmentTypeView}\n adjustmentTypeChanged={adjustmentTypeChanged}\n alarm={command.alarm}\n isMin={comparatorBound === 'min'}\n operator={action}\n step={command.step}\n stepsChanged={stepsChanged}\n />\n )}\n </div>\n <ScalingPolicyAdditionalSettings\n command={command}\n isInstanceType={adjustmentTypeView === 'instances'}\n isNew={Boolean(!policy.policyARN)}\n operator={action}\n updateCommand={setCommand}\n />\n </div>\n )}\n />\n );\n};\n","import React from 'react';\n\nimport type { Application } from '@spinnaker/core';\nimport { ReactModal } from '@spinnaker/core';\nimport type { IAmazonServerGroupView } from '../../../domain';\nimport { AwsReactInjector } from '../../../reactShims';\n\nimport type { IUpsertTargetTrackingModalProps } from './targetTracking/UpsertTargetTrackingModal';\nimport { UpsertTargetTrackingModal } from './targetTracking/UpsertTargetTrackingModal';\nimport { PolicyTypeSelectionModal } from './upsert/PolicyTypeSelectionModal';\nimport type { IUpsertScalingPolicyModalProps } from './upsert/UpsertScalingPolicyModal';\nimport { UpsertScalingPolicyModal } from './upsert/UpsertScalingPolicyModal';\n\nexport interface ICreateScalingPolicyButtonProps {\n application: Application;\n serverGroup: IAmazonServerGroupView;\n}\n\nexport interface ICreateScalingPolicyButtonState {\n showSelection: boolean;\n showModal: boolean;\n typeSelection: string;\n}\n\nexport class CreateScalingPolicyButton extends React.Component<\n ICreateScalingPolicyButtonProps,\n ICreateScalingPolicyButtonState\n> {\n constructor(props: ICreateScalingPolicyButtonProps) {\n super(props);\n this.state = {\n showSelection: false,\n showModal: false,\n typeSelection: null,\n };\n }\n\n public handleClick = (): void => {\n this.setState({ showSelection: true });\n };\n\n public createStepPolicy(): void {\n const { serverGroup, application } = this.props;\n\n const upsertProps = {\n app: application,\n policy: AwsReactInjector.awsServerGroupTransformer.constructNewStepScalingPolicyTemplate(serverGroup),\n serverGroup,\n } as IUpsertScalingPolicyModalProps;\n const modalProps = { dialogClassName: 'wizard-modal modal-lg' };\n ReactModal.show(UpsertScalingPolicyModal, upsertProps, modalProps);\n }\n\n public createTargetTrackingPolicy(): void {\n const { serverGroup, application } = this.props;\n\n const upsertProps = {\n app: application,\n policy: AwsReactInjector.awsServerGroupTransformer.constructNewTargetTrackingPolicyTemplate(),\n serverGroup,\n } as IUpsertTargetTrackingModalProps;\n const modalProps = { dialogClassName: 'wizard-modal modal-lg' };\n ReactModal.show(UpsertTargetTrackingModal, upsertProps, modalProps);\n }\n\n public typeSelected = (typeSelection: string): void => {\n this.setState({ typeSelection, showSelection: false, showModal: true });\n if (typeSelection === 'step') {\n this.createStepPolicy();\n }\n if (typeSelection === 'targetTracking') {\n this.createTargetTrackingPolicy();\n }\n };\n\n public showModalCallback = (): void => {\n this.setState({ showSelection: false, showModal: false, typeSelection: null });\n };\n\n public render() {\n const { min, max } = this.props.serverGroup.capacity;\n return (\n <div>\n <a className=\"clickable\" onClick={this.handleClick}>\n Create new scaling policy\n </a>\n {this.state.showSelection && (\n <PolicyTypeSelectionModal\n warnOnMinMaxCapacity={min === max}\n typeSelectedCallback={this.typeSelected}\n showCallback={this.showModalCallback}\n />\n )}\n </div>\n );\n }\n}\n","import type { Application, IJob, IMetricAlarmDimension, IServerGroup, ITask } from '@spinnaker/core';\nimport { TaskExecutor } from '@spinnaker/core';\nimport type {\n AlarmComparisonOperator,\n AlarmStatisticType,\n IScalingPolicy,\n IStepAdjustment,\n ITargetTrackingConfiguration,\n MetricAggregationType,\n ScalingPolicyAdjustmentType,\n StandardUnitType,\n} from '../../../domain';\n\nexport interface IUpsertScalingPolicyCommand extends IJob {\n type?: string; // Orca/Clouddriver operation type\n cloudProvider: string;\n credentials: string;\n region: string;\n serverGroupName: string;\n adjustmentType: ScalingPolicyAdjustmentType;\n name?: string;\n minAdjustmentMagnitude?: number;\n alarm?: IUpsertAlarmDescription;\n simple?: ISimplePolicyDescription;\n step?: IStepPolicyDescription;\n}\n\nexport interface ITargetTrackingPolicyCommand extends IUpsertScalingPolicyCommand {\n estimatedInstanceWarmup: number;\n targetTrackingConfiguration: ITargetTrackingConfiguration;\n}\n\nexport interface ISimplePolicyDescription {\n cooldown: number;\n scalingAdjustment: number;\n}\n\nexport interface IStepPolicyDescription {\n cooldown?: number;\n stepAdjustments: IStepAdjustment[];\n estimatedInstanceWarmup: number;\n metricAggregationType: MetricAggregationType;\n}\n\nexport interface IConfigurableMetric {\n namespace: string;\n metricName: string;\n dimensions: IMetricAlarmDimension[];\n}\n\nexport interface IUpsertAlarmDescription extends IConfigurableMetric {\n name: string;\n asgName: string;\n region: string;\n alarmDescription: string;\n comparisonOperator: AlarmComparisonOperator;\n evaluationPeriods: number;\n period: number;\n threshold: number;\n statistic: AlarmStatisticType;\n unit: StandardUnitType;\n disableEditingDimensions?: boolean;\n actionsEnabled?: boolean;\n alarmActionArns: string[];\n insufficientDataActionArns: string[];\n okActionArns: string[];\n}\n\nexport class ScalingPolicyWriter {\n public static upsertScalingPolicy(\n application: Application,\n command: IUpsertScalingPolicyCommand,\n ): PromiseLike<ITask> {\n command.type = command.type || 'upsertScalingPolicy';\n return TaskExecutor.executeTask({\n application,\n description: 'Upsert scaling policy ' + (command.name || command.serverGroupName),\n job: [command],\n });\n }\n\n public static deleteScalingPolicy(\n application: Application,\n serverGroup: IServerGroup,\n scalingPolicy: IScalingPolicy,\n ): PromiseLike<ITask> {\n return TaskExecutor.executeTask({\n application,\n description: 'Delete scaling policy ' + scalingPolicy.policyName,\n job: [\n {\n type: 'deleteScalingPolicy',\n cloudProvider: 'aws',\n credentials: serverGroup.account,\n region: serverGroup.region,\n policyName: scalingPolicy.policyName,\n serverGroupName: serverGroup.name,\n },\n ],\n });\n }\n}\n","import * as React from 'react';\nimport type { IScalingPolicyAlarmView } from '../../../../domain';\n\nexport interface IAlarmSummaryProps {\n alarm: IScalingPolicyAlarmView;\n}\n\nexport const comparatorMap = {\n GreaterThanOrEqualToThreshold: '>=',\n GreaterThanThreshold: '>',\n LessThanOrEqualToThreshold: '<=',\n LessThanThreshold: '<',\n};\n\nexport const AlarmSummary = ({ alarm }: IAlarmSummaryProps) => (\n <div>\n <div>\n <b>Whenever</b>\n {` ${alarm.statistic} of ${alarm.metricName}`}\n </div>\n <div>\n <b>for at least</b>\n {` ${alarm.evaluationPeriods} consecutive periods of ${alarm.period} seconds`}\n </div>\n </div>\n);\n","import * as React from 'react';\n\nimport { LabeledValue, LabeledValueList } from '@spinnaker/core';\n\nimport { MetricAlarmChart } from '../chart/MetricAlarmChart';\nimport type {\n IAmazonServerGroup,\n IScalingPolicyAlarmView,\n IScalingPolicyView,\n IStepAdjustmentView,\n} from '../../../../domain';\nimport { comparatorMap } from '../popover/AlarmSummary';\n\nexport interface IStepPolicyPopoverContentProps {\n policy: IScalingPolicyView;\n serverGroup: IAmazonServerGroup;\n}\n\nexport const StepPolicyPopoverContent = ({ policy, serverGroup }: IStepPolicyPopoverContentProps) => {\n const { adjustmentType, alarms, cooldown, estimatedInstanceWarmup, minAdjustmentMagnitude, stepAdjustments } = policy;\n const showWait = cooldown ? true : stepAdjustments?.[0]?.operator === 'decrease';\n const alarm = alarms[0] || ({} as IScalingPolicyAlarmView);\n const isGreater = alarm?.comparisonOperator.includes('Greater');\n\n const getAdjustmentTypeString = (step: IScalingPolicyView | IStepAdjustmentView): string => {\n if (adjustmentType === 'ExactCapacity') {\n return `set capacity to ${step.scalingAdjustment} instance${step.scalingAdjustment > 1 ? 's' : ''}`;\n }\n\n return `${step.operator} capacity by ${step.absAdjustment}${\n adjustmentType === 'PercentChangeInCapacity' ? '%' : ' instance'\n }${adjustmentType === 'ChangeInCapacity' && step.absAdjustment > 1 ? 's' : ''}`;\n };\n\n const getBoundaryStr = (step: IStepAdjustmentView) => {\n const middleBounds =\n step.metricIntervalLowerBound !== undefined && step.metricIntervalUpperBound !== undefined\n ? `is between ${alarm.threshold + step.metricIntervalLowerBound} and ${\n alarm.threshold + step.metricIntervalUpperBound\n } `\n : '';\n\n const sourceBound = isGreater ? step.metricIntervalLowerBound : step.metricIntervalUpperBound;\n const finalBound = `is ${isGreater ? 'greater' : 'less'} than ${alarm.threshold + sourceBound}`;\n\n return `if ${alarm.metricName} ${middleBounds}${finalBound}`;\n };\n\n return (\n <div>\n <LabeledValueList className=\"dl-horizontal dl-narrow\">\n <LabeledValue\n label=\"Whenever\"\n value={`${alarm.statistic} of ${alarm.metricName} is ${comparatorMap[alarm.comparisonOperator]} ${\n alarm.threshold\n }`}\n />\n <LabeledValue\n label=\"for at least\"\n value={`${alarm.evaluationPeriods} consecutive periods of ${alarm.period} seconds`}\n />\n {Boolean(stepAdjustments?.length) && (\n <LabeledValue\n label=\"then\"\n value={stepAdjustments.map((sa, index) => (\n <div key={`step-adjustment-boundary-${index}`}>\n {stepAdjustments.length > 1 && <span>{getBoundaryStr(sa)}</span>}\n <span>{getAdjustmentTypeString(sa)}</span>\n </div>\n ))}\n />\n )}\n {!Boolean(stepAdjustments?.length) && <LabeledValue label=\"then\" value={getAdjustmentTypeString(policy)} />}\n {Boolean(minAdjustmentMagnitude) && (\n <LabeledValue\n label=\"in\"\n value={`increments of at least ${minAdjustmentMagnitude} instance${minAdjustmentMagnitude > 1 ? 's' : ''}`}\n />\n )}\n {Boolean(showWait) && (\n <LabeledValue label=\"wait\" value={`${cooldown} seconds before allowing another scaling activity.`} />\n )}\n {Boolean(estimatedInstanceWarmup) && (\n <LabeledValue label=\"wait\" value={`${estimatedInstanceWarmup} seconds to warm up after each step.`} />\n )}\n </LabeledValueList>\n <MetricAlarmChart alarm={alarm} serverGroup={serverGroup} />\n </div>\n );\n};\n","import * as React from 'react';\n\nimport {\n CloudProviderRegistry,\n ConfirmationModalService,\n HoverablePopover,\n ReactModal,\n robotToHuman,\n TaskExecutor,\n} from '@spinnaker/core';\nimport type { Application, IServerGroup } from '@spinnaker/core';\n\nimport type { IAmazonServerGroup, IScalingPolicyView } from '../../../domain';\nimport { AlarmSummary } from './popover/AlarmSummary';\nimport { StepPolicyPopoverContent } from './popover/StepPolicyPopoverContent';\n\nimport './StepPolicySummary.less';\n\nexport interface IStepPolicySummaryProps {\n application: Application;\n policy: IScalingPolicyView;\n serverGroup: IServerGroup;\n}\n\ninterface IDeletePolicyJob {\n type: string;\n cloudProvider: string;\n credentials: string;\n region: string;\n policyName?: string;\n scalingPolicyID?: string;\n serverGroupName: string;\n}\n\nexport const StepPolicySummary = ({ application, policy, serverGroup }: IStepPolicySummaryProps) => {\n const provider = serverGroup.type || serverGroup.cloudProvider || 'aws';\n const providerConfig = CloudProviderRegistry.getValue(provider, 'serverGroup');\n const policyTitle = provider === 'aws' ? policy.policyName : policy.id;\n\n const UpsertModalComponent = providerConfig.UpsertStepPolicyModal;\n\n const editPolicy = () => {\n const upsertProps = {\n app: application,\n policy,\n serverGroup,\n };\n\n const modalProps = { dialogClassName: 'wizard-modal modal-lg' };\n ReactModal.show<typeof UpsertModalComponent>(UpsertModalComponent, upsertProps, modalProps);\n };\n const deletePolicy = () => {\n const taskMonitor = {\n application,\n title: `Deleting scaling policy ${policyTitle}`,\n };\n\n const jobToSubmit: IDeletePolicyJob = {\n type: 'deleteScalingPolicy',\n cloudProvider: provider,\n credentials: serverGroup.account,\n region: serverGroup.region,\n scalingPolicyID: policy.id,\n serverGroupName: serverGroup.name,\n };\n\n if (provider === 'aws') {\n delete jobToSubmit.scalingPolicyID;\n jobToSubmit.policyName = policy.policyName;\n }\n\n ConfirmationModalService.confirm({\n header: `Really delete ${policyTitle}?`,\n buttonText: 'Delete scaling policy',\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: () =>\n TaskExecutor.executeTask({\n application,\n description: `Delete scaling policy ${policyTitle}`,\n job: [jobToSubmit],\n }),\n });\n };\n\n return (\n <div className=\"StepPolicySummary\">\n <div>\n {!Boolean(policy.alarms?.length) && <div>No alarms configured for this policy - it's safe to delete.</div>}\n {Boolean(policy.alarms?.length) &&\n policy.alarms.map((a) => (\n <div key={`step-summary-${policy.policyName}`}>\n <HoverablePopover\n Component={() => (\n <StepPolicyPopoverContent policy={policy} serverGroup={serverGroup as IAmazonServerGroup} />\n )}\n placement=\"left\"\n title={policy.policyName}\n >\n <div>\n <div className=\"label label-default\">{robotToHuman(policy.policyType).toUpperCase()}</div>\n <AlarmSummary alarm={a} />\n </div>\n </HoverablePopover>\n <div className=\"actions\">\n <button className=\"btn btn-xs btn-link\" onClick={editPolicy}>\n <span className=\"glyphicon glyphicon-cog\"></span>\n <span className=\"sr-only\">Edit policy</span>\n </button>\n <button className=\"btn btn-xs btn-link\" onClick={deletePolicy}>\n <span className=\"glyphicon glyphicon-trash\"></span>\n <span className=\"sr-only\">Delete policy</span>\n </button>\n </div>\n </div>\n ))}\n </div>\n </div>\n );\n};\n","import * as React from 'react';\n\nimport type { Application, IServerGroup } from '@spinnaker/core';\nimport {\n CloudProviderRegistry,\n ConfirmationModalService,\n HoverablePopover,\n ReactModal,\n robotToHuman,\n TaskExecutor,\n} from '@spinnaker/core';\n\nimport type { ITargetTrackingPolicy } from '../../../../domain';\nimport './TargetTrackingSummary.less';\n\nexport interface ITargetTrackingPolicySummaryProps {\n application: Application;\n policy: ITargetTrackingPolicy;\n serverGroup: IServerGroup;\n}\n\ninterface IDeletePolicyJob {\n type: string;\n cloudProvider: string;\n credentials: string;\n region: string;\n policyName?: string;\n scalingPolicyID?: string;\n serverGroupName: string;\n}\n\nexport const TargetTrackingSummary = ({ application, policy, serverGroup }: ITargetTrackingPolicySummaryProps) => {\n const provider = serverGroup.type || serverGroup.cloudProvider || 'aws';\n const providerConfig = CloudProviderRegistry.getValue(provider, 'serverGroup');\n const policyTitle = provider === 'aws' ? policy.policyName : policy.id;\n\n const UpsertModalComponent = providerConfig.UpsertTargetTrackingModal;\n const PopoverContent = providerConfig.TargetTrackingChart;\n\n const editPolicy = () => {\n const upsertProps = {\n app: application,\n policy,\n serverGroup,\n };\n const modalProps = { dialogClassName: 'wizard-modal modal-lg' };\n ReactModal.show<typeof UpsertModalComponent>(UpsertModalComponent, upsertProps, modalProps);\n };\n\n const deletePolicy = () => {\n const taskMonitor = {\n application,\n title: `Deleting scaling policy ${policyTitle}`,\n };\n\n const jobToSubmit: IDeletePolicyJob = {\n type: 'deleteScalingPolicy',\n cloudProvider: provider,\n credentials: serverGroup.account,\n region: serverGroup.region,\n scalingPolicyID: policy.id,\n serverGroupName: serverGroup.name,\n };\n\n if (provider === 'aws') {\n delete jobToSubmit.scalingPolicyID;\n jobToSubmit.policyName = policy.policyName;\n }\n\n ConfirmationModalService.confirm({\n header: `Really delete ${policyTitle}?`,\n buttonText: 'Delete scaling policy',\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: () =>\n TaskExecutor.executeTask({\n application,\n description: `Delete scaling policy ${policyTitle}`,\n job: [jobToSubmit],\n }),\n });\n };\n\n const config = policy.targetTrackingConfiguration;\n return (\n <div className=\"TargetTrackingSummary\">\n <HoverablePopover\n Component={() => <PopoverContent config={policy.targetTrackingConfiguration} serverGroup={serverGroup} />}\n placement=\"left\"\n title={policyTitle}\n >\n <div>\n <div className=\"label label-default\">{robotToHuman(policy.policyType).toUpperCase()}</div>\n <div>\n <b>Target</b>\n <span className=\"sp-margin-xs-left\">\n {config.predefinedMetricSpecification?.predefinedMetricType ||\n config.customizedMetricSpecification?.metricName}\n </span>\n {Boolean(config.customizedMetricSpecification?.statistic) && <span>{` @ ${config.targetValue}`}</span>}\n </div>\n </div>\n </HoverablePopover>\n\n <div className=\"actions\">\n <button className=\"btn btn-xs btn-link\" onClick={editPolicy}>\n <span className=\"glyphicon glyphicon-cog\"></span>\n <span className=\"sr-only\">Edit policy</span>\n </button>\n <button className=\"btn btn-xs btn-link\" onClick={deletePolicy}>\n <span className=\"glyphicon glyphicon-trash\"></span>\n <span className=\"sr-only\">Delete policy</span>\n </button>\n </div>\n </div>\n );\n};\n","import * as React from 'react';\n\nimport type { Application, IServerGroup } from '@spinnaker/core';\n\nimport { StepPolicySummary } from './StepPolicySummary';\nimport type { IScalingPolicyView, ITargetTrackingPolicy } from '../../../domain';\nimport { TargetTrackingSummary } from './targetTracking/TargetTrackingSummary';\n\nexport interface IScalingPolicySummaryProps {\n application: Application;\n policy: IScalingPolicyView;\n serverGroup: IServerGroup;\n}\n\nexport const ScalingPolicySummary = ({ application, policy, serverGroup }: IScalingPolicySummaryProps) => {\n const scalingPolicyType = policy.policyType\n ? policy.policyType\n : policy.targetTrackingConfiguration\n ? 'TargetTrackingScaling'\n : 'StepScaling';\n\n if (scalingPolicyType === 'TargetTrackingScaling') {\n return (\n <TargetTrackingSummary\n application={application}\n policy={policy as ITargetTrackingPolicy}\n serverGroup={serverGroup}\n />\n );\n }\n\n return <StepPolicySummary application={application} policy={policy} serverGroup={serverGroup} />;\n};\n","import React from 'react';\n\nimport { CollapsibleSection, confirmNotManaged, ModalInjector } from '@spinnaker/core';\nimport { HelpField } from '@spinnaker/core';\n\nimport type { IAmazonServerGroupDetailsSectionProps } from './IAmazonServerGroupDetailsSectionProps';\nimport { AWSProviderSettings } from '../../../aws.settings';\n\nexport class AdvancedSettingsDetailsSection extends React.Component<IAmazonServerGroupDetailsSectionProps> {\n private editAdvancedSettings = (): void => {\n const { app, serverGroup } = this.props;\n confirmNotManaged(serverGroup, app).then(\n (notManaged) =>\n notManaged &&\n ModalInjector.modalService.open({\n templateUrl: require('../advancedSettings/editAsgAdvancedSettings.modal.html'),\n controller: 'EditAsgAdvancedSettingsCtrl as ctrl',\n resolve: {\n application: () => app,\n serverGroup: () => serverGroup,\n },\n }),\n );\n };\n\n public render(): JSX.Element {\n const { serverGroup } = this.props;\n\n const asg = serverGroup.asg;\n\n return (\n <CollapsibleSection heading=\"Advanced Settings\">\n <dl className=\"horizontal-when-filters-collapsed\">\n <dt>Cooldown</dt>\n <dd>{asg.defaultCooldown} seconds</dd>\n {asg.enabledMetrics.length > 0 && [\n <dt key={'t-metrics'}>Enabled Metrics</dt>,\n <dd key={'d-metrics'}>{asg.enabledMetrics.map((m) => m.metric).join(', ')}</dd>,\n ]}\n <dt>Health Check Type</dt>\n <dd>{asg.healthCheckType}</dd>\n <dt>Grace Period</dt>\n <dd>{asg.healthCheckGracePeriod} seconds</dd>\n <dt>Termination Policies</dt>\n <dd>{asg.terminationPolicies.join(', ')}</dd>\n {asg.capacityRebalance && [\n <dt>\n Capacity Rebalance <HelpField id=\"aws.serverGroup.capacityRebalance\" />\n </dt>,\n <dd>{`${asg.capacityRebalance}`}</dd>,\n ]}\n </dl>\n {AWSProviderSettings.adHocInfraWritesEnabled && (\n <a className=\"clickable\" onClick={this.editAdvancedSettings}>\n Edit Advanced Settings\n </a>\n )}\n </CollapsibleSection>\n );\n }\n}\n","import { get, has } from 'lodash';\nimport React from 'react';\n\nimport type { IEntityTags, IViewChangesConfig } from '@spinnaker/core';\nimport { AccountTag, CollapsibleSection, EntitySource, SETTINGS, timestamp, ViewChangesLink } from '@spinnaker/core';\n\nimport type { IAmazonServerGroupDetailsSectionProps } from './IAmazonServerGroupDetailsSectionProps';\nimport type { IAmazonServerGroupView } from '../../../domain';\nimport { VpcTag } from '../../../vpc/VpcTag';\n\nexport interface IAmazonInfoDetailsSectionState {\n changeConfig: IViewChangesConfig;\n}\n\nexport class AmazonInfoDetailsSection extends React.Component<\n IAmazonServerGroupDetailsSectionProps,\n IAmazonInfoDetailsSectionState\n> {\n constructor(props: IAmazonServerGroupDetailsSectionProps) {\n super(props);\n this.state = { changeConfig: this.getChangeConfig(props.serverGroup) };\n }\n\n private getChangeConfig(serverGroup: IAmazonServerGroupView): IViewChangesConfig {\n const changeConfig: IViewChangesConfig = {\n metadata: get(serverGroup.entityTags, 'creationMetadata'),\n };\n if (has(serverGroup, 'buildInfo.jenkins')) {\n changeConfig.buildInfo = {\n ancestor: undefined,\n jenkins: serverGroup.buildInfo.jenkins,\n target: undefined,\n };\n }\n\n return changeConfig;\n }\n\n public componentWillReceiveProps(nextProps: IAmazonServerGroupDetailsSectionProps) {\n this.setState({ changeConfig: this.getChangeConfig(nextProps.serverGroup) });\n }\n\n public render(): JSX.Element {\n const { serverGroup } = this.props;\n const { changeConfig } = this.state;\n\n const showEntityTags = SETTINGS.feature && SETTINGS.feature.entityTags;\n const entityTags = serverGroup.entityTags || ({} as IEntityTags);\n\n return (\n <CollapsibleSection heading=\"Server Group Information\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n <dt>Created</dt>\n <dd>{timestamp(serverGroup.createdTime)}</dd>\n {showEntityTags && <EntitySource metadata={entityTags.creationMetadata} />}\n {showEntityTags && (\n <ViewChangesLink\n changeConfig={changeConfig}\n linkText=\"view changes\"\n nameItem={serverGroup}\n viewType=\"description\"\n />\n )}\n <dt>In</dt>\n <dd>\n <AccountTag account={serverGroup.account} />\n {serverGroup.region}\n </dd>\n <dt>VPC</dt>\n <dd>\n <VpcTag vpcId={serverGroup.vpcId} />\n </dd>\n {serverGroup.vpcId && serverGroup.subnetType && <dt>Subnet</dt>}\n {serverGroup.vpcId && serverGroup.subnetType && <dd>{serverGroup.subnetType}</dd>}\n {serverGroup.asg && <dt>Zones</dt>}\n {serverGroup.asg && (\n <dd>\n <ul>\n {serverGroup.asg.availabilityZones.map((zone) => (\n <li key={zone}>{zone}</li>\n ))}\n </ul>\n </dd>\n )}\n </dl>\n </CollapsibleSection>\n );\n }\n}\n","import React from 'react';\n\nimport type { ICapacity } from '@spinnaker/core';\nimport { CapacityDetailsSection, CollapsibleSection, Overridable, ViewScalingActivitiesLink } from '@spinnaker/core';\n\nimport type { IAmazonServerGroupDetailsSectionProps } from './IAmazonServerGroupDetailsSectionProps';\nimport { AWSProviderSettings } from '../../../aws.settings';\nimport { AmazonResizeServerGroupModal } from '../resize/AmazonResizeServerGroupModal';\n\n@Overridable('amazon.serverGroup.CapacityDetailsSection')\nexport class AmazonCapacityDetailsSection extends React.Component<IAmazonServerGroupDetailsSectionProps> {\n public render(): JSX.Element {\n const { serverGroup, app: application } = this.props;\n\n const capacity: ICapacity = {\n min: serverGroup.asg.minSize,\n max: serverGroup.asg.maxSize,\n desired: serverGroup.asg.desiredCapacity,\n };\n\n return (\n <CollapsibleSection heading=\"Capacity\" defaultExpanded={true}>\n <CapacityDetailsSection current={serverGroup.instances.length} capacity={capacity} />\n\n <div>\n {AWSProviderSettings.adHocInfraWritesEnabled && (\n <a className=\"clickable\" onClick={() => AmazonResizeServerGroupModal.show({ application, serverGroup })}>\n Resize Server Group\n </a>\n )}\n </div>\n\n <div>\n <ViewScalingActivitiesLink serverGroup={serverGroup} />\n </div>\n </CollapsibleSection>\n );\n }\n}\n","import React from 'react';\n\nimport { CollapsibleSection, HealthCounts } from '@spinnaker/core';\n\nimport type { IAmazonServerGroupDetailsSectionProps } from './IAmazonServerGroupDetailsSectionProps';\n\nexport class HealthDetailsSection extends React.Component<IAmazonServerGroupDetailsSectionProps> {\n public render(): JSX.Element {\n const { serverGroup } = this.props;\n\n if (serverGroup.instanceCounts.total > 0) {\n return (\n <CollapsibleSection heading=\"Health\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n <dt>Instances</dt>\n <dd>\n <HealthCounts container={serverGroup.instanceCounts} className=\"pull-left\" />\n </dd>\n </dl>\n </CollapsibleSection>\n );\n }\n return null;\n }\n}\n","import React from 'react';\n\nimport { CollapsibleSection, LabeledValue, LabeledValueList } from '@spinnaker/core';\nimport type { IAmazonServerGroupDetailsSectionProps } from './IAmazonServerGroupDetailsSectionProps';\n\nexport const InstancesDistributionDetailsSection = ({ serverGroup }: IAmazonServerGroupDetailsSectionProps) => {\n if (!serverGroup.mixedInstancesPolicy) {\n return null;\n }\n\n const instancesDistribution = serverGroup.mixedInstancesPolicy.instancesDistribution;\n return (\n <CollapsibleSection heading=\"Instances Distribution\">\n <LabeledValueList className=\"horizontal-when-filters-collapsed\">\n <LabeledValue\n label=\"On-Demand Allocation Strategy\"\n helpFieldId=\"aws.serverGroup.odAllocationStrategy\"\n value={instancesDistribution.onDemandAllocationStrategy}\n />\n <LabeledValue\n label=\"On-Demand Base Capacity\"\n helpFieldId=\"aws.serverGroup.odBase\"\n value={instancesDistribution.onDemandBaseCapacity}\n />\n <LabeledValue\n label=\"On-Demand Percentage Above Base Capacity\"\n helpFieldId=\"aws.serverGroup.odPercentAboveBase\"\n value={instancesDistribution.onDemandPercentageAboveBaseCapacity}\n />\n <LabeledValue\n label=\"Spot Allocation Strategy\"\n helpFieldId=\"aws.serverGroup.spotAllocationStrategy\"\n value={instancesDistribution.spotAllocationStrategy}\n />\n {instancesDistribution.spotInstancePools && (\n <LabeledValue\n label=\"Spot Instance Pools\"\n helpFieldId=\"aws.serverGroup.spotInstancePoolCount\"\n value={instancesDistribution.spotInstancePools}\n />\n )}\n <LabeledValue\n label=\"Max Spot Price\"\n helpFieldId=\"aws.serverGroup.spotMaxPrice\"\n value={instancesDistribution.spotMaxPrice || 'on-demand price, default'}\n />\n </LabeledValueList>\n </CollapsibleSection>\n );\n};\n","// Returns the base image name from the image description.\nexport const getBaseImageName = (description?: string) => {\n let name: string;\n const tags = (description || '').split(', ');\n tags.forEach((tag: string) => {\n const keyVal = tag.split('=');\n if (keyVal.length === 2 && keyVal[0] === 'ancestor_name') {\n name = keyVal[1];\n }\n });\n\n return name;\n};\n","import React from 'react';\n\nimport { CollapsibleSection, ShowUserData } from '@spinnaker/core';\n\nimport type { IAmazonServerGroupDetailsSectionProps } from './IAmazonServerGroupDetailsSectionProps';\nimport type { IAmazonServerGroupView } from '../../../domain';\nimport { getBaseImageName } from '../utils';\n\nexport interface ILaunchConfigDetailsSectionState {\n image: any;\n}\n\nexport class LaunchConfigDetailsSection extends React.Component<\n IAmazonServerGroupDetailsSectionProps,\n ILaunchConfigDetailsSectionState\n> {\n constructor(props: IAmazonServerGroupDetailsSectionProps) {\n super(props);\n\n this.state = { image: this.getImage(props.serverGroup) };\n }\n\n private getImage(serverGroup: IAmazonServerGroupView): any {\n const image = serverGroup.image ? serverGroup.image : undefined;\n if (serverGroup.image && serverGroup.image.description) {\n image.baseImage = getBaseImageName(serverGroup.image.description);\n }\n return image;\n }\n\n public componentWillReceiveProps(nextProps: IAmazonServerGroupDetailsSectionProps): void {\n this.setState({ image: this.getImage(nextProps.serverGroup) });\n }\n\n public render(): JSX.Element {\n const { name, launchConfig } = this.props.serverGroup;\n const { image } = this.state;\n\n if (launchConfig) {\n return (\n <CollapsibleSection heading=\"Launch Configuration\">\n <dl className=\"horizontal-when-filters-collapsed\">\n <dt>Name</dt>\n <dd>{launchConfig.launchConfigurationName}</dd>\n\n <dt>Image ID</dt>\n <dd>{launchConfig.imageId}</dd>\n\n {image && image.imageLocation && <dt>Image Name</dt>}\n {image && image.imageLocation && <dd>{image.imageLocation}</dd>}\n\n {image && image.baseImage && <dt>Base Image Name</dt>}\n {image && image.baseImage && <dd>{image.baseImage}</dd>}\n\n <dt>Instance Type</dt>\n <dd>{launchConfig.instanceType}</dd>\n\n <dt>IAM Profile</dt>\n <dd>{launchConfig.iamInstanceProfile}</dd>\n\n {launchConfig.instanceMonitoring && (\n <>\n <dt>Instance Monitoring</dt>\n <dd>{launchConfig.instanceMonitoring.enabled ? 'enabled' : 'disabled'}</dd>\n </>\n )}\n\n {launchConfig.spotPrice && <dt>Spot Price</dt>}\n {launchConfig.spotPrice && <dd>{launchConfig.spotPrice}</dd>}\n\n {launchConfig.keyName && <dt>Key Name</dt>}\n {launchConfig.keyName && <dd>{launchConfig.keyName}</dd>}\n\n {launchConfig.kernelId && <dt>Kernel ID</dt>}\n {launchConfig.kernelId && <dd>{launchConfig.kernelId}</dd>}\n\n {launchConfig.ramdiskId && <dt>Ramdisk ID</dt>}\n {launchConfig.ramdiskId && <dd>{launchConfig.ramdiskId}</dd>}\n\n <dt>User Data</dt>\n {launchConfig.userData && (\n <dd>\n <ShowUserData serverGroupName={name} userData={launchConfig.userData} />\n </dd>\n )}\n {!launchConfig.userData && <dd>[none]</dd>}\n </dl>\n </CollapsibleSection>\n );\n }\n return null;\n }\n}\n","import React from 'react';\n\nimport { CollapsibleSection, HelpField } from '@spinnaker/core';\n\nimport type { IAmazonLaunchTemplateOverrides } from '../../../index';\n\nimport './multipleInstanceTypesSubSection.less';\n\nexport function MultipleInstanceTypesSubSection(props: { instanceTypeOverrides: IAmazonLaunchTemplateOverrides[] }) {\n if (!props.instanceTypeOverrides) {\n return null;\n }\n\n return (\n <CollapsibleSection\n heading=\"Instance Types\"\n defaultExpanded={true}\n outerDivClassName=\"multiple-instance-types-subsection\"\n toggleClassName=\"clickable subsection-heading\"\n headingClassName=\"collapsible-subheading\"\n >\n <table className=\"table table-condensed packed\" id=\"MultipleInstanceTypes\">\n <thead>\n <tr>\n <th id=\"instanceType\">\n Type <HelpField id=\"aws.serverGroup.multipleInstanceTypes\"></HelpField>\n </th>\n <th id=\"weight\">\n Weighted Capacity <HelpField id=\"aws.serverGroup.instanceTypeWeight\"></HelpField>\n </th>\n </tr>\n </thead>\n <tbody>\n {props.instanceTypeOverrides.map((override) => [\n <tr key={override.instanceType}>\n <td headers=\"instanceType\">{override.instanceType}</td>\n <td headers=\"weight\">{override.weightedCapacity}</td>\n </tr>,\n ])}\n </tbody>\n </table>\n </CollapsibleSection>\n );\n}\n","import React from 'react';\n\nimport { CollapsibleSection, LabeledValue, LabeledValueList, ShowUserData } from '@spinnaker/core';\nimport type { IAmazonServerGroupDetailsSectionProps } from './IAmazonServerGroupDetailsSectionProps';\nimport { MultipleInstanceTypesSubSection } from './MultipleInstanceTypesSubSection';\nimport { getBaseImageName } from '../utils';\n\nexport const LaunchTemplateDetailsSection = ({ serverGroup }: IAmazonServerGroupDetailsSectionProps) => {\n const { image } = serverGroup;\n const baseImage = getBaseImageName(image?.description);\n\n if (!serverGroup.launchTemplate && !serverGroup.mixedInstancesPolicy) {\n return null;\n }\n\n const isMip = serverGroup.mixedInstancesPolicy ? true : false;\n const launchTemplate = isMip ? serverGroup.mixedInstancesPolicy.launchTemplates[0] : serverGroup.launchTemplate;\n\n const { launchTemplateData } = launchTemplate;\n const maxSpotPrice = isMip\n ? serverGroup.mixedInstancesPolicy.instancesDistribution.spotMaxPrice\n : launchTemplateData?.instanceMarketOptions?.spotOptions?.maxPrice;\n const creditSpecification = launchTemplateData?.creditSpecification?.cpuCredits;\n const launchTemplateOverrides = isMip\n ? serverGroup.mixedInstancesPolicy.launchTemplateOverridesForInstanceType\n : null;\n\n return (\n <CollapsibleSection heading=\"Launch Template\">\n <LabeledValueList className=\"horizontal-when-filters-collapsed\">\n <LabeledValue label=\"Name\" value={launchTemplate.launchTemplateName} />\n <LabeledValue label=\"Image ID\" value={launchTemplateData.imageId} />\n {image?.imageLocation && <LabeledValue label=\"Image Name\" value={image?.imageLocation} />}\n {baseImage && <LabeledValue label=\"Base Image Name\" value={baseImage} />}\n {launchTemplateOverrides && launchTemplateOverrides.length > 0 ? (\n <MultipleInstanceTypesSubSection instanceTypeOverrides={launchTemplateOverrides} />\n ) : (\n <LabeledValue label=\"Instance Type\" value={launchTemplateData.instanceType} />\n )}\n {creditSpecification && <LabeledValue label=\"CPU Credit Specification\" value={creditSpecification} />}\n <LabeledValue label=\"IAM Profile\" value={launchTemplateData.iamInstanceProfile.name} />\n {launchTemplateData.monitoring && (\n <LabeledValue\n label=\"Instance Monitoring\"\n value={launchTemplateData.monitoring.enabled ? 'enabled' : 'disabled'}\n />\n )}\n {maxSpotPrice && <LabeledValue label=\"Max Spot Price\" value={maxSpotPrice} />}\n {launchTemplateData.keyName && <LabeledValue label=\"Key Name\" value={launchTemplateData.keyName} />}\n {launchTemplateData.kernelId && <LabeledValue label=\"Kernel ID\" value={launchTemplateData.kernelId} />}\n {launchTemplateData.ramDiskId && <LabeledValue label=\"Ramdisk ID\" value={launchTemplateData.ramDiskId} />}\n {launchTemplateData.userData && (\n <LabeledValue\n label=\"User Data\"\n value={<ShowUserData serverGroupName={serverGroup.name} userData={launchTemplateData.userData} />}\n />\n )}\n </LabeledValueList>\n </CollapsibleSection>\n );\n};\n","import React from 'react';\n\nimport { CollapsibleSection, ViewScalingActivitiesLink } from '@spinnaker/core';\n\nimport type { IAmazonServerGroupDetailsSectionProps } from './IAmazonServerGroupDetailsSectionProps';\n\nexport class LogsDetailsSection extends React.Component<IAmazonServerGroupDetailsSectionProps> {\n public render(): JSX.Element {\n return (\n <CollapsibleSection heading=\"Logs\">\n <ul>\n <li>\n <ViewScalingActivitiesLink serverGroup={this.props.serverGroup} />\n </li>\n </ul>\n </CollapsibleSection>\n );\n }\n}\n","import React from 'react';\n\nimport { CollapsibleSection } from '@spinnaker/core';\n\nimport type { IAmazonServerGroupDetailsSectionProps } from './IAmazonServerGroupDetailsSectionProps';\n\nexport interface IPackageDetailsSectionState {\n commitHash: string;\n jenkinsLink: string;\n}\n\nexport class PackageDetailsSection extends React.Component<\n IAmazonServerGroupDetailsSectionProps,\n IPackageDetailsSectionState\n> {\n constructor(props: IAmazonServerGroupDetailsSectionProps) {\n super(props);\n\n this.state = this.getState(props);\n }\n\n private getState(props: IAmazonServerGroupDetailsSectionProps): IPackageDetailsSectionState {\n const { serverGroup } = props;\n\n const buildInfo = serverGroup.buildInfo || {};\n\n let commitHash: string = null;\n if (buildInfo.commit) {\n commitHash = serverGroup.buildInfo.commit.substring(0, 8);\n }\n\n let jenkinsLink: string = null;\n if (buildInfo.buildInfoUrl) {\n jenkinsLink = serverGroup.buildInfo.buildInfoUrl;\n } else if (buildInfo.jenkins) {\n const jenkins = serverGroup.buildInfo.jenkins;\n jenkinsLink = `${jenkins.host}job/${jenkins.name}/${jenkins.number}`;\n }\n\n return { commitHash, jenkinsLink };\n }\n\n public componentWillReceiveProps(nextProps: IAmazonServerGroupDetailsSectionProps): void {\n this.setState(this.getState(nextProps));\n }\n\n public render(): JSX.Element {\n const { serverGroup } = this.props;\n const { commitHash, jenkinsLink } = this.state;\n\n if (serverGroup.buildInfo && serverGroup.buildInfo.jenkins) {\n return (\n <CollapsibleSection heading=\"Package\">\n <dl className=\"horizontal-when-filters-collapsed\">\n <dt>Job</dt>\n <dd>{serverGroup.buildInfo.jenkins.name}</dd>\n <dt>Package</dt>\n <dd>{serverGroup.buildInfo.package_name}</dd>\n <dt>Build</dt>\n <dd>{serverGroup.buildInfo.jenkins.number}</dd>\n <dt>Commit</dt>\n <dd>{commitHash}</dd>\n <dt>Version</dt>\n <dd>{serverGroup.buildInfo.version}</dd>\n <dt>Build Link</dt>\n <dd>\n <a target=\"_blank\" href={jenkinsLink}>\n {jenkinsLink}\n </a>\n </dd>\n </dl>\n </CollapsibleSection>\n );\n }\n\n return null;\n }\n}\n","import React from 'react';\n\nimport { CollapsibleSection, Overridable, Tooltip } from '@spinnaker/core';\n\nimport type { IAmazonServerGroupDetailsSectionProps } from './IAmazonServerGroupDetailsSectionProps';\nimport { AWSProviderSettings } from '../../../aws.settings';\nimport type { IAmazonServerGroupView, IScalingProcess } from '../../../domain';\nimport { CreateScalingPolicyButton } from '../scalingPolicy/CreateScalingPolicyButton';\nimport { ScalingPolicySummary } from '../scalingPolicy/ScalingPolicySummary';\nimport { AutoScalingProcessService } from '../scalingProcesses/AutoScalingProcessService';\n\n@Overridable('aws.serverGroup.ScalingPoliciesDetailsSection')\nexport class ScalingPoliciesDetailsSection extends React.Component<IAmazonServerGroupDetailsSectionProps> {\n constructor(props: IAmazonServerGroupDetailsSectionProps) {\n super(props);\n }\n\n public static arePoliciesDisabled(serverGroup: IAmazonServerGroupView): boolean {\n const autoScalingProcesses: IScalingProcess[] = AutoScalingProcessService.normalizeScalingProcesses(serverGroup);\n return (\n serverGroup.scalingPolicies.length > 0 &&\n autoScalingProcesses\n .filter((p) => !p.enabled)\n .some((p) => ['Launch', 'Terminate', 'AlarmNotification'].includes(p.name))\n );\n }\n\n public render(): JSX.Element {\n const { app, serverGroup } = this.props;\n const scalingPoliciesDisabled = ScalingPoliciesDetailsSection.arePoliciesDisabled(serverGroup);\n\n return (\n <CollapsibleSection\n cacheKey=\"Scaling Policies\"\n heading={({ chevron }) => (\n <h4 className=\"collapsible-heading\">\n {chevron}\n <span>\n {scalingPoliciesDisabled && (\n <Tooltip value=\"Some scaling processes are disabled that may prevent scaling policies from working\">\n <span className=\"fa fa-exclamation-circle warning-text\" />\n </Tooltip>\n )}\n Scaling Policies\n </span>\n </h4>\n )}\n >\n {scalingPoliciesDisabled && (\n <div className=\"band band-warning\">\n Some scaling processes are disabled that may prevent scaling policies from working.\n </div>\n )}\n {serverGroup.scalingPolicies.map((policy) => (\n <ScalingPolicySummary key={policy.policyARN} policy={policy} serverGroup={serverGroup} application={app} />\n ))}\n {AWSProviderSettings.adHocInfraWritesEnabled ? (\n <CreateScalingPolicyButton serverGroup={serverGroup} application={app} />\n ) : (\n <p>Can not create scaling policy, because ad-hoc operations are disabled for AWS providers.</p>\n )}\n </CollapsibleSection>\n );\n }\n}\n","import React from 'react';\n\nimport { CollapsibleSection, confirmNotManaged, HelpField, ModalInjector, timestamp, Tooltip } from '@spinnaker/core';\n\nimport type { IAmazonServerGroupDetailsSectionProps } from './IAmazonServerGroupDetailsSectionProps';\nimport { AWSProviderSettings } from '../../../aws.settings';\nimport type { IScalingProcess } from '../../../domain';\nimport { AutoScalingProcessService } from '../scalingProcesses/AutoScalingProcessService';\n\nexport interface IScalingProcessesDetailsSectionState {\n autoScalingProcesses: IScalingProcess[];\n scalingPoliciesDisabled: boolean;\n scheduledActionsDisabled: boolean;\n}\n\nexport class ScalingProcessesDetailsSection extends React.Component<\n IAmazonServerGroupDetailsSectionProps,\n IScalingProcessesDetailsSectionState\n> {\n constructor(props: IAmazonServerGroupDetailsSectionProps) {\n super(props);\n\n this.state = this.getState(props);\n }\n\n private toggleScalingProcesses = (): void => {\n const { app, serverGroup } = this.props;\n confirmNotManaged(serverGroup, app).then(\n (isNotManaged) =>\n isNotManaged &&\n ModalInjector.modalService.open({\n templateUrl: require('../scalingProcesses/modifyScalingProcesses.html'),\n controller: 'ModifyScalingProcessesCtrl as ctrl',\n resolve: {\n serverGroup: () => serverGroup,\n application: () => app,\n processes: () => this.state.autoScalingProcesses,\n },\n }),\n );\n };\n\n private getState(props: IAmazonServerGroupDetailsSectionProps): IScalingProcessesDetailsSectionState {\n const { serverGroup } = props;\n\n const autoScalingProcesses: IScalingProcess[] = AutoScalingProcessService.normalizeScalingProcesses(serverGroup);\n\n const scalingPoliciesDisabled =\n serverGroup.scalingPolicies.length > 0 &&\n autoScalingProcesses\n .filter((p) => !p.enabled)\n .some((p) => ['Launch', 'Terminate', 'AlarmNotification'].includes(p.name));\n const scheduledActionsDisabled =\n serverGroup.scheduledActions.length > 0 &&\n autoScalingProcesses\n .filter((p) => !p.enabled)\n .some((p) => ['Launch', 'Terminate', 'ScheduledAction'].includes(p.name));\n\n return { autoScalingProcesses, scalingPoliciesDisabled, scheduledActionsDisabled };\n }\n\n public componentWillReceiveProps(nextProps: IAmazonServerGroupDetailsSectionProps): void {\n this.setState(this.getState(nextProps));\n }\n\n public render(): JSX.Element {\n const { autoScalingProcesses, scalingPoliciesDisabled, scheduledActionsDisabled } = this.state;\n\n return (\n <CollapsibleSection\n cacheKey=\"Scaling Processes\"\n heading={({ chevron }) => (\n <h4 className=\"collapsible-heading\">\n {chevron}\n <span>\n {scalingPoliciesDisabled && (\n <Tooltip value=\"Some scaling processes are disabled that may prevent scaling policies from working\">\n <span className=\"fa fa-exclamation-circle warning-text\" />\n </Tooltip>\n )}\n {scheduledActionsDisabled && (\n <Tooltip value=\"Some scaling processes are disabled that may prevent scheduled actions from working\">\n <span className=\"fa fa-exclamation-circle warning-text\" />\n </Tooltip>\n )}\n Scaling Processes\n </span>\n </h4>\n )}\n >\n <ul className=\"scaling-processes\">\n {autoScalingProcesses.map((process) => (\n <li key={process.name}>\n <span style={{ visibility: process.enabled ? 'visible' : 'hidden' }} className=\"fa fa-check small\" />\n <span className={!process.enabled ? 'text-disabled' : ''}>{process.name} </span>\n <HelpField content={process.description} placement=\"bottom\" />\n {process.suspensionDate && (\n <div className=\"text-disabled small\" style={{ marginLeft: '35px' }}>\n Suspended {timestamp(process.suspensionDate)}\n </div>\n )}\n </li>\n ))}\n </ul>\n {AWSProviderSettings.adHocInfraWritesEnabled && (\n <a className=\"clickable\" onClick={this.toggleScalingProcesses}>\n Edit Scaling Processes\n </a>\n )}\n </CollapsibleSection>\n );\n }\n}\n","import React from 'react';\n\nimport type { IScheduledAction } from '../../../domain';\n\nexport interface IScheduledActionProps {\n action: IScheduledAction;\n}\n\nexport class ScheduledAction extends React.Component<IScheduledActionProps> {\n public render() {\n const { action } = this.props;\n return (\n <dl className=\"horizontal-when-filters-collapsed\" style={{ marginBottom: '20px' }}>\n <dt>Schedule</dt>\n <dd>{action.recurrence}</dd>\n {action.minSize !== undefined && <dt>Min Size</dt>}\n {action.minSize !== undefined && <dd>{action.minSize}</dd>}\n {action.maxSize !== undefined && <dt>Max Size</dt>}\n {action.maxSize !== undefined && <dd>{action.maxSize}</dd>}\n {action.desiredCapacity !== undefined && <dt>Desired Size</dt>}\n {action.desiredCapacity !== undefined && <dd>{action.desiredCapacity}</dd>}\n </dl>\n );\n }\n}\n","import React from 'react';\n\nimport { CollapsibleSection, ModalInjector, Tooltip } from '@spinnaker/core';\n\nimport type { IAmazonServerGroupDetailsSectionProps } from './IAmazonServerGroupDetailsSectionProps';\nimport { AWSProviderSettings } from '../../../aws.settings';\nimport type { IScalingProcess } from '../../../domain';\nimport { AutoScalingProcessService } from '../scalingProcesses/AutoScalingProcessService';\nimport { ScheduledAction } from '../scheduledAction/ScheduledAction';\n\nexport interface IScheduledActionsDetailsSectionState {\n scheduledActionsDisabled: boolean;\n}\n\nexport class ScheduledActionsDetailsSection extends React.Component<\n IAmazonServerGroupDetailsSectionProps,\n IScheduledActionsDetailsSectionState\n> {\n constructor(props: IAmazonServerGroupDetailsSectionProps) {\n super(props);\n\n this.state = this.getState(props);\n }\n\n private getState(props: IAmazonServerGroupDetailsSectionProps): IScheduledActionsDetailsSectionState {\n const { serverGroup } = props;\n\n const autoScalingProcesses: IScalingProcess[] = AutoScalingProcessService.normalizeScalingProcesses(serverGroup);\n const scheduledActionsDisabled =\n serverGroup.scheduledActions.length > 0 &&\n autoScalingProcesses\n .filter((p) => !p.enabled)\n .some((p) => ['Launch', 'Terminate', 'ScheduledAction'].includes(p.name));\n\n return { scheduledActionsDisabled };\n }\n\n private editScheduledActions = (): void => {\n ModalInjector.modalService.open({\n templateUrl: require('../scheduledAction/editScheduledActions.modal.html'),\n controller: 'EditScheduledActionsCtrl as ctrl',\n resolve: {\n application: () => this.props.app,\n serverGroup: () => this.props.serverGroup,\n },\n });\n };\n\n public componentWillReceiveProps(nextProps: IAmazonServerGroupDetailsSectionProps): void {\n this.setState(this.getState(nextProps));\n }\n\n public render(): JSX.Element {\n const { serverGroup } = this.props;\n const { scheduledActionsDisabled } = this.state;\n\n return (\n <CollapsibleSection\n cacheKey=\"Scheduled Actions\"\n heading={({ chevron }) => (\n <h4 className=\"collapsible-heading\">\n {chevron}\n <span>\n {scheduledActionsDisabled && (\n <Tooltip value=\"Some scaling processes are disabled that may prevent scheduled actions from working\">\n <span className=\"fa fa-exclamation-circle warning-text\" />\n </Tooltip>\n )}\n Scheduled Actions\n </span>\n </h4>\n )}\n >\n {serverGroup.scheduledActions.map((action, index) => (\n <ScheduledAction key={index} action={action} />\n ))}\n\n {serverGroup.scheduledActions.length > 0 && (\n <p>\n <strong>Note:</strong> Schedules are evaluated in UTC.\n </p>\n )}\n {serverGroup.scheduledActions.length === 0 && <p>No Scheduled Actions are configured for this server group.</p>}\n {AWSProviderSettings.adHocInfraWritesEnabled && (\n <a className=\"clickable\" onClick={this.editScheduledActions}>\n Edit Scheduled Actions\n </a>\n )}\n </CollapsibleSection>\n );\n }\n}\n","import { UISref } from '@uirouter/react';\nimport { chain, find, sortBy } from 'lodash';\nimport React from 'react';\n\nimport type { ISecurityGroup, ISecurityGroupsByAccount } from '@spinnaker/core';\nimport { CollapsibleSection, confirmNotManaged, FirewallLabels, ModalInjector } from '@spinnaker/core';\n\nimport type { IAmazonServerGroupDetailsSectionProps } from './IAmazonServerGroupDetailsSectionProps';\nimport { AWSProviderSettings } from '../../../aws.settings';\nimport { AwsSecurityGroupReader } from '../../../securityGroup/securityGroup.reader';\n\nexport interface ISecurityGroupsDetailsSectionState {\n securityGroups: ISecurityGroup[];\n}\n\nexport class SecurityGroupsDetailsSection extends React.Component<\n IAmazonServerGroupDetailsSectionProps,\n ISecurityGroupsDetailsSectionState\n> {\n constructor(props: IAmazonServerGroupDetailsSectionProps) {\n super(props);\n\n this.state = { securityGroups: this.getSecurityGroups(props) };\n }\n\n private tryFindingSecurityGroupInIndex(\n index: ISecurityGroupsByAccount,\n account: string,\n region: string,\n securityGroupId: string,\n ): ISecurityGroup {\n try {\n return AwsSecurityGroupReader.resolveIndexedSecurityGroup(index, { account, region }, securityGroupId);\n } catch (e) {\n return undefined;\n }\n }\n\n private getSecurityGroups(props: IAmazonServerGroupDetailsSectionProps): ISecurityGroup[] {\n let securityGroups: ISecurityGroup[];\n const { app, serverGroup } = props;\n\n if (serverGroup.securityGroups && serverGroup.securityGroups.length) {\n securityGroups = chain(serverGroup.securityGroups)\n .map((id: string) => {\n return (\n find(app.securityGroups.data, { accountName: serverGroup.account, region: serverGroup.region, id }) ||\n find(app.securityGroups.data, { accountName: serverGroup.account, region: serverGroup.region, name: id }) ||\n this.tryFindingSecurityGroupInIndex(\n app['securityGroupsIndex'],\n serverGroup.account,\n serverGroup.region,\n id,\n ) || { id, name: id } // Last resort fallback so that security groups do not get removed (upon editing) just because deck couldn't find them\n );\n })\n .compact()\n .value();\n }\n\n return securityGroups;\n }\n\n private updateSecurityGroups = (): void => {\n const { app, serverGroup } = this.props;\n confirmNotManaged(serverGroup, app).then(\n (notManaged) =>\n notManaged &&\n ModalInjector.modalService.open({\n templateUrl: require('../securityGroup/editSecurityGroups.modal.html'),\n controller: 'EditSecurityGroupsCtrl as $ctrl',\n resolve: {\n application: () => app,\n serverGroup: () => serverGroup,\n securityGroups: () => this.state.securityGroups,\n },\n }),\n );\n };\n\n public componentWillReceiveProps(nextProps: IAmazonServerGroupDetailsSectionProps): void {\n this.setState({ securityGroups: this.getSecurityGroups(nextProps) });\n }\n\n public render(): JSX.Element {\n const { serverGroup } = this.props;\n const { securityGroups } = this.state;\n\n return (\n <CollapsibleSection heading={FirewallLabels.get('Firewalls')}>\n <ul>\n {sortBy(securityGroups, 'name').map((securityGroup) => (\n <li key={securityGroup.name}>\n <UISref\n to=\"^.firewallDetails\"\n params={{\n name: securityGroup.name,\n accountId: securityGroup.accountName,\n region: serverGroup.region,\n vpcId: serverGroup.vpcId,\n provider: serverGroup.type,\n }}\n >\n <a>\n {securityGroup.name} ({securityGroup.id})\n </a>\n </UISref>\n </li>\n ))}\n </ul>\n {AWSProviderSettings.adHocInfraWritesEnabled && serverGroup.vpcId && (\n <a className=\"clickable\" onClick={this.updateSecurityGroups}>\n Edit {FirewallLabels.get('Firewalls')}\n </a>\n )}\n </CollapsibleSection>\n );\n }\n}\n","import { sortBy } from 'lodash';\nimport React from 'react';\n\nimport { CollapsibleSection } from '@spinnaker/core';\n\nimport type { IAmazonServerGroupDetailsSectionProps } from './IAmazonServerGroupDetailsSectionProps';\n\nexport class TagsDetailsSection extends React.Component<IAmazonServerGroupDetailsSectionProps> {\n public render(): JSX.Element {\n const { serverGroup } = this.props;\n\n return (\n <CollapsibleSection heading=\"Tags\">\n {serverGroup.asg.tags.length === 0 && <div>No tags associated with this server group</div>}\n {serverGroup.asg.tags.length > 0 && (\n <dl>\n {sortBy(serverGroup.asg.tags, 'key').map((tag) => [\n <dt key={tag.key}>{tag.key}</dt>,\n <dd key={tag.value}>{tag.value}</dd>,\n ])}\n </dl>\n )}\n </CollapsibleSection>\n );\n }\n}\n","import { REST } from '@spinnaker/core';\nimport type { IKeyPair } from '../domain';\n\nexport class KeyPairsReader {\n public static listKeyPairs(): PromiseLike<IKeyPair[]> {\n return REST('/keyPairs')\n .useCache()\n .get()\n .then((keyPairs: IKeyPair[]) => keyPairs.sort((a, b) => a.keyName.localeCompare(b.keyName)));\n }\n}\n","import { module } from 'angular';\nimport {\n chain,\n clone,\n cloneDeep,\n difference,\n extend,\n find,\n flatten,\n has,\n intersection,\n keys,\n map,\n partition,\n some,\n xor,\n} from 'lodash';\nimport { $q } from 'ngimport';\n\nimport type {\n Application,\n CacheInitializerService,\n IAccountDetails,\n IDeploymentStrategy,\n IRegion,\n ISecurityGroup,\n IServerGroupCommand,\n IServerGroupCommandBackingData,\n IServerGroupCommandBackingDataFiltered,\n IServerGroupCommandDirty,\n IServerGroupCommandResult,\n IServerGroupCommandViewState,\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 setMatchingResourceSummary,\n SubnetReader,\n} from '@spinnaker/core';\n\nimport { AWSProviderSettings } from '../../aws.settings';\nimport { AutoScalingProcessService } from '../details/scalingProcesses/AutoScalingProcessService';\nimport type {\n IAmazonLoadBalancerSourceData,\n IApplicationLoadBalancerSourceData,\n IKeyPair,\n IScalingProcess,\n} from '../../domain';\nimport { AMAZON_INSTANCE_AWSINSTANCETYPE_SERVICE } from '../../instance/awsInstanceType.service';\nimport type { IAmazonInstanceType } from '../../instance/awsInstanceType.service';\nimport { KeyPairsReader } from '../../keyPairs';\n\nexport type IBlockDeviceMappingSource = 'source' | 'ami' | 'default';\n\nexport interface IAmazonServerGroupCommandDirty extends IServerGroupCommandDirty {\n targetGroups?: string[];\n launchTemplateOverridesForInstanceType?: IAmazonInstanceTypeOverride[];\n}\n\nexport interface IAmazonServerGroupCommandResult extends IServerGroupCommandResult {\n dirty: IAmazonServerGroupCommandDirty;\n}\n\nexport interface IAmazonServerGroupCommandBackingDataFiltered extends IServerGroupCommandBackingDataFiltered {\n keyPairs: string[];\n targetGroups: string[];\n instanceTypesInfo: IAmazonInstanceType[];\n}\n\nexport interface IAmazonServerGroupCommandBackingData extends IServerGroupCommandBackingData {\n appLoadBalancers: IAmazonLoadBalancerSourceData[];\n filtered: IAmazonServerGroupCommandBackingDataFiltered;\n keyPairs: IKeyPair[];\n targetGroups: string[];\n scalingProcesses: IScalingProcess[];\n instanceTypesInfo: IAmazonInstanceType[];\n}\n\nexport interface IAmazonServerGroupCommandViewState extends IServerGroupCommandViewState {\n isNew: boolean;\n dirty: IAmazonServerGroupCommandDirty;\n spelTargetGroups: string[];\n spelLoadBalancers: string[];\n useSimpleInstanceTypeSelector: boolean;\n}\n\nexport interface IAmazonInstanceTypeOverride {\n instanceType: string;\n weightedCapacity?: string;\n priority?: number;\n}\n\n/**\n * We model server group commands in two subtly different ways.\n * It's unclear what the intention is, but we should converge on a single model eventually.\n *\n * This model is stored in a Aws Deploy Stage under `clusters[]`.\n * It is also sent across the wire during a deploy task from infrastructure view\n * (i.e., \"clone server group\", \"create server group\")\n */\nexport interface IAmazonServerGroupDeployConfiguration extends IAmazonServerGroupCommand_Internal {\n account: string;\n availabilityZones: {\n [region: string]: string[];\n };\n}\n\ninterface IAmazonServerGroupCommand_Internal extends IAmazonServerGroupCommand {\n // widen 'string[]' to 'any' so we can narrow it to an incompatible type in IAmazonServerGroupDeployConfiguration\n availabilityZones: any;\n}\n\nexport interface IAmazonServerGroupCommand extends IServerGroupCommand {\n associateIPv6Address?: boolean;\n associatePublicIpAddress: boolean;\n backingData: IAmazonServerGroupCommandBackingData;\n base64UserData: string;\n copySourceCustomBlockDeviceMappings: boolean;\n ebsOptimized: boolean;\n healthCheckGracePeriod: number;\n instanceMonitoring: boolean;\n keyPair: string;\n legacyUdf?: boolean;\n requireIMDSv2?: boolean;\n spotPrice: string;\n targetHealthyDeployPercentage: number;\n useAmiBlockDeviceMappings: boolean;\n targetGroups: string[];\n setLaunchTemplate?: boolean;\n unlimitedCpuCredits?: boolean;\n capacityRebalance?: boolean;\n ramdiskId?: string;\n viewState: IAmazonServerGroupCommandViewState;\n source: {\n account: string;\n region: string;\n asgName: string;\n };\n onDemandAllocationStrategy?: string;\n onDemandBaseCapacity?: number;\n onDemandPercentageAboveBaseCapacity?: number;\n spotAllocationStrategy?: string;\n spotInstancePools?: number;\n launchTemplateOverridesForInstanceType?: IAmazonInstanceTypeOverride[];\n amiArchitecture: string;\n\n getBlockDeviceMappingsSource: (command: IServerGroupCommand) => IBlockDeviceMappingSource;\n selectBlockDeviceMappingsSource: (command: IServerGroupCommand, selection: string) => void;\n usePreferredZonesChanged: (command: IServerGroupCommand) => IAmazonServerGroupCommandResult;\n regionIsDeprecated: (command: IServerGroupCommand) => boolean;\n launchTemplateOverridesChanged: (command: IServerGroupCommand) => void;\n}\n\nexport class AwsServerGroupConfigurationService {\n private enabledMetrics = [\n 'GroupMinSize',\n 'GroupMaxSize',\n 'GroupDesiredCapacity',\n 'GroupInServiceInstances',\n 'GroupPendingInstances',\n 'GroupStandbyInstances',\n 'GroupTerminatingInstances',\n 'GroupTotalInstances',\n ];\n private healthCheckTypes = ['EC2', 'ELB'];\n private terminationPolicies = [\n 'OldestInstance',\n 'NewestInstance',\n 'OldestLaunchConfiguration',\n 'ClosestToNextInstanceHour',\n 'Default',\n ];\n\n public static $inject = [\n 'securityGroupReader',\n 'awsInstanceTypeService',\n 'cacheInitializer',\n 'loadBalancerReader',\n 'serverGroupCommandRegistry',\n ];\n constructor(\n private securityGroupReader: SecurityGroupReader,\n private awsInstanceTypeService: any,\n private cacheInitializer: CacheInitializerService,\n private loadBalancerReader: LoadBalancerReader,\n private serverGroupCommandRegistry: ServerGroupCommandRegistry,\n ) {}\n\n public configureUpdateCommand(command: IAmazonServerGroupCommand): void {\n command.backingData = {\n enabledMetrics: clone(this.enabledMetrics),\n healthCheckTypes: clone(this.healthCheckTypes),\n terminationPolicies: clone(this.terminationPolicies),\n } as IAmazonServerGroupCommandBackingData;\n }\n\n public configureCommand(application: Application, cmd: IAmazonServerGroupCommand): PromiseLike<void> {\n this.applyOverrides('beforeConfiguration', cmd);\n // TODO: Instead of attaching these to the command itself, they could be static methods\n cmd.toggleSuspendedProcess = (command: IAmazonServerGroupCommand, process: string): void => {\n command.suspendedProcesses = command.suspendedProcesses || [];\n const processIndex = command.suspendedProcesses.indexOf(process);\n if (processIndex === -1) {\n command.suspendedProcesses = command.suspendedProcesses.concat(process);\n } else {\n command.suspendedProcesses = command.suspendedProcesses.filter((p) => p !== process);\n }\n };\n\n cmd.processIsSuspended = (command: IAmazonServerGroupCommand, process: string): boolean =>\n command.suspendedProcesses.includes(process);\n\n cmd.onStrategyChange = (command: IAmazonServerGroupCommand, strategy: IDeploymentStrategy): void => {\n if (AWSProviderSettings.serverGroups?.enableLaunchTemplates) {\n command.setLaunchTemplate = strategy.key === 'rollingpush' ? true : undefined;\n }\n\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.getBlockDeviceMappingsSource = (command: IAmazonServerGroupCommand): IBlockDeviceMappingSource => {\n if (command.copySourceCustomBlockDeviceMappings) {\n return 'source';\n } else if (command.useAmiBlockDeviceMappings) {\n return 'ami';\n }\n return 'default';\n };\n\n cmd.selectBlockDeviceMappingsSource = (command: IAmazonServerGroupCommand, selection: string): void => {\n if (selection === 'source') {\n // copy block device mappings from source asg\n command.copySourceCustomBlockDeviceMappings = true;\n command.useAmiBlockDeviceMappings = false;\n } else if (selection === 'ami') {\n // use block device mappings from selected ami\n command.copySourceCustomBlockDeviceMappings = false;\n command.useAmiBlockDeviceMappings = true;\n } else {\n // use default block device mappings for selected instance type\n command.copySourceCustomBlockDeviceMappings = false;\n command.useAmiBlockDeviceMappings = false;\n }\n };\n\n cmd.regionIsDeprecated = (command: IAmazonServerGroupCommand): 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 return $q\n .all([\n AccountService.getCredentialsKeyedByAccount('aws'),\n this.securityGroupReader.getAllSecurityGroups(),\n SubnetReader.listSubnets(),\n AccountService.getPreferredZonesByAccount('aws'),\n KeyPairsReader.listKeyPairs(),\n this.awsInstanceTypeService.getAllTypesByRegion(),\n $q.when(clone(this.enabledMetrics)),\n $q.when(clone(this.healthCheckTypes)),\n $q.when(clone(this.terminationPolicies)),\n ])\n .then(\n ([\n credentialsKeyedByAccount,\n securityGroups,\n subnets,\n preferredZones,\n keyPairs,\n instanceTypesInfo,\n enabledMetrics,\n healthCheckTypes,\n terminationPolicies,\n ]) => {\n const backingData: Partial<IAmazonServerGroupCommandBackingData> = {\n credentialsKeyedByAccount,\n securityGroups,\n subnets,\n preferredZones,\n keyPairs,\n instanceTypesInfo,\n enabledMetrics,\n healthCheckTypes,\n terminationPolicies,\n };\n\n let securityGroupReloader: PromiseLike<void> = $q.when();\n backingData.accounts = keys(backingData.credentialsKeyedByAccount);\n backingData.filtered = {} as IAmazonServerGroupCommandBackingDataFiltered;\n backingData.scalingProcesses = AutoScalingProcessService.listProcesses();\n backingData.appLoadBalancers = application.getDataSource('loadBalancers').data;\n backingData.managedResources = application.getDataSource('managedResources')?.data?.resources;\n cmd.backingData = backingData as IAmazonServerGroupCommandBackingData;\n this.configureVpcId(cmd);\n backingData.filtered.securityGroups = this.getRegionalSecurityGroups(cmd);\n if (cmd.viewState.disableImageSelection) {\n this.configureInstanceTypes(cmd);\n }\n\n if (cmd.securityGroups && cmd.securityGroups.length) {\n const regionalSecurityGroupIds = map(this.getRegionalSecurityGroups(cmd), 'id');\n if (intersection(cmd.securityGroups, regionalSecurityGroupIds).length < cmd.securityGroups.length) {\n securityGroupReloader = this.refreshSecurityGroups(cmd, true);\n }\n }\n\n return securityGroupReloader.then(() => {\n this.applyOverrides('afterConfiguration', cmd);\n this.attachEventHandlers(cmd);\n });\n },\n );\n }\n\n public applyOverrides(phase: string, command: IAmazonServerGroupCommand): void {\n this.serverGroupCommandRegistry.getCommandOverrides('aws').forEach((override: any) => {\n if (override[phase]) {\n override[phase](command);\n }\n });\n }\n\n public configureKeyPairs(command: IAmazonServerGroupCommand): IServerGroupCommandResult {\n const result: IAmazonServerGroupCommandResult = { dirty: {} };\n if (command.credentials && command.region) {\n // isDefault is imperfect, since we don't know what the previous account/region was, but probably a safe bet\n const isDefault = some<any>(\n command.backingData.credentialsKeyedByAccount,\n (c) =>\n c.defaultKeyPair &&\n command.keyPair &&\n command.keyPair.indexOf(c.defaultKeyPair.replace('{{region}}', '')) === 0,\n );\n const filtered = chain(command.backingData.keyPairs)\n .filter({ account: command.credentials, region: command.region })\n .map('keyName')\n .value();\n if (command.keyPair && filtered.length && !filtered.includes(command.keyPair)) {\n const acct: IAccountDetails =\n command.backingData.credentialsKeyedByAccount[command.credentials] ||\n ({\n regions: [],\n defaultKeyPair: null,\n } as IAccountDetails);\n if (acct.defaultKeyPair) {\n // {{region}} is the only supported substitution pattern\n const defaultKeyPair = acct.defaultKeyPair.replace('{{region}}', command.region);\n if (isDefault && filtered.includes(defaultKeyPair)) {\n command.keyPair = defaultKeyPair;\n } else {\n command.keyPair = null;\n result.dirty.keyPair = true;\n }\n } else {\n command.keyPair = null;\n result.dirty.keyPair = true;\n }\n }\n command.backingData.filtered.keyPairs = filtered;\n } else {\n command.backingData.filtered.keyPairs = [];\n }\n return result;\n }\n\n public configureInstanceTypes(command: IAmazonServerGroupCommand): IServerGroupCommandResult {\n const result: IAmazonServerGroupCommandResult = { dirty: {} };\n\n if (command.region && (command.virtualizationType || command.viewState.disableImageSelection)) {\n let filteredTypesInfo: IAmazonInstanceType[] = this.awsInstanceTypeService.getAvailableTypesForRegions(\n command.backingData.instanceTypesInfo,\n [command.region],\n );\n\n if (command.virtualizationType || command.amiArchitecture) {\n filteredTypesInfo = this.awsInstanceTypeService.filterInstanceTypes(\n filteredTypesInfo,\n command.virtualizationType,\n !!command.vpcId,\n command.amiArchitecture,\n );\n }\n const filteredTypes: string[] = map(filteredTypesInfo, 'name');\n\n // handle incompatibility for single instance type case\n if (command.instanceType && !filteredTypes.includes(command.instanceType)) {\n result.dirty.instanceType = command.instanceType;\n command.instanceType = null;\n }\n\n // handle incompatibility for multiple instance types case\n const multipleInstanceTypes: string[] = map(command.launchTemplateOverridesForInstanceType, 'instanceType');\n const validInstanceTypes: string[] = intersection(multipleInstanceTypes, filteredTypes);\n const invalidInstanceTypes: string[] = difference(multipleInstanceTypes, validInstanceTypes);\n\n if (command.launchTemplateOverridesForInstanceType && invalidInstanceTypes.length > 0) {\n result.dirty.launchTemplateOverridesForInstanceType = command.launchTemplateOverridesForInstanceType.filter(\n (it) => invalidInstanceTypes.includes(it.instanceType),\n );\n command.launchTemplateOverridesForInstanceType = command.launchTemplateOverridesForInstanceType.filter((it) =>\n validInstanceTypes.includes(it.instanceType),\n );\n }\n\n command.backingData.filtered.instanceTypes = filteredTypes;\n command.backingData.filtered.instanceTypesInfo = filteredTypesInfo;\n } else {\n command.backingData.filtered.instanceTypes = [];\n command.backingData.filtered.instanceTypesInfo = [];\n }\n\n extend(command.viewState.dirty, result.dirty);\n return result;\n }\n\n public configureImages(command: IAmazonServerGroupCommand): IServerGroupCommandResult {\n const result: IAmazonServerGroupCommandResult = { dirty: {} };\n if (!command.amiName) {\n command.virtualizationType = null;\n command.amiArchitecture = null;\n }\n if (command.viewState.disableImageSelection) {\n return result;\n }\n if (command.amiName && !command.region) {\n result.dirty.amiName = true;\n command.amiName = null;\n }\n return result;\n }\n\n public configureAvailabilityZones(command: IAmazonServerGroupCommand): void {\n command.backingData.filtered.availabilityZones = find<IRegion>(\n command.backingData.credentialsKeyedByAccount[command.credentials].regions,\n { name: command.region },\n ).availabilityZones;\n }\n\n public configureSubnetPurposes(command: IAmazonServerGroupCommand): IServerGroupCommandResult {\n const result: IAmazonServerGroupCommandResult = { 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 (!chain(filteredData.subnetPurposes).some({ purpose: command.subnetType }).value()) {\n command.subnetType = null;\n result.dirty.subnetType = true;\n }\n return result;\n }\n\n public getRegionalSecurityGroups(command: IAmazonServerGroupCommand): ISecurityGroup[] {\n const newSecurityGroups = command.backingData.securityGroups[command.credentials] || { aws: {} };\n return chain(newSecurityGroups.aws[command.region])\n .filter({ vpcId: command.vpcId || null })\n .sortBy('name')\n .value();\n }\n\n public configureSecurityGroupOptions(command: IAmazonServerGroupCommand): IServerGroupCommandResult {\n const result: IAmazonServerGroupCommandResult = { dirty: {} };\n const currentOptions: ISecurityGroup[] = command.backingData.filtered.securityGroups;\n const newRegionalSecurityGroups = this.getRegionalSecurityGroups(command);\n const isExpression =\n typeof command.securityGroups === 'string' && (command.securityGroups as string).includes('${');\n if (currentOptions && command.securityGroups && !isExpression) {\n // not initializing - we are actually changing groups\n const currentGroupNames = command.securityGroups.map((groupId) => {\n const match = find(currentOptions, { id: groupId });\n return match ? match.name : groupId;\n });\n\n const matchedGroups = command.securityGroups\n .map((groupId) => {\n const securityGroup = find(currentOptions, { id: groupId }) || find(currentOptions, { name: groupId });\n return securityGroup ? securityGroup.name : null;\n })\n .map((groupName) => find(newRegionalSecurityGroups, { name: groupName }))\n .filter((group) => group);\n\n const matchedGroupNames = map(matchedGroups, 'name');\n const removed = xor(currentGroupNames, matchedGroupNames);\n command.securityGroups = map(matchedGroups, 'id');\n if (removed.length) {\n result.dirty.securityGroups = removed;\n }\n }\n command.backingData.filtered.securityGroups = newRegionalSecurityGroups.sort((a, b) => {\n return a.name.localeCompare(b.name);\n });\n return result;\n }\n\n public refreshSecurityGroups(\n command: IAmazonServerGroupCommand,\n skipCommandReconfiguration?: boolean,\n ): PromiseLike<void> {\n return this.cacheInitializer.refreshCache('securityGroups').then(() => {\n return this.securityGroupReader.getAllSecurityGroups().then((securityGroups) => {\n command.backingData.securityGroups = securityGroups;\n if (!skipCommandReconfiguration) {\n this.configureSecurityGroupOptions(command);\n }\n });\n });\n }\n\n private getLoadBalancerMap(command: IAmazonServerGroupCommand): IAmazonLoadBalancerSourceData[] {\n if (command.backingData.loadBalancers) {\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<IAmazonLoadBalancerSourceData>('loadBalancers')\n .flattenDeep<IAmazonLoadBalancerSourceData>()\n .value();\n }\n\n const appLoadBalancers = command.backingData.appLoadBalancers || [];\n return appLoadBalancers.filter((lb) => lb.region === command.region && lb.account === command.credentials);\n }\n\n public getLoadBalancerNames(command: IAmazonServerGroupCommand): 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: IAmazonServerGroupCommand): 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: IAmazonServerGroupCommand): string[] {\n const loadBalancersV2 = this.getLoadBalancerMap(command).filter(\n (lb) => lb.loadBalancerType !== 'classic',\n ) as IApplicationLoadBalancerSourceData[];\n const instanceTargetGroups = flatten(\n loadBalancersV2.map<any>((lb) => lb.targetGroups.filter((tg) => tg.targetType === 'instance')),\n );\n return instanceTargetGroups.map((tg) => tg.name).sort();\n }\n\n private getValidMatches(all: string[], current: string[]): { valid: string[]; invalid: string[]; spel: string[] } {\n const spel = current.filter((v) => v.includes('${'));\n const matched = intersection(all, current);\n const [valid, invalid] = partition(current, (c) => matched.includes(c) || spel.includes(c));\n return { valid, invalid, spel };\n }\n\n public configureLoadBalancerOptions(command: IAmazonServerGroupCommand): IServerGroupCommandResult {\n const result: IAmazonServerGroupCommandResult = { dirty: {} };\n const currentLoadBalancers = (command.loadBalancers || []).concat(command.vpcLoadBalancers || []);\n const currentTargetGroups = command.targetGroups || [];\n const newLoadBalancers = this.getLoadBalancerNames(command);\n const vpcLoadBalancers = this.getVpcLoadBalancerNames(command);\n const allTargetGroups = this.getTargetGroupNames(command);\n\n if (currentLoadBalancers && command.loadBalancers) {\n const allValidLoadBalancers = command.vpcId ? newLoadBalancers : newLoadBalancers.concat(vpcLoadBalancers);\n const { valid, invalid, spel } = this.getValidMatches(allValidLoadBalancers, currentLoadBalancers);\n command.loadBalancers = intersection(newLoadBalancers.concat(spel), valid);\n if (!command.vpcId) {\n command.vpcLoadBalancers = intersection(vpcLoadBalancers, valid);\n } else {\n delete command.vpcLoadBalancers;\n }\n if (invalid.length) {\n result.dirty.loadBalancers = invalid;\n }\n command.viewState.spelLoadBalancers = spel || [];\n }\n\n if (currentTargetGroups && command.targetGroups && !currentTargetGroups.includes('${')) {\n const { valid, invalid, spel } = this.getValidMatches(allTargetGroups, currentTargetGroups);\n command.targetGroups = valid;\n if (invalid.length) {\n result.dirty.targetGroups = invalid;\n }\n command.viewState.spelTargetGroups = spel || [];\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: IAmazonServerGroupCommand, skipCommandReconfiguration?: boolean) {\n return this.loadBalancerReader.listLoadBalancers('aws').then((loadBalancers) => {\n command.backingData.loadBalancers = loadBalancers;\n if (!skipCommandReconfiguration) {\n this.configureLoadBalancerOptions(command);\n }\n });\n }\n\n public configureVpcId(command: IAmazonServerGroupCommand): IAmazonServerGroupCommandResult {\n const result: IAmazonServerGroupCommandResult = { dirty: {} };\n if (!command.subnetType) {\n command.vpcId = null;\n result.dirty.vpcId = true;\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\n extend(result.dirty, this.configureInstanceTypes(command).dirty);\n return result;\n }\n\n // TODO: Instead of attaching these to the command itself, they could be static methods\n public attachEventHandlers(cmd: IAmazonServerGroupCommand): void {\n cmd.usePreferredZonesChanged = (command: IAmazonServerGroupCommand): IAmazonServerGroupCommandResult => {\n const currentZoneCount = command.availabilityZones ? command.availabilityZones.length : 0;\n const result: IAmazonServerGroupCommandResult = { dirty: {} };\n const preferredZonesForAccount = command.backingData.preferredZones[command.credentials];\n if (preferredZonesForAccount && preferredZonesForAccount[command.region] && command.viewState.usePreferredZones) {\n command.availabilityZones = cloneDeep(preferredZonesForAccount[command.region].sort());\n } else {\n command.availabilityZones = intersection(\n command.availabilityZones,\n command.backingData.filtered.availabilityZones,\n );\n const newZoneCount = command.availabilityZones ? command.availabilityZones.length : 0;\n if (currentZoneCount !== newZoneCount) {\n result.dirty.availabilityZones = true;\n }\n }\n return result;\n };\n\n cmd.subnetChanged = (command: IAmazonServerGroupCommand): IServerGroupCommandResult => {\n const result = this.configureVpcId(command);\n extend(result.dirty, this.configureSecurityGroupOptions(command).dirty);\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: IAmazonServerGroupCommand): IServerGroupCommandResult => {\n const result: IAmazonServerGroupCommandResult = { dirty: {} };\n const filteredData = command.backingData.filtered;\n extend(result.dirty, this.configureSubnetPurposes(command).dirty);\n if (command.region) {\n extend(result.dirty, command.subnetChanged(command).dirty);\n extend(result.dirty, this.configureInstanceTypes(command).dirty);\n\n this.configureAvailabilityZones(command);\n extend(result.dirty, command.usePreferredZonesChanged(command).dirty);\n\n extend(result.dirty, this.configureImages(command).dirty);\n extend(result.dirty, this.configureKeyPairs(command).dirty);\n } else {\n filteredData.regionalAvailabilityZones = null;\n }\n setMatchingResourceSummary(command);\n return result;\n };\n\n cmd.clusterChanged = (command: IAmazonServerGroupCommand): void => {\n command.moniker = NameUtils.getMoniker(command.application, command.stack, command.freeFormDetails);\n setMatchingResourceSummary(command);\n };\n\n cmd.credentialsChanged = (command: IAmazonServerGroupCommand): IServerGroupCommandResult => {\n const result: IAmazonServerGroupCommandResult = { dirty: {} };\n const backingData = command.backingData;\n if (command.credentials) {\n const regionsForAccount: IAccountDetails =\n backingData.credentialsKeyedByAccount[command.credentials] ||\n ({ regions: [], defaultKeyPair: null } as IAccountDetails);\n backingData.filtered.regions = regionsForAccount.regions;\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 setMatchingResourceSummary(command);\n return result;\n };\n\n cmd.imageChanged = (command: IAmazonServerGroupCommand): IServerGroupCommandResult =>\n this.configureInstanceTypes(command);\n\n // Handles derived values for single instance type case\n cmd.instanceTypeChanged = (command: IAmazonServerGroupCommand): void => {\n command.ebsOptimized = this.awsInstanceTypeService.isEbsOptimized(command.instanceType);\n };\n\n // Handles derived values for multiple instance types case\n cmd.launchTemplateOverridesChanged = (command: IAmazonServerGroupCommand): void => {\n // set ebsOptimized to true if all instance types in overrides are included in the hard-coded array in awsInstanceTypeService.\n // this function exists for backwards compatibility with single instance type case, matching behavior in `cmd.instanceTypeChanged`\n // note: this parameter has no effect on instance types with EBS optimization enabled by default.\n command.ebsOptimized = command.launchTemplateOverridesForInstanceType?.every((o) =>\n this.awsInstanceTypeService.isEbsOptimized(o.instanceType),\n );\n };\n\n this.applyOverrides('attachEventHandlers', cmd);\n }\n}\n\nexport const AWS_SERVER_GROUP_CONFIGURATION_SERVICE = 'spinnaker.amazon.serverGroup.configure.service';\nmodule(AWS_SERVER_GROUP_CONFIGURATION_SERVICE, [\n SECURITY_GROUP_READER,\n AMAZON_INSTANCE_AWSINSTANCETYPE_SERVICE,\n LOAD_BALANCER_READ_SERVICE,\n CACHE_INITIALIZER_SERVICE,\n SERVER_GROUP_COMMAND_REGISTRY_PROVIDER,\n]).service('awsServerGroupConfigurationService', AwsServerGroupConfigurationService);\n","import type { IQService } from 'angular';\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport type { Application, InstanceTypeService } from '@spinnaker/core';\nimport {\n AccountService,\n DeploymentStrategyRegistry,\n INSTANCE_TYPE_SERVICE,\n NameUtils,\n SubnetReader,\n} from '@spinnaker/core';\n\nimport { AWSProviderSettings } from '../../aws.settings';\nimport type { IAmazonLaunchTemplateOverrides, ILaunchTemplateData } from '../../domain';\nimport type { IAmazonServerGroup, IAmazonServerGroupView, INetworkInterface } from '../../domain';\nimport type {\n AwsServerGroupConfigurationService,\n IAmazonInstanceTypeOverride,\n IAmazonServerGroupCommand,\n IAmazonServerGroupCommandViewState,\n IAmazonServerGroupDeployConfiguration,\n} from './serverGroupConfiguration.service';\nimport { AWS_SERVER_GROUP_CONFIGURATION_SERVICE } from './serverGroupConfiguration.service';\n\nexport const AMAZON_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE =\n 'spinnaker.amazon.serverGroupCommandBuilder.service';\nexport const name = AMAZON_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE; // for backwards compatibility\n\nexport interface AwsServerGroupCommandBuilder {\n buildNewServerGroupCommand(\n application: Application,\n defaults?: { account?: string; region?: string; subnet?: string; mode?: string },\n ): PromiseLike<Partial<IAmazonServerGroupCommand>>;\n\n buildServerGroupCommandFromExisting(\n application: Application,\n serverGroup: IAmazonServerGroupView,\n mode?: string,\n ): PromiseLike<Partial<IAmazonServerGroupCommand>>;\n\n buildNewServerGroupCommandForPipeline(): PromiseLike<Partial<IAmazonServerGroupCommand>>;\n\n buildServerGroupCommandFromPipeline(\n application: Application,\n originalCluster: IAmazonServerGroupDeployConfiguration,\n ): PromiseLike<Partial<IAmazonServerGroupCommand>>;\n\n buildUpdateServerGroupCommand(serverGroup: IAmazonServerGroup): Partial<IAmazonServerGroupCommand>;\n}\n\nangular\n .module(AMAZON_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE, [\n INSTANCE_TYPE_SERVICE,\n AWS_SERVER_GROUP_CONFIGURATION_SERVICE,\n ])\n .factory('awsServerGroupCommandBuilder', [\n '$q',\n 'instanceTypeService',\n 'awsServerGroupConfigurationService',\n function (\n $q: IQService,\n instanceTypeService: InstanceTypeService,\n awsServerGroupConfigurationService: AwsServerGroupConfigurationService,\n ) {\n function buildNewServerGroupCommand(\n application: Application,\n defaults: { account?: string; region?: string; subnet?: string; mode?: string },\n ) {\n defaults = defaults || {};\n\n const credentialsLoader = AccountService.getCredentialsKeyedByAccount('aws');\n\n const defaultCredentials =\n defaults.account || application.defaultCredentials.aws || AWSProviderSettings.defaults.account;\n const defaultRegion = defaults.region || application.defaultRegions.aws || AWSProviderSettings.defaults.region;\n const defaultSubnet = defaults.subnet || AWSProviderSettings.defaults.subnetType || '';\n\n const preferredZonesLoader = AccountService.getAvailabilityZonesForAccountAndRegion(\n 'aws',\n defaultCredentials,\n defaultRegion,\n );\n\n return $q\n .all([preferredZonesLoader, credentialsLoader])\n .then(function ([preferredZones, credentialsKeyedByAccount]) {\n const credentials = credentialsKeyedByAccount[defaultCredentials];\n const keyPair = credentials ? credentials.defaultKeyPair : null;\n const applicationAwsSettings = application.attributes?.providerSettings?.aws ?? {};\n\n let defaultIamRole = AWSProviderSettings.defaults.iamRole || 'BaseIAMRole';\n defaultIamRole = defaultIamRole.replace('{{application}}', application.name);\n\n const useAmiBlockDeviceMappings = applicationAwsSettings.useAmiBlockDeviceMappings || false;\n\n const command: Partial<IAmazonServerGroupCommand> = {\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 targetHealthyDeployPercentage: 100,\n cooldown: 10,\n enabledMetrics: [],\n healthCheckType: 'EC2',\n healthCheckGracePeriod: 600,\n instanceMonitoring: false,\n ebsOptimized: false,\n selectedProvider: 'aws',\n iamRole: defaultIamRole,\n terminationPolicies: ['Default'],\n vpcId: null,\n subnetType: defaultSubnet,\n availabilityZones: preferredZones,\n keyPair: keyPair,\n suspendedProcesses: [],\n securityGroups: [],\n stack: '',\n freeFormDetails: '',\n spotPrice: '',\n tags: {},\n useAmiBlockDeviceMappings: useAmiBlockDeviceMappings,\n copySourceCustomBlockDeviceMappings: false, // default to using block device mappings from current instance type\n viewState: {\n instanceProfile: 'custom',\n useSimpleInstanceTypeSelector: true,\n useAllImageSelection: false,\n useSimpleCapacity: true,\n usePreferredZones: true,\n mode: defaults.mode || 'create',\n disableStrategySelection: true,\n dirty: {},\n submitButtonLabel: getSubmitButtonLabel(defaults.mode || 'create'),\n } as IAmazonServerGroupCommandViewState,\n };\n\n if (application.attributes?.platformHealthOnlyShowOverride && application.attributes?.platformHealthOnly) {\n command.interestingHealthProviderNames = ['Amazon'];\n }\n\n if (defaultCredentials === 'test' && AWSProviderSettings.serverGroups?.enableIPv6) {\n command.associateIPv6Address = true;\n }\n\n if (AWSProviderSettings.serverGroups?.enableIMDSv2) {\n /**\n * Older SDKs do not support IMDSv2. A timestamp can be optionally configured at which any apps created after can safely default to using IMDSv2.\n */\n const appAgeRequirement = AWSProviderSettings.serverGroups.defaultIMDSv2AppAgeLimit;\n const creationDate = application.attributes?.createTs;\n\n command.requireIMDSv2 = appAgeRequirement && creationDate && Number(creationDate) > appAgeRequirement;\n }\n\n return command;\n });\n }\n\n function buildServerGroupCommandFromPipeline(\n application: Application,\n originalCluster: IAmazonServerGroupDeployConfiguration,\n ) {\n const pipelineCluster = _.cloneDeep(originalCluster);\n const region = Object.keys(pipelineCluster.availabilityZones)[0];\n\n const instanceTypes = pipelineCluster.launchTemplateOverridesForInstanceType\n ? pipelineCluster.launchTemplateOverridesForInstanceType.map((o) => o.instanceType)\n : [pipelineCluster.instanceType];\n const instanceTypeCategoryLoader = instanceTypeService.getCategoryForMultipleInstanceTypes(\n 'aws',\n instanceTypes,\n );\n\n const commandOptions = { account: pipelineCluster.account, region: region };\n const asyncLoader = $q.all([\n buildNewServerGroupCommand(application, commandOptions),\n instanceTypeCategoryLoader,\n ]);\n\n return asyncLoader.then(function ([command, instanceProfile]) {\n const zones = pipelineCluster.availabilityZones[region];\n const usePreferredZones = zones.join(',') === command.availabilityZones.join(',');\n\n const viewState = {\n instanceProfile,\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 useSimpleInstanceTypeSelector: isSimpleModeEnabled(pipelineCluster),\n };\n\n const viewOverrides = {\n region: region,\n credentials: pipelineCluster.account,\n availabilityZones: pipelineCluster.availabilityZones[region],\n iamRole: pipelineCluster.iamRole,\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() {\n return $q.when({\n viewState: {\n requiresTemplateSelection: true,\n } as IAmazonServerGroupCommandViewState,\n });\n }\n\n function getSubmitButtonLabel(mode: string) {\n switch (mode) {\n case 'createPipeline':\n return 'Add';\n case 'editPipeline':\n return 'Done';\n case 'clone':\n return 'Clone';\n default:\n return 'Create';\n }\n }\n\n function buildUpdateServerGroupCommand(serverGroup: IAmazonServerGroup) {\n const command = ({\n type: 'modifyAsg',\n asgs: [{ asgName: serverGroup.name, region: serverGroup.region }],\n cooldown: serverGroup.asg.defaultCooldown,\n enabledMetrics: (serverGroup.asg?.enabledMetrics ?? []).map((m) => m.metric),\n healthCheckGracePeriod: serverGroup.asg.healthCheckGracePeriod,\n healthCheckType: serverGroup.asg.healthCheckType,\n terminationPolicies: angular.copy(serverGroup.asg.terminationPolicies),\n credentials: serverGroup.account,\n capacityRebalance: serverGroup.asg.capacityRebalance,\n } as Partial<IAmazonServerGroupCommand>) as IAmazonServerGroupCommand;\n awsServerGroupConfigurationService.configureUpdateCommand(command);\n return command;\n }\n\n function buildServerGroupCommandFromExisting(\n application: Application,\n serverGroup: IAmazonServerGroupView,\n mode = 'clone',\n ) {\n const preferredZonesLoader = AccountService.getPreferredZonesByAccount('aws');\n const subnetsLoader = SubnetReader.listSubnets();\n\n const serverGroupName = NameUtils.parseServerGroupName(serverGroup.asg.autoScalingGroupName);\n\n let instanceTypes;\n if (serverGroup.mixedInstancesPolicy) {\n const ltOverrides = serverGroup.mixedInstancesPolicy?.launchTemplateOverridesForInstanceType;\n // note: single launch template case is currently the only supported case for mixed instances policy\n instanceTypes = ltOverrides\n ? ltOverrides.map((o) => o.instanceType)\n : [serverGroup.mixedInstancesPolicy?.launchTemplates[0]?.launchTemplateData?.instanceType];\n } else if (serverGroup.launchTemplate) {\n instanceTypes = [_.get(serverGroup, 'launchTemplate.launchTemplateData.instanceType')];\n } else if (serverGroup.launchConfig) {\n instanceTypes = [_.get(serverGroup, 'launchConfig.instanceType')];\n }\n const instanceTypeCategoryLoader = instanceTypeService.getCategoryForMultipleInstanceTypes(\n 'aws',\n instanceTypes,\n );\n\n return $q\n .all([preferredZonesLoader, subnetsLoader, instanceTypeCategoryLoader])\n .then(([preferredZones, subnets, instanceProfile]) => {\n const zones = serverGroup.asg.availabilityZones.sort();\n let usePreferredZones = false;\n const preferredZonesForAccount = preferredZones[serverGroup.account];\n if (preferredZonesForAccount) {\n const preferredZones = preferredZonesForAccount[serverGroup.region].sort();\n usePreferredZones = zones.join(',') === preferredZones.join(',');\n }\n\n // These processes should never be copied over, as the affect launching instances and enabling traffic\n const enabledProcesses = ['Launch', 'Terminate', 'AddToLoadBalancer'];\n\n const applicationAwsSettings = application.attributes?.providerSettings?.aws ?? {};\n const useAmiBlockDeviceMappings = applicationAwsSettings.useAmiBlockDeviceMappings || false;\n\n const existingTags: { [key: string]: string } = {};\n // These tags are applied by Clouddriver (if configured to do so), regardless of what the user might enter\n // Might be worth feature flagging this if it turns out other folks are hard-coding these values\n const reservedTags = ['spinnaker:application', 'spinnaker:stack', 'spinnaker:details'];\n if (serverGroup.asg.tags) {\n serverGroup.asg.tags\n .filter((t) => !reservedTags.includes(t.key))\n .forEach((tag) => {\n existingTags[tag.key] = tag.value;\n });\n }\n\n const command: Partial<IAmazonServerGroupCommand> = {\n application: application.name,\n strategy: '',\n stack: serverGroupName.stack,\n freeFormDetails: serverGroupName.freeFormDetails,\n credentials: serverGroup.account,\n cooldown: serverGroup.asg.defaultCooldown,\n enabledMetrics: _.get(serverGroup, 'asg.enabledMetrics', []).map((m) => m.metric),\n healthCheckGracePeriod: serverGroup.asg.healthCheckGracePeriod,\n healthCheckType: serverGroup.asg.healthCheckType,\n terminationPolicies: serverGroup.asg.terminationPolicies,\n loadBalancers: serverGroup.asg.loadBalancerNames,\n region: serverGroup.region,\n useSourceCapacity: false,\n capacity: {\n min: serverGroup.asg.minSize,\n max: serverGroup.asg.maxSize,\n desired: serverGroup.asg.desiredCapacity,\n },\n targetHealthyDeployPercentage: 100,\n availabilityZones: zones,\n selectedProvider: 'aws',\n source: {\n account: serverGroup.account,\n region: serverGroup.region,\n asgName: serverGroup.asg.autoScalingGroupName,\n },\n suspendedProcesses: (serverGroup.asg.suspendedProcesses || [])\n .map((process) => process.processName)\n .filter((name) => !enabledProcesses.includes(name)),\n tags: Object.assign({}, serverGroup.tags, existingTags),\n targetGroups: serverGroup.targetGroups,\n useAmiBlockDeviceMappings: useAmiBlockDeviceMappings,\n copySourceCustomBlockDeviceMappings: mode === 'clone', // default to using block device mappings if not cloning\n viewState: {\n instanceProfile,\n useAllImageSelection: false,\n useSimpleCapacity: serverGroup.asg.minSize === serverGroup.asg.maxSize,\n usePreferredZones: usePreferredZones,\n mode: mode,\n submitButtonLabel: getSubmitButtonLabel(mode),\n isNew: false,\n dirty: {},\n } as IAmazonServerGroupCommandViewState,\n };\n\n if (application.attributes?.platformHealthOnlyShowOverride && application.attributes?.platformHealthOnly) {\n command.interestingHealthProviderNames = ['Amazon'];\n }\n\n if (mode === 'editPipeline') {\n command.useSourceCapacity = true;\n command.viewState.useSimpleCapacity = false;\n command.strategy = 'redblack';\n const redblack = DeploymentStrategyRegistry.getStrategy('redblack');\n redblack.initializationMethod && redblack.initializationMethod(command);\n command.suspendedProcesses = [];\n }\n\n const vpcZoneIdentifier = serverGroup.asg.vpczoneIdentifier;\n if (vpcZoneIdentifier !== '') {\n const subnetId = vpcZoneIdentifier.split(',')[0];\n const subnet = subnets.find((x) => x.id === subnetId);\n command.subnetType = subnet.purpose;\n command.vpcId = subnet.vpcId;\n } else {\n command.subnetType = '';\n command.vpcId = null;\n }\n\n if (serverGroup.launchConfig) {\n angular.extend(command, {\n instanceType: serverGroup.launchConfig.instanceType,\n iamRole: serverGroup.launchConfig.iamInstanceProfile,\n keyPair: serverGroup.launchConfig.keyName,\n associatePublicIpAddress: serverGroup.launchConfig.associatePublicIpAddress,\n ramdiskId: serverGroup.launchConfig.ramdiskId,\n instanceMonitoring:\n serverGroup.launchConfig.instanceMonitoring && serverGroup.launchConfig.instanceMonitoring.enabled,\n ebsOptimized: serverGroup.launchConfig.ebsOptimized,\n spotPrice: serverGroup.launchConfig.spotPrice,\n });\n if (serverGroup.launchConfig.userData) {\n command.base64UserData = serverGroup.launchConfig.userData;\n }\n command.viewState.imageId = serverGroup.launchConfig.imageId;\n command.viewState.useSimpleInstanceTypeSelector = true;\n }\n\n if (serverGroup.launchTemplate || serverGroup.mixedInstancesPolicy) {\n let launchTemplateData: ILaunchTemplateData, spotMaxPrice: string;\n if (serverGroup.launchTemplate) {\n launchTemplateData = serverGroup.launchTemplate.launchTemplateData;\n spotMaxPrice = launchTemplateData.instanceMarketOptions?.spotOptions?.maxPrice;\n command.instanceType = launchTemplateData.instanceType;\n command.viewState.useSimpleInstanceTypeSelector = true;\n if (launchTemplateData.userData) {\n command.base64UserData = launchTemplateData.userData;\n }\n }\n\n if (serverGroup.mixedInstancesPolicy) {\n const mip = serverGroup.mixedInstancesPolicy;\n // note: single launch template case is currently the only supported case for mixed instances policy\n launchTemplateData = mip?.launchTemplates?.[0]?.launchTemplateData;\n spotMaxPrice = mip?.instancesDistribution?.spotMaxPrice;\n command.securityGroups = launchTemplateData.networkInterfaces\n ? (launchTemplateData.networkInterfaces.find((ni) => ni.deviceIndex === 0) ?? {}).groups\n : launchTemplateData.securityGroups;\n command.onDemandAllocationStrategy = mip.instancesDistribution.onDemandAllocationStrategy;\n command.onDemandBaseCapacity = mip.instancesDistribution.onDemandBaseCapacity;\n command.onDemandPercentageAboveBaseCapacity =\n mip.instancesDistribution.onDemandPercentageAboveBaseCapacity;\n command.spotAllocationStrategy = mip.instancesDistribution.spotAllocationStrategy;\n command.spotInstancePools = mip.instancesDistribution.spotInstancePools;\n\n // 'launchTemplateOverridesForInstanceType' is used for multiple instance types case, 'instanceType' is used for all other cases.\n if (mip.launchTemplateOverridesForInstanceType) {\n command.launchTemplateOverridesForInstanceType = getInstanceTypesWithPriority(\n mip.launchTemplateOverridesForInstanceType,\n );\n } else {\n command.instanceType = launchTemplateData.instanceType;\n }\n\n command.viewState.useSimpleInstanceTypeSelector = isSimpleModeEnabled(command);\n }\n\n const networkInterfaces = _.get(launchTemplateData, 'networkInterfaces[0]');\n const ipv6AddressCount = (networkInterfaces as INetworkInterface)?.ipv6AddressCount ?? 0;\n\n const asgSettings = AWSProviderSettings.serverGroups;\n const isTestEnv = serverGroup.accountDetails && serverGroup.accountDetails.environment === 'test';\n const shouldAutoEnableIPv6 =\n asgSettings && asgSettings.enableIPv6 && asgSettings.setIPv6InTest && isTestEnv;\n\n angular.extend(command, {\n iamRole: launchTemplateData.iamInstanceProfile.name,\n keyPair: launchTemplateData.keyName,\n associateIPv6Address: shouldAutoEnableIPv6 || Boolean(ipv6AddressCount),\n ramdiskId: launchTemplateData.ramdiskId,\n instanceMonitoring: launchTemplateData.monitoring && launchTemplateData.monitoring.enabled,\n ebsOptimized: launchTemplateData.ebsOptimized,\n spotPrice: spotMaxPrice || undefined,\n requireIMDSv2: Boolean(launchTemplateData.metadataOptions?.httpTokens === 'required'),\n unlimitedCpuCredits: launchTemplateData.creditSpecification\n ? launchTemplateData.creditSpecification.cpuCredits === 'unlimited'\n : undefined,\n });\n\n command.viewState.imageId = launchTemplateData.imageId;\n }\n\n if (mode === 'clone' && serverGroup.image && serverGroup.image.name) {\n command.amiName = serverGroup.image.name;\n }\n\n if (serverGroup.launchConfig && serverGroup.launchConfig.securityGroups.length) {\n command.securityGroups = serverGroup.launchConfig.securityGroups;\n }\n\n if (serverGroup.launchTemplate && serverGroup.launchTemplate.launchTemplateData.securityGroups.length) {\n command.securityGroups = serverGroup.launchTemplate.launchTemplateData.securityGroups;\n }\n\n if (serverGroup.launchTemplate && serverGroup.launchTemplate.launchTemplateData.networkInterfaces) {\n const networkInterface =\n serverGroup.launchTemplate.launchTemplateData.networkInterfaces.find((ni) => ni.deviceIndex === 0) ??\n ({} as INetworkInterface);\n command.securityGroups = networkInterface.groups;\n }\n\n return command;\n });\n }\n\n // Since Deck allows changing priority of instance types via drag handle, fill priority field explicitly if empty\n function getInstanceTypesWithPriority(\n instanceTypeOverrides: IAmazonLaunchTemplateOverrides[],\n ): IAmazonInstanceTypeOverride[] {\n let explicitPriority = 1;\n return _.sortBy(instanceTypeOverrides, ['priority']).map((override) => {\n const { instanceType, weightedCapacity } = override;\n let priority;\n if (override.priority) {\n priority = override.priority;\n explicitPriority = override.priority + 1;\n } else {\n priority = explicitPriority++;\n }\n return { instanceType, weightedCapacity, priority };\n });\n }\n\n function isSimpleModeEnabled(\n command: IAmazonServerGroupDeployConfiguration | Partial<IAmazonServerGroupCommand>,\n ) {\n const isAdvancedModeEnabledInCommand =\n command.onDemandAllocationStrategy ||\n command.onDemandBaseCapacity ||\n command.onDemandPercentageAboveBaseCapacity ||\n command.spotAllocationStrategy ||\n command.spotInstancePools ||\n (command.launchTemplateOverridesForInstanceType && command.launchTemplateOverridesForInstanceType.length > 0);\n\n return !isAdvancedModeEnabledInCommand;\n }\n\n return {\n buildNewServerGroupCommand,\n buildServerGroupCommandFromExisting,\n buildNewServerGroupCommandForPipeline,\n buildServerGroupCommandFromPipeline,\n buildUpdateServerGroupCommand,\n } as AwsServerGroupCommandBuilder;\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { TaskExecutor, TaskMonitor } from '@spinnaker/core';\nimport { AMAZON_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE } from '../../configure/serverGroupCommandBuilder.service';\n\nexport const AMAZON_SERVERGROUP_DETAILS_ADVANCEDSETTINGS_EDITASGADVANCEDSETTINGS_MODAL_CONTROLLER =\n 'spinnaker.amazon.serverGroup.editAsgAdvancedSettings.modal.controller';\nexport const name = AMAZON_SERVERGROUP_DETAILS_ADVANCEDSETTINGS_EDITASGADVANCEDSETTINGS_MODAL_CONTROLLER; // for backwards compatibility\nmodule(AMAZON_SERVERGROUP_DETAILS_ADVANCEDSETTINGS_EDITASGADVANCEDSETTINGS_MODAL_CONTROLLER, [\n AMAZON_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE,\n]).controller('EditAsgAdvancedSettingsCtrl', [\n '$scope',\n '$uibModalInstance',\n 'application',\n 'serverGroup',\n 'awsServerGroupCommandBuilder',\n function ($scope, $uibModalInstance, application, serverGroup, awsServerGroupCommandBuilder) {\n $scope.command = awsServerGroupCommandBuilder.buildUpdateServerGroupCommand(serverGroup);\n\n $scope.serverGroup = serverGroup;\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: 'Update Advanced Settings for ' + serverGroup.name,\n modalInstance: $uibModalInstance,\n onTaskComplete: () => application.serverGroups.refresh(),\n });\n\n this.submit = () => {\n const job = [$scope.command];\n\n const submitMethod = function () {\n return TaskExecutor.executeTask({\n job: job,\n application: application,\n description: 'Update Advanced Settings for ' + serverGroup.name,\n });\n };\n\n $scope.taskMonitor.submit(submitMethod);\n };\n\n this.cancel = $uibModalInstance.dismiss;\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { get } from 'lodash';\nimport { SERVER_GROUP_WRITER, TaskMonitor } from '@spinnaker/core';\n\nexport const AMAZON_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER =\n 'spinnaker.amazon.serverGroup.details.rollback.controller';\nexport const name = AMAZON_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER; // for backwards compatibility\nmodule(AMAZON_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER, [SERVER_GROUP_WRITER]).controller(\n 'awsRollbackServerGroupCtrl',\n [\n '$scope',\n '$uibModalInstance',\n 'serverGroupWriter',\n 'application',\n 'serverGroup',\n 'previousServerGroup',\n 'disabledServerGroups',\n 'allServerGroups',\n function (\n $scope,\n $uibModalInstance,\n serverGroupWriter,\n application,\n serverGroup,\n previousServerGroup,\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 const desired = serverGroup.capacity.desired;\n\n let rollbackType = 'EXPLICIT';\n\n if (allServerGroups.length === 0 && serverGroup.entityTags) {\n const previousServerGroup = get(serverGroup, 'entityTags.creationMetadata.value.previousServerGroup');\n if (previousServerGroup) {\n rollbackType = 'PREVIOUS_IMAGE';\n $scope.previousServerGroup = {\n name: previousServerGroup.name,\n imageName: previousServerGroup.imageName,\n };\n\n if (previousServerGroup.imageId && previousServerGroup.imageId !== previousServerGroup.imageName) {\n $scope.previousServerGroup.imageId = previousServerGroup.imageId;\n }\n\n const buildNumber = get(previousServerGroup, 'buildInfo.jenkins.number');\n if (buildNumber) {\n $scope.previousServerGroup.buildNumber = buildNumber;\n }\n }\n }\n\n let healthyPercent;\n if (desired < 10) {\n healthyPercent = 100;\n } else if (desired < 20) {\n // accept 1 instance in an unknown state during rollback\n healthyPercent = 90;\n } else {\n healthyPercent = 95;\n }\n\n $scope.command = {\n rollbackType: rollbackType,\n rollbackContext: {\n rollbackServerGroupName: serverGroup.name,\n restoreServerGroupName: previousServerGroup ? previousServerGroup.name : undefined,\n targetHealthyRollbackPercentage: healthyPercent,\n delayBeforeDisableSeconds: 0,\n },\n };\n\n $scope.minHealthy = function (percent) {\n return Math.ceil((desired * percent) / 100);\n };\n\n if (application && application.attributes) {\n if (application.attributes.platformHealthOnlyShowOverride && application.attributes.platformHealthOnly) {\n $scope.command.interestingHealthProviderNames = ['Amazon'];\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 if (rollbackType === 'PREVIOUS_IMAGE') {\n // no need to validate when using an explicit image\n return true;\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 { react2angular } from 'react2angular';\nimport { withErrorBoundary } from '@spinnaker/core';\nimport { ScalingPolicySummary } from './ScalingPolicySummary';\n\nexport const SCALING_POLICY_SUMMARY_COMPONENT = 'spinnaker.amazon.scalingPolicy.scalingPolicySummary.component';\nmodule(SCALING_POLICY_SUMMARY_COMPONENT, []).component(\n 'scalingPolicySummary',\n react2angular(withErrorBoundary(ScalingPolicySummary, 'scalingPolicySummary'), [\n 'application',\n 'policy',\n 'serverGroup',\n ]),\n);\n","import { module } from 'angular';\n\nimport { SCALING_POLICY_SUMMARY_COMPONENT } from './scalingPolicySummary.component';\n\nexport const SCALING_POLICY_MODULE = 'spinnaker.amazon.scalingPolicy.module';\nmodule(SCALING_POLICY_MODULE, [SCALING_POLICY_SUMMARY_COMPONENT]);\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { TaskExecutor, TaskMonitor } from '@spinnaker/core';\n\nexport const AMAZON_SERVERGROUP_DETAILS_SCALINGPROCESSES_MODIFYSCALINGPROCESSES_CONTROLLER =\n 'spinnaker.amazon.serverGroup.details.autoscaling.process.controller';\nexport const name = AMAZON_SERVERGROUP_DETAILS_SCALINGPROCESSES_MODIFYSCALINGPROCESSES_CONTROLLER; // for backwards compatibility\nangular\n .module(AMAZON_SERVERGROUP_DETAILS_SCALINGPROCESSES_MODIFYSCALINGPROCESSES_CONTROLLER, [])\n .controller('ModifyScalingProcessesCtrl', [\n '$scope',\n '$uibModalInstance',\n 'application',\n 'serverGroup',\n 'processes',\n function ($scope, $uibModalInstance, application, serverGroup, processes) {\n $scope.command = angular.copy(processes);\n $scope.serverGroup = serverGroup;\n $scope.verification = {};\n\n this.isValid = function () {\n if (!$scope.verification.verified) {\n return false;\n }\n return this.isDirty();\n };\n\n const currentlyEnabled = _.chain($scope.command).filter({ enabled: true }).map('name').value();\n const currentlySuspended = _.chain($scope.command).filter({ enabled: false }).map('name').value();\n\n this.isDirty = function () {\n const enabledSelections = _.chain($scope.command).filter({ enabled: true }).map('name').value();\n const suspendedSelections = _.chain($scope.command).filter({ enabled: false }).map('name').value();\n const toEnable = _.intersection(currentlySuspended, enabledSelections);\n const toSuspend = _.intersection(currentlyEnabled, suspendedSelections);\n\n return !!(toEnable.length || toSuspend.length);\n };\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: 'Update Auto Scaling Processes for ' + serverGroup.name,\n modalInstance: $uibModalInstance,\n onTaskComplete: () => application.serverGroups.refresh(),\n });\n\n this.submit = function () {\n const enabledSelections = _.chain($scope.command).filter({ enabled: true }).map('name').value();\n const suspendedSelections = _.chain($scope.command).filter({ enabled: false }).map('name').value();\n const toEnable = _.intersection(currentlySuspended, enabledSelections);\n const toSuspend = _.intersection(currentlyEnabled, suspendedSelections);\n\n const job = [];\n if (toEnable.length) {\n job.push({\n type: 'modifyScalingProcess',\n action: 'resume',\n processes: toEnable,\n asgName: serverGroup.name,\n regions: [serverGroup.region],\n credentials: serverGroup.account,\n cloudProvider: 'aws',\n reason: $scope.command.reason,\n });\n }\n if (toSuspend.length) {\n job.push({\n type: 'modifyScalingProcess',\n action: 'suspend',\n processes: toSuspend,\n asgName: serverGroup.name,\n regions: [serverGroup.region],\n credentials: serverGroup.account,\n cloudProvider: 'aws',\n reason: $scope.command.reason,\n });\n }\n\n const submitMethod = function () {\n return TaskExecutor.executeTask({\n job: job,\n application: application,\n description: 'Update Auto Scaling Processes for ' + serverGroup.name,\n });\n };\n\n $scope.taskMonitor.submit(submitMethod);\n };\n\n this.cancel = $uibModalInstance.dismiss;\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { TaskExecutor, TaskMonitor } from '@spinnaker/core';\n\nexport const AMAZON_SERVERGROUP_DETAILS_SCHEDULEDACTION_EDITSCHEDULEDACTIONS_MODAL_CONTROLLER =\n 'spinnaker.amazon.serverGroup.details.scheduledActions.editScheduledActions.modal.controller';\nexport const name = AMAZON_SERVERGROUP_DETAILS_SCHEDULEDACTION_EDITSCHEDULEDACTIONS_MODAL_CONTROLLER; // for backwards compatibility\nmodule(AMAZON_SERVERGROUP_DETAILS_SCHEDULEDACTION_EDITSCHEDULEDACTIONS_MODAL_CONTROLLER, []).controller(\n 'EditScheduledActionsCtrl',\n [\n '$scope',\n '$uibModalInstance',\n 'application',\n 'serverGroup',\n function ($scope, $uibModalInstance, application, serverGroup) {\n $scope.command = {\n scheduledActions: serverGroup.scheduledActions.map((action) => {\n return {\n recurrence: action.recurrence,\n minSize: action.minSize,\n maxSize: action.maxSize,\n desiredCapacity: action.desiredCapacity,\n };\n }),\n };\n\n $scope.serverGroup = serverGroup;\n\n this.addScheduledAction = () => {\n $scope.command.scheduledActions.push({});\n };\n\n this.removeScheduledAction = (index) => {\n $scope.command.scheduledActions.splice(index, 1);\n };\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: 'Update Scheduled Actions for ' + serverGroup.name,\n modalInstance: $uibModalInstance,\n onTaskComplete: () => application.serverGroups.refresh(),\n });\n\n this.submit = () => {\n const job = [\n {\n type: 'upsertAsgScheduledActions',\n asgs: [{ asgName: serverGroup.name, region: serverGroup.region }],\n scheduledActions: $scope.command.scheduledActions,\n credentials: serverGroup.account,\n },\n ];\n\n const submitMethod = function () {\n return TaskExecutor.executeTask({\n job: job,\n application: application,\n description: 'Update Scheduled Actions for ' + serverGroup.name,\n });\n };\n\n $scope.taskMonitor.submit(submitMethod);\n };\n\n this.cancel = $uibModalInstance.dismiss;\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { FirewallLabels, SECURITY_GROUP_READER, SERVER_GROUP_WRITER, TaskMonitor } from '@spinnaker/core';\n\nexport const AMAZON_SERVERGROUP_DETAILS_SECURITYGROUP_EDITSECURITYGROUPS_MODAL_CONTROLLER =\n 'spinnaker.amazon.serverGroup.details.securityGroup.editSecurityGroups.modal.controller';\nexport const name = AMAZON_SERVERGROUP_DETAILS_SECURITYGROUP_EDITSECURITYGROUPS_MODAL_CONTROLLER; // for backwards compatibility\nmodule(AMAZON_SERVERGROUP_DETAILS_SECURITYGROUP_EDITSECURITYGROUPS_MODAL_CONTROLLER, [\n SERVER_GROUP_WRITER,\n SECURITY_GROUP_READER,\n]).controller('EditSecurityGroupsCtrl', [\n '$scope',\n '$uibModalInstance',\n 'serverGroupWriter',\n 'securityGroupReader',\n 'application',\n 'serverGroup',\n 'securityGroups',\n function (\n $scope,\n $uibModalInstance,\n serverGroupWriter,\n securityGroupReader,\n application,\n serverGroup,\n securityGroups,\n ) {\n this.command = {\n securityGroups: (securityGroups || []).slice(0).sort((a, b) => a.name.localeCompare(b.name)),\n };\n\n this.state = {\n securityGroupsLoaded: false,\n submitting: false,\n verification: {},\n };\n\n this.infiniteScroll = {\n currentItems: 20,\n };\n\n this.addMoreItems = () => (this.infiniteScroll.currentItems += 20);\n\n this.resetCurrentItems = () => (this.infiniteScroll.currentItems = 20);\n\n this.isValid = () => this.state.verification.verified;\n\n securityGroupReader.getAllSecurityGroups().then((allGroups) => {\n const account = serverGroup.account;\n const region = serverGroup.region;\n const vpcId = serverGroup.vpcId;\n this.availableSecurityGroups = _.get(allGroups, [account, 'aws', region].join('.'), [])\n .filter((group) => group.vpcId === vpcId)\n .sort((a, b) => {\n if (this.command.securityGroups.some((g) => g.id === a.id)) {\n return -1;\n }\n if (this.command.securityGroups.some((g) => g.id === b.id)) {\n return 1;\n }\n return a.name.localeCompare(b.name);\n });\n this.state.securityGroupsLoaded = true;\n });\n\n this.serverGroup = serverGroup;\n\n this.taskMonitor = new TaskMonitor({\n application: application,\n title: `Update ${FirewallLabels.get('Firewalls')} for ${serverGroup.name}`,\n modalInstance: $uibModalInstance,\n onTaskComplete: () => application.serverGroups.refresh(),\n });\n\n this.submit = () => {\n const submitMethod = () => {\n this.state.submitting = true;\n const hasLaunchTemplate = Boolean(serverGroup.launchTemplate);\n return serverGroupWriter.updateSecurityGroups(\n serverGroup,\n this.command.securityGroups,\n application,\n hasLaunchTemplate,\n );\n };\n\n this.taskMonitor.submit(submitMethod);\n };\n\n this.cancel = $uibModalInstance.dismiss;\n },\n]);\n","import { module } from 'angular';\n\nimport { AMAZON_SERVERGROUP_DETAILS_ADVANCEDSETTINGS_EDITASGADVANCEDSETTINGS_MODAL_CONTROLLER } from './advancedSettings/editAsgAdvancedSettings.modal.controller';\nimport { AMAZON_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER } from './rollback/rollbackServerGroup.controller';\nimport { SCALING_POLICY_MODULE } from './scalingPolicy/scalingPolicy.module';\nimport { AMAZON_SERVERGROUP_DETAILS_SCALINGPROCESSES_MODIFYSCALINGPROCESSES_CONTROLLER } from './scalingProcesses/modifyScalingProcesses.controller';\nimport { AMAZON_SERVERGROUP_DETAILS_SCHEDULEDACTION_EDITSCHEDULEDACTIONS_MODAL_CONTROLLER } from './scheduledAction/editScheduledActions.modal.controller';\nimport { AMAZON_SERVERGROUP_DETAILS_SECURITYGROUP_EDITSECURITYGROUPS_MODAL_CONTROLLER } from './securityGroup/editSecurityGroups.modal.controller';\n\nexport const SERVER_GROUP_DETAILS_MODULE = 'spinnaker.amazon.serverGroup.details';\nmodule(SERVER_GROUP_DETAILS_MODULE, [\n SCALING_POLICY_MODULE,\n AMAZON_SERVERGROUP_DETAILS_SECURITYGROUP_EDITSECURITYGROUPS_MODAL_CONTROLLER,\n AMAZON_SERVERGROUP_DETAILS_SCALINGPROCESSES_MODIFYSCALINGPROCESSES_CONTROLLER,\n AMAZON_SERVERGROUP_DETAILS_SCHEDULEDACTION_EDITSCHEDULEDACTIONS_MODAL_CONTROLLER,\n AMAZON_SERVERGROUP_DETAILS_ADVANCEDSETTINGS_EDITASGADVANCEDSETTINGS_MODAL_CONTROLLER,\n AMAZON_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER,\n]);\n","import { module } from 'angular';\n\nimport type { IVpc } from '@spinnaker/core';\n\nimport type { IAmazonServerGroupCommand, IAmazonServerGroupDeployConfiguration } from './configure';\nimport type {\n IAmazonServerGroup,\n IAmazonServerGroupView,\n IScalingAdjustmentView,\n IScalingPolicy,\n IScalingPolicyAlarmView,\n IScalingPolicyView,\n IStepAdjustmentView,\n ITargetTrackingPolicy,\n} from '../domain';\n\nimport { VpcReader } from '../vpc/VpcReader';\n\nexport class AwsServerGroupTransformer {\n private addComparator(alarm: IScalingPolicyAlarmView): void {\n if (!alarm.comparisonOperator) {\n return;\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 public transformScalingPolicy(policy: IScalingPolicy): IScalingPolicyView {\n const view: IScalingPolicyView = { ...policy } as IScalingPolicyView;\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) => this.addComparator(alarm));\n this.addAdjustmentAttributes(view); // simple policies\n if (view.stepAdjustments && view.stepAdjustments.length) {\n view.stepAdjustments.forEach((sa) => this.addAdjustmentAttributes(sa)); // step policies\n const sorter = policy.stepAdjustments.every((a) => a.metricIntervalUpperBound !== undefined)\n ? upperBoundSorter\n : lowerBoundSorter;\n view.stepAdjustments.sort((a, b) => 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) => this.transformScalingPolicy(policy));\n }\n return view;\n }\n\n public normalizeServerGroup(serverGroup: IAmazonServerGroup): PromiseLike<IAmazonServerGroup> {\n serverGroup.instances.forEach((instance) => {\n instance.vpcId = serverGroup.vpcId;\n });\n return VpcReader.listVpcs().then((vpc) => this.addVpcNameToServerGroup(serverGroup)(vpc));\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(\n base: IAmazonServerGroupCommand,\n ): IAmazonServerGroupDeployConfiguration {\n const deployConfig = ({ ...base } as any) as IAmazonServerGroupDeployConfiguration;\n\n deployConfig.cloudProvider = 'aws';\n deployConfig.availabilityZones = { [deployConfig.region]: base.availabilityZones };\n deployConfig.loadBalancers = (base.loadBalancers || []).concat(base.vpcLoadBalancers || []);\n deployConfig.targetGroups = base.targetGroups || [];\n deployConfig.account = deployConfig.credentials;\n deployConfig.subnetType = deployConfig.subnetType || '';\n deployConfig.instanceType =\n deployConfig.instanceType ||\n (deployConfig.launchTemplateOverridesForInstanceType &&\n deployConfig.launchTemplateOverridesForInstanceType[0].instanceType); // populate instanceType for backwards compatibility\n\n if (base.viewState.mode !== 'clone') {\n delete deployConfig.source;\n }\n\n if (!deployConfig.ramdiskId) {\n delete deployConfig.ramdiskId; // TODO: clean up in kato? - should ignore if empty string\n }\n\n const deleteFields = ['region', 'viewState', 'backingData', 'selectedProvider', 'instanceProfile', 'vpcId'];\n deleteFields.forEach((key: keyof typeof deployConfig) => {\n delete deployConfig[key];\n });\n\n return deployConfig;\n }\n\n public constructNewStepScalingPolicyTemplate(serverGroup: IAmazonServerGroup): IScalingPolicy {\n return {\n alarms: [\n {\n namespace: 'AWS/EC2',\n metricName: 'CPUUtilization',\n threshold: 50,\n statistic: 'Average',\n comparisonOperator: 'GreaterThanThreshold',\n evaluationPeriods: 1,\n dimensions: [{ name: 'AutoScalingGroupName', value: serverGroup.name }],\n period: 60,\n },\n ],\n adjustmentType: 'ChangeInCapacity',\n stepAdjustments: [\n {\n scalingAdjustment: 1,\n metricIntervalLowerBound: 0,\n },\n ],\n estimatedInstanceWarmup: 600,\n };\n }\n\n public constructNewTargetTrackingPolicyTemplate(): ITargetTrackingPolicy {\n return {\n alarms: [],\n estimatedInstanceWarmup: 300,\n targetTrackingConfiguration: {\n targetValue: null,\n predefinedMetricSpecification: {\n predefinedMetricType: 'ASGAverageCPUUtilization',\n },\n },\n };\n }\n}\n\nexport const AWS_SERVER_GROUP_TRANSFORMER = 'spinnaker.amazon.serverGroup.transformer';\nmodule(AWS_SERVER_GROUP_TRANSFORMER, []).service('awsServerGroupTransformer', AwsServerGroupTransformer);\n","import { module } from 'angular';\n\nimport type { IServerGroup } from '@spinnaker/core';\n\nexport class AwsSubnetRenderer {\n public render(serverGroup: IServerGroup): string {\n return serverGroup.subnetType;\n }\n}\n\nexport const SUBNET_RENDERER = 'spinnaker.amazon.subnet.renderer';\nmodule(SUBNET_RENDERER, []).service('awsSubnetRenderer', AwsSubnetRenderer);\n","import type { IApplicationNameValidator } from '@spinnaker/core';\nimport { ApplicationNameValidator, FirewallLabels } from '@spinnaker/core';\nimport { AWSProviderSettings } from '../aws.settings';\n\nclass AmazonApplicationNameValidator implements IApplicationNameValidator {\n private validateSpecialCharacters(name: string, errors: string[]): void {\n const pattern = /^[a-zA-Z_0-9.]*$/g;\n if (!pattern.test(name)) {\n errors.push('Only dot(.) and underscore(_) special characters are allowed.');\n }\n }\n\n private validateClassicLock(warnings: string[]): void {\n const lockoutDate = AWSProviderSettings.classicLaunchLockout;\n if (lockoutDate && lockoutDate < new Date().getTime()) {\n warnings.push(\n `New applications deployed to AWS are restricted to VPC; you cannot create server groups,\n load balancers, or ${FirewallLabels.get('firewalls')} in EC2 Classic.`,\n );\n }\n }\n\n private validateLoadBalancerCharacters(name: string, warnings: string[]) {\n if (name.includes('.') || name.includes('_')) {\n warnings.push(`If the application's name contains an underscore(_) or dot(.),\n you will not be able to create a load balancer,\n preventing it from being used as a front end service.\n Any hostname constructed with this application name may have issues.`);\n }\n }\n\n private validateLength(name: string, warnings: string[], errors: string[]) {\n if (name.length > 250) {\n errors.push('The maximum length for an application in Amazon is 250 characters.');\n return;\n }\n if (name.length > 240) {\n if (name.length >= 248) {\n warnings.push(\n `You will not be able to include a stack or detail field for clusters or ${FirewallLabels.get('firewalls')}.`,\n );\n } else {\n const remaining = 248 - name.length;\n warnings.push(`If you plan to include a stack or detail field for clusters, you will only\n have ~${remaining} characters to do so.`);\n }\n }\n if (name.length > 20) {\n if (name.length > 32) {\n warnings.push(`You will not be able to create an Amazon load balancer for this application if the\n application's name is longer than 32 characters (currently: ${name.length} characters)`);\n } else {\n if (name.length >= 30) {\n warnings.push(`If you plan to create load balancers for this application, be aware that the character limit\n for load balancer names is 32 (currently: ${name.length} characters). With separators (\"-\"), you will not\n be able to add a stack and detail field to any load balancer.`);\n } else {\n const remaining = 30 - name.length;\n warnings.push(`If you plan to create load balancers for this application, be aware that the character limit\n for load balancer names is 32. You will only have ~${remaining} characters to add a stack or detail\n field to any load balancer.`);\n }\n }\n }\n }\n\n public validate(name = '') {\n const warnings: string[] = [];\n const errors: string[] = [];\n\n if (name.length) {\n this.validateClassicLock(warnings);\n this.validateSpecialCharacters(name, errors);\n this.validateLoadBalancerCharacters(name, warnings);\n this.validateLength(name, warnings, errors);\n }\n\n return {\n warnings,\n errors,\n };\n }\n}\nApplicationNameValidator.registerValidator('aws', new AmazonApplicationNameValidator());\n","import { module } from 'angular';\nimport { react2angular } from 'react2angular';\n\nimport { withErrorBoundary } from '@spinnaker/core';\n\nimport { VpcTag } from './VpcTag';\n\nexport const VPC_MODULE = 'spinnaker.amazon.vpc';\nmodule(VPC_MODULE, []).component('vpcTag', react2angular(withErrorBoundary(VpcTag, 'vpcTag'), ['vpcId']));\n","import { module } from 'angular';\n\nimport { CloudProviderRegistry, DeploymentStrategyRegistry } from '@spinnaker/core';\n\nimport { AWSProviderSettings } from './aws.settings';\nimport { COMMON_MODULE } from './common/common.module';\nimport './deploymentStrategy/rollingPush.strategy';\nimport { AmazonFunctionDetails } from './function';\nimport { CreateLambdaFunction } from './function';\nimport { AwsFunctionTransformer } from './function';\nimport { AWS_FUNCTION_MODULE } from './function/function.module';\nimport './help/amazon.help';\nimport { AwsImageReader } from './image';\nimport { AMAZON_INSTANCE_AWSINSTANCETYPE_SERVICE } from './instance/awsInstanceType.service';\nimport { AMAZON_INSTANCE_INFORMATION_COMPONENT } from './instance/details/amazonInstanceInformation.component';\nimport { AMAZON_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER } from './instance/details/instance.details.controller';\nimport { INSTANCE_DNS_COMPONENT } from './instance/details/instanceDns.component';\nimport { INSTANCE_SECURITY_GROUPS_COMPONENT } from './instance/details/instanceSecurityGroups.component';\nimport { INSTANCE_STATUS_COMPONENT } from './instance/details/instanceStatus.component';\nimport { INSTANCE_TAGS_COMPONENT } from './instance/details/instanceTags.component';\nimport { AmazonLoadBalancerClusterContainer } from './loadBalancer';\nimport { AmazonLoadBalancersTag } from './loadBalancer';\nimport { AmazonLoadBalancerChoiceModal } from './loadBalancer';\nimport { AwsLoadBalancerTransformer } from './loadBalancer';\nimport { AWS_LOAD_BALANCER_MODULE } from './loadBalancer/loadBalancer.module';\nimport amazonLogo from './logo/amazon.logo.svg';\nimport { AMAZON_PIPELINE_STAGES_BAKE_AWSBAKESTAGE } from './pipeline/stages/bake/awsBakeStage';\nimport { AMAZON_PIPELINE_STAGES_CLONESERVERGROUP_AWSCLONESERVERGROUPSTAGE } from './pipeline/stages/cloneServerGroup/awsCloneServerGroupStage';\nimport { AMAZON_PIPELINE_STAGES_LAMBDA_DELETE } from './pipeline/stages/deleteLambda';\nimport { CLOUD_FORMATION_CHANGE_SET_INFO } from './pipeline/stages/deployCloudFormation/CloudFormationChangeSetInfo';\nimport { CLOUDFORMATION_TEMPLATE_ENTRY } from './pipeline/stages/deployCloudFormation/cloudFormationTemplateEntry.component';\nimport { DEPLOY_CLOUDFORMATION_STACK_STAGE } from './pipeline/stages/deployCloudFormation/deployCloudFormationStackStage';\nimport { AWS_EVALUATE_CLOUD_FORMATION_CHANGE_SET_EXECUTION_SERVICE } from './pipeline/stages/deployCloudFormation/evaluateCloudFormationChangeSetExecution.service';\nimport { AMAZON_PIPELINE_STAGES_LAMBDA_DEPLOY } from './pipeline/stages/deployLambda';\nimport { AMAZON_PIPELINE_STAGES_DESTROYASG_AWSDESTROYASGSTAGE } from './pipeline/stages/destroyAsg/awsDestroyAsgStage';\nimport { AMAZON_PIPELINE_STAGES_DISABLEASG_AWSDISABLEASGSTAGE } from './pipeline/stages/disableAsg/awsDisableAsgStage';\nimport { AMAZON_PIPELINE_STAGES_DISABLECLUSTER_AWSDISABLECLUSTERSTAGE } from './pipeline/stages/disableCluster/awsDisableClusterStage';\nimport { AMAZON_PIPELINE_STAGES_ENABLEASG_AWSENABLEASGSTAGE } from './pipeline/stages/enableAsg/awsEnableAsgStage';\nimport { AMAZON_PIPELINE_STAGES_FINDAMI_AWSFINDAMISTAGE } from './pipeline/stages/findAmi/awsFindAmiStage';\nimport { AMAZON_PIPELINE_STAGES_FINDIMAGEFROMTAGS_AWSFINDIMAGEFROMTAGSSTAGE } from './pipeline/stages/findImageFromTags/awsFindImageFromTagsStage';\nimport { AMAZON_PIPELINE_STAGES_LAMBDA_INVOKE } from './pipeline/stages/invokeLambda';\nimport { AMAZON_PIPELINE_STAGES_MODIFYSCALINGPROCESS_MODIFYSCALINGPROCESSSTAGE } from './pipeline/stages/modifyScalingProcess/modifyScalingProcessStage';\nimport { AMAZON_PIPELINE_STAGES_RESIZEASG_AWSRESIZEASGSTAGE } from './pipeline/stages/resizeAsg/awsResizeAsgStage';\nimport { AMAZON_PIPELINE_STAGES_ROLLBACKCLUSTER_AWSROLLBACKCLUSTERSTAGE } from './pipeline/stages/rollbackCluster/awsRollbackClusterStage';\nimport { AMAZON_PIPELINE_STAGES_LAMBDA_ROUTE } from './pipeline/stages/routeLambda';\nimport { AMAZON_PIPELINE_STAGES_SCALEDOWNCLUSTER_AWSSCALEDOWNCLUSTERSTAGE } from './pipeline/stages/scaleDownCluster/awsScaleDownClusterStage';\nimport { AMAZON_PIPELINE_STAGES_SHRINKCLUSTER_AWSSHRINKCLUSTERSTAGE } from './pipeline/stages/shrinkCluster/awsShrinkClusterStage';\nimport { AMAZON_PIPELINE_STAGES_TAGIMAGE_AWSTAGIMAGESTAGE } from './pipeline/stages/tagImage/awsTagImageStage';\nimport { AMAZON_PIPELINE_STAGES_LAMBDA_UPDATE } from './pipeline/stages/updateCodeLambda';\nimport { AWS_REACT_MODULE } from './reactShims/aws.react.module';\nimport { AMAZON_SEARCH_SEARCHRESULTFORMATTER } from './search/searchResultFormatter';\nimport { AWS_SECURITY_GROUP_MODULE } from './securityGroup/securityGroup.module';\nimport { AmazonCloneServerGroupModal } from './serverGroup/configure/wizard/AmazonCloneServerGroupModal';\nimport { AmazonServerGroupActions } from './serverGroup/details/AmazonServerGroupActions';\nimport { amazonServerGroupDetailsGetter } from './serverGroup/details/amazonServerGroupDetailsGetter';\nimport {\n AmazonUpsertScalingPolicyModal,\n AmazonUpsertTargetTrackingModal,\n TargetTrackingChart,\n} from './serverGroup/details/scalingPolicy';\nimport {\n AdvancedSettingsDetailsSection,\n AmazonCapacityDetailsSection,\n AmazonInfoDetailsSection,\n HealthDetailsSection,\n InstancesDistributionDetailsSection,\n LaunchConfigDetailsSection,\n LaunchTemplateDetailsSection,\n LogsDetailsSection,\n PackageDetailsSection,\n ScalingPoliciesDetailsSection,\n ScalingProcessesDetailsSection,\n ScheduledActionsDetailsSection,\n SecurityGroupsDetailsSection,\n TagsDetailsSection,\n} from './serverGroup/details/sections';\nimport { SERVER_GROUP_DETAILS_MODULE } from './serverGroup/details/serverGroupDetails.module';\nimport { AWS_SERVER_GROUP_TRANSFORMER } from './serverGroup/serverGroup.transformer';\nimport { SUBNET_RENDERER } from './subnet/subnet.renderer';\nimport './validation/ApplicationNameValidator';\nimport { VPC_MODULE } from './vpc/vpc.module';\n\nimport './logo/aws.logo.less';\n\nexport const AMAZON_MODULE = 'spinnaker.amazon';\nmodule(AMAZON_MODULE, [\n AWS_REACT_MODULE,\n AMAZON_PIPELINE_STAGES_BAKE_AWSBAKESTAGE,\n AMAZON_PIPELINE_STAGES_CLONESERVERGROUP_AWSCLONESERVERGROUPSTAGE,\n AMAZON_PIPELINE_STAGES_DESTROYASG_AWSDESTROYASGSTAGE,\n AMAZON_PIPELINE_STAGES_DISABLEASG_AWSDISABLEASGSTAGE,\n AMAZON_PIPELINE_STAGES_DISABLECLUSTER_AWSDISABLECLUSTERSTAGE,\n AMAZON_PIPELINE_STAGES_ROLLBACKCLUSTER_AWSROLLBACKCLUSTERSTAGE,\n AMAZON_PIPELINE_STAGES_ENABLEASG_AWSENABLEASGSTAGE,\n AMAZON_PIPELINE_STAGES_FINDAMI_AWSFINDAMISTAGE,\n AMAZON_PIPELINE_STAGES_FINDIMAGEFROMTAGS_AWSFINDIMAGEFROMTAGSSTAGE,\n AMAZON_PIPELINE_STAGES_MODIFYSCALINGPROCESS_MODIFYSCALINGPROCESSSTAGE,\n AMAZON_PIPELINE_STAGES_RESIZEASG_AWSRESIZEASGSTAGE,\n AMAZON_PIPELINE_STAGES_SCALEDOWNCLUSTER_AWSSCALEDOWNCLUSTERSTAGE,\n AMAZON_PIPELINE_STAGES_SHRINKCLUSTER_AWSSHRINKCLUSTERSTAGE,\n AMAZON_PIPELINE_STAGES_TAGIMAGE_AWSTAGIMAGESTAGE,\n SERVER_GROUP_DETAILS_MODULE,\n COMMON_MODULE,\n AWS_SERVER_GROUP_TRANSFORMER,\n AMAZON_INSTANCE_AWSINSTANCETYPE_SERVICE,\n AWS_LOAD_BALANCER_MODULE,\n AWS_FUNCTION_MODULE,\n AMAZON_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER,\n AWS_SECURITY_GROUP_MODULE,\n SUBNET_RENDERER,\n VPC_MODULE,\n AMAZON_SEARCH_SEARCHRESULTFORMATTER,\n DEPLOY_CLOUDFORMATION_STACK_STAGE,\n CLOUDFORMATION_TEMPLATE_ENTRY,\n CLOUD_FORMATION_CHANGE_SET_INFO,\n AWS_EVALUATE_CLOUD_FORMATION_CHANGE_SET_EXECUTION_SERVICE,\n INSTANCE_STATUS_COMPONENT,\n INSTANCE_TAGS_COMPONENT,\n INSTANCE_SECURITY_GROUPS_COMPONENT,\n INSTANCE_DNS_COMPONENT,\n AMAZON_INSTANCE_INFORMATION_COMPONENT,\n AMAZON_PIPELINE_STAGES_LAMBDA_DELETE,\n AMAZON_PIPELINE_STAGES_LAMBDA_DEPLOY,\n AMAZON_PIPELINE_STAGES_LAMBDA_INVOKE,\n AMAZON_PIPELINE_STAGES_LAMBDA_UPDATE,\n AMAZON_PIPELINE_STAGES_LAMBDA_ROUTE,\n]).config(() => {\n CloudProviderRegistry.registerProvider('aws', {\n name: 'Amazon',\n adHocInfrastructureWritesEnabled: AWSProviderSettings.adHocInfraWritesEnabled,\n logo: {\n path: amazonLogo,\n },\n image: {\n reader: AwsImageReader,\n },\n serverGroup: {\n transformer: 'awsServerGroupTransformer',\n detailsActions: AmazonServerGroupActions,\n detailsGetter: amazonServerGroupDetailsGetter,\n detailsSections: [\n AmazonInfoDetailsSection,\n AmazonCapacityDetailsSection,\n HealthDetailsSection,\n InstancesDistributionDetailsSection,\n LaunchConfigDetailsSection,\n LaunchTemplateDetailsSection,\n SecurityGroupsDetailsSection,\n ScalingProcessesDetailsSection,\n ScalingPoliciesDetailsSection,\n ScheduledActionsDetailsSection,\n TagsDetailsSection,\n PackageDetailsSection,\n AdvancedSettingsDetailsSection,\n LogsDetailsSection,\n ],\n CloneServerGroupModal: AmazonCloneServerGroupModal,\n commandBuilder: 'awsServerGroupCommandBuilder',\n configurationService: 'awsServerGroupConfigurationService',\n scalingActivitiesEnabled: true,\n TargetTrackingChart,\n UpsertStepPolicyModal: AmazonUpsertScalingPolicyModal,\n UpsertTargetTrackingModal: AmazonUpsertTargetTrackingModal,\n },\n instance: {\n instanceTypeService: 'awsInstanceTypeService',\n detailsTemplateUrl: require('./instance/details/instanceDetails.html'),\n detailsController: 'awsInstanceDetailsCtrl',\n },\n loadBalancer: {\n transformer: AwsLoadBalancerTransformer,\n detailsTemplateUrl: require('./loadBalancer/details/loadBalancerDetails.html'),\n detailsController: 'awsLoadBalancerDetailsCtrl',\n CreateLoadBalancerModal: AmazonLoadBalancerChoiceModal,\n targetGroupDetailsTemplateUrl: require('./loadBalancer/details/targetGroupDetails.html'),\n targetGroupDetailsController: 'awsTargetGroupDetailsCtrl',\n ClusterContainer: AmazonLoadBalancerClusterContainer,\n LoadBalancersTag: AmazonLoadBalancersTag,\n },\n function: {\n details: AmazonFunctionDetails,\n CreateFunctionModal: CreateLambdaFunction,\n transformer: AwsFunctionTransformer,\n },\n securityGroup: {\n transformer: 'awsSecurityGroupTransformer',\n reader: 'awsSecurityGroupReader',\n detailsTemplateUrl: require('./securityGroup/details/securityGroupDetail.html'),\n detailsController: 'awsSecurityGroupDetailsCtrl',\n createSecurityGroupTemplateUrl: require('./securityGroup/configure/createSecurityGroup.html'),\n createSecurityGroupController: 'awsCreateSecurityGroupCtrl',\n },\n subnet: {\n renderer: 'awsSubnetRenderer',\n },\n search: {\n resultFormatter: 'awsSearchResultFormatter',\n },\n applicationProviderFields: {\n templateUrl: require('./applicationProviderFields/awsFields.html'),\n },\n });\n});\n\nDeploymentStrategyRegistry.registerProvider('aws', [\n 'custom',\n 'redblack',\n 'rollingpush',\n 'rollingredblack',\n 'monitored',\n]);\n"],"names":["_a","React","observableFrom","observableCombineLatest","__decorateClass","map","DragHandle","TargetGroups","validate","Tooltip","TriggerEventsForm","observableOf","AmazonUpsertScalingPolicyModal","AmazonUpsertTargetTrackingModal"],"mappings":"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"}