@spinnaker/amazon 0.0.0-main-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +66 -0
  583. package/src/serverGroup/configure/wizard/pages/ServerGroupInstanceType.tsx +157 -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';\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 (values.capacity.min < 0 || values.capacity.max < 0 || values.capacity.desired < 0) {\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';\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 > 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","__defProp","__getOwnPropDesc","__decorateClass","map","DragHandle","TargetGroups","validate","Tooltip","TriggerEventsForm","observableOf","AmazonUpsertScalingPolicyModal","AmazonUpsertTargetTrackingModal"],"mappings":"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"}