@spinnaker/google 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 (438) hide show
  1. package/CHANGELOG.md +1198 -0
  2. package/LICENSE.txt +203 -0
  3. package/dist/address/address.reader.d.ts +15 -0
  4. package/dist/autoscalingPolicy/GceAutoScalingFieldLayout.d.ts +4 -0
  5. package/dist/autoscalingPolicy/IGceAutoscalingPolicy.d.ts +19 -0
  6. package/dist/autoscalingPolicy/autoscalingPolicy.write.service.d.ts +2 -0
  7. package/dist/autoscalingPolicy/components/basicSettings/basicSettings.component.d.ts +2 -0
  8. package/dist/autoscalingPolicy/components/metricSettings/GcePredictiveAutoscaling.d.ts +1 -0
  9. package/dist/autoscalingPolicy/components/metricSettings/metricSettings.component.d.ts +2 -0
  10. package/dist/autoscalingPolicy/components/scalingSchedules/scalingSchedules.component.d.ts +2 -0
  11. package/dist/autoscalingPolicy/components/scalingSchedules/timeZoneSelect.d.ts +13 -0
  12. package/dist/autoscalingPolicy/index.d.ts +2 -0
  13. package/dist/backendService/backendService.reader.d.ts +2 -0
  14. package/dist/cache/cacheConfigurer.service.d.ts +2 -0
  15. package/dist/cache/cacheRefresh.component.d.ts +1 -0
  16. package/dist/certificate/certificate.reader.d.ts +10 -0
  17. package/dist/common/footer.directive.d.ts +2 -0
  18. package/dist/common/xpnNaming.gce.service.d.ts +2 -0
  19. package/dist/domain/autoHealingPolicy.d.ts +12 -0
  20. package/dist/domain/backendService.d.ts +13 -0
  21. package/dist/domain/disk.d.ts +10 -0
  22. package/dist/domain/healthCheck.d.ts +18 -0
  23. package/dist/domain/index.d.ts +8 -0
  24. package/dist/domain/loadBalancer.d.ts +42 -0
  25. package/dist/domain/network.d.ts +10 -0
  26. package/dist/domain/serverGroup.d.ts +5 -0
  27. package/dist/domain/subnet.d.ts +12 -0
  28. package/dist/gce.logo2ae85d8704b1d6b8.png +0 -0
  29. package/dist/gce.module.d.ts +3 -0
  30. package/dist/gce.settings.d.ts +14 -0
  31. package/dist/gceNetworkSelectField.directive.d.ts +2 -0
  32. package/dist/gceRegionSelectField.directive.d.ts +2 -0
  33. package/dist/healthCheck/healthCheck.read.service.d.ts +5 -0
  34. package/dist/healthCheck/healthCheckUtils.d.ts +13 -0
  35. package/dist/help/gce.help.d.ts +1 -0
  36. package/dist/image/ImageSelect.d.ts +14 -0
  37. package/dist/image/image.reader.d.ts +11 -0
  38. package/dist/image/index.d.ts +2 -0
  39. package/dist/index.d.ts +1 -0
  40. package/dist/index.js +17717 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/instance/custom/customInstance.filter.d.ts +2 -0
  43. package/dist/instance/custom/customInstanceBuilder.gce.service.d.ts +2 -0
  44. package/dist/instance/details/instance.details.controller.d.ts +2 -0
  45. package/dist/instance/gceInstanceType.service.d.ts +2 -0
  46. package/dist/instance/gceInstanceTypeDisks.d.ts +15 -0
  47. package/dist/instance/gceMultiInstanceTask.transformer.d.ts +2 -0
  48. package/dist/interceptors/iap.interceptor.d.ts +8 -0
  49. package/dist/loadBalancer/configure/choice/gceLoadBalancerChoice.modal.d.ts +1 -0
  50. package/dist/loadBalancer/configure/choice/loadBalancerTypeToWizardMap.constant.d.ts +10 -0
  51. package/dist/loadBalancer/configure/common/addressSelector.component.d.ts +1 -0
  52. package/dist/loadBalancer/configure/common/commonLoadBalancer.controller.d.ts +17 -0
  53. package/dist/loadBalancer/configure/common/commonLoadBalancerCommandBuilder.service.d.ts +23 -0
  54. package/dist/loadBalancer/configure/common/healthCheck.component.d.ts +1 -0
  55. package/dist/loadBalancer/configure/common/sessionAffinityNameMaps.d.ts +5 -0
  56. package/dist/loadBalancer/configure/http/backendService/backendService.component.d.ts +2 -0
  57. package/dist/loadBalancer/configure/http/basicSettings/basicSettings.component.d.ts +2 -0
  58. package/dist/loadBalancer/configure/http/commandBuilder.service.d.ts +2 -0
  59. package/dist/loadBalancer/configure/http/createHttpLoadBalancer.controller.d.ts +2 -0
  60. package/dist/loadBalancer/configure/http/healthCheck/healthCheck.component.d.ts +2 -0
  61. package/dist/loadBalancer/configure/http/hostRule/hostRule.component.d.ts +2 -0
  62. package/dist/loadBalancer/configure/http/httpLoadBalancer.write.service.d.ts +2 -0
  63. package/dist/loadBalancer/configure/http/listeners/listener.component.d.ts +2 -0
  64. package/dist/loadBalancer/configure/http/pathRule/pathRule.component.d.ts +2 -0
  65. package/dist/loadBalancer/configure/http/templates.d.ts +42 -0
  66. package/dist/loadBalancer/configure/http/transformer.service.d.ts +2 -0
  67. package/dist/loadBalancer/configure/internal/gceCreateInternalLoadBalancer.controller.d.ts +1 -0
  68. package/dist/loadBalancer/configure/internalhttp/createInternalHttpLoadBalancer.controller.d.ts +3 -0
  69. package/dist/loadBalancer/configure/network/createLoadBalancer.controller.d.ts +2 -0
  70. package/dist/loadBalancer/configure/ssl/gceCreateSslLoadBalancer.controller.d.ts +1 -0
  71. package/dist/loadBalancer/configure/tcp/gceCreateTcpLoadBalancer.controller.d.ts +1 -0
  72. package/dist/loadBalancer/details/backendService/backendService.component.d.ts +1 -0
  73. package/dist/loadBalancer/details/backendService/sessionAffinity.filter.d.ts +1 -0
  74. package/dist/loadBalancer/details/deleteModal/deleteModal.controller.d.ts +1 -0
  75. package/dist/loadBalancer/details/healthCheck/healthCheck.component.d.ts +2 -0
  76. package/dist/loadBalancer/details/hostAndPathRules/hostAndPathRules.controller.d.ts +2 -0
  77. package/dist/loadBalancer/details/hostAndPathRules/hostAndPathRules.service.d.ts +2 -0
  78. package/dist/loadBalancer/details/hostAndPathRules/hostAndPathRulesButton.component.d.ts +2 -0
  79. package/dist/loadBalancer/details/loadBalancerDetail.controller.d.ts +2 -0
  80. package/dist/loadBalancer/details/loadBalancerType/loadBalancerType.component.d.ts +2 -0
  81. package/dist/loadBalancer/httpLoadBalancerUtils.service.d.ts +7 -0
  82. package/dist/loadBalancer/loadBalancer.setTransformer.d.ts +11 -0
  83. package/dist/loadBalancer/loadBalancer.transformer.d.ts +2 -0
  84. package/dist/pipeline/stages/bake/bakeExecutionDetails.controller.d.ts +2 -0
  85. package/dist/pipeline/stages/bake/gceBakeStage.d.ts +2 -0
  86. package/dist/pipeline/stages/cloneServerGroup/gceCloneServerGroupStage.d.ts +2 -0
  87. package/dist/pipeline/stages/destroyAsg/gceDestroyAsgStage.d.ts +2 -0
  88. package/dist/pipeline/stages/disableAsg/gceDisableAsgStage.d.ts +2 -0
  89. package/dist/pipeline/stages/disableCluster/gceDisableClusterStage.d.ts +2 -0
  90. package/dist/pipeline/stages/enableAsg/gceEnableAsgStage.d.ts +2 -0
  91. package/dist/pipeline/stages/findAmi/gceFindAmiStage.d.ts +2 -0
  92. package/dist/pipeline/stages/findImageFromTags/gceFindImageFromTagsStage.d.ts +2 -0
  93. package/dist/pipeline/stages/resizeAsg/gceResizeAsgStage.d.ts +2 -0
  94. package/dist/pipeline/stages/scaleDownCluster/gceScaleDownClusterStage.d.ts +2 -0
  95. package/dist/pipeline/stages/shrinkCluster/gceShrinkClusterStage.d.ts +2 -0
  96. package/dist/pipeline/stages/tagImage/gceTagImageStage.d.ts +2 -0
  97. package/dist/securityGroup/clone/cloneSecurityGroup.controller.d.ts +2 -0
  98. package/dist/securityGroup/configure/ConfigSecurityGroupMixin.controller.d.ts +2 -0
  99. package/dist/securityGroup/configure/createSecurityGroup.controller.d.ts +2 -0
  100. package/dist/securityGroup/configure/editSecurityGroup.controller.d.ts +2 -0
  101. package/dist/securityGroup/details/securityGroupDetail.controller.d.ts +2 -0
  102. package/dist/securityGroup/securityGroup.reader.d.ts +2 -0
  103. package/dist/securityGroup/securityGroup.transformer.d.ts +2 -0
  104. package/dist/securityGroup/securityGroupHelpText.service.d.ts +13 -0
  105. package/dist/serverGroup/configure/serverGroup.configure.gce.module.d.ts +2 -0
  106. package/dist/serverGroup/configure/serverGroupCommandBuilder.service.d.ts +2 -0
  107. package/dist/serverGroup/configure/serverGroupConfiguration.service.d.ts +2 -0
  108. package/dist/serverGroup/configure/wizard/advancedSettings/GceAcceleratorConfigurer.d.ts +16 -0
  109. package/dist/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.d.ts +2 -0
  110. package/dist/serverGroup/configure/wizard/advancedSettings/diskConfigurer.component.d.ts +1 -0
  111. package/dist/serverGroup/configure/wizard/advancedSettings/gceAccelerator.service.d.ts +25 -0
  112. package/dist/serverGroup/configure/wizard/autoHealingPolicy/autoHealingPolicySelector.component.d.ts +1 -0
  113. package/dist/serverGroup/configure/wizard/autoScalingPolicy/autoScalingPolicySelector.component.d.ts +1 -0
  114. package/dist/serverGroup/configure/wizard/capacity/advancedCapacitySelector.component.d.ts +2 -0
  115. package/dist/serverGroup/configure/wizard/capacity/simpleCapacitySelector.component.d.ts +2 -0
  116. package/dist/serverGroup/configure/wizard/cloneServerGroup.gce.controller.d.ts +2 -0
  117. package/dist/serverGroup/configure/wizard/customInstance/CustomInstanceConfigurer.d.ts +26 -0
  118. package/dist/serverGroup/configure/wizard/customInstance/customInstanceConfigurer.component.d.ts +1 -0
  119. package/dist/serverGroup/configure/wizard/hiddenMetadataKeys.value.d.ts +2 -0
  120. package/dist/serverGroup/configure/wizard/loadBalancers/elSevenOptions/backendServiceSelector.component.d.ts +2 -0
  121. package/dist/serverGroup/configure/wizard/loadBalancers/elSevenOptions/elSevenOptionsGenerator.component.d.ts +2 -0
  122. package/dist/serverGroup/configure/wizard/loadBalancers/loadBalancerSelector.directive.d.ts +2 -0
  123. package/dist/serverGroup/configure/wizard/loadBalancingPolicy/loadBalancingPolicySelector.component.d.ts +2 -0
  124. package/dist/serverGroup/configure/wizard/location/basicSettings.controller.d.ts +2 -0
  125. package/dist/serverGroup/configure/wizard/securityGroups/securityGroupSelector.directive.d.ts +2 -0
  126. package/dist/serverGroup/configure/wizard/securityGroups/securityGroupsRemoved.directive.d.ts +2 -0
  127. package/dist/serverGroup/configure/wizard/securityGroups/tagManager.service.d.ts +2 -0
  128. package/dist/serverGroup/configure/wizard/securityGroups/tagSelector.component.d.ts +2 -0
  129. package/dist/serverGroup/configure/wizard/securityGroups/tagSelectorGenerator.component.d.ts +2 -0
  130. package/dist/serverGroup/configure/wizard/zones/regionalSelector.directive.d.ts +2 -0
  131. package/dist/serverGroup/configure/wizard/zones/targetShapeSelector.directive.d.ts +1 -0
  132. package/dist/serverGroup/configure/wizard/zones/zoneSelector.directive.d.ts +2 -0
  133. package/dist/serverGroup/details/ServerGroupDiskDescriptions.d.ts +1 -0
  134. package/dist/serverGroup/details/autoHealingPolicy/addAutoHealingPolicyButton.component.d.ts +1 -0
  135. package/dist/serverGroup/details/autoHealingPolicy/autoHealingPolicy.component.d.ts +1 -0
  136. package/dist/serverGroup/details/autoHealingPolicy/modal/upsertAutoHealingPolicy.modal.controller.d.ts +2 -0
  137. package/dist/serverGroup/details/autoscalingPolicy/addAutoscalingPolicyButton.component.d.ts +2 -0
  138. package/dist/serverGroup/details/autoscalingPolicy/autoscalingPolicy.directive.d.ts +2 -0
  139. package/dist/serverGroup/details/autoscalingPolicy/modal/GceScaleInControls.d.ts +1 -0
  140. package/dist/serverGroup/details/autoscalingPolicy/modal/upsertAutoscalingPolicy.modal.controller.d.ts +2 -0
  141. package/dist/serverGroup/details/resize/resizeAutoscalingPolicy.component.d.ts +2 -0
  142. package/dist/serverGroup/details/resize/resizeCapacity.component.d.ts +2 -0
  143. package/dist/serverGroup/details/resize/resizeServerGroup.controller.d.ts +2 -0
  144. package/dist/serverGroup/details/rollback/rollbackServerGroup.controller.d.ts +2 -0
  145. package/dist/serverGroup/details/serverGroup.details.gce.module.d.ts +2 -0
  146. package/dist/serverGroup/details/serverGroupDetails.gce.controller.d.ts +2 -0
  147. package/dist/serverGroup/details/stateful/MarkDiskStatefulButton.d.ts +10 -0
  148. package/dist/serverGroup/details/stateful/StatefulMIGService.d.ts +7 -0
  149. package/dist/serverGroup/details/stateful/UpdateBootImageButton.d.ts +10 -0
  150. package/dist/serverGroup/serverGroup.transformer.d.ts +2 -0
  151. package/dist/subnet/subnet.renderer.d.ts +2 -0
  152. package/dist/subnet/subnetSelectField.directive.d.ts +2 -0
  153. package/dist/validation/applicationName.validator.d.ts +2 -0
  154. package/package.json +45 -0
  155. package/src/address/address.reader.ts +61 -0
  156. package/src/applicationProviderFields/gceFields.html +13 -0
  157. package/src/autoscalingPolicy/GceAutoScalingFieldLayout.tsx +31 -0
  158. package/src/autoscalingPolicy/IGceAutoscalingPolicy.ts +22 -0
  159. package/src/autoscalingPolicy/autoscalingPolicy.write.service.js +83 -0
  160. package/src/autoscalingPolicy/components/basicSettings/basicSettings.component.html +71 -0
  161. package/src/autoscalingPolicy/components/basicSettings/basicSettings.component.js +20 -0
  162. package/src/autoscalingPolicy/components/metricSettings/GcePredictiveAutoscaling.tsx +54 -0
  163. package/src/autoscalingPolicy/components/metricSettings/metricSettings.component.html +208 -0
  164. package/src/autoscalingPolicy/components/metricSettings/metricSettings.component.js +108 -0
  165. package/src/autoscalingPolicy/components/scalingSchedules/scalingSchedules.component.html +84 -0
  166. package/src/autoscalingPolicy/components/scalingSchedules/scalingSchedules.component.js +61 -0
  167. package/src/autoscalingPolicy/components/scalingSchedules/standardTimezone.json +596 -0
  168. package/src/autoscalingPolicy/components/scalingSchedules/timeZoneSelect.tsx +63 -0
  169. package/src/autoscalingPolicy/gceAutoscalingFieldLayout.less +7 -0
  170. package/src/autoscalingPolicy/index.ts +2 -0
  171. package/src/backendService/backendService.reader.js +28 -0
  172. package/src/cache/cacheConfigurer.service.js +41 -0
  173. package/src/cache/cacheRefresh.component.html +17 -0
  174. package/src/cache/cacheRefresh.component.ts +53 -0
  175. package/src/cache/cacheRefreshTooltip.html +3 -0
  176. package/src/certificate/certificate.reader.ts +31 -0
  177. package/src/common/footer.directive.html +7 -0
  178. package/src/common/footer.directive.js +22 -0
  179. package/src/common/xpnNaming.gce.service.js +35 -0
  180. package/src/domain/autoHealingPolicy.ts +14 -0
  181. package/src/domain/backendService.ts +15 -0
  182. package/src/domain/disk.ts +10 -0
  183. package/src/domain/healthCheck.ts +19 -0
  184. package/src/domain/index.ts +8 -0
  185. package/src/domain/loadBalancer.ts +49 -0
  186. package/src/domain/network.ts +10 -0
  187. package/src/domain/serverGroup.ts +8 -0
  188. package/src/domain/subnet.ts +12 -0
  189. package/src/gce.module.ts +155 -0
  190. package/src/gce.settings.ts +23 -0
  191. package/src/gceNetworkSelectField.directive.js +22 -0
  192. package/src/gceRegionSelectField.directive.js +22 -0
  193. package/src/healthCheck/healthCheck.read.service.ts +55 -0
  194. package/src/healthCheck/healthCheckUtils.spec.ts +80 -0
  195. package/src/healthCheck/healthCheckUtils.ts +47 -0
  196. package/src/help/gce.help.ts +225 -0
  197. package/src/image/ImageSelect.tsx +66 -0
  198. package/src/image/image.reader.ts +19 -0
  199. package/src/image/index.ts +2 -0
  200. package/src/index.ts +1 -0
  201. package/src/instance/custom/customInstance.filter.js +26 -0
  202. package/src/instance/custom/customInstanceBuilder.gce.service.js +153 -0
  203. package/src/instance/details/instance.details.controller.js +518 -0
  204. package/src/instance/details/instance.details.controller.spec.js +27 -0
  205. package/src/instance/details/instanceDetails.html +248 -0
  206. package/src/instance/gceInstanceType.service.js +432 -0
  207. package/src/instance/gceInstanceType.service.spec.js +19 -0
  208. package/src/instance/gceInstanceTypeDisks.ts +261 -0
  209. package/src/instance/gceMultiInstanceTask.transformer.js +32 -0
  210. package/src/interceptors/iap.interceptor.ts +36 -0
  211. package/src/loadBalancer/configure/choice/gceLoadBalancerChoice.modal.html +33 -0
  212. package/src/loadBalancer/configure/choice/gceLoadBalancerChoice.modal.ts +49 -0
  213. package/src/loadBalancer/configure/choice/loadBalancerTypeToWizardMap.constant.ts +58 -0
  214. package/src/loadBalancer/configure/common/addressSelector.component.ts +47 -0
  215. package/src/loadBalancer/configure/common/commonAdvancedSettingsPage.html +32 -0
  216. package/src/loadBalancer/configure/common/commonCreateLoadBalancer.html +41 -0
  217. package/src/loadBalancer/configure/common/commonEditLoadBalancer.html +38 -0
  218. package/src/loadBalancer/configure/common/commonHealthCheckPage.html +16 -0
  219. package/src/loadBalancer/configure/common/commonLoadBalancer.controller.ts +56 -0
  220. package/src/loadBalancer/configure/common/commonLoadBalancerCommandBuilder.service.ts +87 -0
  221. package/src/loadBalancer/configure/common/healthCheck.component.html +164 -0
  222. package/src/loadBalancer/configure/common/healthCheck.component.ts +82 -0
  223. package/src/loadBalancer/configure/common/sessionAffinityNameMaps.ts +18 -0
  224. package/src/loadBalancer/configure/http/backendService/backendService.component.html +157 -0
  225. package/src/loadBalancer/configure/http/backendService/backendService.component.js +80 -0
  226. package/src/loadBalancer/configure/http/backendService/backendServices.html +57 -0
  227. package/src/loadBalancer/configure/http/basicSettings/basicSettings.component.html +105 -0
  228. package/src/loadBalancer/configure/http/basicSettings/basicSettings.component.js +46 -0
  229. package/src/loadBalancer/configure/http/basicSettings/basicSettings.html +6 -0
  230. package/src/loadBalancer/configure/http/commandBuilder.service.js +404 -0
  231. package/src/loadBalancer/configure/http/createHttpLoadBalancer.controller.js +162 -0
  232. package/src/loadBalancer/configure/http/createHttpLoadBalancer.html +39 -0
  233. package/src/loadBalancer/configure/http/defaultService/defaultService.html +24 -0
  234. package/src/loadBalancer/configure/http/editHttpLoadBalancer.html +36 -0
  235. package/src/loadBalancer/configure/http/healthCheck/healthCheck.component.html +169 -0
  236. package/src/loadBalancer/configure/http/healthCheck/healthCheck.component.js +69 -0
  237. package/src/loadBalancer/configure/http/healthCheck/healthChecks.html +55 -0
  238. package/src/loadBalancer/configure/http/hostRule/hostRule.component.html +60 -0
  239. package/src/loadBalancer/configure/http/hostRule/hostRule.component.js +35 -0
  240. package/src/loadBalancer/configure/http/hostRule/hostRules.html +16 -0
  241. package/src/loadBalancer/configure/http/httpLoadBalancer.write.service.js +56 -0
  242. package/src/loadBalancer/configure/http/httpLoadBalancerWizard.component.less +24 -0
  243. package/src/loadBalancer/configure/http/listeners/listener.component.html +190 -0
  244. package/src/loadBalancer/configure/http/listeners/listener.component.js +82 -0
  245. package/src/loadBalancer/configure/http/listeners/listeners.html +17 -0
  246. package/src/loadBalancer/configure/http/pathRule/pathRule.component.html +51 -0
  247. package/src/loadBalancer/configure/http/pathRule/pathRule.component.js +16 -0
  248. package/src/loadBalancer/configure/http/templates.ts +48 -0
  249. package/src/loadBalancer/configure/http/transformer.service.js +176 -0
  250. package/src/loadBalancer/configure/internal/createLoadBalancerProperties.html +98 -0
  251. package/src/loadBalancer/configure/internal/gceCreateInternalLoadBalancer.controller.ts +276 -0
  252. package/src/loadBalancer/configure/internal/listener.html +41 -0
  253. package/src/loadBalancer/configure/internalhttp/createInternalHttpLoadBalancer.controller.ts +173 -0
  254. package/src/loadBalancer/configure/network/advancedSettings.html +54 -0
  255. package/src/loadBalancer/configure/network/createLoadBalancer.controller.js +224 -0
  256. package/src/loadBalancer/configure/network/createLoadBalancer.controller.spec.js +76 -0
  257. package/src/loadBalancer/configure/network/createLoadBalancer.html +25 -0
  258. package/src/loadBalancer/configure/network/createLoadBalancerProperties.html +86 -0
  259. package/src/loadBalancer/configure/network/editLoadBalancer.html +29 -0
  260. package/src/loadBalancer/configure/network/healthCheck.html +36 -0
  261. package/src/loadBalancer/configure/network/listeners.html +55 -0
  262. package/src/loadBalancer/configure/ssl/backendService.html +31 -0
  263. package/src/loadBalancer/configure/ssl/createLoadBalancerProperties.html +86 -0
  264. package/src/loadBalancer/configure/ssl/gceCreateSslLoadBalancer.controller.ts +236 -0
  265. package/src/loadBalancer/configure/ssl/listener.html +43 -0
  266. package/src/loadBalancer/configure/tcp/backendService.html +31 -0
  267. package/src/loadBalancer/configure/tcp/createLoadBalancerProperties.html +86 -0
  268. package/src/loadBalancer/configure/tcp/gceCreateTcpLoadBalancer.controller.ts +226 -0
  269. package/src/loadBalancer/configure/tcp/listener.html +15 -0
  270. package/src/loadBalancer/details/backendService/backendService.component.ts +23 -0
  271. package/src/loadBalancer/details/backendService/sessionAffinity.filter.ts +11 -0
  272. package/src/loadBalancer/details/deleteModal/deleteModal.controller.ts +105 -0
  273. package/src/loadBalancer/details/deleteModal/deleteModal.html +31 -0
  274. package/src/loadBalancer/details/healthCheck/healthCheck.component.html +14 -0
  275. package/src/loadBalancer/details/healthCheck/healthCheck.component.js +13 -0
  276. package/src/loadBalancer/details/hostAndPathRules/hostAndPathRules.controller.js +23 -0
  277. package/src/loadBalancer/details/hostAndPathRules/hostAndPathRules.modal.html +40 -0
  278. package/src/loadBalancer/details/hostAndPathRules/hostAndPathRules.service.js +41 -0
  279. package/src/loadBalancer/details/hostAndPathRules/hostAndPathRulesButton.component.js +39 -0
  280. package/src/loadBalancer/details/loadBalancerDetail.controller.js +260 -0
  281. package/src/loadBalancer/details/loadBalancerDetail.controller.spec.js +41 -0
  282. package/src/loadBalancer/details/loadBalancerDetails.html +202 -0
  283. package/src/loadBalancer/details/loadBalancerType/loadBalancerType.component.js +29 -0
  284. package/src/loadBalancer/httpLoadBalancerUtils.service.ts +42 -0
  285. package/src/loadBalancer/loadBalancer.setTransformer.ts +55 -0
  286. package/src/loadBalancer/loadBalancer.transformer.js +168 -0
  287. package/src/logo/gce.logo.less +6 -0
  288. package/src/logo/gce.logo.png +0 -0
  289. package/src/logo/gce.logo.svg +30 -0
  290. package/src/networkSelectField.directive.html +14 -0
  291. package/src/pipeline/stages/bake/bakeExecutionDetails.controller.js +40 -0
  292. package/src/pipeline/stages/bake/bakeExecutionDetails.html +60 -0
  293. package/src/pipeline/stages/bake/bakeStage.html +117 -0
  294. package/src/pipeline/stages/bake/gceBakeStage.js +171 -0
  295. package/src/pipeline/stages/cloneServerGroup/cloneServerGroupStage.html +99 -0
  296. package/src/pipeline/stages/cloneServerGroup/cloneServerGroupStepLabel.html +1 -0
  297. package/src/pipeline/stages/cloneServerGroup/gceCloneServerGroupStage.js +83 -0
  298. package/src/pipeline/stages/destroyAsg/destroyAsgStage.html +9 -0
  299. package/src/pipeline/stages/destroyAsg/destroyAsgStepLabel.html +1 -0
  300. package/src/pipeline/stages/destroyAsg/gceDestroyAsgStage.js +62 -0
  301. package/src/pipeline/stages/disableAsg/disableAsgStage.html +11 -0
  302. package/src/pipeline/stages/disableAsg/disableAsgStepLabel.html +1 -0
  303. package/src/pipeline/stages/disableAsg/gceDisableAsgStage.js +68 -0
  304. package/src/pipeline/stages/disableCluster/disableClusterStage.html +26 -0
  305. package/src/pipeline/stages/disableCluster/gceDisableClusterStage.js +79 -0
  306. package/src/pipeline/stages/enableAsg/enableAsgStage.html +11 -0
  307. package/src/pipeline/stages/enableAsg/enableAsgStepLabel.html +1 -0
  308. package/src/pipeline/stages/enableAsg/gceEnableAsgStage.js +65 -0
  309. package/src/pipeline/stages/findAmi/findAmiStage.html +20 -0
  310. package/src/pipeline/stages/findAmi/gceFindAmiStage.js +79 -0
  311. package/src/pipeline/stages/findImageFromTags/findImageFromTagsExecutionDetails.html +40 -0
  312. package/src/pipeline/stages/findImageFromTags/findImageFromTagsStage.html +8 -0
  313. package/src/pipeline/stages/findImageFromTags/gceFindImageFromTagsStage.js +35 -0
  314. package/src/pipeline/stages/resizeAsg/gceResizeAsgStage.js +125 -0
  315. package/src/pipeline/stages/resizeAsg/resizeAsgStage.html +97 -0
  316. package/src/pipeline/stages/resizeAsg/resizeAsgStepLabel.html +1 -0
  317. package/src/pipeline/stages/scaleDownCluster/gceScaleDownClusterStage.js +78 -0
  318. package/src/pipeline/stages/scaleDownCluster/scaleDownClusterStage.html +35 -0
  319. package/src/pipeline/stages/shrinkCluster/gceShrinkClusterStage.js +73 -0
  320. package/src/pipeline/stages/shrinkCluster/shrinkClusterStage.html +34 -0
  321. package/src/pipeline/stages/tagImage/gceTagImageStage.js +36 -0
  322. package/src/pipeline/stages/tagImage/tagImageExecutionDetails.html +39 -0
  323. package/src/pipeline/stages/tagImage/tagImageStage.html +14 -0
  324. package/src/regionSelectField.directive.html +18 -0
  325. package/src/securityGroup/clone/cloneSecurityGroup.controller.js +85 -0
  326. package/src/securityGroup/clone/cloneSecurityGroup.html +25 -0
  327. package/src/securityGroup/configure/ConfigSecurityGroupMixin.controller.js +318 -0
  328. package/src/securityGroup/configure/createSecurityGroup.controller.js +62 -0
  329. package/src/securityGroup/configure/createSecurityGroup.html +25 -0
  330. package/src/securityGroup/configure/createSecurityGroupIngress.html +81 -0
  331. package/src/securityGroup/configure/createSecurityGroupProperties.html +70 -0
  332. package/src/securityGroup/configure/createSecurityGroupSourceFilters.html +56 -0
  333. package/src/securityGroup/configure/createSecurityGroupTargets.html +43 -0
  334. package/src/securityGroup/configure/editSecurityGroup.controller.js +132 -0
  335. package/src/securityGroup/configure/editSecurityGroup.html +26 -0
  336. package/src/securityGroup/configure/securityGroup.configure.less +22 -0
  337. package/src/securityGroup/details/securityGroupDetail.controller.js +258 -0
  338. package/src/securityGroup/details/securityGroupDetail.html +171 -0
  339. package/src/securityGroup/securityGroup.reader.js +15 -0
  340. package/src/securityGroup/securityGroup.transformer.js +18 -0
  341. package/src/securityGroup/securityGroupHelpText.service.spec.ts +102 -0
  342. package/src/securityGroup/securityGroupHelpText.service.ts +83 -0
  343. package/src/serverGroup/configure/serverGroup.configure.gce.module.js +59 -0
  344. package/src/serverGroup/configure/serverGroupCommandBuilder.service.js +620 -0
  345. package/src/serverGroup/configure/serverGroupConfiguration.service.js +781 -0
  346. package/src/serverGroup/configure/wizard/advancedSettings/GceAcceleratorConfigurer.tsx +222 -0
  347. package/src/serverGroup/configure/wizard/advancedSettings/advancedSettings.directive.html +277 -0
  348. package/src/serverGroup/configure/wizard/advancedSettings/advancedSettings.html +9 -0
  349. package/src/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.js +71 -0
  350. package/src/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.spec.js +58 -0
  351. package/src/serverGroup/configure/wizard/advancedSettings/diskConfigurer.component.ts +199 -0
  352. package/src/serverGroup/configure/wizard/advancedSettings/gceAccelerator.service.spec.ts +108 -0
  353. package/src/serverGroup/configure/wizard/advancedSettings/gceAccelerator.service.ts +74 -0
  354. package/src/serverGroup/configure/wizard/autoHealingPolicy/autoHealingPolicy.html +20 -0
  355. package/src/serverGroup/configure/wizard/autoHealingPolicy/autoHealingPolicySelector.component.html +90 -0
  356. package/src/serverGroup/configure/wizard/autoHealingPolicy/autoHealingPolicySelector.component.ts +70 -0
  357. package/src/serverGroup/configure/wizard/autoScalingPolicy/autoScalingPolicy.html +20 -0
  358. package/src/serverGroup/configure/wizard/autoScalingPolicy/autoScalingPolicySelector.component.html +21 -0
  359. package/src/serverGroup/configure/wizard/autoScalingPolicy/autoScalingPolicySelector.component.js +47 -0
  360. package/src/serverGroup/configure/wizard/autoScalingPolicy/autoScalingPolicySelector.less +15 -0
  361. package/src/serverGroup/configure/wizard/capacity/advancedCapacitySelector.component.html +42 -0
  362. package/src/serverGroup/configure/wizard/capacity/advancedCapacitySelector.component.js +16 -0
  363. package/src/serverGroup/configure/wizard/capacity/capacity.html +16 -0
  364. package/src/serverGroup/configure/wizard/capacity/simpleCapacitySelector.component.html +14 -0
  365. package/src/serverGroup/configure/wizard/capacity/simpleCapacitySelector.component.js +22 -0
  366. package/src/serverGroup/configure/wizard/capacity/simpleCapacitySelector.component.spec.js +31 -0
  367. package/src/serverGroup/configure/wizard/capacity/zones.html +7 -0
  368. package/src/serverGroup/configure/wizard/cloneServerGroup.gce.controller.js +476 -0
  369. package/src/serverGroup/configure/wizard/customInstance/CustomInstanceConfigurer.tsx +166 -0
  370. package/src/serverGroup/configure/wizard/customInstance/customInstanceBuilder.html +13 -0
  371. package/src/serverGroup/configure/wizard/customInstance/customInstanceConfigurer.component.less +9 -0
  372. package/src/serverGroup/configure/wizard/customInstance/customInstanceConfigurer.component.ts +21 -0
  373. package/src/serverGroup/configure/wizard/hiddenMetadataKeys.value.js +15 -0
  374. package/src/serverGroup/configure/wizard/instanceType/instanceType.html +11 -0
  375. package/src/serverGroup/configure/wizard/loadBalancers/elSevenOptions/backendServiceSelector.component.html +21 -0
  376. package/src/serverGroup/configure/wizard/loadBalancers/elSevenOptions/backendServiceSelector.component.js +33 -0
  377. package/src/serverGroup/configure/wizard/loadBalancers/elSevenOptions/elSevenOptionsGenerator.component.js +42 -0
  378. package/src/serverGroup/configure/wizard/loadBalancers/loadBalancerSelector.directive.html +53 -0
  379. package/src/serverGroup/configure/wizard/loadBalancers/loadBalancerSelector.directive.js +55 -0
  380. package/src/serverGroup/configure/wizard/loadBalancers/loadBalancers.html +5 -0
  381. package/src/serverGroup/configure/wizard/loadBalancingPolicy/loadBalancingPolicySelector.component.html +182 -0
  382. package/src/serverGroup/configure/wizard/loadBalancingPolicy/loadBalancingPolicySelector.component.less +11 -0
  383. package/src/serverGroup/configure/wizard/loadBalancingPolicy/loadBalancingPolicySelector.component.ts +149 -0
  384. package/src/serverGroup/configure/wizard/location/basicSettings.controller.js +139 -0
  385. package/src/serverGroup/configure/wizard/location/basicSettings.html +167 -0
  386. package/src/serverGroup/configure/wizard/securityGroups/securityGroupSelector.directive.html +66 -0
  387. package/src/serverGroup/configure/wizard/securityGroups/securityGroupSelector.directive.js +48 -0
  388. package/src/serverGroup/configure/wizard/securityGroups/securityGroups.html +4 -0
  389. package/src/serverGroup/configure/wizard/securityGroups/securityGroupsRemoved.directive.html +14 -0
  390. package/src/serverGroup/configure/wizard/securityGroups/securityGroupsRemoved.directive.js +25 -0
  391. package/src/serverGroup/configure/wizard/securityGroups/tagManager.service.js +208 -0
  392. package/src/serverGroup/configure/wizard/securityGroups/tagSelector.component.html +26 -0
  393. package/src/serverGroup/configure/wizard/securityGroups/tagSelector.component.js +31 -0
  394. package/src/serverGroup/configure/wizard/securityGroups/tagSelectorGenerator.component.js +44 -0
  395. package/src/serverGroup/configure/wizard/serverGroupWizard.html +52 -0
  396. package/src/serverGroup/configure/wizard/templateSelection/templateSelection.html +9 -0
  397. package/src/serverGroup/configure/wizard/zones/regionalSelector.directive.html +13 -0
  398. package/src/serverGroup/configure/wizard/zones/regionalSelector.directive.js +21 -0
  399. package/src/serverGroup/configure/wizard/zones/targetShapeSelector.directive.html +13 -0
  400. package/src/serverGroup/configure/wizard/zones/targetShapeSelector.directive.ts +20 -0
  401. package/src/serverGroup/configure/wizard/zones/zoneSelector.directive.html +24 -0
  402. package/src/serverGroup/configure/wizard/zones/zoneSelector.directive.js +21 -0
  403. package/src/serverGroup/details/ServerGroupDiskDescriptions.tsx +97 -0
  404. package/src/serverGroup/details/autoHealingPolicy/addAutoHealingPolicyButton.component.ts +38 -0
  405. package/src/serverGroup/details/autoHealingPolicy/autoHealingPolicy.component.ts +73 -0
  406. package/src/serverGroup/details/autoHealingPolicy/modal/upsertAutoHealingPolicy.modal.controller.ts +88 -0
  407. package/src/serverGroup/details/autoHealingPolicy/modal/upsertAutoHealingPolicy.modal.html +29 -0
  408. package/src/serverGroup/details/autoHealingPolicy/modal/upsertAutoHealingPolicy.modal.less +13 -0
  409. package/src/serverGroup/details/autoscalingPolicy/addAutoscalingPolicyButton.component.js +38 -0
  410. package/src/serverGroup/details/autoscalingPolicy/autoscalingPolicy.directive.html +49 -0
  411. package/src/serverGroup/details/autoscalingPolicy/autoscalingPolicy.directive.js +138 -0
  412. package/src/serverGroup/details/autoscalingPolicy/modal/GceScaleInControls.tsx +137 -0
  413. package/src/serverGroup/details/autoscalingPolicy/modal/upsertAutoscalingPolicy.modal.controller.js +56 -0
  414. package/src/serverGroup/details/autoscalingPolicy/modal/upsertAutoscalingPolicy.modal.html +38 -0
  415. package/src/serverGroup/details/autoscalingPolicy/modal/upsertAutoscalingPolicy.modal.less +17 -0
  416. package/src/serverGroup/details/resize/resizeAutoscalingPolicy.component.html +55 -0
  417. package/src/serverGroup/details/resize/resizeAutoscalingPolicy.component.js +60 -0
  418. package/src/serverGroup/details/resize/resizeCapacity.component.html +36 -0
  419. package/src/serverGroup/details/resize/resizeCapacity.component.js +46 -0
  420. package/src/serverGroup/details/resize/resizeServerGroup.controller.js +64 -0
  421. package/src/serverGroup/details/resize/resizeServerGroup.controller.spec.js +119 -0
  422. package/src/serverGroup/details/resize/resizeServerGroup.html +41 -0
  423. package/src/serverGroup/details/rollback/rollbackServerGroup.controller.js +73 -0
  424. package/src/serverGroup/details/rollback/rollbackServerGroup.html +43 -0
  425. package/src/serverGroup/details/serverGroup.details.gce.module.js +17 -0
  426. package/src/serverGroup/details/serverGroupDetails.gce.controller.js +511 -0
  427. package/src/serverGroup/details/serverGroupDetails.gce.controller.spec.js +26 -0
  428. package/src/serverGroup/details/serverGroupDetails.html +359 -0
  429. package/src/serverGroup/details/serverGroupDetails.less +3 -0
  430. package/src/serverGroup/details/stateful/MarkDiskStatefulButton.tsx +41 -0
  431. package/src/serverGroup/details/stateful/StatefulMIGService.ts +49 -0
  432. package/src/serverGroup/details/stateful/UpdateBootImageButton.tsx +108 -0
  433. package/src/serverGroup/serverGroup.transformer.js +64 -0
  434. package/src/serverGroup/serverGroup.transformer.spec.js +59 -0
  435. package/src/subnet/subnet.renderer.js +34 -0
  436. package/src/subnet/subnetSelectField.directive.html +21 -0
  437. package/src/subnet/subnetSelectField.directive.js +24 -0
  438. package/src/validation/applicationName.validator.js +114 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../node_modules/style-inject/dist/style-inject.es.js","../src/autoscalingPolicy/GceAutoScalingFieldLayout.tsx","../src/autoscalingPolicy/IGceAutoscalingPolicy.ts","../src/gce.settings.ts","../src/autoscalingPolicy/components/metricSettings/GcePredictiveAutoscaling.tsx","../src/address/address.reader.ts","../src/backendService/backendService.reader.js","../src/healthCheck/healthCheck.read.service.ts","../src/cache/cacheConfigurer.service.js","../src/common/xpnNaming.gce.service.js","../src/help/gce.help.ts","../src/image/image.reader.ts","../src/image/ImageSelect.tsx","../src/instance/custom/customInstanceBuilder.gce.service.js","../src/instance/custom/customInstance.filter.js","../src/loadBalancer/httpLoadBalancerUtils.service.ts","../src/instance/details/instance.details.controller.js","../src/instance/gceInstanceTypeDisks.ts","../src/instance/gceInstanceType.service.js","../src/instance/gceMultiInstanceTask.transformer.js","../src/interceptors/iap.interceptor.ts","../src/loadBalancer/configure/choice/loadBalancerTypeToWizardMap.constant.ts","../src/loadBalancer/configure/choice/gceLoadBalancerChoice.modal.ts","../src/loadBalancer/configure/http/templates.ts","../src/loadBalancer/configure/http/backendService/backendService.component.js","../src/loadBalancer/configure/http/basicSettings/basicSettings.component.js","../src/cache/cacheRefresh.component.ts","../src/certificate/certificate.reader.ts","../src/loadBalancer/configure/common/sessionAffinityNameMaps.ts","../src/loadBalancer/configure/http/transformer.service.js","../src/loadBalancer/configure/http/commandBuilder.service.js","../src/loadBalancer/details/hostAndPathRules/hostAndPathRules.service.js","../src/loadBalancer/details/hostAndPathRules/hostAndPathRules.controller.js","../src/loadBalancer/details/hostAndPathRules/hostAndPathRulesButton.component.js","../src/loadBalancer/configure/http/healthCheck/healthCheck.component.js","../src/loadBalancer/configure/http/pathRule/pathRule.component.js","../src/loadBalancer/configure/http/hostRule/hostRule.component.js","../src/loadBalancer/configure/http/httpLoadBalancer.write.service.js","../src/loadBalancer/configure/common/addressSelector.component.ts","../src/loadBalancer/configure/http/listeners/listener.component.js","../src/loadBalancer/configure/http/createHttpLoadBalancer.controller.js","../src/loadBalancer/configure/common/commonLoadBalancer.controller.ts","../src/loadBalancer/configure/common/commonLoadBalancerCommandBuilder.service.ts","../src/loadBalancer/configure/common/healthCheck.component.ts","../src/loadBalancer/configure/internal/gceCreateInternalLoadBalancer.controller.ts","../src/loadBalancer/configure/internalhttp/createInternalHttpLoadBalancer.controller.ts","../src/gceRegionSelectField.directive.js","../src/loadBalancer/loadBalancer.transformer.js","../src/loadBalancer/configure/network/createLoadBalancer.controller.js","../src/loadBalancer/configure/ssl/gceCreateSslLoadBalancer.controller.ts","../src/loadBalancer/configure/tcp/gceCreateTcpLoadBalancer.controller.ts","../src/loadBalancer/details/backendService/backendService.component.ts","../src/loadBalancer/details/backendService/sessionAffinity.filter.ts","../src/loadBalancer/details/deleteModal/deleteModal.controller.ts","../src/loadBalancer/details/healthCheck/healthCheck.component.js","../src/loadBalancer/details/loadBalancerType/loadBalancerType.component.js","../src/loadBalancer/details/loadBalancerDetail.controller.js","../src/loadBalancer/loadBalancer.setTransformer.ts","../src/logo/gce.logo.png","../src/pipeline/stages/bake/bakeExecutionDetails.controller.js","../src/pipeline/stages/bake/gceBakeStage.js","../src/pipeline/stages/cloneServerGroup/gceCloneServerGroupStage.js","../src/pipeline/stages/destroyAsg/gceDestroyAsgStage.js","../src/pipeline/stages/disableAsg/gceDisableAsgStage.js","../src/pipeline/stages/disableCluster/gceDisableClusterStage.js","../src/pipeline/stages/enableAsg/gceEnableAsgStage.js","../src/pipeline/stages/findAmi/gceFindAmiStage.js","../src/pipeline/stages/findImageFromTags/gceFindImageFromTagsStage.js","../src/pipeline/stages/resizeAsg/gceResizeAsgStage.js","../src/pipeline/stages/scaleDownCluster/gceScaleDownClusterStage.js","../src/pipeline/stages/shrinkCluster/gceShrinkClusterStage.js","../src/pipeline/stages/tagImage/gceTagImageStage.js","../src/securityGroup/configure/createSecurityGroup.controller.js","../src/securityGroup/configure/editSecurityGroup.controller.js","../src/securityGroup/securityGroupHelpText.service.ts","../src/securityGroup/configure/ConfigSecurityGroupMixin.controller.js","../src/securityGroup/clone/cloneSecurityGroup.controller.js","../src/securityGroup/details/securityGroupDetail.controller.js","../src/securityGroup/securityGroup.reader.js","../src/securityGroup/securityGroup.transformer.js","../src/autoscalingPolicy/components/basicSettings/basicSettings.component.js","../src/autoscalingPolicy/components/metricSettings/metricSettings.component.js","../src/autoscalingPolicy/components/scalingSchedules/scalingSchedules.component.js","../src/autoscalingPolicy/components/scalingSchedules/timeZoneSelect.tsx","../src/serverGroup/serverGroup.transformer.js","../src/healthCheck/healthCheckUtils.ts","../src/serverGroup/configure/wizard/advancedSettings/gceAccelerator.service.ts","../src/serverGroup/configure/wizard/securityGroups/tagManager.service.js","../src/serverGroup/configure/serverGroupConfiguration.service.js","../src/serverGroup/configure/wizard/advancedSettings/GceAcceleratorConfigurer.tsx","../src/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.js","../src/serverGroup/configure/wizard/advancedSettings/diskConfigurer.component.ts","../src/serverGroup/configure/wizard/autoHealingPolicy/autoHealingPolicySelector.component.ts","../src/serverGroup/configure/wizard/autoScalingPolicy/autoScalingPolicySelector.component.js","../src/serverGroup/configure/wizard/capacity/advancedCapacitySelector.component.js","../src/serverGroup/configure/wizard/capacity/simpleCapacitySelector.component.js","../src/serverGroup/configure/wizard/customInstance/CustomInstanceConfigurer.tsx","../src/serverGroup/configure/wizard/customInstance/customInstanceConfigurer.component.ts","../src/serverGroup/configure/wizard/loadBalancers/elSevenOptions/backendServiceSelector.component.js","../src/serverGroup/configure/wizard/loadBalancers/elSevenOptions/elSevenOptionsGenerator.component.js","../src/serverGroup/configure/wizard/loadBalancers/loadBalancerSelector.directive.js","../src/serverGroup/configure/wizard/loadBalancingPolicy/loadBalancingPolicySelector.component.ts","../src/gceNetworkSelectField.directive.js","../src/subnet/subnetSelectField.directive.js","../src/serverGroup/configure/wizard/location/basicSettings.controller.js","../src/serverGroup/configure/wizard/securityGroups/tagSelector.component.js","../src/serverGroup/configure/wizard/securityGroups/tagSelectorGenerator.component.js","../src/serverGroup/configure/wizard/securityGroups/securityGroupSelector.directive.js","../src/serverGroup/configure/wizard/securityGroups/securityGroupsRemoved.directive.js","../src/serverGroup/configure/wizard/zones/regionalSelector.directive.js","../src/serverGroup/configure/wizard/zones/targetShapeSelector.directive.ts","../src/serverGroup/configure/wizard/zones/zoneSelector.directive.js","../src/serverGroup/configure/serverGroup.configure.gce.module.js","../src/serverGroup/configure/wizard/hiddenMetadataKeys.value.js","../src/serverGroup/configure/serverGroupCommandBuilder.service.js","../src/serverGroup/configure/wizard/cloneServerGroup.gce.controller.js","../src/serverGroup/details/stateful/StatefulMIGService.ts","../src/serverGroup/details/stateful/MarkDiskStatefulButton.tsx","../src/serverGroup/details/stateful/UpdateBootImageButton.tsx","../src/serverGroup/details/ServerGroupDiskDescriptions.tsx","../src/serverGroup/details/autoscalingPolicy/modal/GceScaleInControls.tsx","../src/serverGroup/details/autoHealingPolicy/addAutoHealingPolicyButton.component.ts","../src/serverGroup/details/autoHealingPolicy/autoHealingPolicy.component.ts","../src/autoscalingPolicy/autoscalingPolicy.write.service.js","../src/serverGroup/details/autoHealingPolicy/modal/upsertAutoHealingPolicy.modal.controller.ts","../src/serverGroup/details/autoscalingPolicy/modal/upsertAutoscalingPolicy.modal.controller.js","../src/serverGroup/details/autoscalingPolicy/addAutoscalingPolicyButton.component.js","../src/serverGroup/details/autoscalingPolicy/autoscalingPolicy.directive.js","../src/common/footer.directive.js","../src/serverGroup/details/resize/resizeAutoscalingPolicy.component.js","../src/serverGroup/details/resize/resizeCapacity.component.js","../src/serverGroup/details/resize/resizeServerGroup.controller.js","../src/serverGroup/details/rollback/rollbackServerGroup.controller.js","../src/serverGroup/details/serverGroupDetails.gce.controller.js","../src/serverGroup/details/serverGroup.details.gce.module.js","../src/subnet/subnet.renderer.js","../src/validation/applicationName.validator.js","../src/gce.module.ts"],"sourcesContent":["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 { isEmpty } from 'lodash';\nimport React from 'react';\n\nimport type { ILayoutProps } from '@spinnaker/core';\n\nimport './gceAutoscalingFieldLayout.less';\n\n// todo(mneterval): remove when GCE Autoscaling Controls are entirely converted to React & Formik\nexport function GceAutoScalingFieldLayout(props: ILayoutProps) {\n const { label, help, input, actions, validation, required } = props;\n\n const showLabel = !isEmpty(label) || !isEmpty(help);\n const { hidden, messageNode } = validation;\n\n return (\n <div className=\"gce-autoscaling-layout\">\n {showLabel && (\n <label className=\"col-md-3 sm-label-right\">\n {label}\n {required && <span>*</span>} {help}\n </label>\n )}\n <div className=\"col-md-2 content-fields\">\n <div>\n {input} {actions}\n </div>\n {!hidden && <div className=\"message\">{messageNode}</div>}\n </div>\n </div>\n );\n}\n","export interface IGceAutoscalingPolicy {\n cpuUtilization: IGceAutoscalingCpuUtilization;\n scaleInControl: IGceScaleInControl;\n}\n\nexport interface IGceScaleInControl {\n maxScaledInReplicas?: {\n fixed?: number;\n percent?: number;\n };\n timeWindowSec?: number;\n}\n\nexport interface IGceAutoscalingCpuUtilization {\n predictiveMethod?: GcePredictiveMethod;\n utilizationTarget?: number;\n}\n\nexport enum GcePredictiveMethod {\n NONE = 'NONE',\n STANDARD = 'OPTIMIZE_AVAILABILITY',\n}\n","import { defaults } from 'lodash';\n\nimport type { IInstanceStorage, IProviderSettings } from '@spinnaker/core';\nimport { SETTINGS } from '@spinnaker/core';\n\nexport interface IGCEProviderSettings extends IProviderSettings {\n defaults: {\n account?: string;\n region?: string;\n zone?: string;\n instanceTypeStorage?: IInstanceStorage;\n };\n feature: {\n predictiveAutoscaling?: boolean;\n statefulMigsEnabled?: boolean;\n };\n}\n\nexport const GCEProviderSettings: IGCEProviderSettings = defaults(SETTINGS.providers.gce || {}, {\n defaults: {},\n feature: {},\n resetToOriginal: SETTINGS.resetProvider('gce'),\n});\n","import { module } from 'angular';\nimport React from 'react';\nimport { react2angular } from 'react2angular';\n\nimport type { IFormInputProps } from '@spinnaker/core';\nimport { CheckboxInput, FormField, HelpField, LayoutProvider, withErrorBoundary } from '@spinnaker/core';\n\nimport { GceAutoScalingFieldLayout } from '../../GceAutoScalingFieldLayout';\nimport type { IGceAutoscalingPolicy } from '../../IGceAutoscalingPolicy';\nimport { GcePredictiveMethod } from '../../IGceAutoscalingPolicy';\nimport { GCEProviderSettings } from '../../../gce.settings';\n\ninterface IGcePredictiveAutoscalingProps {\n policy: IGceAutoscalingPolicy;\n updatePolicy: (policy: IGceAutoscalingPolicy) => void;\n}\n\nfunction GcePredictiveAutoscaling({ policy, updatePolicy }: IGcePredictiveAutoscalingProps) {\n if (!GCEProviderSettings.feature.predictiveAutoscaling) {\n return null;\n }\n\n function togglePredictiveAutoscaling(predictiveMethod: GcePredictiveMethod) {\n updatePolicy({\n ...policy,\n cpuUtilization: {\n ...policy.cpuUtilization,\n predictiveMethod,\n },\n });\n }\n\n return (\n <LayoutProvider value={GceAutoScalingFieldLayout}>\n <div className=\"row\">\n <FormField\n help={<HelpField id=\"gce.serverGroup.scalingPolicy.predictiveAutoscaling\" />}\n input={(inputProps: IFormInputProps) => <CheckboxInput {...inputProps} />}\n label=\"Enable predictive autoscaling\"\n onChange={(e: React.ChangeEvent<any>) => {\n togglePredictiveAutoscaling(e.target.checked ? GcePredictiveMethod.STANDARD : GcePredictiveMethod.NONE);\n }}\n value={policy?.cpuUtilization?.predictiveMethod === GcePredictiveMethod.STANDARD}\n />\n </div>\n </LayoutProvider>\n );\n}\n\nexport const GCE_PREDICTIVE_AUTOSCALING = 'spinnaker.gce.predictiveAutoscaling';\nmodule(GCE_PREDICTIVE_AUTOSCALING, []).component(\n 'gcePredictiveAutoscaling',\n react2angular(withErrorBoundary(GcePredictiveAutoscaling, 'gcePredictiveAutoscaling'), ['policy', 'updatePolicy']),\n);\n","import { module } from 'angular';\n\nimport type { ISearchResults } from '@spinnaker/core';\nimport { InfrastructureCaches, SearchService } from '@spinnaker/core';\n\ninterface IAddressSearchResults {\n account: string;\n address: string; // JSON encoded string containing the address. It is missing the account.\n name: string;\n provider: string;\n region: string;\n type: string;\n}\n\nexport interface IGceAddress {\n account?: string;\n address: string;\n creationTimestamp?: string;\n description?: string;\n id?: number;\n kind?: string;\n labelFingerprint?: string;\n name?: string;\n networkTier?: string;\n region?: string;\n selfLink?: string;\n status?: string;\n}\n\nclass GceAddressReader {\n public listAddresses(region?: string): PromiseLike<IGceAddress[]> {\n if (region) {\n return this.listAddresses(null /* region */).then((addresses) =>\n addresses.filter((address) => address.region === region),\n );\n } else {\n return SearchService.search<IAddressSearchResults>(\n { q: '', type: 'addresses', allowShortQuery: 'true' },\n InfrastructureCaches.get('addresses'),\n )\n .then((searchResults: ISearchResults<IAddressSearchResults>) => {\n if (searchResults && searchResults.results) {\n return searchResults.results\n .filter((result) => result.provider === 'gce')\n .map((result) => {\n const address = JSON.parse(result.address) as IGceAddress;\n address.account = result.account;\n address.region = result.region;\n return address;\n });\n } else {\n return [];\n }\n })\n .catch(() => [] as IGceAddress[]);\n }\n }\n}\n\nexport const GCE_ADDRESS_READER = 'spinnaker.gce.addressReader.service';\nmodule(GCE_ADDRESS_READER, []).service('gceAddressReader', GceAddressReader);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { InfrastructureCaches, REST } from '@spinnaker/core';\n\nexport const GOOGLE_BACKENDSERVICE_BACKENDSERVICE_READER = 'spinnaker.deck.gce.backendService.reader.service';\nexport const name = GOOGLE_BACKENDSERVICE_BACKENDSERVICE_READER; // for backwards compatibility\nmodule(GOOGLE_BACKENDSERVICE_BACKENDSERVICE_READER, []).factory('gceBackendServiceReader', function () {\n function listBackendServices(kind) {\n if (kind) {\n return listBackendServices().then(([services]) => {\n if (services) {\n const results = services.results || [];\n return results.filter((service) => service.kind === kind);\n }\n return [];\n });\n } else {\n return REST('/search')\n .useCache(InfrastructureCaches.get('backendServices'))\n .query({ q: '', type: 'backendServices', allowShortQuery: 'true' })\n .get();\n }\n }\n\n return { listBackendServices };\n});\n","import { module } from 'angular';\nimport { uniqWith } from 'lodash';\n\nimport type { ISearchResults } from '@spinnaker/core';\nimport { InfrastructureCaches, SearchService } from '@spinnaker/core';\nimport type { IGceHealthCheck } from '../domain';\n\ninterface IHealthCheckSearchResults {\n name: string;\n account: string;\n healthCheck: string; // JSON encoded string containing the real health check (it is missing the account).\n region?: string;\n kind: string;\n provider: string;\n type: string;\n}\n\nexport class GceHealthCheckReader {\n public listHealthChecks(type?: string): PromiseLike<IGceHealthCheck[]> {\n if (type) {\n return this.listHealthChecks().then((healthChecks) =>\n healthChecks.filter((healthCheck) => healthCheck.healthCheckType === type),\n );\n } else {\n return SearchService.search(\n { q: '', type: 'healthChecks', allowShortQuery: 'true' },\n InfrastructureCaches.get('healthChecks'),\n )\n .then((searchResults: ISearchResults<IHealthCheckSearchResults>) => {\n if (searchResults && searchResults.results) {\n const healthChecks = searchResults.results\n .filter((result) => result.provider === 'gce')\n .map((result) => {\n const healthCheck = JSON.parse(result.healthCheck) as IGceHealthCheck;\n healthCheck.account = result.account;\n return healthCheck;\n });\n return uniqWith(healthChecks, (checkA: IGceHealthCheck, checkB: IGceHealthCheck) => {\n return (\n checkA.name === checkB.name &&\n checkA.healthCheckType === checkB.healthCheckType &&\n checkA.account === checkB.account\n );\n });\n } else {\n return [];\n }\n })\n .catch(() => []);\n }\n }\n}\n\nexport const GCE_HEALTH_CHECK_READER = 'spinnaker.gce.healthCheck.reader';\nmodule(GCE_HEALTH_CHECK_READER, []).service('gceHealthCheckReader', GceHealthCheckReader);\n","'use strict';\n\nimport { module } from 'angular';\nimport { GCE_ADDRESS_READER } from '../address/address.reader';\n\nimport { GOOGLE_BACKENDSERVICE_BACKENDSERVICE_READER } from '../backendService/backendService.reader';\nimport { GCE_HEALTH_CHECK_READER } from '../healthCheck/healthCheck.read.service';\n\nexport const GOOGLE_CACHE_CACHECONFIGURER_SERVICE = 'spinnaker.gce.cache.initializer';\nexport const name = GOOGLE_CACHE_CACHECONFIGURER_SERVICE; // for backwards compatibility\nmodule(GOOGLE_CACHE_CACHECONFIGURER_SERVICE, [\n GOOGLE_BACKENDSERVICE_BACKENDSERVICE_READER,\n GCE_ADDRESS_READER,\n GCE_HEALTH_CHECK_READER,\n]).factory('gceCacheConfigurer', [\n 'gceAddressReader',\n 'gceBackendServiceReader',\n 'gceCertificateReader',\n 'gceHealthCheckReader',\n function (gceAddressReader, gceBackendServiceReader, gceCertificateReader, gceHealthCheckReader) {\n const config = Object.create(null);\n\n config.addresses = {\n initializers: [() => gceAddressReader.listAddresses()],\n };\n\n config.backendServices = {\n initializers: [() => gceBackendServiceReader.listBackendServices()],\n };\n\n config.certificates = {\n initializers: [() => gceCertificateReader.listCertificates()],\n };\n\n config.healthChecks = {\n initializers: [() => gceHealthCheckReader.listHealthChecks()],\n };\n\n return config;\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nexport const GOOGLE_COMMON_XPNNAMING_GCE_SERVICE = 'spinnaker.gce.common.xpnNaming.service';\nexport const name = GOOGLE_COMMON_XPNNAMING_GCE_SERVICE; // for backwards compatibility\nmodule(GOOGLE_COMMON_XPNNAMING_GCE_SERVICE, []).factory('gceXpnNamingService', function () {\n const deriveProjectId = (resourceWithSelfLink) => {\n const pathSegments = resourceWithSelfLink.selfLink.split('/');\n return pathSegments[pathSegments.indexOf('projects') + 1];\n };\n\n const decorateXpnResourceIfNecessary = (projectId, xpnResource) => {\n if (!xpnResource) {\n return null;\n }\n\n // A network selfLink looks like: https://compute.googleapis.com/compute/beta/projects/test-host-project/global/networks/default\n // A subnet selfLink looks like: https://compute.googleapis.com/compute/beta/projects/my-test-service-project/regions/us-west1/subnetworks/default\n const xpnResourcePathSegments = xpnResource.split('/');\n const xpnResourceProjectId = xpnResourcePathSegments[xpnResourcePathSegments.indexOf('projects') + 1];\n const xpnResourceName = _.last(xpnResourcePathSegments);\n if (xpnResourceProjectId !== projectId) {\n return xpnResourceProjectId + '/' + xpnResourceName;\n } else {\n return xpnResourceName;\n }\n };\n\n return {\n deriveProjectId,\n decorateXpnResourceIfNecessary,\n };\n});\n","import { HelpContentsRegistry } from '@spinnaker/core';\n\nconst helpContents: { [key: string]: string } = {\n 'gce.httpLoadBalancer.certificate':\n 'The name of an SSL certificate. If specified, Spinnaker will create an HTTPS load balancer.',\n 'gce.httpLoadBalancer.defaultService':\n 'A default service handles any requests that do not match a specified host rule or path matching rule.',\n 'gce.httpLoadBalancer.externalIP':\n 'The IP address for this listener. If you do not specify an IP, your listener will be assigned an ephemeral IP.',\n 'gce.httpLoadBalancer.hostRule.hostPattern': 'For example, <b>example.com</b>.',\n 'gce.httpLoadBalancer.namedPort': `\n For HTTP(S) and SSL/TCP load balancers,\n incoming traffic is directed through a named port (for Spinnaker, the named port is <b>http</b>).\n The mapping from named port to port number is specified per server group\n and can be configured within the server group creation dialogue under <b>Port Name Mapping</b>.`,\n 'gce.httpLoadBalancer.pathRule.paths': 'For example, <b>/path</b> in <b>example.com/path</b>',\n 'gce.httpLoadBalancer.port':\n 'HTTP requests can be load balanced based on port 80 or port 8080. HTTPS requests can be load balanced on port 443.',\n 'gce.image.artifact':\n 'The artifact that is to be deployed to this cluster. The artifact should represent a deployable image.',\n 'gce.image.source': `\n <p>Where the image to deploy is read from.</p>\n <p>\n <b>Artifact:</b> Deploy an artifact that was supplied/created upstream. The expected artifact must be referenced here, and will be bound at runtime.\n </p>\n <p>\n <b>Prior Stage:</b> Deploy the result of the most recent Bake or Find Image stage.\n </p>\n `,\n 'gce.instance.customInstance.cores':\n '<ul><li>Above 1, vCPU count must be even.</li><li>Zones that support Haswell and Ivy Bridge processors can support custom machine types up to 32 vCPUs.</li><li>Zones that support Sandy Bridge processors can support up to 16 vCPUs.</li></ul>',\n 'gce.instance.customInstance.memory':\n '<ul><li>Memory per vCPU must be between .9 GB and 6.5 GB.</li><li>Total memory must be a multiple of 256 MB.</li><li>Memory per vCPU must be between .9 GB and 800 GB if selected extended memory feature.</li></ul>',\n 'gce.instance.customInstance.extendedmemory':\n 'Add more memory per vCPU to your VM instance. <a href=\"https://cloud.google.com/compute/docs/instances/creating-instance-with-custom-machine-type#extendedmemory\">Click here </a>for more information regarding extended memory',\n 'gce.instance.customMetadata.instance-template': 'The instance template used to configure this instance.',\n 'gce.instance.customMetadata.load-balancer-names':\n 'This field is used to \"remember\" what load balancers this instance is associated with, even if it is deregistered.',\n 'gce.instance.customMetadata.global-load-balancer-names':\n 'This field is used to \"remember\" what global load balancers this instance is associated with, even if it is deregistered.',\n 'gce.instance.customMetadata.backend-service-names':\n 'This field is used to \"remember\" what backend services this instance is associated with, even if it is deregistered.',\n 'gce.instance.customMetadata.load-balancing-policy':\n 'This field is used to \"remember\" the load balancing policy this instance is associated with, even if it is deregistered.',\n 'gce.instance.customMetadata.startup-script': 'This script will run automatically on every boot.',\n 'gce.instance.labels.spinnaker-region': 'This label can be used to group instances when querying for metrics.',\n 'gce.instance.labels.spinnaker-server-group': 'This label can be used to group instances when querying for metrics.',\n 'gce.instance.storage':\n '<p>Storage options can be fully-configured on the <b>Advanced Settings</b> tab. These are just default settings. Please be aware of your Local SSD quotas as you provision VMs.</p>',\n 'gce.instance.storage.localSSD':\n '<p>Local SSD disks are always 375GB. All non shared-core instance types support attaching up to 8 Local SSD disks. Please be aware of your Local SSD quotas as you provision VMs.</p>',\n 'gce.instance.serviceAccount':\n '<p>Service accounts authenticate applications running on your virtual machine instances to other Google Cloud Platform services. Valid values are either \"default\" or the full email address of a custom service account.</p>',\n 'gce.instance.authScopes':\n '<p>Service account scopes specify which Google Cloud Platform APIs your instances can authenticate with, and define the level of access that your instances have with those services. You can enter custom auth scopes by typing into the blank field.</p>',\n 'gce.instance.authScopes.cloud-platform':\n '<p>The instances in this server group have full API access to all Google Cloud services.</p>',\n 'gce.instanceType.32core':\n '<p>32-core machine types are in Beta and are available only in Ivy Bridge and Haswell zones.</p>',\n 'gce.internalLoadBalancer.ports': 'Use a comma to separate up to five TCP ports.',\n 'gce.internalHttpLoadBalancer.network':\n \"Network must have a subnet whose 'purpose' is 'INTERNAL_HTTPS_LOAD_BALANCER'\",\n 'gce.loadBalancer.connectionDraining':\n '(Optional) If set, enables connection draining for this backend service. This field defines the number of seconds to wait before instances that belong to this backend service are terminated in order to drain in-flight connections.',\n 'gce.loadBalancer.detail':\n '<p>(Optional) <b>Detail</b> is a string of free-form alphanumeric characters and hyphens to describe any other variables.</p>',\n 'gce.loadBalancer.advancedSettings.healthInterval':\n '<p>Configures the interval, in seconds, between load balancer health checks.</p><p>Default: <b>10</b></p>',\n 'gce.loadBalancer.advancedSettings.healthyThreshold':\n '<p>Configures the number of healthy observations before reinstituting an instance into the load balancer’s traffic rotation.</p><p>Default: <b>10</b></p>',\n 'gce.loadBalancer.advancedSettings.unhealthyThreshold':\n '<p>Configures the number of unhealthy observations before deservicing an instance from the load balancer.</p><p>Default: <b>2</b></p>',\n 'gce.loadBalancer.healthCheck':\n '(Optional) <b>Health Checks</b> use HTTP requests to determine if a VM instance is healthy.',\n 'gce.loadBalancer.portName':\n '(Required) The <b>Port Name</b> this backend service will forward traffic to. Load balancers in GCP specify a <b>Port Name</b>, and each server group added to a load balancer needs to specify a mapping from that <b>Port Name</b> to a port to actually receive traffic.',\n 'gce.loadBalancer.portRange':\n '(Optional) Only packets addressed to ports in the specified <b>Port Range</b> will be forwarded. If left empty, all ports are forwarded. Must be a single port number or two port numbers separated by a dash. Each port number must be between 1 and 65535, inclusive. For example: 5000-5999.',\n 'gce.securityGroup.sourceCIDRs':\n 'Traffic is only allowed from sources that match one of these CIDR ranges, or one of the source tags above.',\n 'gce.securityGroup.sourceTags':\n 'Traffic is only allowed from sources that match one of these tags, or one of the source CIDR ranges below.',\n 'gce.securityGroup.targetTags': 'Traffic is only allowed if the target instance has one of these tags.',\n 'gce.securityGroup.targetServiceAccounts':\n 'Traffic is allowed if the target instance has one of these service accounts.',\n 'gce.securityGroup.sourceServiceAccounts':\n 'Traffic is allowed if the source instance has one of these service accounts.',\n 'gce.serverGroup.associatePublicIpAddress.providerField':\n 'Check if new GCE server groups in this application should be assigned a public IP address by default.',\n 'gce.serverGroup.resizeWithAutoscalingPolicy': `\n Setting the desired instance count for a server group with an autoscaler is not supported by Spinnaker;\n if the desired instance count differs from the instance count that the autoscaler wants to maintain for its configured metrics,\n it will quickly override the desired instance count.`,\n 'gce.serverGroup.scalingPolicy.coolDownPeriodSec':\n 'How long to wait before collecting information from a new instance. This should be at least the time it takes to initialize the instance.',\n 'gce.serverGroup.scalingPolicy.cpuUtilization':\n 'Autoscaler adds or removes instances to maintain this CPU usage on each instance.',\n 'gce.serverGroup.scalingPolicy.predictiveAutoscaling':\n 'Autoscaler adds or removes instances based on forecasted load. You must set a CPU utilization target to enable predictive autoscaling.',\n 'gce.serverGroup.scalingPolicy.loadBalancingUtilization':\n 'Autoscaler adds or removes instances to maintain this usage of load-balancing capacity.',\n 'gce.serverGroup.scalingPolicy.customMetricUtilizations':\n 'Autoscaler adds or removes instances to maintain this usage for custom metric.',\n 'gce.serverGroup.scalingPolicy.cronExpression': `\n Start time and recurrence using a cron expression. Examples: <br/>\n Every day at 3 PM:<br/>\n 0 15 * * *<br/>\n Every week Monday to Friday at 8:30 AM: <br/>\n 30 8 * * Mon-Fri<br/>\n Once on 30 January 2030 at midnight: <br/>\n 0 0 30 1 * 2030`,\n 'gce.serverGroup.imageName':\n '(Required) <b>Image</b> is the Google Compute Engine image. Images are restricted to the account selected.',\n 'gce.serverGroup.capacity':\n 'The number of instances that the instance group manager will attempt to maintain. Deleting or abandoning instances will affect this number, as will resizing the group.',\n 'gce.serverGroup.minCpuPlatform':\n 'The baseline minimum CPU platform to use for your instances, whenever available. Select \"Automatic\" unless you have a specific need.',\n 'gce.serverGroup.customMetadata':\n '<b>Custom Metadata</b> will be propagated to the instances in this server group. This is useful for passing in arbitrary values that can be queried by your code on the instance.',\n 'gce.serverGroup.userData':\n '<p>Custom user data will be propagated to the instances in this server group. Key/value pairs can either be newline or comma delimited.</p><strong>Example:</strong><br/> <pre>key=value<br>key2=value2</pre>',\n 'gce.serverGroup.customMetadata.load-balancer-names':\n 'This field is used to \"remember\" what load balancers this server group is associated with, even if the instances are deregistered.',\n 'gce.serverGroup.customMetadata.global-load-balancer-names':\n 'This field is used to \"remember\" what global load balancers this server group is associated with, even if the instances are deregistered.',\n 'gce.serverGroup.customMetadata.backend-service-names':\n 'This field is used to \"remember\" what backend services this server group is associated with, even if the instances are deregistered.',\n 'gce.serverGroup.customMetadata.load-balancing-policy':\n 'This field is used to \"remember\" the load balancing policy this server group is configured with, even if the server group is deregistered from the load balancer. This allows us to re-enable the server group with the same load balancing policy specified on creation.',\n 'gce.serverGroup.customMetadata.select-zones':\n 'This regional server group will be deployed only to specific zones within the region.',\n 'gce.serverGroup.customMetadata.startup-script': 'This script will run automatically on every boot.',\n 'gce.serverGroup.labels.spinnaker-region': 'This label can be used to group instances when querying for metrics.',\n 'gce.serverGroup.labels.spinnaker-server-group':\n 'This label can be used to group instances when querying for metrics.',\n 'gce.serverGroup.shieldedVmConfig':\n 'Shielded VM features include trusted UEFI firmware and come with options for Secure Boot, Virtual Trusted Platform Module (vTPM), and Integrity Monitoring.',\n 'gce.serverGroup.shieldedVmSecureBoot':\n 'Secure boot helps protect your VM instances against boot-level and kernel-level malware and rootkits.',\n 'gce.serverGroup.shieldedVmVtpm':\n 'Virtual Trusted Platform Module (vTPM) validates your guest VM pre-boot and boot integrity, and offers key generation and protection.',\n 'gce.serverGroup.shieldedVmIntegrityMonitoring':\n 'Integrity monitoring lets you monitor and verify the runtime boot integrity of your shielded VM instances using Stackdriver reports. Note: requires vTPM to be enabled.',\n 'gce.serverGroup.preemptibility':\n 'A preemptible VM costs much less, but lasts only 24 hours. It can be terminated sooner due to system demands.',\n 'gce.serverGroup.automaticRestart':\n 'Compute Engine can automatically restart VM instances if they are terminated for non-user-initiated reasons (maintenance event, hardware failure, software failure, etc.).',\n 'gce.serverGroup.onHostMaintenance':\n 'When Compute Engine performs periodic infrastructure maintenance it can migrate your VM instances to other hardware without downtime.',\n 'gce.serverGroup.canIpForward':\n 'Forwarding allows the instance to help route packets. See <a target=\"_blank\" href=\"https://cloud.google.com/compute/docs/networking?hl=en_US#canipforward\">here</a> for more information.',\n 'gce.serverGroup.securityGroups.implicit':\n 'Firewall rules with no target tags defined will permit incoming connections that match the ingress rules to all instances in the network.',\n 'gce.serverGroup.securityGroups.targetTags':\n 'This {{firewall}} rule will be associated with this server group only if a target tag is selected.',\n 'gce.serverGroup.autoscaling.targetCPUUsage':\n 'Autoscaling adds or removes VMs in the group to maintain this level of CPU usage on each VM.',\n 'gce.serverGroup.autoscaling.targetHTTPLoadBalancingUsage':\n \"Autoscaling adds or removes VMs in the group to maintain this usage of load-balancing capacity. This value is a percentage of the 'Maximum rate' setting of the load balancer this group is used by.\",\n 'gce.serverGroup.autoscaling.targetMetric':\n 'Autoscaling adds or removes VMs in the group to maintain these target levels.',\n 'gce.serverGroup.autoscaling.minVMs':\n 'The least number of VM instances the group will contain, even if the target is not met.',\n 'gce.serverGroup.autoscaling.maxVMs': 'The largest number of VM instances allowed, even if the target is exceeded.',\n 'gce.serverGroup.autoscaling.cooldown':\n 'How long to wait before collecting information from a new instance. This should be at least the time it takes to initialize the instance. To find the minimum, create an instance from the same image and note how long it takes to start.',\n 'gce.serverGroup.autoscaling.mode':\n 'Mode of operation of the autoscaling policy. This guides the autoscaler by defining the types of scaling operations it can perform. Options are ON, ONLY_SCALE_OUT, and OFF.',\n 'gce.serverGroup.autoHealing':\n 'VMs in the group are recreated as needed. You can use a health check to recreate a VM if the health check finds the VM unresponsive. If you do not select a health check, VMs are recreated only when stopped.',\n 'gce.serverGroup.initialDelaySec':\n 'The time to allow an instance to boot and applications to fully start before the first health check.',\n 'gce.serverGroup.maxUnavailable': `\n Maximum number of instances that can be unavailable when auto-healing. The instance is considered available if all of the following conditions are satisfied:\n <ul>\n <li>1. Instance's status is RUNNING.</li>\n <li>2. Instance's liveness health check result was observed to be HEALTHY at least once.</li>\n </ul>`,\n 'gce.serverGroup.subnet': `\n Subnetworks allow you to regionally segment the network IP space into prefixes (subnets) and control which prefix a VM instance's internal IP address is allocated from. There are several types of GCE networks:\n <ul>\n <li><b>Legacy (non-subnet) Network</b>: IP address allocation occurs at the global network level. This means the network address space spans across all regions.</li>\n <li><b>Auto Subnet Network</b>: Server groups will be automatically assigned to the specified region's subnet.</li>\n <li><b>Custom Subnet Network</b>: A subnet must be selected for the server group. If no subnets have been created for the specified region, you will not be able to provision the server group.</li>\n </ul>`,\n 'gce.serverGroup.loadBalancingPolicy.balancingMode':\n 'Tells the load balancer when the backend is at capacity. If a backend is at capacity, new requests are routed to the nearest region that can handle requests. The balancing mode can be based on CPU utilization or requests per second (RPS).',\n 'gce.serverGroup.loadBalancingPolicy.maxRatePerInstance':\n 'The maximum number of requests per second that can be sent to the backend instance group. Input must be a number greater than zero.',\n 'gce.serverGroup.loadBalancingPolicy.maxUtilization':\n 'The maximum CPU utilization allowed for the backend. CPU utilization is calculated by averaging CPU use across all instances in the backend instance group. Input must be a number between 0 and 100.',\n 'gce.serverGroup.loadBalancingPolicy.maxConnectionsPerInstance':\n 'The target connections per second for individual instances. When this number is exceeded, requests are directed to another backend.',\n 'gce.serverGroup.loadBalancingPolicy.capacityScaler': `\n An additional control to manage your maximum CPU utilization or RPS.\n If you want your instances to operate at a max 80% CPU utilization, set your balancing mode to 80% max CPU utilization and your capacity to 100%.\n If you want to cut instance utilization by half, set your balancing mode to 80% max CPU utilization and your capacity to 50%. Input must be a number between 0 and 100.`,\n 'gce.serverGroup.loadBalancingPolicy.portName':\n 'A load balancer sends traffic to an instance group through a named port. Input must be a port name.',\n 'gce.serverGroup.loadBalancingPolicy.listeningPort':\n 'A load balancer sends traffic to an instance group through a named port. Input must be a port number (i.e., between 1 and 65535).',\n 'gce.serverGroup.traffic':\n 'Registers the server group with any associated load balancers. These registrations are used by Spinnaker to determine if the server group is enabled.',\n 'gce.serverGroup.accelerator':\n 'Attaches GPUs to instances in this server group. The set of available GPUs is dictated by the selected zone. You cannot attach GPUs to instances with shared-core machine types.',\n 'gce.tagImage.consideredStages':\n 'Limit which previous stages will be considered when locating images to tag. If left unchecked, images generated by any upstream stage will be tagged.',\n 'pipeline.config.gce.bake.accountName':\n '<p>(Optional) The name of a Google account configured within Rosco. If left blank, the first configured account will be used.</p>',\n 'pipeline.config.gce.bake.baseImage':\n '<p>(Optional) A GCE image name. For example: ubuntu-1204-precise-v20150910.</p>',\n 'gce.loadBalancerType.Network': `\n <p>Use Network Load Balancing to balance the load on your systems based on incoming IP protocol data, such as address, port, and protocol type.</p>\n <p>Network Load Balancing is a regional, non-proxied load balancer. You can use it to load balance UDP traffic, and TCP and SSL traffic on ports that are not supported by the SSL proxy and TCP proxy load balancers.</p>`,\n 'gce.loadBalancerType.HTTP(S)':\n '<p>Google Cloud Platform (GCP) HTTP(S) Load Balancing provides global load balancing for HTTP(S) requests destined for your instances.</p>',\n 'gce.loadBalancerType.Internal':\n '<p>Internal TCP/UDP Load Balancing is a regional load balancer that enables you to run and scale your services behind a private load balancing IP address that is accessible only to your internal virtual machine instances.</p>',\n 'gce.loadBalancerType.SSL':\n '<p>Google Cloud SSL Proxy Load Balancing terminates user SSL (TLS) connections at the load balancing layer, then balances the connections across your instances using the SSL or TCP protocols. This supports both IPv4 and IPv6 addresses for client traffic.</p>',\n 'gce.loadBalancerType.TCP':\n '<p>Google Cloud Platform (GCP) TCP Proxy Load Balancing allows you to use a single IP address for all users around the world. GCP TCP proxy load balancing automatically routes traffic to the instances that are closest to the user.</p>',\n};\n\nObject.keys(helpContents).forEach((key) => HelpContentsRegistry.register(key, helpContents[key]));\n","import { REST } from '@spinnaker/core';\n\nexport interface IGceImage {\n imageName: string;\n}\n\nexport class GceImageReader {\n public static findImages(params: { account?: string; provider?: string; q?: string }): PromiseLike<IGceImage[]> {\n return REST('/images/find')\n .query(params)\n .get()\n .catch(() => [] as IGceImage[]);\n }\n\n public static getImage(/*amiName: string, region: string, credentials: string*/): PromiseLike<IGceImage> {\n // GCE images are not regional so we don't need to retrieve ids scoped to regions.\n return null;\n }\n}\n","import { module } from 'angular';\nimport { chain } from 'lodash';\nimport React from 'react';\nimport type { AutocompleteResult, Option } from 'react-select';\nimport { Async } from 'react-select';\nimport { react2angular } from 'react2angular';\n\nimport { withErrorBoundary } from '@spinnaker/core';\n\nimport type { IGceImage } from '../image';\n\ninterface IImageSelectProps {\n availableImages: IGceImage[];\n selectedImage: string;\n selectImage: (image: string, target?: any) => void;\n target?: any;\n}\n\nexport class ImageSelect extends React.Component<IImageSelectProps> {\n private loadOptions = (inputValue: string): Promise<AutocompleteResult<string>> => {\n return new Promise((resolve) => {\n if (!inputValue || inputValue.length < 3) {\n resolve({\n options: [],\n complete: false,\n });\n } else {\n const filteredOptions = chain(this.props.availableImages)\n .filter((i) => i.imageName.toLowerCase().includes(inputValue))\n .take(20)\n .map((i) => ({ value: i.imageName, label: i.imageName }))\n .value();\n resolve({\n options: filteredOptions,\n complete: false,\n });\n }\n });\n };\n\n public render() {\n return (\n <Async\n cache={null}\n clearable={false}\n ignoreAccents={false}\n loadOptions={this.loadOptions}\n onChange={(selected: Option<string>) => this.props.selectImage(selected.value, this.props.target)}\n placeholder=\"Type at least 3 characters to search for an image...\"\n searchPromptText=\"Type at least 3 characters to search for an image...\"\n value={{ value: this.props.selectedImage, label: this.props.selectedImage }}\n />\n );\n }\n}\n\nexport const GCE_IMAGE_SELECT = 'spinnaker.gce.imageSelect';\nmodule(GCE_IMAGE_SELECT, []).component(\n 'gceImageSelect',\n react2angular(withErrorBoundary(ImageSelect, 'gceImageSelect'), [\n 'availableImages',\n 'selectedImage',\n 'selectImage',\n 'target',\n ]),\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nexport const GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE =\n 'spinnaker.serverGroup.customInstanceBuilder.gce.service';\nexport const name = GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE; // for backwards compatibility\nmodule(GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE, []).factory(\n 'gceCustomInstanceBuilderService',\n function () {\n function vCpuCountForLocationIsValid(instanceFamily, vCpuCount, location, locationToInstanceTypesMap) {\n let max = 0;\n switch (instanceFamily) {\n case 'E2':\n // E2 support up to 32 cores\n // https://cloud.google.com/compute/docs/instances/creating-instance-with-custom-machine-type#e2_custom_machine_types\n max = 32;\n break;\n case 'N2':\n case 'N2D':\n case 'N1':\n default:\n max = locationToInstanceTypesMap[location].vCpuMax;\n }\n return vCpuCount <= max;\n }\n\n /*\n * Above 1, vCPU count must be even.\n * */\n function numberOfVCpusIsValid(instanceFamily, vCpuCount) {\n if (vCpuCount === 1) {\n return true;\n }\n switch (instanceFamily) {\n case 'N2':\n case 'N2D':\n return vCpuCount % 4 === 0;\n case 'E2':\n case 'N1':\n default:\n return vCpuCount % 2 === 0;\n }\n }\n\n function generateValidVCpuListForLocation(location, locationToInstanceTypesMap) {\n const max = locationToInstanceTypesMap[location].vCpuMax;\n return [1, ..._.range(2, max, 2), max];\n }\n\n function generateValidInstanceFamilyList() {\n return ['n1', 'e2', 'n2', 'n2d'].map((x) => x.toUpperCase());\n }\n\n /*\n * Memory per vCPU must be between .9 GB and 6.5 GB\n * Total memory must be a multiple of 256 MB.\n * */\n function minMemoryForVCpuCount(instanceFamily, vCpuCount) {\n switch (instanceFamily) {\n case 'E2':\n case 'N2':\n case 'N2D':\n return Math.ceil(0.5 * vCpuCount * 4) / 4;\n case 'N1':\n default:\n return Math.ceil(0.9 * vCpuCount * 4) / 4;\n }\n }\n\n function maxMemoryForVCpuCount(instanceFamily, vCpuCount) {\n switch (instanceFamily) {\n case 'E2':\n return 8 * vCpuCount > 128 ? 128 : 8 * vCpuCount;\n case 'N2':\n case 'N2D':\n return 8 * vCpuCount;\n case 'N1':\n default:\n return 6.5 * vCpuCount;\n }\n }\n\n function generateValidMemoryListForVCpuCount(instanceFamily, vCpuCount) {\n const min = minMemoryForVCpuCount(instanceFamily, vCpuCount);\n const max = maxMemoryForVCpuCount(instanceFamily, vCpuCount);\n return [..._.range(min, max, 0.25), max];\n }\n\n function memoryIsValid(instanceFamily, totalMemory, vCpuCount, extendedMemory) {\n const min = minMemoryForVCpuCount(instanceFamily, vCpuCount);\n const max = extendedMemory ? 800 : maxMemoryForVCpuCount(instanceFamily, vCpuCount);\n return _.inRange(totalMemory, min, max) || totalMemory === max;\n }\n\n /*\n * In the API, you must always provide memory in MB units.\n * Format: custom-NUMBER_OF_CPUS-AMOUNT_OF_MEMORY\n * */\n function generateInstanceTypeString(instanceFamily, vCpuCount, totalMemory, extendedMemory) {\n const extendedFlag = extendedMemory ? '-ext' : '';\n const memoryInMbs = Number(totalMemory) * 1024;\n instanceFamily = instanceFamily.toLowerCase();\n if (instanceFamily === 'n1') {\n return `custom-${vCpuCount}-${memoryInMbs}${extendedFlag}`;\n }\n return `${instanceFamily}-custom-${vCpuCount}-${memoryInMbs}${extendedFlag}`;\n }\n\n function parseInstanceTypeString(instanceTypeString) {\n const [vCpuCount, memoryInMbs] = _.chain(instanceTypeString.split('-'))\n .takeRight(2)\n .map((value) => Number(value))\n .value();\n\n let instanceFamily = instanceTypeString.split('-')[0].toUpperCase();\n if (instanceFamily === 'CUSTOM') {\n instanceFamily = 'N1';\n }\n\n const memory = memoryInMbs / 1024;\n\n return { instanceFamily, vCpuCount, memory };\n }\n\n function customInstanceChoicesAreValid(\n instanceFamily,\n vCpuCount,\n totalMemory,\n location,\n locationToInstanceTypesMap,\n extendedMemory,\n ) {\n return _.every([\n numberOfVCpusIsValid(instanceFamily, vCpuCount),\n memoryIsValid(instanceFamily, totalMemory, vCpuCount, extendedMemory),\n vCpuCountForLocationIsValid(instanceFamily, vCpuCount, location, locationToInstanceTypesMap),\n ]);\n }\n\n return {\n generateValidVCpuListForLocation,\n generateValidMemoryListForVCpuCount,\n generateValidInstanceFamilyList,\n generateInstanceTypeString,\n customInstanceChoicesAreValid,\n memoryIsValid,\n vCpuCountForLocationIsValid,\n parseInstanceTypeString,\n };\n },\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE } from './customInstanceBuilder.gce.service';\n\nexport const GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCE_FILTER = 'spinnaker.gce.customInstance.filter';\nexport const name = GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCE_FILTER; // for backwards compatibility\nmodule(GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCE_FILTER, [GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE]).filter(\n 'customInstanceFilter',\n [\n 'gceCustomInstanceBuilderService',\n function (gceCustomInstanceBuilderService) {\n return function (instanceTypeString) {\n if (_.includes(instanceTypeString, 'custom-')) {\n const { instanceFamily, vCpuCount, memory } = gceCustomInstanceBuilderService.parseInstanceTypeString(\n instanceTypeString,\n );\n return `${instanceFamily} ${vCpuCount} vCPU / ${memory} GB RAM`;\n }\n return instanceTypeString;\n };\n },\n ],\n);\n","import { module } from 'angular';\nimport { uniq } from 'lodash';\n\nimport type { IGceHttpLoadBalancer, IGceLoadBalancer } from '../domain/loadBalancer';\n\nexport class GceHttpLoadBalancerUtils {\n public static REGION = 'global';\n\n public isHttpLoadBalancer(lb: IGceLoadBalancer): lb is IGceHttpLoadBalancer {\n return (\n (lb.provider === 'gce' || lb.type === 'gce') &&\n (lb.loadBalancerType === 'HTTP' || lb.loadBalancerType === 'INTERNAL_MANAGED')\n );\n }\n\n public normalizeLoadBalancerNamesForAccount(\n loadBalancerNames: string[],\n account: string,\n loadBalancers: IGceLoadBalancer[],\n ): string[] {\n // Assume that loadBalancers is a list of all GCE load balancers in an application\n // (but possibly from several accounts), and has already been normalized (listener names mapped to URL map names).\n const normalizedLoadBalancerNames: string[] = [];\n loadBalancerNames.forEach((loadBalancerName) => {\n const matchingUrlMap = loadBalancers.find((loadBalancer) => {\n return (\n account === loadBalancer.account &&\n this.isHttpLoadBalancer(loadBalancer) &&\n loadBalancer.listeners.map((listener) => listener.name).includes(loadBalancerName)\n );\n });\n\n matchingUrlMap\n ? normalizedLoadBalancerNames.push(matchingUrlMap.name)\n : normalizedLoadBalancerNames.push(loadBalancerName);\n });\n return uniq(normalizedLoadBalancerNames);\n }\n}\n\nexport const GCE_HTTP_LOAD_BALANCER_UTILS = 'spinnaker.gce.httpLoadBalancerUtils.service';\nmodule(GCE_HTTP_LOAD_BALANCER_UTILS, []).service('gceHttpLoadBalancerUtils', GceHttpLoadBalancerUtils);\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 InstanceWriter,\n RecentHistoryService,\n} from '@spinnaker/core';\nimport { GOOGLE_COMMON_XPNNAMING_GCE_SERVICE } from '../../common/xpnNaming.gce.service';\nimport { GCE_HTTP_LOAD_BALANCER_UTILS } from '../../loadBalancer/httpLoadBalancerUtils.service';\n\nexport const GOOGLE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER = 'spinnaker.instance.detail.gce.controller';\nexport const name = GOOGLE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER; // for backwards compatibility\nmodule(GOOGLE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER, [\n UIROUTER_ANGULARJS,\n ANGULAR_UI_BOOTSTRAP,\n GOOGLE_COMMON_XPNNAMING_GCE_SERVICE,\n GCE_HTTP_LOAD_BALANCER_UTILS,\n]).controller('gceInstanceDetailsCtrl', [\n '$scope',\n '$state',\n '$uibModal',\n 'instance',\n 'app',\n 'moniker',\n 'environment',\n '$q',\n 'gceHttpLoadBalancerUtils',\n 'gceXpnNamingService',\n function (\n $scope,\n $state,\n $uibModal,\n instance,\n app,\n moniker,\n environment,\n $q,\n gceHttpLoadBalancerUtils,\n gceXpnNamingService,\n ) {\n // needed for standalone instances\n $scope.detailsTemplateUrl = CloudProviderRegistry.getValue('gce', 'instance.detailsTemplateUrl');\n\n $scope.firewallsLabel = FirewallLabels.get('Firewalls');\n\n $scope.state = {\n loading: true,\n standalone: app.isStandalone,\n };\n\n $scope.application = app;\n $scope.moniker = moniker;\n $scope.environment = environment;\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 !== 'Google' || metric.state !== 'Unknown';\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, account, region, vpcId;\n if (!app.serverGroups) {\n // standalone instance\n instanceSummary = {};\n loadBalancers = [];\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 account = serverGroup.account;\n region = serverGroup.region;\n extraData.serverGroup = serverGroup.name;\n return true;\n }\n });\n });\n if (!instanceSummary) {\n // perhaps it is in a server group that is part of another application\n app.loadBalancers.data.some(function (loadBalancer) {\n return 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 });\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 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 });\n }\n }\n }\n\n if (instanceSummary && account && region) {\n extraData.account = account;\n extraData.region = region;\n RecentHistoryService.addExtraDataToLatest('instances', extraData);\n return InstanceReader.getInstanceDetails(account, region, instance.instanceId).then(function (details) {\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 if (app.getDataSource('loadBalancers')) {\n $scope.instance.loadBalancers = gceHttpLoadBalancerUtils.normalizeLoadBalancerNamesForAccount(\n loadBalancers,\n account,\n app.getDataSource('loadBalancers').data,\n );\n }\n\n $scope.instance.internalDnsName = $scope.instance.instanceId;\n $scope.instance.internalIpAddress = $scope.instance.networkInterfaces[0].networkIP;\n\n if ($scope.instance.networkInterfaces[0].accessConfigs) {\n $scope.instance.externalIpAddress = $scope.instance.networkInterfaces[0].accessConfigs[0].natIP;\n }\n\n $scope.baseIpAddress = $scope.instance.externalIpAddress || $scope.instance.internalIpAddress;\n\n const projectId = gceXpnNamingService.deriveProjectId($scope.instance);\n $scope.instance.logsLink =\n 'https://console.developers.google.com/project/' +\n projectId +\n '/logs?service=gce_instance&minLogLevel=0&filters=text:' +\n $scope.instance.instanceId;\n\n $scope.instance.network = getNetwork(projectId);\n $scope.instance.subnet = getSubnet(projectId);\n\n $scope.instance.sshLink =\n $scope.instance.selfLink.replace(\n /www.googleapis.com\\/compute\\/(alpha|beta|v1)/,\n 'cloudssh.developers.google.com',\n ) + '?authuser=0&hl=en_US';\n\n $scope.instance.gcloudSSHCommand =\n 'gcloud compute ssh --project ' +\n projectId +\n ' --zone ' +\n $scope.instance.placement.availabilityZone +\n ' ' +\n instance.instanceId;\n\n augmentTagsWithHelp();\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 $state.go('^', { allowModalToStayOpen: true }, { location: 'replace' });\n }\n\n function augmentTagsWithHelp() {\n if (_.has($scope, 'instance.tags.items') && _.has($scope, 'instance.securityGroups')) {\n const securityGroups = _.chain($scope.instance.securityGroups)\n .map((securityGroup) => {\n return _.find(app.securityGroups.data, {\n accountName: $scope.instance.account,\n region: 'global',\n id: securityGroup.groupId,\n });\n })\n .compact()\n .value();\n\n const helpMap = {};\n\n $scope.instance.tags.items.forEach((tag) => {\n const securityGroupsMatches = _.filter(securityGroups, (securityGroup) =>\n _.includes(securityGroup.targetTags, tag),\n );\n const securityGroupMatchNames = _.map(securityGroupsMatches, 'name');\n\n if (!_.isEmpty(securityGroupMatchNames)) {\n const groupOrGroups = securityGroupMatchNames.length > 1 ? 'groups' : 'group';\n\n helpMap[tag] =\n 'This tag associates this instance with security ' +\n groupOrGroups +\n ' <em>' +\n securityGroupMatchNames.join(', ') +\n '</em>.';\n }\n });\n\n $scope.instance.tags.helpMap = helpMap;\n }\n }\n\n function getNetwork(projectId) {\n const networkUrl = _.get($scope.instance, 'networkInterfaces[0].network');\n return gceXpnNamingService.decorateXpnResourceIfNecessary(projectId, networkUrl);\n }\n\n function getSubnet(projectId) {\n const subnetUrl = _.get($scope.instance, 'networkInterfaces[0].subnetwork');\n return gceXpnNamingService.decorateXpnResourceIfNecessary(projectId, subnetUrl);\n }\n\n this.canRegisterWithLoadBalancer = function () {\n const instance = $scope.instance;\n const instanceLoadBalancerDoesNotSupportRegister =\n !app.loadBalancers ||\n _.chain(app.loadBalancers.data)\n .filter((lb) => lb.loadBalancerType !== 'NETWORK' && lb.account === instance.account)\n .map('name')\n .intersection(instance.loadBalancers || [])\n .value().length;\n\n if (!instance.loadBalancers || !instance.loadBalancers.length || instanceLoadBalancerDoesNotSupportRegister) {\n return false;\n }\n const outOfService = instance.health.some(function (health) {\n return health.type === 'LoadBalancer' && health.state === 'OutOfService';\n });\n const hasLoadBalancerHealth = instance.health.some(function (health) {\n return health.type === 'LoadBalancer';\n });\n return outOfService || !hasLoadBalancerHealth;\n };\n\n this.canDeregisterFromLoadBalancer = function () {\n const instance = $scope.instance;\n const instanceLoadBalancerDoesNotSupportDeregister =\n !app.loadBalancers ||\n _.chain(app.loadBalancers.data)\n .filter((lb) => lb.loadBalancerType !== 'NETWORK' && lb.account === instance.account)\n .map('name')\n .intersection(instance.loadBalancers || [])\n .value().length;\n\n if (!instance.loadBalancers || !instance.loadBalancers.length || instanceLoadBalancerDoesNotSupportDeregister) {\n return false;\n }\n const hasLoadBalancerHealth = instance.health.some(function (health) {\n return health.type === 'LoadBalancer';\n });\n return hasLoadBalancerHealth;\n };\n\n this.canRegisterWithDiscovery = function () {\n const instance = $scope.instance;\n const discoveryHealth = instance.health.filter(function (health) {\n return health.type === 'Discovery';\n });\n return discoveryHealth.length ? discoveryHealth[0].state === 'OutOfService' : false;\n };\n\n this.showInstanceActionsDivider = function () {\n return (\n this.canRegisterWithDiscovery() ||\n this.hasHealthState('Discovery', 'Up') ||\n this.canRegisterWithLoadBalancer() ||\n this.canDeregisterFromLoadBalancer()\n );\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 const params = { cloudProvider: 'gce' };\n\n if (instance.serverGroup) {\n params.managedInstanceGroupName = instance.serverGroup;\n }\n\n return InstanceWriter.terminateInstance(instance, app, params);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really terminate ' + instance.instanceId + '?',\n buttonText: 'Terminate ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.terminateInstanceAndShrinkServerGroup = function terminateInstanceAndShrinkServerGroup() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Terminating ' + instance.instanceId + ' and shrinking server group',\n onTaskComplete: function () {\n if ($state.includes('**.instanceDetails', { instanceId: instance.instanceId })) {\n $state.go('^');\n }\n },\n };\n\n const submitMethod = function () {\n return InstanceWriter.terminateInstanceAndShrinkServerGroup(instance, app, {\n serverGroupName: instance.serverGroup,\n instanceIds: [instance.instanceId],\n zone: instance.placement.availabilityZone,\n });\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 = function () {\n return InstanceWriter.rebootInstance(instance, app, {\n // We can't really reliably do anything other than ignore health here.\n interestingHealthProviderNames: [],\n });\n };\n\n ConfirmationModalService.confirm({\n header: 'Really reboot ' + instance.instanceId + '?',\n buttonText: 'Reboot ' + instance.instanceId,\n account: instance.account,\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 InstanceWriter.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 InstanceWriter.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.enableInstanceInDiscovery = function enableInstanceInDiscovery() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Enabling ' + instance.instanceId + ' in discovery',\n };\n\n const submitMethod = function () {\n return InstanceWriter.enableInstanceInDiscovery(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really enable ' + instance.instanceId + ' in discovery?',\n buttonText: 'Enable ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.disableInstanceInDiscovery = function disableInstanceInDiscovery() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Disabling ' + instance.instanceId + ' in discovery',\n };\n\n const submitMethod = function () {\n return InstanceWriter.disableInstanceInDiscovery(instance, app);\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 return instance.health.some(function (health) {\n return health.type === healthProviderType && health.state === state;\n });\n };\n\n const initialize = app.isStandalone\n ? retrieveInstance()\n : $q.all([app.serverGroups.ready(), app.loadBalancers.ready()]).then(retrieveInstance);\n\n initialize.then(() => {\n // Two things to look out for here:\n // 1. If the retrieveInstance call completes *after* the user has navigated away from the view, there\n // is no point in subscribing to the refresh\n // 2. If this is a standalone instance, there is no application that will refresh\n if (!$scope.$$destroyed && !app.isStandalone) {\n app.serverGroups.onRefresh($scope, retrieveInstance);\n }\n });\n\n $scope.account = instance.account;\n },\n]);\n","// Duplicated from https://github.com/spinnaker/clouddriver/blob/master/clouddriver-web/config/clouddriver.yml\n// TODO(mneterval): remove after resolution of https://github.com/spinnaker/spinnaker/issues/4859\nexport const GCE_INSTANCE_TYPE_DISK_DEFAULTS = Object.freeze([\n {\n instanceType: 'n1-standard-1',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-standard-2',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-standard-4',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-standard-8',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-standard-16',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-standard-32',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-standard-64',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-standard-96',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'f1-micro',\n supportsLocalSSD: false,\n disks: [\n {\n type: 'pd-standard',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'g1-small',\n supportsLocalSSD: false,\n disks: [\n {\n type: 'pd-standard',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'e2-small',\n supportsLocalSSD: false,\n disks: [\n {\n type: 'pd-standard',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'e2-micro',\n supportsLocalSSD: false,\n disks: [\n {\n type: 'pd-standard',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'e2-medium',\n supportsLocalSSD: false,\n disks: [\n {\n type: 'pd-standard',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highmem-2',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highmem-4',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highmem-8',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highmem-16',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highmem-32',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highmem-64',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highmem-96',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highcpu-2',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highcpu-4',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highcpu-8',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highcpu-16',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highcpu-32',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highcpu-64',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'n1-highcpu-96',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n {\n instanceType: 'default',\n disks: [\n {\n type: 'pd-ssd',\n sizeGb: 10,\n },\n ],\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, SETTINGS } from '@spinnaker/core';\n\nimport { GCE_INSTANCE_TYPE_DISK_DEFAULTS } from './gceInstanceTypeDisks';\n\nexport const GOOGLE_INSTANCE_GCEINSTANCETYPE_SERVICE = 'spinnaker.gce.instanceType.service';\nexport const name = GOOGLE_INSTANCE_GCEINSTANCETYPE_SERVICE; // for backwards compatibility\nmodule(GOOGLE_INSTANCE_GCEINSTANCETYPE_SERVICE, []).factory('gceInstanceTypeService', [\n '$q',\n '$log',\n function ($q, $log) {\n const cachedResult = null;\n\n const n1standard = {\n type: 'n1-standard',\n description:\n 'This family provides a balance of compute, memory, and network resources, and it is a good choice for general purpose applications.',\n storageType: 'SSD',\n storageHelpFieldKey: 'gce.instance.storage',\n instanceTypes: [\n {\n name: 'n1-standard-1',\n label: 'Small',\n cpu: 1,\n memory: 3.75,\n costFactor: 1,\n },\n {\n name: 'n1-standard-2',\n label: 'Medium',\n cpu: 2,\n memory: 7.5,\n costFactor: 2,\n },\n {\n name: 'n1-standard-4',\n label: 'Large',\n cpu: 4,\n memory: 15,\n costFactor: 2,\n },\n {\n name: 'n1-standard-8',\n label: 'XLarge',\n cpu: 8,\n memory: 30,\n costFactor: 3,\n },\n {\n name: 'n1-standard-16',\n label: '2XLarge',\n cpu: 16,\n memory: 60,\n costFactor: 3,\n },\n {\n name: 'n1-standard-32',\n label: '4XLarge',\n cpu: 32,\n memory: 120,\n costFactor: 4,\n },\n {\n name: 'n1-standard-64',\n label: '8XLarge',\n cpu: 64,\n memory: 240,\n costFactor: 4,\n },\n {\n name: 'n1-standard-96',\n label: '12XLarge',\n cpu: 96,\n memory: 360,\n costFactor: 4,\n },\n ],\n };\n\n const f1micro = {\n type: 'f1-micro bursting',\n description:\n 'This family of machine types is a good choice for small, non-resource intensive 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 storageType: 'Std',\n storageHelpFieldKey: 'gce.instance.storage',\n instanceTypes: [\n {\n name: 'f1-micro',\n label: 'Micro',\n cpu: 1,\n memory: 0.6,\n costFactor: 1,\n },\n {\n name: 'g1-small',\n label: 'Small',\n cpu: 1,\n memory: 1.7,\n costFactor: 1,\n },\n {\n name: 'e2-micro',\n label: 'E2 Micro',\n cpu: 2,\n memory: 1,\n costFactor: 1,\n },\n {\n name: 'e2-small',\n label: 'E2 Small',\n cpu: 2,\n memory: 2,\n costFactor: 2,\n },\n {\n name: 'e2-medium',\n label: 'E2 Medium',\n cpu: 2,\n memory: 4,\n costFactor: 2,\n },\n ],\n };\n\n const n1highmem = {\n type: 'n1-highmem',\n description:\n 'High memory machine types are ideal for tasks that require more memory relative to virtual cores. High memory machine types have 6.50GB of RAM per virtual core.',\n storageType: 'SSD',\n storageHelpFieldKey: 'gce.instance.storage',\n instanceTypes: [\n {\n name: 'n1-highmem-2',\n label: 'Medium',\n cpu: 2,\n memory: 13,\n costFactor: 2,\n },\n {\n name: 'n1-highmem-4',\n label: 'Large',\n cpu: 4,\n memory: 26,\n costFactor: 2,\n },\n {\n name: 'n1-highmem-8',\n label: 'XLarge',\n cpu: 8,\n memory: 52,\n costFactor: 3,\n },\n {\n name: 'n1-highmem-16',\n label: '2XLarge',\n cpu: 16,\n memory: 104,\n costFactor: 3,\n },\n {\n name: 'n1-highmem-32',\n label: '4XLarge',\n cpu: 32,\n memory: 208,\n costFactor: 4,\n },\n {\n name: 'n1-highmem-64',\n label: '8XLarge',\n cpu: 64,\n memory: 416,\n costFactor: 4,\n },\n {\n name: 'n1-highmem-96',\n label: '12XLarge',\n cpu: 96,\n memory: 624,\n costFactor: 4,\n },\n ],\n };\n\n const n1highcpu = {\n type: 'n1-highcpu',\n description:\n 'High CPU machine types are ideal for tasks that require more virtual cores relative to memory. High CPU machine types have one virtual core for every 0.90GB of RAM.',\n storageType: 'SSD',\n storageHelpFieldKey: 'gce.instance.storage',\n instanceTypes: [\n {\n name: 'n1-highcpu-2',\n label: 'Medium',\n cpu: 2,\n memory: 1.8,\n costFactor: 1,\n },\n {\n name: 'n1-highcpu-4',\n label: 'Large',\n cpu: 4,\n memory: 3.6,\n costFactor: 2,\n },\n {\n name: 'n1-highcpu-8',\n label: 'XLarge',\n cpu: 8,\n memory: 7.2,\n costFactor: 2,\n },\n {\n name: 'n1-highcpu-16',\n label: '2XLarge',\n cpu: 16,\n memory: 14.4,\n costFactor: 3,\n },\n {\n name: 'n1-highcpu-32',\n label: '4XLarge',\n cpu: 32,\n memory: 28.8,\n costFactor: 4,\n },\n {\n name: 'n1-highcpu-64',\n label: '8XLarge',\n cpu: 64,\n memory: 57.6,\n costFactor: 4,\n },\n {\n name: 'n1-highcpu-96',\n label: '12XLarge',\n cpu: 96,\n memory: 86.4,\n costFactor: 4,\n },\n ],\n };\n\n const customMachine = {\n type: 'buildCustom',\n instanceTypes: [\n {\n name: 'n1buildCustom',\n nameRegex: /custom-\\d{1,2}-\\d{4,6}/,\n storage: {\n localSSDSupported: true,\n },\n },\n {\n name: 'e2buildCustom',\n nameRegex: /e2-custom-(\\d{1,2})-(\\d{3,6})/,\n storage: {\n localSSDSupported: false,\n },\n },\n {\n name: 'otherbuildCustom',\n nameRegex: /(.*)-?custom-(\\d{1,2})-(\\d{3,6})/,\n storage: {\n localSSDSupported: true,\n },\n },\n ],\n };\n\n const categories = [\n {\n type: 'general',\n label: 'General Purpose',\n families: [n1standard],\n icon: 'hdd',\n },\n {\n type: 'memory',\n label: 'High Memory',\n families: [n1highmem],\n icon: 'hdd',\n },\n {\n type: 'cpu',\n label: 'High CPU',\n families: [n1highcpu],\n icon: 'hdd',\n },\n {\n type: 'micro',\n label: 'Micro Utility',\n families: [f1micro],\n icon: 'hdd',\n },\n {\n type: 'custom',\n label: 'Custom Type',\n families: [],\n icon: 'asterisk',\n },\n {\n type: 'buildCustom',\n label: 'Build Custom',\n families: [customMachine],\n icon: 'wrench',\n },\n ];\n\n const getCategories = _.memoize(() => {\n const initializedCategories = _.cloneDeep(categories);\n return AccountService.getAllAccountDetailsForProvider('gce').then((accountDetails) => {\n // All GCE accounts have the same instance type disk defaults, so we can pick the first one.\n let instanceTypeDisks = _.get(accountDetails, '[0].instanceTypeDisks');\n if (_.isEmpty(instanceTypeDisks)) {\n instanceTypeDisks = GCE_INSTANCE_TYPE_DISK_DEFAULTS;\n }\n if (instanceTypeDisks) {\n const families = _.flatten(initializedCategories.map((category) => category.families));\n families.forEach((family) => {\n family.instanceTypes.forEach((instanceType) => {\n const diskDefaults = instanceTypeDisks.find(\n (instanceTypeDisk) => instanceTypeDisk.instanceType === instanceType.name,\n );\n if (diskDefaults) {\n const disks = diskDefaults.disks\n .map((disk) => {\n switch (disk.type) {\n case 'PD_SSD':\n return {\n type: 'pd-ssd',\n sizeGb: disk.sizeGb,\n };\n case 'PD_STANDARD':\n return {\n type: 'pd-standard',\n sizeGb: disk.sizeGb,\n };\n case 'LOCAL_SSD':\n return {\n type: 'local-ssd',\n sizeGb: 375,\n };\n default:\n $log.warn(`Disk type '${disk.type}' not supported.`);\n return null;\n }\n })\n .filter((disk) => !!disk);\n\n let size = 0;\n let count = 0;\n if (diskDefaults.supportsLocalSSD) {\n count = disks.filter((disk) => disk.type === 'local-ssd').length;\n size = 375;\n } else {\n // TODO(dpeach): This will render the disk defaults incorrectly for f1-micro and g1-small instance types\n // if the disk defaults set in Clouddriver have different sizes. Fixing it will require updating\n // the core instance type selector.\n // This logic will render the count of the largest disk.\n const persistentDisks = disks.filter((disk) => disk.type.startsWith('pd-'));\n if (persistentDisks.length) {\n size = persistentDisks.reduce((maxSizeGb, disk) => Math.max(maxSizeGb, disk.sizeGb), 0);\n count = persistentDisks.filter((disk) => disk.sizeGb === size).length;\n }\n }\n\n instanceType.storage = {\n localSSDSupported: diskDefaults.supportsLocalSSD,\n size: size,\n count: count,\n defaultSettings: { disks },\n };\n }\n });\n });\n }\n return initializedCategories;\n });\n });\n\n function getAllTypesByRegion() {\n if (cachedResult) {\n return $q.when(cachedResult);\n }\n\n return getCategories().then((categories) => {\n return _.chain(categories)\n .map('families')\n .flatten()\n .map('instanceTypes')\n .flatten()\n .map('name')\n .filter((name) => name !== 'n1buildCustom' && name !== 'e2buildCustom' && name !== 'otherbuildCustom')\n .value();\n });\n }\n\n function getAvailableTypesForLocations(locationToInstanceTypesMap, selectedLocations) {\n if (!locationToInstanceTypesMap || !selectedLocations || selectedLocations.length === 0) {\n console.error('Invalid input parameters');\n return [];\n }\n\n const availableTypes = selectedLocations\n .filter((location) => locationToInstanceTypesMap[location])\n .flatMap((location) => locationToInstanceTypesMap[location].instanceTypes || []);\n\n return availableTypes;\n }\n\n const getAvailableTypesForRegions = getAvailableTypesForLocations;\n\n const resolveInstanceTypeDetails = (instanceType) => {\n return {\n name: instanceType,\n storage: Object.assign({ isDefault: true }, SETTINGS.providers.gce.defaults.instanceTypeStorage),\n };\n };\n\n return {\n getCategories: getCategories,\n getAvailableTypesForRegions: getAvailableTypesForRegions,\n getAllTypesByRegion: getAllTypesByRegion,\n getAvailableTypesForLocations: getAvailableTypesForLocations,\n resolveInstanceTypeDetails: resolveInstanceTypeDetails,\n };\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_INSTANCE_GCEMULTIINSTANCETASK_TRANSFORMER =\n 'spinnaker.google.instance.multiInstance.task.transformer';\nexport const name = GOOGLE_INSTANCE_GCEMULTIINSTANCETASK_TRANSFORMER; // for backwards compatibility\nmodule(GOOGLE_INSTANCE_GCEMULTIINSTANCETASK_TRANSFORMER, []).factory('gceMultiInstanceTaskTransformer', function () {\n // custom transformers for specific tasks,\n // e.g. \"rebootInstances\" needs an empty \"interestingHealthProviderNames\" array\n const transformers = {\n rebootInstances: (job) => {\n job.interestingHealthProviderNames = [];\n },\n };\n\n // adds the \"zone\" field to all jobs\n const transformAll = (instanceGroup, job) => {\n job.zone = instanceGroup.instances[0].availabilityZone;\n };\n\n const transformJob = (instanceGroup, job) => {\n transformAll(instanceGroup, job);\n if (transformers[job.type]) {\n transformers[job.type](job);\n }\n };\n\n return {\n transform: transformJob,\n };\n});\n","import type { IHttpInterceptor, IHttpPromiseCallbackArg, IHttpProvider } from 'angular';\nimport { module } from 'angular';\nimport { $http, $q } from 'ngimport';\nimport { SETTINGS } from '@spinnaker/core';\n\n/**\n * When a Cloud IAP (if enabled) session expires, refreshes session.\n */\n\nexport class IapInterceptor implements IHttpInterceptor {\n public responseError = <T>(response: IHttpPromiseCallbackArg<T>): PromiseLike<T> => {\n const { config, status } = response;\n\n if (status === 401 && SETTINGS.feature.iapRefresherEnabled) {\n return $http.get('/_gcp_iap/do_session_refresh').then(\n () => {\n return $http.get(config.url, config).then((result: T) => result);\n },\n // Reject with original response\n () => $q.reject(response),\n );\n }\n\n return $q.reject(response);\n };\n}\n\nexport const IAP_INTERCEPTOR = 'spinnaker.gce.iap.interceptor';\nmodule(IAP_INTERCEPTOR, [])\n .service('iapInterceptor', IapInterceptor)\n .config([\n '$httpProvider',\n ($httpProvider: IHttpProvider) => {\n $httpProvider.interceptors.push('iapInterceptor');\n },\n ]);\n","import { module } from 'angular';\n\nexport interface IGceLoadBalancerWizardConfig {\n label: string;\n createTemplateUrl: string;\n editTemplateUrl: string;\n controller: string;\n}\n\nexport interface IGceLoadBalancerToWizardMap {\n [loadBalancerType: string]: IGceLoadBalancerWizardConfig;\n}\n\nconst loadBalancerTypeToWizardMap: IGceLoadBalancerToWizardMap = {\n NETWORK: {\n label: 'Network',\n createTemplateUrl: require('../network/createLoadBalancer.html'),\n editTemplateUrl: require('../network/editLoadBalancer.html'),\n controller: 'gceCreateLoadBalancerCtrl',\n },\n HTTP: {\n label: 'HTTP(S)',\n createTemplateUrl: require('../http/createHttpLoadBalancer.html'),\n editTemplateUrl: require('../http/editHttpLoadBalancer.html'),\n controller: 'gceCreateHttpLoadBalancerCtrl',\n },\n INTERNAL_MANAGED: {\n label: 'Internal HTTP(S)',\n createTemplateUrl: require('../http/createHttpLoadBalancer.html'),\n editTemplateUrl: require('../http/editHttpLoadBalancer.html'),\n controller: 'gceCreateInternalHttpLoadBalancerCtrl',\n },\n INTERNAL: {\n label: 'Internal',\n createTemplateUrl: require('../common/commonCreateLoadBalancer.html'),\n editTemplateUrl: require('../common/commonEditLoadBalancer.html'),\n controller: 'gceInternalLoadBalancerCtrl',\n },\n SSL: {\n label: 'SSL',\n createTemplateUrl: require('../common/commonCreateLoadBalancer.html'),\n editTemplateUrl: require('../common/commonEditLoadBalancer.html'),\n controller: 'gceSslLoadBalancerCtrl',\n },\n TCP: {\n label: 'TCP',\n createTemplateUrl: require('../common/commonCreateLoadBalancer.html'),\n editTemplateUrl: require('../common/commonEditLoadBalancer.html'),\n controller: 'gceTcpLoadBalancerCtrl',\n },\n};\n\nexport const GCE_LOAD_BALANCER_TYPE_TO_WIZARD_CONSTANT = 'spinnaker.gce.loadBalancerTypeToWizard.constant';\n\nmodule(GCE_LOAD_BALANCER_TYPE_TO_WIZARD_CONSTANT, []).constant(\n 'loadBalancerTypeToWizardMap',\n loadBalancerTypeToWizardMap,\n);\n","import type { IController } from 'angular';\nimport { module } from 'angular';\nimport type { IModalInstanceService, IModalService } from 'angular-ui-bootstrap';\nimport { find, map } from 'lodash';\n\nimport type { Application } from '@spinnaker/core';\n\nimport type { IGceLoadBalancerToWizardMap } from './loadBalancerTypeToWizardMap.constant';\nimport { GCE_LOAD_BALANCER_TYPE_TO_WIZARD_CONSTANT } from './loadBalancerTypeToWizardMap.constant';\n\nclass GceLoadBalancerChoiceCtrl implements IController {\n public choices: string[];\n public choice = 'Network';\n\n public static $inject = ['$uibModal', '$uibModalInstance', 'application', 'loadBalancerTypeToWizardMap'];\n constructor(\n public $uibModal: IModalService,\n public $uibModalInstance: IModalInstanceService,\n private application: Application,\n private loadBalancerTypeToWizardMap: IGceLoadBalancerToWizardMap,\n ) {}\n\n public $onInit(): void {\n this.choices = map(this.loadBalancerTypeToWizardMap, (wizardConfig) => wizardConfig.label);\n }\n\n public choose(choice: string): void {\n const wizard = find(this.loadBalancerTypeToWizardMap, (wizardConfig) => wizardConfig.label === choice);\n this.$uibModalInstance.dismiss();\n this.$uibModal.open({\n templateUrl: wizard.createTemplateUrl,\n controller: `${wizard.controller} as ctrl`,\n size: 'lg',\n resolve: {\n application: () => this.application,\n loadBalancer: (): null => null,\n isNew: () => true,\n forPipelineConfig: () => false,\n },\n });\n }\n}\n\nexport const GCE_LOAD_BALANCER_CHOICE_MODAL = 'spinnaker.gce.loadBalancerChoice.modal.controller';\n\nmodule(GCE_LOAD_BALANCER_CHOICE_MODAL, [GCE_LOAD_BALANCER_TYPE_TO_WIZARD_CONSTANT]).controller(\n 'gceLoadBalancerChoiceCtrl',\n GceLoadBalancerChoiceCtrl,\n);\n","export class HttpLoadBalancerTemplate {\n public provider = 'gce';\n public stack = '';\n public detail = '';\n public region = 'global';\n public loadBalancerType = 'HTTP';\n public certificate = '';\n public defaultService: BackendServiceTemplate;\n public hostRules: HostRuleTemplate[] = [];\n public listeners: ListenerTemplate[] = [];\n\n constructor(public credentials: string | null) {}\n}\n\nexport class BackendServiceTemplate {\n public backends: any[] = [];\n public healthCheck: HealthCheckTemplate;\n public sessionAffinity = 'NONE';\n public affinityCookieTtlSec: number | null = null;\n}\n\nexport class HealthCheckTemplate {\n public requestPath = '/';\n public port = 80;\n public checkIntervalSec = 10;\n public timeoutSec = 5;\n public healthyThreshold = 10;\n public unhealthyThreshold = 2;\n}\n\nexport class PathMatcherTemplate {\n public pathRules: PathRuleTemplate[] = [];\n}\n\nexport class HostRuleTemplate {\n public hostPatterns: string[];\n public pathMatcher: PathMatcherTemplate = new PathMatcherTemplate();\n}\n\nexport class PathRuleTemplate {\n public paths: string[];\n}\n\nexport class ListenerTemplate {\n public name: string;\n public port: number;\n public certificate: string | null = null;\n}\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\nimport { BackendServiceTemplate } from '../templates';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BACKENDSERVICE_BACKENDSERVICE_COMPONENT =\n 'spinnaker.deck.gce.httpLoadBalancer.backendService.component';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BACKENDSERVICE_BACKENDSERVICE_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BACKENDSERVICE_BACKENDSERVICE_COMPONENT, []).component(\n 'gceHttpLoadBalancerBackendServiceSelector',\n {\n bindings: {\n deleteService: '&',\n backendService: '=',\n command: '=',\n index: '=',\n },\n templateUrl: require('./backendService.component.html'),\n controller: function () {\n this.$onInit = () => {\n this.backingData = this.command.backingData;\n this.loadBalancer = this.command.loadBalancer;\n const servicesByName = this.backingData.backendServicesKeyedByName;\n\n this.onBackendServiceSelect = (selectedBackendService) => {\n assign(selectedBackendService);\n this.command.onHealthCheckSelected(selectedBackendService.healthCheck, this.command);\n };\n\n this.toggleEditExisting = () => {\n this.editExisting = !this.editExisting;\n if (!this.editExisting) {\n const template = new BackendServiceTemplate();\n assign(template);\n } else {\n delete this.backendService.name;\n }\n };\n\n this.getAllHealthChecks = () => {\n const allHealthChecks = this.loadBalancer.healthChecks.concat(this.backingData.healthChecks);\n return _.chain(allHealthChecks)\n .filter((hc) => hc.account === this.loadBalancer.credentials || !hc.account)\n .map((hc) => hc.name)\n .uniq()\n .value();\n };\n\n this.getSessionAffinitySuggestions = () => {\n if (this.loadBalancer.loadBalancerType === 'HTTP') {\n return ['None', 'Client IP', 'Generated Cookie'];\n } else {\n return ['None', 'Client IP', 'Generated Cookie', 'Header Field', 'HTTP Cookie'];\n }\n };\n\n this.getAllServiceNames = () => {\n return this.command.backingData.backendServices\n .filter((service) => service.account === this.loadBalancer.credentials)\n .map((service) => service.name);\n };\n\n this.maxCookieTtl = 60 * 60 * 24; // One day.\n\n const getBackendServiceName = () => {\n return _.get(this, 'backendService.name');\n };\n\n if (servicesByName[getBackendServiceName()]) {\n this.editExisting = true;\n }\n\n const assign = (toAssign) => {\n this.loadBalancer.backendServices[this.index] = this.backendService = toAssign;\n };\n };\n },\n },\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BASICSETTINGS_BASICSETTINGS_COMPONENT =\n 'spinnaker.deck.gce.httpLoadBalancer.basicSettings.component';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BASICSETTINGS_BASICSETTINGS_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BASICSETTINGS_BASICSETTINGS_COMPONENT, []).component(\n 'gceHttpLoadBalancerBasicSettings',\n {\n bindings: {\n command: '=',\n application: '=',\n },\n templateUrl: require('./basicSettings.component.html'),\n controller: function () {\n this.$onInit = () => {\n const c = this.command;\n this.loadBalancer = c.loadBalancer;\n this.accounts = c.backingData.accounts;\n const loadBalancerMap = c.backingData.loadBalancerMap;\n\n this.getName = (loadBalancer, applicationName) => {\n const loadBalancerName = [applicationName, loadBalancer.stack || '', loadBalancer.detail || ''].join('-');\n return _.trimEnd(loadBalancerName, '-');\n };\n\n this.updateName = (lb, appName) => {\n lb.urlMapName = this.getName(lb, appName);\n };\n\n this.accountChanged = (account) => {\n this.existingLoadBalancerNames = _.get(loadBalancerMap, [account, 'urlMapNames']) || [];\n c.onAccountChange(c);\n };\n\n if (!this.loadBalancer.name) {\n this.updateName(this.loadBalancer, this.application.name);\n }\n\n this.existingLoadBalancerNames = _.get(loadBalancerMap, [this.loadBalancer.credentials, 'urlMapNames']) || [];\n };\n },\n },\n);\n","import type { IComponentOptions, IController } from 'angular';\nimport { module } from 'angular';\n\nimport type { CacheInitializerService } from '@spinnaker/core';\nimport { CACHE_INITIALIZER_SERVICE, InfrastructureCaches } from '@spinnaker/core';\n\nclass GceCacheRefreshCtrl implements IController {\n public capitalizedKey: string;\n public depluralizedKey: string;\n public renderCompact: boolean;\n public refreshing = false;\n public tooltipTemplate = require('./cacheRefreshTooltip.html');\n private onRefresh: Function;\n private cacheKey: string;\n private cacheKeyAlias: string;\n\n public static $inject = ['cacheInitializer'];\n constructor(private cacheInitializer: CacheInitializerService) {}\n\n public $onInit(): void {\n const cacheKeyAlias = this.cacheKeyAlias || this.cacheKey;\n this.capitalizedKey = cacheKeyAlias[0].toUpperCase() + cacheKeyAlias.substring(1);\n this.depluralizedKey = cacheKeyAlias.substring(0, cacheKeyAlias.length - 1);\n }\n\n public getRefreshTime(): number {\n return InfrastructureCaches.get(this.cacheKey).getStats().ageMax;\n }\n\n public refresh(): void {\n this.refreshing = true;\n this.cacheInitializer\n .refreshCache(this.cacheKey)\n .then(() => this.onRefresh())\n .then(() => {\n this.refreshing = false;\n });\n }\n}\n\nconst gceCacheRefresh: IComponentOptions = {\n bindings: {\n onRefresh: '&',\n cacheKey: '@',\n cacheKeyAlias: '@',\n renderCompact: '<',\n },\n controller: GceCacheRefreshCtrl,\n templateUrl: require('./cacheRefresh.component.html'),\n};\n\nexport const GCE_CACHE_REFRESH = 'spinnaker.gce.cacheRefresh.component';\nmodule(GCE_CACHE_REFRESH, [CACHE_INITIALIZER_SERVICE]).component('gceCacheRefresh', gceCacheRefresh);\n","import { module } from 'angular';\n\nimport type { ISearchResults } from '@spinnaker/core';\nimport { InfrastructureCaches, SearchService } from '@spinnaker/core';\n\nexport interface IGceCertificate {\n account: string;\n name: string;\n provider: string;\n type: string;\n}\n\nexport class GceCertificateReader {\n public listCertificates(): PromiseLike<IGceCertificate[]> {\n return SearchService.search<IGceCertificate>(\n { q: '', type: 'sslCertificates', allowShortQuery: 'true' },\n InfrastructureCaches.get('certificates'),\n )\n .then((searchResults: ISearchResults<IGceCertificate>) => {\n if (searchResults && searchResults.results) {\n return searchResults.results.filter((certificate) => certificate.provider === 'gce');\n } else {\n return [];\n }\n })\n .catch(() => []);\n }\n}\n\nexport const GCE_CERTIFICATE_READER = 'spinnaker.gce.certificateReader.service';\nmodule(GCE_CERTIFICATE_READER, []).service('gceCertificateReader', GceCertificateReader);\n","import _ from 'lodash';\n\nexport interface IStringMap {\n [key: string]: string;\n}\n\nexport const sessionAffinityViewToModelMap: IStringMap = {\n None: 'NONE',\n 'Client IP': 'CLIENT_IP',\n 'Generated Cookie': 'GENERATED_COOKIE',\n 'Client IP and protocol': 'CLIENT_IP_PROTO',\n 'Client IP, port and protocol': 'CLIENT_IP_PORT_PROTO',\n 'Header Field': 'HEADER_FIELD',\n 'HTTP Cookie': 'HTTP_COOKIE',\n 'Strong Cookie': 'STRONG_COOKIE_AFFINITY',\n};\n\nexport const sessionAffinityModelToViewMap = _.invert<IStringMap, IStringMap>(sessionAffinityViewToModelMap);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { NameUtils } from '@spinnaker/core';\n\nimport { sessionAffinityModelToViewMap, sessionAffinityViewToModelMap } from '../common/sessionAffinityNameMaps';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_HTTP_TRANSFORMER_SERVICE = 'spinnaker.gce.deck.httpLoadBalancer.transformer';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_HTTP_TRANSFORMER_SERVICE; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_HTTP_TRANSFORMER_SERVICE, []).factory(\n 'gceHttpLoadBalancerTransformer',\n function () {\n // SERIALIZE\n\n const keysToOmit = ['backendServices', 'healthChecks', 'listeners', 'stack', 'detail'];\n\n function serialize(originalCommand, originalLoadBalancer) {\n const command = _.cloneDeep(originalCommand);\n const { loadBalancer, backingData } = command;\n\n mapComponentNamesToObjects(loadBalancer, backingData);\n\n loadBalancer.hostRules = loadBalancer.hostRules.reduce((hostRules, hostRule) => {\n return hostRules.concat(\n hostRule.hostPatterns.map((hostPattern) => {\n return {\n hostPatterns: [hostPattern],\n pathMatcher: _.cloneDeep(hostRule.pathMatcher),\n };\n }),\n );\n }, []);\n\n const commands = buildCommandForEachListener(loadBalancer);\n\n if (originalLoadBalancer) {\n commands[0].listenersToDelete = _.chain(originalLoadBalancer.listeners)\n .map('name')\n .difference(_.map(originalCommand.loadBalancer.listeners, 'name'))\n .value();\n }\n\n return commands;\n }\n\n function mapComponentNamesToObjects(loadBalancer, backingData) {\n const unifiedHealthChecksKeyedByName = _.assign(\n backingData.healthChecksKeyedByName,\n _.keyBy(loadBalancer.healthChecks, 'name'),\n );\n const unifiedBackendServicesKeyedByName = _.assign(\n backingData.backendServicesKeyedByName,\n _.keyBy(loadBalancer.backendServices, 'name'),\n );\n\n _.forEach(unifiedBackendServicesKeyedByName, (service) => {\n service.healthCheck = unifiedHealthChecksKeyedByName[service.healthCheck];\n // Map human readable text back to session affinity code.\n service.sessionAffinity = sessionAffinityViewToModelMap[service.sessionAffinity] || service.sessionAffinity;\n });\n\n loadBalancer.defaultService = unifiedBackendServicesKeyedByName[loadBalancer.defaultService];\n mapBackendServiceNamesToObjects(loadBalancer.hostRules, unifiedBackendServicesKeyedByName);\n }\n\n function mapBackendServiceNamesToObjects(hostRules, servicesByName) {\n hostRules.forEach((hostRule) => {\n const p = hostRule.pathMatcher;\n\n p.defaultService = servicesByName[p.defaultService];\n\n p.pathRules.forEach((pathRule) => {\n pathRule.backendService = servicesByName[pathRule.backendService];\n });\n });\n }\n\n function buildCommandForEachListener(loadBalancer) {\n return loadBalancer.listeners.map((listener) => {\n let command = _.cloneDeep(loadBalancer);\n command = _.omit(command, keysToOmit);\n command.name = listener.name;\n command.portRange = listener.port;\n command.certificate = listener.certificate || null;\n command.ipAddress = listener.ipAddress;\n command.subnet = listener.subnet;\n\n return command;\n });\n }\n\n // DESERIALIZE\n\n function deserialize(loadBalancer) {\n const { backendServices, healthChecks, defaultService } = getHealthChecksAndBackendServices(loadBalancer);\n const hostRules = getHostRules(loadBalancer);\n const listeners = getListeners(loadBalancer);\n\n return {\n defaultService: defaultService.name,\n backendServices,\n healthChecks,\n hostRules,\n listeners,\n network: loadBalancer.network,\n region: loadBalancer.region,\n urlMapName: loadBalancer.urlMapName,\n credentials: loadBalancer.credentials || loadBalancer.account,\n };\n }\n\n function getHealthChecksAndBackendServices(loadBalancer) {\n const defaultService = loadBalancer.defaultService;\n let backendServices = [loadBalancer.defaultService];\n\n if (loadBalancer.hostRules) {\n backendServices = loadBalancer.hostRules.reduce((services, hostRule) => {\n services = services.concat(hostRule.pathMatcher.defaultService);\n return hostRule.pathMatcher.pathRules.reduce(\n (services, pathRule) => services.concat(pathRule.backendService),\n services,\n );\n }, backendServices);\n }\n\n const healthChecks = _.chain(backendServices).map('healthCheck').uniqBy('name').cloneDeep().value();\n healthChecks.forEach((hc) => {\n hc.account = loadBalancer.account || loadBalancer.credentials;\n });\n backendServices = _.uniqBy(backendServices, 'name');\n\n backendServices.forEach((service) => {\n // Map health check to health check name so we don't have to deal with object references\n service.healthCheck = service.healthCheck.name;\n // Map session affinity code to more human readable text.\n service.sessionAffinity = sessionAffinityModelToViewMap[service.sessionAffinity] || service.sessionAffinity;\n });\n\n return { backendServices, healthChecks, defaultService };\n }\n\n function getHostRules(loadBalancer) {\n return mapBackendServicesToNames(_.cloneDeep(loadBalancer.hostRules));\n }\n\n function getListeners(loadBalancer) {\n loadBalancer.listeners.forEach((listener) => {\n const { stack, freeFormDetails } = NameUtils.parseLoadBalancerName(listener.name);\n listener.stack = stack;\n listener.detail = freeFormDetails;\n listener.created = true;\n });\n\n return loadBalancer.listeners;\n }\n\n function mapBackendServicesToNames(hostRules) {\n // Map backend service to backend service name so we don't have to deal with object references\n hostRules.forEach((hostRule) => {\n const p = hostRule.pathMatcher;\n\n p.defaultService = p.defaultService.name;\n\n p.pathRules.forEach((pathRule) => {\n pathRule.backendService = pathRule.backendService.name;\n });\n });\n\n return hostRules;\n }\n\n return { serialize, deserialize };\n },\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, LOAD_BALANCER_READ_SERVICE, NetworkReader, SubnetReader } from '@spinnaker/core';\n\nimport { GCE_ADDRESS_READER } from '../../../address/address.reader';\nimport { GOOGLE_BACKENDSERVICE_BACKENDSERVICE_READER } from '../../../backendService/backendService.reader';\nimport { GCE_CERTIFICATE_READER } from '../../../certificate/certificate.reader';\nimport { sessionAffinityModelToViewMap } from '../common/sessionAffinityNameMaps';\nimport { GOOGLE_COMMON_XPNNAMING_GCE_SERVICE } from '../../../common/xpnNaming.gce.service';\nimport { GCEProviderSettings } from '../../../gce.settings';\nimport { GCE_HEALTH_CHECK_READER } from '../../../healthCheck/healthCheck.read.service';\nimport { GCE_HTTP_LOAD_BALANCER_UTILS } from '../../httpLoadBalancerUtils.service';\nimport { HttpLoadBalancerTemplate, ListenerTemplate } from './templates';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_TRANSFORMER_SERVICE } from './transformer.service';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_HTTP_COMMANDBUILDER_SERVICE =\n 'spinnaker.deck.gce.httpLoadBalancer.backing.service';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_HTTP_COMMANDBUILDER_SERVICE; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_HTTP_COMMANDBUILDER_SERVICE, [\n GOOGLE_BACKENDSERVICE_BACKENDSERVICE_READER,\n GCE_CERTIFICATE_READER,\n LOAD_BALANCER_READ_SERVICE,\n GCE_HTTP_LOAD_BALANCER_UTILS,\n GCE_ADDRESS_READER,\n GCE_HEALTH_CHECK_READER,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_TRANSFORMER_SERVICE,\n GOOGLE_COMMON_XPNNAMING_GCE_SERVICE,\n]).factory('gceHttpLoadBalancerCommandBuilder', [\n '$q',\n 'gceHttpLoadBalancerUtils',\n 'gceBackendServiceReader',\n 'gceCertificateReader',\n 'gceHealthCheckReader',\n 'gceHttpLoadBalancerTransformer',\n 'loadBalancerReader',\n 'gceAddressReader',\n 'gceXpnNamingService',\n function (\n $q,\n gceHttpLoadBalancerUtils,\n gceBackendServiceReader,\n gceCertificateReader,\n gceHealthCheckReader,\n gceHttpLoadBalancerTransformer,\n loadBalancerReader,\n gceAddressReader,\n gceXpnNamingService,\n ) {\n function buildCommand({ originalLoadBalancer, isNew, isInternal }) {\n originalLoadBalancer = _.cloneDeep(originalLoadBalancer);\n\n return buildBackingDataAndLoadBalancer(originalLoadBalancer, isNew, isInternal).then(\n ({ backingData, loadBalancer }) => {\n return {\n backingData,\n getAllBackendServices,\n isNew,\n loadBalancer,\n onAccountChange,\n onBackendServiceRefresh,\n onBackendServiceSelected,\n onRegionSelected,\n onCertificateRefresh,\n onHealthCheckRefresh,\n onHealthCheckSelected,\n getUnusedBackendServices,\n removeUnusedBackendServices,\n getUnusedHealthChecks,\n removeUnusedHealthChecks,\n onAddressRefresh,\n };\n },\n );\n }\n\n function buildBackingDataAndLoadBalancer(originalLoadBalancer, isNew, isInternal) {\n let region = null;\n if (isInternal) {\n region = originalLoadBalancer ? originalLoadBalancer.region : GCEProviderSettings.defaults.region;\n }\n return buildBackingData(region).then((backingData) => {\n const loadBalancer = buildLoadBalancer(isNew, originalLoadBalancer, isInternal);\n\n unifyDataSources(backingData, loadBalancer);\n\n return { backingData, loadBalancer };\n });\n }\n\n function buildBackingData(region) {\n const promises = {\n backendServices: getBackendServices(region),\n healthChecks: getHealthChecks(region),\n certificates: getCertificates(),\n loadBalancerMap: getLoadBalancerMap(region),\n networks: getNetworks(),\n subnets: SubnetReader.listSubnetsByProvider('gce'),\n addresses: gceAddressReader.listAddresses(region),\n accounts: getAccounts(),\n };\n return $q.all(promises);\n }\n\n function buildLoadBalancer(isNew, loadBalancer, isInternal) {\n const loadBalancerTemplate = new HttpLoadBalancerTemplate(GCEProviderSettings.defaults.account || null);\n if (isInternal) {\n loadBalancerTemplate.loadBalancerType = 'INTERNAL_MANAGED';\n loadBalancerTemplate.isInternal = true;\n if (loadBalancer) {\n loadBalancer.network = gceXpnNamingService.decorateXpnResourceIfNecessary(\n loadBalancer.project,\n loadBalancer.network,\n );\n loadBalancer.listeners.forEach((listener) => {\n listener.subnet = gceXpnNamingService.decorateXpnResourceIfNecessary(loadBalancer.project, listener.subnet);\n });\n }\n loadBalancerTemplate.region = GCEProviderSettings.defaults.region;\n loadBalancerTemplate.network = 'default';\n } else {\n loadBalancerTemplate.loadBalancerType = 'HTTP';\n loadBalancerTemplate.isInternal = false;\n }\n\n let mixinData;\n if (isNew) {\n mixinData = {\n backendServices: [],\n listeners: [new ListenerTemplate()],\n healthChecks: [],\n };\n } else {\n mixinData = gceHttpLoadBalancerTransformer.deserialize(loadBalancer);\n }\n\n const loadBalancerData = _.assign(loadBalancerTemplate, mixinData);\n return loadBalancerData;\n }\n\n function unifyDataSources(backingData, loadBalancer) {\n setAccount(backingData.accounts, loadBalancer);\n removeExistingListenersFromBackingData(backingData, loadBalancer.listeners);\n\n // update backing data with any values coming from load balancer -- they are more up to date.\n const lbHealthCheckMap = _.keyBy(loadBalancer.healthChecks, 'name');\n const backingDataHealthCheckMap = _.keyBy(backingData.healthChecks, 'name');\n\n backingData.healthChecksKeyedByName = _.assign(backingDataHealthCheckMap, _.cloneDeep(lbHealthCheckMap));\n backingData.healthChecksKeyedByNameCopy = _.cloneDeep(backingDataHealthCheckMap);\n backingData.healthChecks = _.map(backingDataHealthCheckMap, _.identity);\n\n const lbBackendServicesMap = _.keyBy(loadBalancer.backendServices, 'name');\n const backingDataBackendServiceMap = _.keyBy(backingData.backendServices, 'name');\n\n backingData.backendServicesKeyedByName = _.assign(\n backingDataBackendServiceMap,\n _.cloneDeep(lbBackendServicesMap),\n );\n backingData.backendServicesKeyedByNameCopy = _.cloneDeep(backingDataBackendServiceMap);\n backingData.backendServices = _.map(backingDataBackendServiceMap, _.identity);\n\n backingData.regions = backingData.accounts\n .find((account) => account.name === loadBalancer.credentials)\n .regions.map((region) => region.name);\n\n backingData.subnetMap = _.groupBy(backingData.subnets, 'network');\n backingData.internalHttpLbNetworks = backingData.networks.filter((network) =>\n backingData.subnetMap[network].find((subnet) => subnet.purpose === 'INTERNAL_HTTPS_LOAD_BALANCER'),\n );\n }\n\n function removeExistingListenersFromBackingData(backingData, existingListeners) {\n const accountNames = backingData.accounts.map((account) => account.name);\n\n accountNames.forEach((accountName) => {\n if (_.has(backingData, ['loadBalancerMap', accountName, 'listeners'])) {\n backingData.loadBalancerMap[accountName].listeners = _.without(\n backingData.loadBalancerMap[accountName].listeners,\n ...existingListeners.map((listener) => listener.name),\n );\n }\n });\n }\n\n function setAccount(accounts, loadBalancerData) {\n const accountNames = _.map(accounts, 'name');\n const credentials = _.get(loadBalancerData, 'credentials.name') || loadBalancerData.credentials;\n\n if (!accountNames.includes(credentials)) {\n loadBalancerData.credentials = _.first(accountNames);\n }\n }\n\n function getHealthChecks(region) {\n return gceHealthCheckReader.listHealthChecks().then((healthChecks) => {\n return healthChecks.filter((healthCheck) => !region || healthCheck.region === region);\n });\n }\n\n function getNetworks() {\n return NetworkReader.listNetworksByProvider('gce').then((networks) => {\n return _.chain(networks).map('name').compact().uniq().value();\n });\n }\n\n function getBackendServices(region) {\n const kind = region ? 'regionBackendService' : 'globalBackendService';\n return gceBackendServiceReader.listBackendServices(kind).then((backendServices) => {\n backendServices = backendServices.filter((backendService) => !region || backendService.region === region);\n backendServices.forEach((service) => {\n service.healthCheck = service.healthCheckLink.split('/').pop();\n\n const ttlIsDefined = typeof service.affinityCookieTtlSec === 'string';\n service.affinityCookieTtlSec = ttlIsDefined ? Number(service.affinityCookieTtlSec) : null;\n\n service.sessionAffinity = sessionAffinityModelToViewMap[service.sessionAffinity] || service.sessionAffinity;\n });\n\n return backendServices;\n });\n }\n\n function getCertificates() {\n return gceCertificateReader.listCertificates();\n }\n\n function getAccounts() {\n return AccountService.listAccounts('gce');\n }\n\n function getLoadBalancerMap(region) {\n return loadBalancerReader.listLoadBalancers('gce').then((lbs) => {\n return _.chain(lbs)\n .map((lb) => lb.accounts)\n .flatten()\n .groupBy('name')\n .mapValues((accounts) => {\n const loadBalancers = _.chain(accounts)\n .map((a) => a.regions)\n .flatten()\n .filter((region) => region.name === (region || gceHttpLoadBalancerUtils.REGION))\n .map((region) => region.loadBalancers)\n .flatten()\n .value();\n\n const urlMapNames = _.chain(loadBalancers).map('urlMapName').uniq().value();\n const listeners = _.chain(loadBalancers).map('name').uniq().value();\n\n return { urlMapNames, listeners };\n })\n .valueOf();\n });\n }\n\n function onHealthCheckRefresh(command) {\n getHealthChecks(command.loadBalancer.region).then((healthChecks) => {\n command.backingData.healthChecks = healthChecks;\n command.backingData.healthChecksKeyedByName = _.keyBy(healthChecks, 'name');\n command.backingData.healthChecksKeyedByNameCopy = _.cloneDeep(command.backingData.healthChecksKeyedByName);\n\n command.loadBalancer.healthChecks = command.loadBalancer.healthChecks.map((hc) => {\n const updated = command.backingData.healthChecksKeyedByName[_.get(hc, 'name')];\n if (updated) {\n return _.cloneDeep(updated);\n } else {\n return hc;\n }\n });\n });\n }\n\n function onCertificateRefresh(command) {\n getCertificates().then((certificates) => {\n command.backingData.certificates = certificates;\n });\n }\n\n function onBackendServiceRefresh(command) {\n getBackendServices(command.loadBalancer.region).then((backendServices) => {\n command.backingData.backendServices = backendServices;\n command.backingData.backendServicesKeyedByName = _.keyBy(backendServices, 'name');\n command.backingData.backendServicesKeyedByNameCopy = _.cloneDeep(\n command.backingData.backendServicesKeyedByName,\n );\n\n command.loadBalancer.backendServices = command.loadBalancer.backendServices.map((service) => {\n const updated = command.backingData.backendServicesKeyedByName[_.get(service, 'name')];\n if (updated) {\n return _.cloneDeep(updated);\n } else {\n return service;\n }\n });\n });\n }\n\n function onRegionSelected(command) {\n buildBackingData(command.loadBalancer.region).then((backingData) => {\n Object.assign(command.backingData, backingData);\n unifyDataSources(command.backingData, command.loadBalancer);\n });\n }\n\n function onHealthCheckSelected(selectedName, command) {\n if (!command.loadBalancer.healthChecks.find((hc) => _.get(hc, 'name') === selectedName)) {\n const selectedObject = command.backingData.healthChecksKeyedByName[selectedName];\n if (selectedObject) {\n command.loadBalancer.healthChecks.push(selectedObject);\n }\n }\n }\n\n function onBackendServiceSelected(selectedName, command) {\n if (!command.loadBalancer.backendServices.find((service) => service.name === selectedName)) {\n const selectedObject = command.backingData.backendServicesKeyedByName[selectedName];\n command.loadBalancer.backendServices.push(selectedObject);\n if (selectedObject.healthCheck) {\n onHealthCheckSelected(selectedObject.healthCheck, command);\n }\n }\n }\n\n function getAllBackendServices(command) {\n const allBackendServices = command.loadBalancer.backendServices.concat(command.backingData.backendServices);\n return _.chain(allBackendServices)\n .filter((service) => {\n return (\n service.account === command.loadBalancer.credentials || service.account === command.loadBalancer.account\n );\n })\n .map('name')\n .compact()\n .uniq()\n .value();\n }\n\n function getUnusedHealthChecks(command) {\n return _.chain(command.loadBalancer.healthChecks)\n .map('name')\n .difference(_.map(command.loadBalancer.backendServices, 'healthCheck'))\n .compact()\n .uniq()\n .value();\n }\n\n function getUnusedBackendServices(command) {\n const defaultService = command.loadBalancer.defaultService;\n const hostRuleServices = _.map(command.loadBalancer.hostRules, 'pathMatcher.defaultService');\n const pathRuleServices = _.chain(command.loadBalancer.hostRules)\n .map('pathMatcher.pathRules')\n .flatten()\n .map('backendService')\n .value();\n\n const usedServices = _.chain([defaultService, ...hostRuleServices, ...pathRuleServices])\n .compact()\n .uniq()\n .value();\n\n return _.chain(command.loadBalancer.backendServices)\n .map('name')\n .difference(usedServices)\n .compact()\n .uniq()\n .value();\n }\n\n function removeUnusedBackendServices(command) {\n const unusedBackendServices = getUnusedBackendServices(command);\n command.loadBalancer.backendServices = command.loadBalancer.backendServices.filter(\n (service) => !unusedBackendServices.includes(service.name),\n );\n }\n\n function removeUnusedHealthChecks(command) {\n const unusedHealthChecks = getUnusedHealthChecks(command);\n command.loadBalancer.healthChecks = command.loadBalancer.healthChecks.filter(\n (healthCheck) => !unusedHealthChecks.includes(healthCheck.name),\n );\n }\n\n function onAccountChange(command) {\n command.loadBalancer.backendServices = [];\n command.loadBalancer.healthChecks = [];\n command.loadBalancer.hostRules = [];\n command.loadBalancer.listeners = [new ListenerTemplate()];\n command.loadBalancer.defaultService = null;\n command.backingData.regions = command.backingData.accounts\n .find((account) => account.name === command.loadBalancer.credentials)\n .regions.map((region) => region.name);\n }\n\n function onAddressRefresh(command) {\n gceAddressReader.listAddresses('global').then((addresses) => {\n command.backingData.addresses = addresses;\n });\n }\n\n return { buildCommand };\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULES_SERVICE =\n 'spinnaker.deck.gce.loadBalancer.hostAndPathRules.service';\nexport const name = GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULES_SERVICE; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULES_SERVICE, []).factory(\n 'hostAndPathRulesService',\n function () {\n function buildTable(hostRules, defaultService) {\n const defaultRow = buildRow('Any unmatched (default)', 'Any unmatched (default)', defaultService.name);\n if (hostRules.length === 0) {\n return [defaultRow];\n }\n\n return hostRules.reduce(\n (rows, hostRule) => {\n const [hostPattern] = hostRule.hostPatterns;\n const { defaultService, pathRules } = hostRule.pathMatcher;\n\n rows.push(buildRow(hostPattern, '/*', defaultService.name));\n\n return rows.concat(\n pathRules.reduce((rows, pathRule) => {\n const { backendService, paths } = pathRule;\n return rows.concat(paths.map((path) => buildRow(hostPattern, path, backendService.name)));\n }, []),\n );\n },\n [defaultRow],\n );\n }\n\n function buildRow(hostPattern, path, backend) {\n return { hostPattern, path, backend };\n }\n\n return { buildTable };\n },\n);\n","import { module } from 'angular';\n\nimport { GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULES_SERVICE } from './hostAndPathRules.service';\n\n('use strict');\n\nexport const GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULES_CONTROLLER =\n 'spinnaker.deck.gce.loadBalancer.hostAndPathRules.controller';\nexport const name = GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULES_CONTROLLER; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULES_CONTROLLER, [\n GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULES_SERVICE,\n]).controller('gceHostAndPathRulesCtrl', [\n 'hostRules',\n 'defaultService',\n 'loadBalancerName',\n '$uibModalInstance',\n 'hostAndPathRulesService',\n function (hostRules, defaultService, loadBalancerName, $uibModalInstance, hostAndPathRulesService) {\n this.table = hostAndPathRulesService.buildTable(hostRules, defaultService);\n this.loadBalancerName = loadBalancerName;\n this.close = $uibModalInstance.dismiss;\n },\n]);\n","import { module } from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\n\nimport { GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULES_CONTROLLER } from './hostAndPathRules.controller';\n\n('use strict');\n\nexport const GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULESBUTTON_COMPONENT =\n 'spinnaker.deck.gce.loadBalancer.hostAndPathRulesButton.component';\nexport const name = GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULESBUTTON_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULESBUTTON_COMPONENT, [\n ANGULAR_UI_BOOTSTRAP,\n GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULES_CONTROLLER,\n]).component('gceHostAndPathRulesButton', {\n bindings: {\n hostRules: '=',\n defaultService: '=',\n loadBalancerName: '=',\n },\n template: '<a href ng-click=\"$ctrl.viewHostAndPathRules()\">View Host and Path Rules</a>',\n controller: [\n '$uibModal',\n function ($uibModal) {\n this.viewHostAndPathRules = () => {\n $uibModal.open({\n templateUrl: require('./hostAndPathRules.modal.html'),\n controller: 'gceHostAndPathRulesCtrl',\n controllerAs: 'ctrl',\n size: 'lg',\n resolve: {\n hostRules: () => this.hostRules,\n defaultService: () => this.defaultService,\n loadBalancerName: () => this.loadBalancerName,\n },\n });\n };\n },\n ],\n});\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { HealthCheckTemplate } from '../templates';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HEALTHCHECK_HEALTHCHECK_COMPONENT =\n 'spinnaker.deck.httpLoadBalancer.healthCheck.component';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HEALTHCHECK_HEALTHCHECK_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HEALTHCHECK_HEALTHCHECK_COMPONENT, []).component(\n 'gceHttpLoadBalancerHealthCheck',\n {\n bindings: {\n command: '=',\n deleteHealthCheck: '&',\n healthCheck: '=',\n index: '=',\n },\n templateUrl: require('./healthCheck.component.html'),\n controller: function () {\n this.$onInit = () => {\n this.max = Number.MAX_SAFE_INTEGER;\n this.backingData = this.command.backingData;\n this.loadBalancer = this.command.loadBalancer;\n const healthChecksByName = this.backingData.healthChecksKeyedByName;\n\n this.onHealthCheckSelect = (selectedHealthCheck) => {\n assign(selectedHealthCheck);\n };\n\n this.getAllHealthCheckNames = () => {\n return this.command.backingData.healthChecks\n .filter((hc) => hc.account === this.loadBalancer.credentials)\n .map((hc) => hc.name);\n };\n\n this.toggleEditExisting = () => {\n this.editExisting = !this.editExisting;\n if (!this.editExisting) {\n assign(new HealthCheckTemplate());\n } else {\n delete this.healthCheck.name;\n }\n };\n\n const assign = (toAssign) => {\n this.loadBalancer.healthChecks[this.index] = this.healthCheck = toAssign;\n };\n\n const getHealthCheckName = () => {\n return _.get(this, 'healthCheck.name');\n };\n\n this.onProtocolChange = () => {\n if (this.healthCheck.healthCheckType !== this.healthCheckType) {\n assign(Object.assign({}, new HealthCheckTemplate(), { healthCheckType: this.healthCheckType }));\n }\n };\n\n if (healthChecksByName[getHealthCheckName()]) {\n this.editExisting = true;\n }\n\n this.healthCheckType = this.healthCheck.healthCheckType;\n };\n },\n },\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_HTTP_PATHRULE_PATHRULE_COMPONENT =\n 'spinnaker.deck.gce.httpLoadBalancer.pathRule.component';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_HTTP_PATHRULE_PATHRULE_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_HTTP_PATHRULE_PATHRULE_COMPONENT, []).component('gcePathRule', {\n bindings: {\n pathRule: '=',\n command: '=',\n index: '=',\n deletePathRule: '&',\n },\n templateUrl: require('./pathRule.component.html'),\n});\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_PATHRULE_PATHRULE_COMPONENT } from '../pathRule/pathRule.component';\nimport { PathRuleTemplate } from '../templates';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HOSTRULE_HOSTRULE_COMPONENT =\n 'spinnaker.deck.gce.httpLoadBalancer.hostRule.component';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HOSTRULE_HOSTRULE_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HOSTRULE_HOSTRULE_COMPONENT, [\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_PATHRULE_PATHRULE_COMPONENT,\n]).component('gceHostRule', {\n bindings: {\n hostRule: '=',\n index: '=',\n command: '=',\n deleteHostRule: '&',\n },\n templateUrl: require('./hostRule.component.html'),\n controller: function () {\n this.$onInit = () => {\n this.loadBalancer = this.command.loadBalancer;\n const pathRules = this.hostRule.pathMatcher.pathRules;\n\n this.addPathRule = () => {\n pathRules.push(new PathRuleTemplate());\n };\n\n this.deletePathRule = (index) => {\n pathRules.splice(index, 1);\n };\n };\n },\n});\n","'use strict';\n\nimport * as angular from 'angular';\n\nimport { InfrastructureCaches, TaskExecutor } from '@spinnaker/core';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HTTPLOADBALANCER_WRITE_SERVICE =\n 'spinnaker.deck.gce.httpLoadBalancer.write.service';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HTTPLOADBALANCER_WRITE_SERVICE; // for backwards compatibility\nangular\n .module(GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HTTPLOADBALANCER_WRITE_SERVICE, [])\n .factory('gceHttpLoadBalancerWriter', function () {\n function upsertLoadBalancers(loadBalancers, application, descriptor) {\n loadBalancers.forEach((lb) => {\n angular.extend(lb, {\n type: 'upsertLoadBalancer',\n cloudProvider: 'gce',\n loadBalancerName: lb.name,\n });\n });\n\n InfrastructureCaches.clearCache('backendServices');\n InfrastructureCaches.clearCache('healthChecks');\n\n return TaskExecutor.executeTask({\n job: loadBalancers,\n application: application,\n description: `${descriptor} Load Balancer: ${loadBalancers[0].urlMapName}`,\n });\n }\n\n function deleteLoadBalancers(loadBalancer, application, params = {}) {\n const job = {\n type: 'deleteLoadBalancer',\n loadBalancerName: loadBalancer.listeners[0].name,\n regions: [loadBalancer.region || 'global'],\n region: loadBalancer.region || 'global',\n loadBalancerType: loadBalancer.loadBalancerType,\n cloudProvider: loadBalancer.provider,\n credentials: loadBalancer.account,\n };\n\n angular.extend(job, params);\n\n InfrastructureCaches.clearCache('backendServices');\n InfrastructureCaches.clearCache('healthChecks');\n\n return TaskExecutor.executeTask({\n job: [job],\n application: application,\n description: `Delete load balancer: ${loadBalancer.urlMapName} in ${loadBalancer.account}:global`,\n });\n }\n\n return { upsertLoadBalancers, deleteLoadBalancers };\n });\n","import type { IComponentOptions, IController } from 'angular';\nimport { module } from 'angular';\nimport type { IGceAddress } from '../../../address/address.reader';\n\nclass GceAddressSelectorCtrl implements IController {\n public selectedAddress: IGceAddress;\n public addressList: IGceAddress[];\n public account: string;\n // The IP address string is the only piece that we can expect a parent resource to keep track of.\n // We'll try to match this IP to a full address map.\n private initialIpAddress: string;\n\n public $onInit(): void {\n this.selectedAddress = this.addressList.find((address) => address.address === this.initialIpAddress);\n if (!this.selectedAddress) {\n this.selectedAddress = { address: this.initialIpAddress, account: this.account };\n }\n }\n}\n\nconst gceAddressSelector: IComponentOptions = {\n bindings: {\n initialIpAddress: '<',\n addressList: '<',\n readOnly: '<',\n onAddressSelect: '&',\n account: '<',\n },\n template: `\n <ui-select on-select=\"$ctrl.onAddressSelect({address: $ctrl.selectedAddress})\"\n ng-disabled=\"$ctrl.readOnly\"\n ng-model=\"$ctrl.selectedAddress\"\n class=\"form-control input-sm\">\n <ui-select-match allow-clear>\n {{$ctrl.selectedAddress.address}} <span ng-if=\"$ctrl.selectedAddress.name\">({{$ctrl.selectedAddress.name}})</span>\n </ui-select-match>\n <ui-select-choices repeat=\"address in $ctrl.addressList | filter: {name: $select.search, account: $ctrl.account}\">\n <span>\n {{address.address}} <span ng-if=\"address.name\">({{address.name}})</span> <br>\n </span>\n </ui-select-choices>\n </ui-select>`,\n controller: GceAddressSelectorCtrl,\n};\n\nexport const GCE_ADDRESS_SELECTOR = 'spinnaker.gce.addressSelector.component';\nmodule(GCE_ADDRESS_SELECTOR, []).component('gceAddressSelector', gceAddressSelector);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { GCE_ADDRESS_SELECTOR } from '../../common/addressSelector.component';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_HTTP_LISTENERS_LISTENER_COMPONENT =\n 'spinnaker.deck.gce.httpLoadBalancer.listener.component';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_HTTP_LISTENERS_LISTENER_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_HTTP_LISTENERS_LISTENER_COMPONENT, [GCE_ADDRESS_SELECTOR]).component(\n 'gceListener',\n {\n bindings: {\n command: '=',\n listener: '=',\n deleteListener: '&',\n index: '=',\n application: '=',\n },\n templateUrl: require('./listener.component.html'),\n controller: function () {\n this.$onInit = () => {\n this.certificates = this.command.backingData.certificates;\n const loadBalancerMap = this.command.backingData.loadBalancerMap;\n\n this.getName = (listener, applicationName) => {\n const listenerName = [applicationName, listener.stack || '', listener.detail || ''].join('-');\n return _.trimEnd(listenerName, '-');\n };\n\n this.getCertificates = () => {\n return this.command.backingData.certificates\n .filter((certificate) => certificate.account === this.command.loadBalancer.credentials)\n .map((certificate) => certificate.name);\n };\n\n this.getSubnets = () => {\n const ret = this.command.backingData.subnetMap[this.command.loadBalancer.network]\n .filter((subnet) => subnet.region === this.command.loadBalancer.region)\n .map((subnet) => subnet.name);\n return _.uniq(ret);\n };\n\n this.getInternalAddresses = () => {\n return this.command.backingData.addresses.filter(\n (address) =>\n address.addressType === 'INTERNAL' && address.subnetwork.split('/').pop() === this.listener.subnet,\n );\n };\n\n this.updateName = (listener, appName) => {\n listener.name = this.getName(listener, appName);\n };\n\n this.localListenerHasSameName = () => {\n return (\n this.command.loadBalancer.listeners.filter((listener) => listener.name === this.listener.name).length > 1\n );\n };\n\n this.existingListenerNames = () => {\n return _.get(loadBalancerMap, [this.command.loadBalancer.credentials, 'listeners']);\n };\n\n this.isHttps = (port) => port === 443 || port === '443';\n\n if (!this.listener.name) {\n this.updateName(this.listener, this.application.name);\n }\n\n this.onAddressSelect = (address) => {\n if (address) {\n this.listener.ipAddress = address.address;\n } else {\n this.listener.ipAddress = null;\n }\n };\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';\n\nimport { TaskMonitor } from '@spinnaker/core';\n\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BACKENDSERVICE_BACKENDSERVICE_COMPONENT } from './backendService/backendService.component';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BASICSETTINGS_BASICSETTINGS_COMPONENT } from './basicSettings/basicSettings.component';\nimport { GCE_CACHE_REFRESH } from '../../../cache/cacheRefresh.component';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_COMMANDBUILDER_SERVICE } from './commandBuilder.service';\nimport { GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULESBUTTON_COMPONENT } from '../../details/hostAndPathRules/hostAndPathRulesButton.component';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HEALTHCHECK_HEALTHCHECK_COMPONENT } from './healthCheck/healthCheck.component';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HOSTRULE_HOSTRULE_COMPONENT } from './hostRule/hostRule.component';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HTTPLOADBALANCER_WRITE_SERVICE } from './httpLoadBalancer.write.service';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_LISTENERS_LISTENER_COMPONENT } from './listeners/listener.component';\nimport { BackendServiceTemplate, HealthCheckTemplate, HostRuleTemplate, ListenerTemplate } from './templates';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_TRANSFORMER_SERVICE } from './transformer.service';\n\nimport './httpLoadBalancerWizard.component.less';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_HTTP_CREATEHTTPLOADBALANCER_CONTROLLER =\n 'spinnaker.deck.gce.loadBalancer.createHttp.controller';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_HTTP_CREATEHTTPLOADBALANCER_CONTROLLER; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_HTTP_CREATEHTTPLOADBALANCER_CONTROLLER, [\n ANGULAR_UI_BOOTSTRAP,\n UIROUTER_ANGULARJS,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BACKENDSERVICE_BACKENDSERVICE_COMPONENT,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BASICSETTINGS_BASICSETTINGS_COMPONENT,\n GCE_CACHE_REFRESH,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_COMMANDBUILDER_SERVICE,\n GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULESBUTTON_COMPONENT,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HEALTHCHECK_HEALTHCHECK_COMPONENT,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HOSTRULE_HOSTRULE_COMPONENT,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HTTPLOADBALANCER_WRITE_SERVICE,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_LISTENERS_LISTENER_COMPONENT,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_TRANSFORMER_SERVICE,\n]).controller('gceCreateHttpLoadBalancerCtrl', [\n '$scope',\n '$uibModal',\n '$uibModalInstance',\n 'application',\n 'loadBalancer',\n 'isNew',\n 'gceHttpLoadBalancerWriter',\n '$state',\n 'wizardSubFormValidation',\n 'gceHttpLoadBalancerCommandBuilder',\n 'gceHttpLoadBalancerTransformer',\n function (\n $scope,\n $uibModal,\n $uibModalInstance,\n application,\n loadBalancer,\n isNew,\n gceHttpLoadBalancerWriter,\n $state,\n wizardSubFormValidation,\n gceHttpLoadBalancerCommandBuilder,\n gceHttpLoadBalancerTransformer,\n ) {\n this.application = application;\n this.isNew = isNew;\n this.modalDescriptor = this.isNew\n ? 'Create HTTP(S) load balancer'\n : `Edit ${loadBalancer.name}:global:${loadBalancer.account}`;\n\n this.pages = {\n location: require('./basicSettings/basicSettings.html'),\n listeners: require('./listeners/listeners.html'),\n defaultService: require('./defaultService/defaultService.html'),\n backendServices: require('./backendService/backendServices.html'),\n healthChecks: require('./healthCheck/healthChecks.html'),\n hostRules: require('./hostRule/hostRules.html'),\n };\n\n const keyToTemplateMap = {\n backendServices: BackendServiceTemplate,\n healthChecks: HealthCheckTemplate,\n hostRules: HostRuleTemplate,\n listeners: ListenerTemplate,\n };\n\n this.add = (key) => {\n this.command.loadBalancer[key].push(new keyToTemplateMap[key]());\n };\n\n this.remove = (key, index) => {\n this.command.loadBalancer[key].splice(index, 1);\n };\n\n const 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\n const lb = this.command.loadBalancer;\n const newStateParams = {\n name: lb.urlMapName,\n accountId: lb.credentials,\n region: lb.region,\n provider: 'gce',\n };\n\n if (!$state.includes('**.loadBalancerDetails')) {\n $state.go('.loadBalancerDetails', newStateParams);\n } else {\n $state.go('^.loadBalancerDetails', newStateParams);\n }\n };\n\n const onTaskComplete = () => {\n application.loadBalancers.refresh();\n application.loadBalancers.onNextRefresh($scope, onApplicationRefresh);\n };\n\n $scope.taskMonitor = this.taskMonitor = new TaskMonitor({\n application: this.application,\n title: (this.isNew ? 'Creating ' : 'Updating ') + 'your load balancer',\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n this.submit = () => {\n const serializedCommands = gceHttpLoadBalancerTransformer.serialize(this.command, loadBalancer);\n const descriptor = this.isNew ? 'Create' : 'Update';\n\n this.taskMonitor.submit(() =>\n gceHttpLoadBalancerWriter.upsertLoadBalancers(serializedCommands, application, descriptor),\n );\n };\n\n gceHttpLoadBalancerCommandBuilder.buildCommand({ isNew, originalLoadBalancer: loadBalancer }).then((command) => {\n this.command = command;\n\n wizardSubFormValidation\n .config({ scope: $scope, form: 'form' })\n .register({ page: 'location', subForm: 'location' })\n .register({\n page: 'listeners',\n subForm: 'listeners',\n validators: [\n {\n watchString: 'ctrl.command.loadBalancer.listeners',\n validator: (listeners) => listeners.length > 0,\n collection: true,\n },\n ],\n })\n .register({ page: 'default-service', subForm: 'defaultService' })\n .register({ page: 'health-checks', subForm: 'healthChecks' })\n .register({ page: 'backend-services', subForm: 'backendServices' })\n .register({ page: 'host-rules', subForm: 'hostRules' });\n });\n\n this.cancel = $uibModalInstance.dismiss;\n },\n]);\n","import type { StateService } from '@uirouter/angularjs';\nimport type { IScope } from 'angular';\nimport type { IModalInstanceService } from 'angular-ui-bootstrap';\nimport { trimEnd } from 'lodash';\n\nimport type { Application } from '@spinnaker/core';\nimport { InfrastructureCaches } from '@spinnaker/core';\nimport type { IGceLoadBalancer } from '../../../domain/loadBalancer';\n\nexport class CommonGceLoadBalancerCtrl {\n public static $inject = ['$scope', 'application', '$uibModalInstance', '$state'];\n constructor(\n public $scope: IScope,\n public application: Application,\n public $uibModalInstance: IModalInstanceService,\n private $state: StateService,\n ) {}\n\n public onTaskComplete(loadBalancer: IGceLoadBalancer): void {\n InfrastructureCaches.clearCache('healthChecks');\n this.application.getDataSource('loadBalancers').refresh();\n this.application\n .getDataSource('loadBalancers')\n .onNextRefresh(this.$scope, () => this.onApplicationRefresh(loadBalancer));\n }\n\n public cancel(): void {\n this.$uibModalInstance.dismiss();\n }\n\n public getName(lb: IGceLoadBalancer, application: Application): string {\n const loadBalancerName = [application.name, lb.stack || '', lb.detail || ''].join('-');\n return trimEnd(loadBalancerName, '-');\n }\n\n private onApplicationRefresh(loadBalancer: IGceLoadBalancer): void {\n // If the user has already closed the modal, do not navigate to the new details view\n if (this.$scope.$$destroyed) {\n return;\n }\n this.$uibModalInstance.close();\n\n const newStateParams = {\n name: loadBalancer.loadBalancerName,\n accountId: loadBalancer.credentials,\n region: loadBalancer.region,\n provider: 'gce',\n };\n\n if (!this.$state.includes('**.loadBalancerDetails')) {\n this.$state.go('.loadBalancerDetails', newStateParams);\n } else {\n this.$state.go('^.loadBalancerDetails', newStateParams);\n }\n }\n}\n","import { module } from 'angular';\nimport _ from 'lodash';\n\nimport type { IAccount, ILoadBalancersByAccount, INetwork, ISubnet, LoadBalancerReader } from '@spinnaker/core';\nimport { AccountService, LOAD_BALANCER_READ_SERVICE, NetworkReader, SubnetReader } from '@spinnaker/core';\nimport type { GceCertificateReader, IGceCertificate } from '../../../certificate/certificate.reader';\nimport { GCE_CERTIFICATE_READER } from '../../../certificate/certificate.reader';\nimport type { IGceHealthCheck } from '../../../domain/healthCheck';\nimport type { GceHealthCheckReader } from '../../../healthCheck/healthCheck.read.service';\nimport { GCE_HEALTH_CHECK_READER } from '../../../healthCheck/healthCheck.read.service';\n\nexport class GceCommonLoadBalancerCommandBuilder {\n private dataFetchers: { [key: string]: Function } = {\n existingLoadBalancerNamesByAccount: (): PromiseLike<_.Dictionary<any>> => {\n return this.loadBalancerReader.listLoadBalancers('gce').then((loadBalancerList: ILoadBalancersByAccount[]) => {\n return _.chain(loadBalancerList)\n .map('accounts')\n .flatten()\n .groupBy('name') // account name\n .mapValues((regionWrappers) =>\n _.chain(regionWrappers)\n .map('regions')\n .flatten()\n .map('loadBalancers')\n .flatten()\n .map('name') // load balancer name\n .value(),\n )\n .value();\n });\n },\n accounts: (): PromiseLike<IAccount[]> => AccountService.listAccounts('gce'),\n networks: (): PromiseLike<INetwork[]> => NetworkReader.listNetworksByProvider('gce'),\n subnets: (): PromiseLike<ISubnet[]> => SubnetReader.listSubnetsByProvider('gce'),\n healthChecks: (): PromiseLike<IGceHealthCheck[]> => this.gceHealthCheckReader.listHealthChecks(),\n certificates: (): PromiseLike<IGceCertificate[]> => this.gceCertificateReader.listCertificates(),\n };\n\n public static $inject = ['$q', 'loadBalancerReader', 'gceHealthCheckReader', 'gceCertificateReader'];\n constructor(\n private $q: ng.IQService,\n private loadBalancerReader: LoadBalancerReader,\n private gceHealthCheckReader: GceHealthCheckReader,\n private gceCertificateReader: GceCertificateReader,\n ) {}\n\n public getBackingData(dataTypes: string[]): PromiseLike<any> {\n const promises = dataTypes.reduce(\n (promisesByDataType: { [dataType: string]: PromiseLike<any> }, dataType: string) => {\n if (this.dataFetchers[dataType]) {\n promisesByDataType[dataType] = this.dataFetchers[dataType]();\n }\n return promisesByDataType;\n },\n {},\n );\n\n return this.$q.all(promises);\n }\n\n public groupHealthChecksByAccountAndType(\n healthChecks: IGceHealthCheck[],\n ): { [account: string]: { [healthCheckType: string]: IGceHealthCheck[] } } {\n return _.chain(healthChecks)\n .groupBy('account')\n .mapValues((grouped: IGceHealthCheck[]) => _.groupBy(grouped, 'healthCheckType'))\n .value();\n }\n\n public groupHealthCheckNamesByAccount(\n healthChecks: IGceHealthCheck[],\n namesToOmit: string[],\n ): { [account: string]: string[] } {\n return _.chain(healthChecks)\n .groupBy('account')\n .mapValues((grouped: IGceHealthCheck[]) => _.chain(grouped).map('name').difference(namesToOmit).value())\n .value() as { [account: string]: string[] };\n }\n}\n\nexport const GCE_COMMON_LOAD_BALANCER_COMMAND_BUILDER = 'spinnaker.gce.commonLoadBalancerCommandBuilder.service';\n\nmodule(GCE_COMMON_LOAD_BALANCER_COMMAND_BUILDER, [\n LOAD_BALANCER_READ_SERVICE,\n GCE_CERTIFICATE_READER,\n GCE_HEALTH_CHECK_READER,\n]).service('gceCommonLoadBalancerCommandBuilder', GceCommonLoadBalancerCommandBuilder);\n","import type { IController } from 'angular';\nimport { module } from 'angular';\nimport { get } from 'lodash';\n\nimport type { IGceHealthCheck } from '../../../domain/index';\n\nclass HealthCheckCreateCtrl implements IController {\n public healthCheck: IGceHealthCheck;\n public healthCheckPlaceholder: IGceHealthCheck;\n public healthChecksByAccountAndType: { [account: string]: { [healthCheckType: string]: IGceHealthCheck[] } };\n public editExisting = false;\n public existingHealthChecksForProtocol: IGceHealthCheck[];\n public existingHealthCheckNames: string[];\n public credentials: string;\n public max = Number.MAX_SAFE_INTEGER;\n\n public static $inject = ['$scope'];\n constructor(private $scope: ng.IScope) {}\n\n public $onInit(): void {\n if (this.healthCheck.name) {\n this.healthCheckPlaceholder = this.healthCheck;\n this.existingHealthChecksForProtocol = this.healthChecksByAccountAndType[this.credentials][\n this.healthCheck.healthCheckType\n ];\n this.editExisting = true;\n } else {\n this.existingHealthChecksForProtocol = this.healthChecksByAccountAndType[this.credentials]['TCP'];\n }\n\n this.$scope.$watch('$ctrl.credentials', () => this.setExistingHealthChecksForProtocol());\n }\n\n public onProtocolChange(): void {\n delete this.healthCheck.name;\n delete this.healthCheckPlaceholder;\n this.setExistingHealthChecksForProtocol();\n }\n\n public setExistingHealthChecksForProtocol() {\n this.existingHealthChecksForProtocol =\n get<{}, IGceHealthCheck[]>(this, [\n 'healthChecksByAccountAndType',\n this.credentials,\n this.healthCheck.healthCheckType,\n ]) || [];\n\n if (!this.existingHealthChecksForProtocol.find((healthCheck) => healthCheck.name === this.healthCheck.name)) {\n delete this.healthCheck.name;\n delete this.healthCheckPlaceholder;\n }\n }\n\n public toggleEditExisting(): void {\n this.editExisting = !this.editExisting;\n delete this.healthCheck.name;\n delete this.healthCheckPlaceholder;\n }\n\n public onHealthCheckSelect(selectedHealthCheck: IGceHealthCheck): void {\n Object.assign(this.healthCheck, selectedHealthCheck);\n }\n\n public onHealthCheckNameChange(typedName: string): void {\n this.healthCheck.name = typedName;\n }\n}\n\nconst healthCheckCreateComponent: ng.IComponentOptions = {\n bindings: {\n healthCheck: '=',\n credentials: '<',\n healthChecksByAccountAndType: '<',\n existingHealthCheckNames: '<',\n },\n templateUrl: require('./healthCheck.component.html'),\n controller: HealthCheckCreateCtrl,\n};\n\nexport const GCE_HEALTH_CHECK_SELECTOR_COMPONENT = 'spinnaker.gce.healthCheckSelector.component';\n\nmodule(GCE_HEALTH_CHECK_SELECTOR_COMPONENT, []).component('gceHealthCheckSelector', healthCheckCreateComponent);\n","import type { StateService } from '@uirouter/angularjs';\nimport type { IController, IScope } from 'angular';\nimport { module } from 'angular';\nimport type { IModalInstanceService } from 'angular-ui-bootstrap';\nimport _ from 'lodash';\n\nimport type { Application, IAccount, ICredentials, IRegion } from '@spinnaker/core';\nimport { AccountService, LoadBalancerWriter, TaskMonitor } from '@spinnaker/core';\n\nimport { CommonGceLoadBalancerCtrl } from '../common/commonLoadBalancer.controller';\nimport type { GceCommonLoadBalancerCommandBuilder } from '../common/commonLoadBalancerCommandBuilder.service';\nimport { GCE_COMMON_LOAD_BALANCER_COMMAND_BUILDER } from '../common/commonLoadBalancerCommandBuilder.service';\nimport { GCE_HEALTH_CHECK_SELECTOR_COMPONENT } from '../common/healthCheck.component';\nimport { GOOGLE_COMMON_XPNNAMING_GCE_SERVICE } from '../../../common/xpnNaming.gce.service';\nimport type {\n IGceBackendService,\n IGceHealthCheck,\n IGceLoadBalancer,\n IGceNetwork,\n IGceSubnet,\n} from '../../../domain/index';\nimport { GCEProviderSettings } from '../../../gce.settings';\n\nclass ViewState {\n constructor(public sessionAffinity: string) {}\n}\n\ninterface IListKeyedByAccount {\n [account: string]: string[];\n}\n\ninterface IPrivateScope extends IScope {\n $$destroyed: boolean;\n}\n\nclass InternalLoadBalancer implements IGceLoadBalancer {\n public name: string;\n public stack: string;\n public detail: string;\n public loadBalancerName: string;\n public ports: any;\n public ipProtocol = 'TCP';\n public loadBalancerType = 'INTERNAL';\n public credentials: string;\n public account: string;\n public project: string;\n public network = 'default';\n public subnet: string;\n public cloudProvider = 'gce';\n public backendService: IGceBackendService = { healthCheck: { healthCheckType: 'TCP' } } as IGceBackendService;\n\n constructor(public region: string) {}\n}\n\nclass InternalLoadBalancerCtrl extends CommonGceLoadBalancerCtrl implements IController {\n public pages: any = {\n location: require('./createLoadBalancerProperties.html'),\n listener: require('./listener.html'),\n healthCheck: require('../common/commonHealthCheckPage.html'),\n advancedSettings: require('../common/commonAdvancedSettingsPage.html'),\n };\n public sessionAffinityViewToModelMap: any = {\n None: 'NONE',\n 'Client IP': 'CLIENT_IP',\n 'Client IP and protocol': 'CLIENT_IP_PROTO',\n 'Client IP, port and protocol': 'CLIENT_IP_PORT_PROTO',\n };\n public accounts: ICredentials[];\n public regions: string[];\n public networks: IGceNetwork[];\n public networkOptions: string[];\n public subnets: IGceSubnet[];\n public subnetOptions: string[];\n public healthChecksByAccountAndType: { [account: string]: { [healthCheckType: string]: IGceHealthCheck[] } };\n\n // The 'by account' maps populate the corresponding 'existing names' lists below.\n public existingLoadBalancerNamesByAccount: IListKeyedByAccount;\n public existingHealthCheckNamesByAccount: IListKeyedByAccount;\n public existingLoadBalancerNames: string[];\n public existingHealthCheckNames: string[];\n\n public viewState: ViewState = new ViewState('None');\n public taskMonitor: any;\n\n private sessionAffinityModelToViewMap: any = _.invert(this.sessionAffinityViewToModelMap);\n\n public static $inject = [\n '$scope',\n 'application',\n '$uibModalInstance',\n 'loadBalancer',\n 'gceCommonLoadBalancerCommandBuilder',\n 'isNew',\n 'wizardSubFormValidation',\n 'gceXpnNamingService',\n '$state',\n ];\n constructor(\n public $scope: IPrivateScope,\n public application: Application,\n public $uibModalInstance: IModalInstanceService,\n private loadBalancer: InternalLoadBalancer,\n private gceCommonLoadBalancerCommandBuilder: GceCommonLoadBalancerCommandBuilder,\n private isNew: boolean,\n private wizardSubFormValidation: any,\n private gceXpnNamingService: any,\n $state: StateService,\n ) {\n super($scope, application, $uibModalInstance, $state);\n }\n\n public $onInit(): void {\n this.gceCommonLoadBalancerCommandBuilder\n .getBackingData(['existingLoadBalancerNamesByAccount', 'accounts', 'networks', 'subnets', 'healthChecks'])\n .then((backingData) => {\n if (!this.isNew) {\n this.initializeEditMode();\n } else {\n this.loadBalancer = new InternalLoadBalancer(\n GCEProviderSettings ? GCEProviderSettings.defaults.region : null,\n );\n }\n\n this.loadBalancer.loadBalancerName = this.getName(this.loadBalancer, this.application);\n\n const accountNames: string[] = backingData.accounts.map((account: IAccount) => account.name);\n if (accountNames.length && !accountNames.includes(this.loadBalancer.account)) {\n this.loadBalancer.credentials = accountNames[0];\n } else {\n this.loadBalancer.credentials = this.loadBalancer.account;\n }\n\n this.accounts = backingData.accounts;\n this.networks = backingData.networks;\n this.subnets = backingData.subnets;\n this.existingLoadBalancerNamesByAccount = backingData.existingLoadBalancerNamesByAccount;\n this.healthChecksByAccountAndType = this.gceCommonLoadBalancerCommandBuilder.groupHealthChecksByAccountAndType(\n backingData.healthChecks as IGceHealthCheck[],\n );\n\n // We don't count the load balancer's health check in the existing health checks list.\n const healthCheckNamesToOmit = this.isNew ? [] : [this.loadBalancer.backendService.healthCheck.name];\n this.existingHealthCheckNamesByAccount = this.gceCommonLoadBalancerCommandBuilder.groupHealthCheckNamesByAccount(\n backingData.healthChecks as IGceHealthCheck[],\n healthCheckNamesToOmit,\n );\n\n this.accountUpdated();\n\n this.wizardSubFormValidation\n .config({ scope: this.$scope, form: 'form' })\n .register({ page: 'location', subForm: 'locationForm' })\n .register({ page: 'listener', subForm: 'listenerForm' })\n .register({ page: 'healthCheck', subForm: 'healthCheckForm' })\n .register({ page: 'advancedSettings', subForm: 'advancedSettingsForm' });\n\n this.taskMonitor = new TaskMonitor({\n application: this.application,\n title: (this.isNew ? 'Creating ' : 'Updating ') + 'your load balancer',\n modalInstance: this.$uibModalInstance,\n onTaskComplete: () => this.onTaskComplete(this.loadBalancer),\n });\n });\n }\n\n public onHealthCheckRefresh(): void {\n this.gceCommonLoadBalancerCommandBuilder.getBackingData(['healthChecks']).then((data) => {\n this.healthChecksByAccountAndType = this.gceCommonLoadBalancerCommandBuilder.groupHealthChecksByAccountAndType(\n data.healthChecks as IGceHealthCheck[],\n );\n\n const healthCheckNamesToOmit = this.isNew ? [] : [this.loadBalancer.backendService.healthCheck.name];\n this.existingHealthCheckNamesByAccount = this.gceCommonLoadBalancerCommandBuilder.groupHealthCheckNamesByAccount(\n data.healthChecks as IGceHealthCheck[],\n healthCheckNamesToOmit,\n );\n });\n }\n\n public networkUpdated(): void {\n this.subnetOptions = this.subnets\n .filter((subnet) => {\n return (\n subnet.region === this.loadBalancer.region &&\n (subnet.account === this.loadBalancer.credentials || subnet.account === this.loadBalancer.account) &&\n subnet.network === this.loadBalancer.network\n );\n })\n .map((subnet) => subnet.id);\n\n if (!this.subnetOptions.includes(this.loadBalancer.subnet)) {\n this.loadBalancer.subnet = this.subnetOptions[0];\n }\n }\n\n public protocolUpdated(): void {\n if (this.loadBalancer.ipProtocol === 'UDP') {\n this.viewState = new ViewState('None');\n this.loadBalancer.backendService.sessionAffinity = 'NONE';\n }\n }\n\n public accountUpdated(): void {\n const existingHealthCheckNames = _.get<any, string[]>(this, [\n 'existingHealthCheckNamesByAccount',\n this.loadBalancer.credentials,\n ]);\n this.existingHealthCheckNames = existingHealthCheckNames || [];\n\n const existingLoadBalancerNames = _.get<any, string[]>(this, [\n 'existingLoadBalancerNamesByAccount',\n this.loadBalancer.credentials,\n ]);\n this.existingLoadBalancerNames = existingLoadBalancerNames || [];\n\n this.networkOptions = this.networks\n .filter((network: IGceNetwork) => network.account === this.loadBalancer.credentials)\n .map((network) => network.id);\n\n AccountService.getRegionsForAccount(this.loadBalancer.credentials).then((regions: IRegion[]) => {\n this.regions = regions.map((region: IRegion) => region.name);\n this.networkUpdated();\n });\n }\n\n public regionUpdated(): void {\n this.networkUpdated();\n }\n\n public updateName(): void {\n this.loadBalancer.loadBalancerName = this.getName(this.loadBalancer, this.application);\n }\n\n public setSessionAffinity(viewState: ViewState): void {\n this.loadBalancer.backendService.sessionAffinity = this.sessionAffinityViewToModelMap[viewState.sessionAffinity];\n }\n\n public submit(): void {\n const descriptor = this.isNew ? 'Create' : 'Update';\n const toSubmitLoadBalancer = _.cloneDeep(this.loadBalancer) as any;\n toSubmitLoadBalancer.ports = toSubmitLoadBalancer.ports.split(',').map((port: string) => port.trim());\n toSubmitLoadBalancer.cloudProvider = 'gce';\n toSubmitLoadBalancer.name = toSubmitLoadBalancer.loadBalancerName;\n toSubmitLoadBalancer.backendService.name = toSubmitLoadBalancer.loadBalancerName;\n delete toSubmitLoadBalancer.instances;\n\n this.taskMonitor.submit(() =>\n LoadBalancerWriter.upsertLoadBalancer(toSubmitLoadBalancer, this.application, descriptor, {\n healthCheck: {},\n }),\n );\n }\n\n private initializeEditMode(): void {\n this.loadBalancer.ports = this.loadBalancer.ports.join(', ');\n this.loadBalancer.subnet = this.gceXpnNamingService.decorateXpnResourceIfNecessary(\n this.loadBalancer.project,\n this.loadBalancer.subnet,\n );\n this.loadBalancer.network = this.gceXpnNamingService.decorateXpnResourceIfNecessary(\n this.loadBalancer.project,\n this.loadBalancer.network,\n );\n this.viewState = new ViewState(\n this.sessionAffinityModelToViewMap[this.loadBalancer.backendService.sessionAffinity],\n );\n }\n}\n\nexport const GCE_INTERNAL_LOAD_BALANCER_CTRL = 'spinnaker.gce.internalLoadBalancer.controller';\n\nmodule(GCE_INTERNAL_LOAD_BALANCER_CTRL, [\n GCE_HEALTH_CHECK_SELECTOR_COMPONENT,\n GCE_COMMON_LOAD_BALANCER_COMMAND_BUILDER,\n GOOGLE_COMMON_XPNNAMING_GCE_SERVICE,\n]).controller('gceInternalLoadBalancerCtrl', InternalLoadBalancerCtrl);\n","import type { StateService } from '@uirouter/angularjs';\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport type { IScope } from 'angular';\nimport { module } from 'angular';\nimport type { IModalInstanceService } from 'angular-ui-bootstrap';\n\nimport type { Application } from '@spinnaker/core';\nimport { TaskMonitor } from '@spinnaker/core';\n\nimport { GCE_CACHE_REFRESH } from '../../../cache/cacheRefresh.component';\nimport { GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULESBUTTON_COMPONENT } from '../../details/hostAndPathRules/hostAndPathRulesButton.component';\nimport type { IGceHttpLoadBalancer } from '../../../domain';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BACKENDSERVICE_BACKENDSERVICE_COMPONENT } from '../http/backendService/backendService.component';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BASICSETTINGS_BASICSETTINGS_COMPONENT } from '../http/basicSettings/basicSettings.component';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_COMMANDBUILDER_SERVICE } from '../http/commandBuilder.service';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HEALTHCHECK_HEALTHCHECK_COMPONENT } from '../http/healthCheck/healthCheck.component';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HOSTRULE_HOSTRULE_COMPONENT } from '../http/hostRule/hostRule.component';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HTTPLOADBALANCER_WRITE_SERVICE } from '../http/httpLoadBalancer.write.service';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_LISTENERS_LISTENER_COMPONENT } from '../http/listeners/listener.component';\nimport { BackendServiceTemplate, HealthCheckTemplate, HostRuleTemplate, ListenerTemplate } from '../http/templates';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_TRANSFORMER_SERVICE } from '../http/transformer.service';\n\nimport '../http/httpLoadBalancerWizard.component.less';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_INTERNAL_HTTP_CREATEHTTPLOADBALANCER_CONTROLLER =\n 'spinnaker.deck.gce.loadBalancer.createInternalHttp.controller';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_INTERNAL_HTTP_CREATEHTTPLOADBALANCER_CONTROLLER; // for backwards compatibility\n\nclass CreateInternalHttpLoadBalancerController implements ng.IComponentController {\n public taskMonitor: any;\n public command: any;\n public modalDescriptor: string;\n\n public pages = {\n location: require('../http/basicSettings/basicSettings.html'),\n listeners: require('../http/listeners/listeners.html'),\n defaultService: require('../http/defaultService/defaultService.html'),\n backendServices: require('../http/backendService/backendServices.html'),\n healthChecks: require('../http/healthCheck/healthChecks.html'),\n hostRules: require('../http/hostRule/hostRules.html'),\n };\n\n private keyToTemplateMap: { [key: string]: any } = {\n backendServices: BackendServiceTemplate,\n healthChecks: HealthCheckTemplate,\n hostRules: HostRuleTemplate,\n listeners: ListenerTemplate,\n };\n\n public static $inject = [\n '$scope',\n 'application',\n '$uibModalInstance',\n 'loadBalancer',\n 'gceHttpLoadBalancerCommandBuilder',\n 'isNew',\n 'wizardSubFormValidation',\n 'gceHttpLoadBalancerTransformer',\n 'gceHttpLoadBalancerWriter',\n '$state',\n ];\n\n constructor(\n public $scope: IScope,\n public application: Application,\n public $uibModalInstance: IModalInstanceService,\n private loadBalancer: IGceHttpLoadBalancer,\n private gceHttpLoadBalancerCommandBuilder: any,\n private isNew: boolean,\n private wizardSubFormValidation: any,\n private gceHttpLoadBalancerTransformer: any,\n private gceHttpLoadBalancerWriter: any,\n private $state: StateService,\n ) {\n this.modalDescriptor = this.isNew\n ? 'Create Internal HTTP(S) load balancer'\n : `Edit ${this.loadBalancer.name}:${this.loadBalancer.region}:${this.loadBalancer.account}`;\n\n const onTaskComplete = () => {\n application.loadBalancers.refresh();\n application.loadBalancers.onNextRefresh($scope, this.onApplicationRefresh.bind(this));\n };\n\n $scope.taskMonitor = this.taskMonitor = new TaskMonitor({\n application: this.application,\n title: (this.isNew ? 'Creating ' : 'Updating ') + 'your load balancer',\n modalInstance: this.$uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n }\n\n public $onInit(): void {\n this.gceHttpLoadBalancerCommandBuilder\n .buildCommand({ isNew: this.isNew, originalLoadBalancer: this.loadBalancer, isInternal: true })\n .then((command: any) => {\n this.command = command;\n this.wizardSubFormValidation\n .config({ scope: this.$scope, form: 'form' })\n .register({ page: 'location', subForm: 'location' })\n .register({\n page: 'listeners',\n subForm: 'listeners',\n validators: [\n {\n watchString: 'ctrl.command.loadBalancer.listeners',\n validator: (listeners: any[]) => listeners.length > 0,\n collection: true,\n },\n ],\n })\n .register({ page: 'default-service', subForm: 'defaultService' })\n .register({ page: 'health-checks', subForm: 'healthChecks' })\n .register({ page: 'backend-services', subForm: 'backendServices' })\n .register({ page: 'host-rules', subForm: 'hostRules' });\n });\n }\n\n public add(key: string): void {\n this.command.loadBalancer[key].push(new this.keyToTemplateMap[key]());\n }\n\n public remove(key: string, index: number): void {\n this.command.loadBalancer[key].splice(index, 1);\n }\n\n public cancel(): void {\n this.$uibModalInstance.dismiss();\n }\n\n public submit(): void {\n const serializedCommands = this.gceHttpLoadBalancerTransformer.serialize(this.command, this.loadBalancer);\n const descriptor = this.isNew ? 'Create' : 'Update';\n this.taskMonitor.submit(() =>\n this.gceHttpLoadBalancerWriter.upsertLoadBalancers(serializedCommands, this.application, descriptor),\n );\n }\n\n private onApplicationRefresh(): void {\n // If the user has already closed the modal, do not navigate to the new details view\n if (this.$scope.$$destroyed) {\n return;\n }\n this.$uibModalInstance.close();\n const lb = this.command.loadBalancer;\n const newStateParams = {\n name: lb.urlMapName,\n accountId: lb.credentials,\n region: lb.region,\n provider: 'gce',\n };\n\n if (!this.$state.includes('**.loadBalancerDetails')) {\n this.$state.go('.loadBalancerDetails', newStateParams);\n } else {\n this.$state.go('^.loadBalancerDetails', newStateParams);\n }\n }\n}\n\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_INTERNAL_HTTP_CREATEHTTPLOADBALANCER_CONTROLLER, [\n 'ui.bootstrap',\n UIROUTER_ANGULARJS,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BACKENDSERVICE_BACKENDSERVICE_COMPONENT,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_BASICSETTINGS_BASICSETTINGS_COMPONENT,\n GCE_CACHE_REFRESH,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_COMMANDBUILDER_SERVICE,\n GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULESBUTTON_COMPONENT,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HEALTHCHECK_HEALTHCHECK_COMPONENT,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HOSTRULE_HOSTRULE_COMPONENT,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HTTPLOADBALANCER_WRITE_SERVICE,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_LISTENERS_LISTENER_COMPONENT,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_TRANSFORMER_SERVICE,\n]).controller('gceCreateInternalHttpLoadBalancerCtrl', CreateInternalHttpLoadBalancerController);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_GCEREGIONSELECTFIELD_DIRECTIVE = 'spinnaker.google.regionSelectField.directive';\nexport const name = GOOGLE_GCEREGIONSELECTFIELD_DIRECTIVE; // for backwards compatibility\nmodule(GOOGLE_GCEREGIONSELECTFIELD_DIRECTIVE, []).directive('gceRegionSelectField', function () {\n return {\n restrict: 'E',\n templateUrl: require('./regionSelectField.directive.html'),\n scope: {\n regions: '=',\n component: '=',\n field: '@',\n account: '=',\n onChange: '&',\n labelColumns: '@',\n readOnly: '=',\n fieldColumns: '@',\n },\n };\n});\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { GCEProviderSettings } from '../gce.settings';\n\nexport const GOOGLE_LOADBALANCER_LOADBALANCER_TRANSFORMER = 'spinnaker.gce.loadBalancer.transformer';\nexport const name = GOOGLE_LOADBALANCER_LOADBALANCER_TRANSFORMER; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_LOADBALANCER_TRANSFORMER, []).factory('gceLoadBalancerTransformer', [\n '$q',\n function ($q) {\n function updateHealthCounts(container) {\n const instances = container.instances;\n const serverGroups = container.serverGroups || [container];\n container.instanceCounts = {\n up: instances.filter((instance) => {\n return instance.health[0].state === 'InService';\n }).length,\n down: instances.filter((instance) => {\n return instance.health[0].state === 'OutOfService';\n }).length,\n outOfService: serverGroups.reduce((acc, serverGroup) => {\n return (\n serverGroup.instances.filter((instance) => {\n return instance.healthState === 'OutOfService';\n }).length + acc\n );\n }, 0),\n };\n }\n\n function transformInstance(instance, loadBalancer) {\n instance.health = instance.health || {};\n instance.provider = loadBalancer.type;\n instance.account = loadBalancer.account;\n instance.region = loadBalancer.region;\n instance.health.type = 'LoadBalancer';\n instance.healthState = instance.health.state\n ? instance.health.state === 'InService'\n ? 'Up'\n : 'Down'\n : 'OutOfService';\n instance.health = [instance.health];\n instance.loadBalancers = [loadBalancer.name];\n }\n\n function normalizeLoadBalancer(loadBalancer) {\n loadBalancer.serverGroups.forEach(function (serverGroup) {\n serverGroup.account = loadBalancer.account;\n if (serverGroup.detachedInstances) {\n serverGroup.detachedInstances = serverGroup.detachedInstances.map(function (instanceId) {\n return { id: instanceId };\n });\n serverGroup.instances = serverGroup.instances.concat(serverGroup.detachedInstances);\n } else {\n serverGroup.detachedInstances = [];\n }\n\n serverGroup.instances.forEach(function (instance) {\n transformInstance(instance, loadBalancer);\n });\n updateHealthCounts(serverGroup);\n });\n const activeServerGroups = _.filter(loadBalancer.serverGroups, { isDisabled: false });\n loadBalancer.provider = loadBalancer.type;\n loadBalancer.instances = _.chain(activeServerGroups).map('instances').flatten().value();\n loadBalancer.detachedInstances = _.chain(activeServerGroups).map('detachedInstances').flatten().value();\n if (_.get(loadBalancer, 'backendService.healthCheck')) {\n loadBalancer.backendService.healthCheck.timeout = loadBalancer.backendService.healthCheck.timeoutSec;\n loadBalancer.backendService.healthCheck.interval = loadBalancer.backendService.healthCheck.checkIntervalSec;\n }\n updateHealthCounts(loadBalancer);\n return $q.when(loadBalancer);\n }\n\n function convertLoadBalancerForEditing(loadBalancer) {\n const toEdit = {\n provider: 'gce',\n region: loadBalancer.region,\n credentials: loadBalancer.account,\n listeners: [],\n name: loadBalancer.name,\n regionZones: loadBalancer.availabilityZones,\n };\n\n if (loadBalancer.elb) {\n const elb = loadBalancer.elb;\n\n toEdit.vpcId = elb.vpcid;\n\n if (elb.listenerDescriptions) {\n toEdit.listeners = elb.listenerDescriptions.map(function (description) {\n const listener = description.listener;\n return {\n protocol: listener.protocol,\n portRange: listener.loadBalancerPort,\n healthCheck: elb.healthCheck !== undefined,\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 = loadBalancer.elb.healthCheck.target;\n const protocolIndex = healthCheck.indexOf(':');\n const pathIndex = healthCheck.indexOf('/');\n\n if (protocolIndex !== -1 && pathIndex !== -1) {\n toEdit.healthCheckProtocol = healthCheck.substring(0, protocolIndex);\n toEdit.healthCheckPort = healthCheck.substring(protocolIndex + 1, pathIndex);\n toEdit.healthCheckPath = healthCheck.substring(pathIndex);\n if (!isNaN(toEdit.healthCheckPort)) {\n toEdit.healthCheckPort = Number(toEdit.healthCheckPort);\n }\n }\n } else {\n toEdit.healthCheckProtocol = 'HTTP';\n toEdit.healthCheckPort = 80;\n toEdit.healthCheckPath = '/';\n toEdit.healthTimeout = 5;\n toEdit.healthInterval = 10;\n toEdit.healthyThreshold = 10;\n toEdit.unhealthyThreshold = 2;\n }\n\n toEdit.sessionAffinity = loadBalancer.sessionAffinity || 'None';\n }\n return toEdit;\n }\n\n function constructNewLoadBalancerTemplate() {\n return {\n provider: 'gce',\n stack: '',\n detail: '',\n credentials: GCEProviderSettings.defaults.account,\n region: GCEProviderSettings.defaults.region,\n healthCheckProtocol: 'HTTP',\n healthCheckPort: 80,\n healthCheckPath: '/',\n healthTimeout: 5,\n healthInterval: 10,\n healthyThreshold: 10,\n unhealthyThreshold: 2,\n sessionAffinity: 'NONE',\n regionZones: [],\n listeners: [\n {\n protocol: 'TCP',\n portRange: '8080',\n healthCheck: true,\n },\n ],\n };\n }\n\n return {\n normalizeLoadBalancer: normalizeLoadBalancer,\n convertLoadBalancerForEditing: convertLoadBalancerForEditing,\n constructNewLoadBalancerTemplate: constructNewLoadBalancerTemplate,\n };\n },\n]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\n\nimport { AccountService, LoadBalancerWriter, ModalWizard, TaskMonitor } from '@spinnaker/core';\n\nimport { GOOGLE_GCEREGIONSELECTFIELD_DIRECTIVE } from '../../../gceRegionSelectField.directive';\nimport { GOOGLE_LOADBALANCER_LOADBALANCER_TRANSFORMER } from '../../loadBalancer.transformer';\n\nexport const GOOGLE_LOADBALANCER_CONFIGURE_NETWORK_CREATELOADBALANCER_CONTROLLER =\n 'spinnaker.loadBalancer.gce.create.controller';\nexport const name = GOOGLE_LOADBALANCER_CONFIGURE_NETWORK_CREATELOADBALANCER_CONTROLLER; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_CONFIGURE_NETWORK_CREATELOADBALANCER_CONTROLLER, [\n UIROUTER_ANGULARJS,\n GOOGLE_LOADBALANCER_LOADBALANCER_TRANSFORMER,\n GOOGLE_GCEREGIONSELECTFIELD_DIRECTIVE,\n]).controller('gceCreateLoadBalancerCtrl', [\n '$scope',\n '$uibModalInstance',\n '$state',\n 'gceLoadBalancerTransformer',\n 'application',\n 'loadBalancer',\n 'isNew',\n function ($scope, $uibModalInstance, $state, gceLoadBalancerTransformer, application, loadBalancer, isNew) {\n const ctrl = this;\n\n $scope.isNew = isNew;\n\n $scope.pages = {\n location: require('./createLoadBalancerProperties.html'),\n listeners: require('./listeners.html'),\n healthCheck: require('./healthCheck.html'),\n advancedSettings: require('./advancedSettings.html'),\n };\n\n $scope.state = {\n accountsLoaded: false,\n submitting: false,\n };\n\n $scope.sessionAffinityOptions = [\n { value: 'NONE', name: 'None' },\n { value: 'CLIENT_IP', name: 'Client IP' },\n { value: 'CLIENT_IP_PROTO', name: 'Client IP and protocol' },\n ];\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n $uibModalInstance.close();\n const newStateParams = {\n name: $scope.loadBalancer.name,\n accountId: $scope.loadBalancer.credentials,\n region: $scope.loadBalancer.region,\n provider: 'gce',\n };\n if (!$state.includes('**.loadBalancerDetails')) {\n $state.go('.loadBalancerDetails', newStateParams);\n } else {\n $state.go('^.loadBalancerDetails', newStateParams);\n }\n }\n\n function onTaskComplete() {\n application.loadBalancers.refresh();\n application.loadBalancers.onNextRefresh($scope, onApplicationRefresh);\n }\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: (isNew ? 'Creating ' : 'Updating ') + 'your load balancer',\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n function initializeEditMode() {}\n\n function initializeCreateMode() {\n AccountService.listAccounts('gce').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accountsLoaded = true;\n\n const accountNames = _.map($scope.accounts, 'name');\n if (accountNames.length && !accountNames.includes($scope.loadBalancer.credentials)) {\n $scope.loadBalancer.credentials = accountNames[0];\n }\n\n ctrl.accountUpdated();\n });\n }\n\n function updateLoadBalancerNames() {\n const account = $scope.loadBalancer.credentials;\n\n const accountLoadBalancersByRegion = {};\n application\n .getDataSource('loadBalancers')\n .refresh(true)\n .then(() => {\n application.getDataSource('loadBalancers').data.forEach((loadBalancer) => {\n if (loadBalancer.account === account) {\n accountLoadBalancersByRegion[loadBalancer.region] =\n accountLoadBalancersByRegion[loadBalancer.region] || [];\n accountLoadBalancersByRegion[loadBalancer.region].push(loadBalancer.name);\n }\n });\n\n $scope.existingLoadBalancerNames = _.flatten(_.map(accountLoadBalancersByRegion));\n });\n }\n\n // initialize controller\n if (loadBalancer) {\n $scope.loadBalancer = gceLoadBalancerTransformer.convertLoadBalancerForEditing(loadBalancer);\n initializeEditMode();\n } else {\n $scope.loadBalancer = gceLoadBalancerTransformer.constructNewLoadBalancerTemplate();\n updateLoadBalancerNames();\n initializeCreateMode();\n }\n\n // Controller API\n\n this.requiresHealthCheckPath = function () {\n return $scope.loadBalancer.healthCheckProtocol && $scope.loadBalancer.healthCheckProtocol.indexOf('HTTP') === 0;\n };\n\n this.prependForwardSlash = (text) => {\n return text && text.indexOf('/') !== 0 ? `/${text}` : text;\n };\n\n this.updateName = function () {\n $scope.loadBalancer.name = this.getName();\n };\n\n this.getName = function () {\n const loadBalancer = $scope.loadBalancer;\n const loadBalancerName = [application.name, loadBalancer.stack || '', loadBalancer.detail || ''].join('-');\n return _.trimEnd(loadBalancerName, '-');\n };\n\n this.accountUpdated = function () {\n AccountService.getRegionsForAccount($scope.loadBalancer.credentials).then(function (regions) {\n if (_.isArray(regions)) {\n $scope.regions = _.map(regions, 'name');\n } else {\n // TODO(duftler): Remove this once we finish deprecating the old style regions/zones in clouddriver GCE credentials.\n $scope.regions = _.keys(regions);\n }\n ctrl.regionUpdated();\n });\n };\n\n this.regionUpdated = function () {\n updateLoadBalancerNames();\n ctrl.updateName();\n };\n\n this.setVisibilityHealthCheckTab = function () {\n const wizard = ModalWizard;\n\n if ($scope.loadBalancer.listeners[0].healthCheck) {\n wizard.includePage('Health Check');\n wizard.markIncomplete('Health Check');\n wizard.includePage('Advanced Settings');\n wizard.markIncomplete('Advanced Settings');\n } else {\n wizard.excludePage('Health Check');\n wizard.markComplete('Health Check');\n wizard.excludePage('Advanced Settings');\n wizard.markComplete('Advanced Settings');\n wizard.markComplete('Listener');\n }\n };\n\n this.submit = function () {\n const descriptor = isNew ? 'Create' : 'Update';\n\n $scope.taskMonitor.submit(function () {\n const params = {\n cloudProvider: 'gce',\n loadBalancerName: $scope.loadBalancer.name,\n };\n\n if ($scope.loadBalancer.listeners && $scope.loadBalancer.listeners.length > 0) {\n const listener = $scope.loadBalancer.listeners[0];\n\n if (listener.protocol) {\n params.ipProtocol = listener.protocol;\n }\n\n if (listener.portRange) {\n params.portRange = listener.portRange;\n }\n\n if (listener.healthCheck) {\n params.healthCheck = {\n port: $scope.loadBalancer.healthCheckPort,\n requestPath: $scope.loadBalancer.healthCheckPath,\n timeoutSec: $scope.loadBalancer.healthTimeout,\n checkIntervalSec: $scope.loadBalancer.healthInterval,\n healthyThreshold: $scope.loadBalancer.healthyThreshold,\n unhealthyThreshold: $scope.loadBalancer.unhealthyThreshold,\n };\n } else {\n params.healthCheck = null;\n }\n\n params.sessionAffinity = $scope.loadBalancer.sessionAffinity;\n }\n\n return LoadBalancerWriter.upsertLoadBalancer($scope.loadBalancer, application, descriptor, params);\n });\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n },\n]);\n","import type { StateService } from '@uirouter/angularjs';\nimport type { IController, IScope } from 'angular';\nimport { module } from 'angular';\nimport type { IModalInstanceService } from 'angular-ui-bootstrap';\nimport _ from 'lodash';\n\nimport type {\n Application,\n IAccount,\n ICredentials,\n IInstance,\n ILoadBalancerUpsertCommand,\n IRegion,\n} from '@spinnaker/core';\nimport { AccountService, LoadBalancerWriter, TaskMonitor } from '@spinnaker/core';\n\nimport { CommonGceLoadBalancerCtrl } from '../common/commonLoadBalancer.controller';\nimport type { GceCommonLoadBalancerCommandBuilder } from '../common/commonLoadBalancerCommandBuilder.service';\nimport { GCE_COMMON_LOAD_BALANCER_COMMAND_BUILDER } from '../common/commonLoadBalancerCommandBuilder.service';\nimport { GCE_HEALTH_CHECK_SELECTOR_COMPONENT } from '../common/healthCheck.component';\nimport type { IGceBackendService, IGceHealthCheck, IGceLoadBalancer } from '../../../domain/index';\nimport { GCEProviderSettings } from '../../../gce.settings';\n\nclass ViewState {\n constructor(public sessionAffinity: string) {}\n}\n\ninterface IListKeyedByAccount {\n [account: string]: string[];\n}\n\ninterface ISslLoadBalancerUpsertDescription extends ILoadBalancerUpsertCommand {\n backendService: IGceBackendService;\n loadBalancerName: string;\n instances: IInstance[];\n}\n\nclass SslLoadBalancer implements IGceLoadBalancer {\n public stack: string;\n public detail: string;\n public loadBalancerName: string;\n public portRange = '443';\n public ipProtocol = 'TCP';\n public instances: IInstance[];\n public loadBalancerType = 'SSL';\n public credentials: string;\n public account: string;\n public certificate: string;\n public backendService: IGceBackendService = { healthCheck: { healthCheckType: 'TCP' } } as IGceBackendService;\n public cloudProvider: string;\n public name: string;\n constructor(public region = 'global') {}\n}\n\nclass SslLoadBalancerCtrl extends CommonGceLoadBalancerCtrl implements IController {\n public pages: any = {\n location: require('./createLoadBalancerProperties.html'),\n listener: require('./listener.html'),\n healthCheck: require('../common/commonHealthCheckPage.html'),\n advancedSettings: require('../common/commonAdvancedSettingsPage.html'),\n backendService: require('./backendService.html'),\n };\n public sessionAffinityViewToModelMap: any = {\n None: 'NONE',\n 'Client IP': 'CLIENT_IP',\n 'Generated Cookie': 'GENERATED_COOKIE',\n };\n public accounts: ICredentials[];\n public regions: string[];\n public certificateWrappers: any[];\n public healthChecksByAccountAndType: { [account: string]: { [healthCheckType: string]: IGceHealthCheck[] } };\n public portOptions: string[] = ['25', '43', '110', '143', '195', '443', '465', '587', '700', '993', '995'];\n\n // The 'by account' maps populate the corresponding 'existing names' lists below.\n public existingLoadBalancerNamesByAccount: IListKeyedByAccount;\n public existingHealthCheckNamesByAccount: IListKeyedByAccount;\n public existingLoadBalancerNames: string[];\n public existingHealthCheckNames: string[];\n\n public viewState: ViewState = new ViewState('None');\n public maxCookieTtl = 60 * 60 * 24; // One day.\n public taskMonitor: any;\n public hasBackendService = true;\n\n private sessionAffinityModelToViewMap: any = _.invert(this.sessionAffinityViewToModelMap);\n\n public static $inject = [\n '$scope',\n 'application',\n '$uibModalInstance',\n 'loadBalancer',\n 'gceCommonLoadBalancerCommandBuilder',\n 'isNew',\n 'wizardSubFormValidation',\n '$state',\n ];\n constructor(\n public $scope: IScope,\n public application: Application,\n public $uibModalInstance: IModalInstanceService,\n private loadBalancer: SslLoadBalancer,\n private gceCommonLoadBalancerCommandBuilder: GceCommonLoadBalancerCommandBuilder,\n private isNew: boolean,\n private wizardSubFormValidation: any,\n $state: StateService,\n ) {\n super($scope, application, $uibModalInstance, $state);\n }\n\n public $onInit(): void {\n this.gceCommonLoadBalancerCommandBuilder\n .getBackingData(['existingLoadBalancerNamesByAccount', 'accounts', 'healthChecks', 'certificates'])\n .then((backingData) => {\n if (!this.isNew) {\n this.initializeEditMode();\n } else {\n this.loadBalancer = new SslLoadBalancer(GCEProviderSettings ? GCEProviderSettings.defaults.region : null);\n }\n\n this.loadBalancer.loadBalancerName = this.getName(this.loadBalancer, this.application);\n\n const accountNames: string[] = backingData.accounts.map((account: IAccount) => account.name);\n if (accountNames.length && !accountNames.includes(this.loadBalancer.account)) {\n this.loadBalancer.credentials = accountNames[0];\n } else {\n this.loadBalancer.credentials = this.loadBalancer.account;\n }\n\n this.accounts = backingData.accounts;\n this.certificateWrappers = backingData.certificates as any[];\n this.existingLoadBalancerNamesByAccount = backingData.existingLoadBalancerNamesByAccount;\n this.healthChecksByAccountAndType = this.gceCommonLoadBalancerCommandBuilder.groupHealthChecksByAccountAndType(\n backingData.healthChecks as IGceHealthCheck[],\n );\n\n // We don't count the load balancer's health check in the existing health checks list.\n const healthCheckNamesToOmit = this.isNew ? [] : [this.loadBalancer.backendService.healthCheck.name];\n this.existingHealthCheckNamesByAccount = this.gceCommonLoadBalancerCommandBuilder.groupHealthCheckNamesByAccount(\n backingData.healthChecks as IGceHealthCheck[],\n healthCheckNamesToOmit,\n );\n\n this.accountUpdated();\n\n this.wizardSubFormValidation\n .config({ scope: this.$scope, form: 'form' })\n .register({ page: 'location', subForm: 'locationForm' })\n .register({ page: 'listener', subForm: 'listenerForm' })\n .register({ page: 'healthCheck', subForm: 'healthCheckForm' })\n .register({ page: 'advancedSettings', subForm: 'advancedSettingsForm' });\n\n this.taskMonitor = new TaskMonitor({\n application: this.application,\n title: (this.isNew ? 'Creating ' : 'Updating ') + 'your load balancer',\n modalInstance: this.$uibModalInstance,\n onTaskComplete: () => this.onTaskComplete(this.loadBalancer),\n });\n });\n }\n\n public onHealthCheckRefresh(): void {\n this.gceCommonLoadBalancerCommandBuilder.getBackingData(['healthChecks']).then((data) => {\n this.healthChecksByAccountAndType = this.gceCommonLoadBalancerCommandBuilder.groupHealthChecksByAccountAndType(\n data.healthChecks as IGceHealthCheck[],\n );\n\n const healthCheckNamesToOmit = this.isNew ? [] : [this.loadBalancer.backendService.healthCheck.name];\n this.existingHealthCheckNamesByAccount = this.gceCommonLoadBalancerCommandBuilder.groupHealthCheckNamesByAccount(\n data.healthChecks as IGceHealthCheck[],\n healthCheckNamesToOmit,\n );\n });\n }\n\n public onCertificateRefresh(): void {\n this.gceCommonLoadBalancerCommandBuilder.getBackingData(['certificates']).then((data) => {\n this.certificateWrappers = data.certificates as any[];\n });\n }\n\n public accountUpdated(): void {\n const existingHealthCheckNames = _.get<any, string[]>(this, [\n 'existingHealthCheckNamesByAccount',\n this.loadBalancer.credentials,\n ]);\n this.existingHealthCheckNames = existingHealthCheckNames || [];\n\n const existingLoadBalancerNames = _.get<any, string[]>(this, [\n 'existingLoadBalancerNamesByAccount',\n this.loadBalancer.credentials,\n ]);\n this.existingLoadBalancerNames = existingLoadBalancerNames || [];\n\n AccountService.getRegionsForAccount(this.loadBalancer.credentials).then((regions: IRegion[]) => {\n this.regions = regions.map((region: IRegion) => region.name);\n });\n }\n\n public updateName(): void {\n this.loadBalancer.loadBalancerName = this.getName(this.loadBalancer, this.application);\n }\n\n public setSessionAffinity(viewState: ViewState): void {\n this.loadBalancer.backendService.sessionAffinity = this.sessionAffinityViewToModelMap[viewState.sessionAffinity];\n }\n\n public submit(): void {\n const descriptor = this.isNew ? 'Create' : 'Update';\n const toSubmitLoadBalancer = _.cloneDeep(this.loadBalancer) as ISslLoadBalancerUpsertDescription;\n toSubmitLoadBalancer.name = toSubmitLoadBalancer.loadBalancerName;\n toSubmitLoadBalancer.backendService.name = toSubmitLoadBalancer.loadBalancerName;\n toSubmitLoadBalancer.cloudProvider = 'gce';\n delete toSubmitLoadBalancer.instances;\n\n this.taskMonitor.submit(() =>\n LoadBalancerWriter.upsertLoadBalancer(toSubmitLoadBalancer, this.application, descriptor, {\n healthCheck: {},\n }),\n );\n }\n\n private initializeEditMode(): void {\n this.loadBalancer.portRange = this.loadBalancer.portRange.split('-')[0];\n this.loadBalancer.certificate = this.loadBalancer.certificate.split('/').pop();\n this.viewState = new ViewState(\n this.sessionAffinityModelToViewMap[this.loadBalancer.backendService.sessionAffinity],\n );\n }\n}\n\nexport const GCE_SSL_LOAD_BALANCER_CTRL = 'spinnaker.gce.sslLoadBalancer.controller';\n\nmodule(GCE_SSL_LOAD_BALANCER_CTRL, [\n GCE_HEALTH_CHECK_SELECTOR_COMPONENT,\n GCE_COMMON_LOAD_BALANCER_COMMAND_BUILDER,\n]).controller('gceSslLoadBalancerCtrl', SslLoadBalancerCtrl);\n","import type { StateService } from '@uirouter/angularjs';\nimport type { IScope } from 'angular';\nimport { module } from 'angular';\nimport type { IModalInstanceService } from 'angular-ui-bootstrap';\nimport _ from 'lodash';\n\nimport type {\n Application,\n IAccount,\n ICredentials,\n IInstance,\n ILoadBalancerUpsertCommand,\n IRegion,\n} from '@spinnaker/core';\nimport { AccountService, LoadBalancerWriter, TaskMonitor } from '@spinnaker/core';\n\nimport { CommonGceLoadBalancerCtrl } from '../common/commonLoadBalancer.controller';\nimport type { GceCommonLoadBalancerCommandBuilder } from '../common/commonLoadBalancerCommandBuilder.service';\nimport { GCE_COMMON_LOAD_BALANCER_COMMAND_BUILDER } from '../common/commonLoadBalancerCommandBuilder.service';\nimport { GCE_HEALTH_CHECK_SELECTOR_COMPONENT } from '../common/healthCheck.component';\nimport type { IGceBackendService, IGceHealthCheck, IGceLoadBalancer } from '../../../domain/index';\nimport { GCEProviderSettings } from '../../../gce.settings';\n\nclass ViewState {\n constructor(public sessionAffinity: string) {}\n}\n\ninterface IListKeyedByAccount {\n [account: string]: string[];\n}\n\ninterface ITcpLoadBalancerUpsertDescription extends ILoadBalancerUpsertCommand {\n backendService: IGceBackendService;\n loadBalancerName: string;\n instances: IInstance[];\n}\n\nclass TcpLoadBalancer implements IGceLoadBalancer {\n public stack: string;\n public detail: string;\n public loadBalancerName: string;\n public portRange = '443';\n public ipProtocol = 'TCP';\n public instances: IInstance[];\n public loadBalancerType = 'TCP';\n public credentials: string;\n public account: string;\n public backendService: IGceBackendService = { healthCheck: { healthCheckType: 'TCP' } } as IGceBackendService;\n public cloudProvider: string;\n public name: string;\n constructor(public region = 'global') {}\n}\n\nclass TcpLoadBalancerCtrl extends CommonGceLoadBalancerCtrl implements ng.IComponentController {\n public pages: any = {\n location: require('./createLoadBalancerProperties.html'),\n listener: require('./listener.html'),\n healthCheck: require('../common/commonHealthCheckPage.html'),\n advancedSettings: require('../common/commonAdvancedSettingsPage.html'),\n backendService: require('./backendService.html'),\n };\n public sessionAffinityViewToModelMap: any = {\n None: 'NONE',\n 'Client IP': 'CLIENT_IP',\n 'Generated Cookie': 'GENERATED_COOKIE',\n };\n public accounts: ICredentials[];\n public regions: string[];\n public healthChecksByAccountAndType: { [account: string]: { [healthCheckType: string]: IGceHealthCheck[] } };\n public portOptions: string[] = ['25', '43', '110', '143', '195', '443', '465', '587', '700', '993', '995'];\n\n // The 'by account' maps populate the corresponding 'existing names' lists below.\n public existingLoadBalancerNamesByAccount: IListKeyedByAccount;\n public existingHealthCheckNamesByAccount: IListKeyedByAccount;\n public existingLoadBalancerNames: string[];\n public existingHealthCheckNames: string[];\n\n public viewState: ViewState = new ViewState('None');\n public maxCookieTtl = 60 * 60 * 24; // One day.\n public taskMonitor: any;\n public hasBackendService = true;\n\n private sessionAffinityModelToViewMap: any = _.invert(this.sessionAffinityViewToModelMap);\n\n public static $inject = [\n '$scope',\n 'application',\n '$uibModalInstance',\n 'loadBalancer',\n 'gceCommonLoadBalancerCommandBuilder',\n 'isNew',\n 'wizardSubFormValidation',\n '$state',\n ];\n constructor(\n public $scope: IScope,\n public application: Application,\n public $uibModalInstance: IModalInstanceService,\n private loadBalancer: TcpLoadBalancer,\n private gceCommonLoadBalancerCommandBuilder: GceCommonLoadBalancerCommandBuilder,\n private isNew: boolean,\n private wizardSubFormValidation: any,\n $state: StateService,\n ) {\n super($scope, application, $uibModalInstance, $state);\n }\n\n public $onInit(): void {\n this.gceCommonLoadBalancerCommandBuilder\n .getBackingData(['existingLoadBalancerNamesByAccount', 'accounts', 'healthChecks'])\n .then((backingData) => {\n if (!this.isNew) {\n this.initializeEditMode();\n } else {\n this.loadBalancer = new TcpLoadBalancer(GCEProviderSettings ? GCEProviderSettings.defaults.region : null);\n }\n\n this.loadBalancer.loadBalancerName = this.getName(this.loadBalancer, this.application);\n\n const accountNames: string[] = backingData.accounts.map((account: IAccount) => account.name);\n if (accountNames.length && !accountNames.includes(this.loadBalancer.account)) {\n this.loadBalancer.credentials = accountNames[0];\n } else {\n this.loadBalancer.credentials = this.loadBalancer.account;\n }\n\n this.accounts = backingData.accounts;\n this.existingLoadBalancerNamesByAccount = backingData.existingLoadBalancerNamesByAccount;\n this.healthChecksByAccountAndType = this.gceCommonLoadBalancerCommandBuilder.groupHealthChecksByAccountAndType(\n backingData.healthChecks as IGceHealthCheck[],\n );\n\n // We don't count the load balancer's health check in the existing health checks list.\n const healthCheckNamesToOmit = this.isNew ? [] : [this.loadBalancer.backendService.healthCheck.name];\n this.existingHealthCheckNamesByAccount = this.gceCommonLoadBalancerCommandBuilder.groupHealthCheckNamesByAccount(\n backingData.healthChecks as IGceHealthCheck[],\n healthCheckNamesToOmit,\n );\n\n this.accountUpdated();\n\n this.wizardSubFormValidation\n .config({ scope: this.$scope, form: 'form' })\n .register({ page: 'location', subForm: 'locationForm' })\n .register({ page: 'listener', subForm: 'listenerForm' })\n .register({ page: 'healthCheck', subForm: 'healthCheckForm' })\n .register({ page: 'advancedSettings', subForm: 'advancedSettingsForm' });\n\n this.taskMonitor = new TaskMonitor({\n application: this.application,\n title: (this.isNew ? 'Creating ' : 'Updating ') + 'your load balancer',\n modalInstance: this.$uibModalInstance,\n onTaskComplete: () => this.onTaskComplete(this.loadBalancer),\n });\n });\n }\n\n public onHealthCheckRefresh(): void {\n this.gceCommonLoadBalancerCommandBuilder.getBackingData(['healthChecks']).then((data) => {\n this.healthChecksByAccountAndType = this.gceCommonLoadBalancerCommandBuilder.groupHealthChecksByAccountAndType(\n data.healthChecks as IGceHealthCheck[],\n );\n\n const healthCheckNamesToOmit = this.isNew ? [] : [this.loadBalancer.backendService.healthCheck.name];\n this.existingHealthCheckNamesByAccount = this.gceCommonLoadBalancerCommandBuilder.groupHealthCheckNamesByAccount(\n data.healthChecks as IGceHealthCheck[],\n healthCheckNamesToOmit,\n );\n });\n }\n\n public accountUpdated(): void {\n const existingHealthCheckNames = _.get<any, string[]>(this, [\n 'existingHealthCheckNamesByAccount',\n this.loadBalancer.credentials,\n ]);\n this.existingHealthCheckNames = existingHealthCheckNames || [];\n\n const existingLoadBalancerNames = _.get<any, string[]>(this, [\n 'existingLoadBalancerNamesByAccount',\n this.loadBalancer.credentials,\n ]);\n this.existingLoadBalancerNames = existingLoadBalancerNames || [];\n\n AccountService.getRegionsForAccount(this.loadBalancer.credentials).then((regions: IRegion[]) => {\n this.regions = regions.map((region: IRegion) => region.name);\n });\n }\n\n public updateName(): void {\n this.loadBalancer.loadBalancerName = this.getName(this.loadBalancer, this.application);\n }\n\n public setSessionAffinity(viewState: ViewState): void {\n this.loadBalancer.backendService.sessionAffinity = this.sessionAffinityViewToModelMap[viewState.sessionAffinity];\n }\n\n public submit(): void {\n const descriptor = this.isNew ? 'Create' : 'Update';\n const toSubmitLoadBalancer = _.cloneDeep(this.loadBalancer) as ITcpLoadBalancerUpsertDescription;\n toSubmitLoadBalancer.name = toSubmitLoadBalancer.loadBalancerName;\n toSubmitLoadBalancer.backendService.name = toSubmitLoadBalancer.loadBalancerName;\n toSubmitLoadBalancer.cloudProvider = 'gce';\n delete toSubmitLoadBalancer.instances;\n\n this.taskMonitor.submit(() =>\n LoadBalancerWriter.upsertLoadBalancer(toSubmitLoadBalancer, this.application, descriptor, {\n healthCheck: {},\n }),\n );\n }\n\n private initializeEditMode(): void {\n this.loadBalancer.portRange = this.loadBalancer.portRange.split('-')[0];\n this.viewState = new ViewState(\n this.sessionAffinityModelToViewMap[this.loadBalancer.backendService.sessionAffinity],\n );\n }\n}\n\nexport const GCE_TCP_LOAD_BALANCER_CTRL = 'spinnaker.gce.tcpLoadBalancer.controller';\n\nmodule(GCE_TCP_LOAD_BALANCER_CTRL, [\n GCE_HEALTH_CHECK_SELECTOR_COMPONENT,\n GCE_COMMON_LOAD_BALANCER_COMMAND_BUILDER,\n]).controller('gceTcpLoadBalancerCtrl', TcpLoadBalancerCtrl);\n","import { module } from 'angular';\n\nconst gceBackendServiceDetailsComponent: ng.IComponentOptions = {\n bindings: {\n backendService: '<',\n },\n template: `\n <dt>Name</dt>\n <dd>{{$ctrl.backendService.name}}</dd>\n <dt>Health Check</dt>\n <dd>{{$ctrl.backendService.healthCheck.name}}</dd>\n <dt ng-if=\"$ctrl.backendService.sessionAffinity\">Session Affinity</dt>\n <dd ng-if=\"$ctrl.backendService.sessionAffinity\">{{$ctrl.backendService.sessionAffinity | gceSessionAffinityFilter}}</dd>\n <dt ng-if=\"$ctrl.backendService.sessionAffinity === 'GENERATED_COOKIE'\">Affinity Cookie TTL</dt>\n <dd ng-if=\"$ctrl.backendService.sessionAffinity === 'GENERATED_COOKIE'\">{{$ctrl.backendService.affinityCookieTtlSec}}</dd>`,\n};\n\nexport const GCE_BACKEND_SERVICE_DETAILS_COMPONENT =\n 'spinnaker.gce.loadBalancer.details.backendServiceDetails.component';\nmodule(GCE_BACKEND_SERVICE_DETAILS_COMPONENT, []).component(\n 'gceBackendServiceDetails',\n gceBackendServiceDetailsComponent,\n);\n","import { module } from 'angular';\nimport { sessionAffinityModelToViewMap } from '../../configure/common/sessionAffinityNameMaps';\n\nfunction gceSessionAffinityFilter() {\n return function (modelValue: string): string {\n return sessionAffinityModelToViewMap[modelValue] || modelValue;\n };\n}\n\nexport const SESSION_AFFINITY_FILTER = 'spinnaker.gce.loadBalancer.details.sessionAffinity.filter';\nmodule(SESSION_AFFINITY_FILTER, []).filter('gceSessionAffinityFilter', gceSessionAffinityFilter);\n","import type { IController } from 'angular';\nimport { module } from 'angular';\nimport type { IModalInstanceService } from 'angular-ui-bootstrap';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\n\nimport type { Application, ILoadBalancerDeleteCommand } from '@spinnaker/core';\nimport { LoadBalancerWriter, TaskMonitor } from '@spinnaker/core';\n\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HTTPLOADBALANCER_WRITE_SERVICE } from '../../configure/http/httpLoadBalancer.write.service';\nimport type { GceHttpLoadBalancerUtils } from '../../httpLoadBalancerUtils.service';\nimport { GCE_HTTP_LOAD_BALANCER_UTILS } from '../../httpLoadBalancerUtils.service';\n\nclass Verification {\n public verified = false;\n}\n\nclass Params {\n public deleteHealthChecks = false;\n}\n\ninterface IGoogleLoadBalancerDeleteOperation extends ILoadBalancerDeleteCommand {\n region: string;\n accountName: string;\n deleteHealthChecks: boolean;\n loadBalancerType: string;\n}\n\nclass DeleteLoadBalancerModalController implements IController {\n public verification: Verification = new Verification();\n public params: Params = new Params();\n public taskMonitor: any;\n\n public static $inject = [\n 'application',\n 'gceHttpLoadBalancerUtils',\n 'gceHttpLoadBalancerWriter',\n 'loadBalancer',\n '$uibModalInstance',\n ];\n constructor(\n private application: Application,\n private gceHttpLoadBalancerUtils: GceHttpLoadBalancerUtils,\n private gceHttpLoadBalancerWriter: any,\n private loadBalancer: any,\n private $uibModalInstance: IModalInstanceService,\n ) {}\n\n public $onInit(): void {\n const taskMonitorConfig = {\n application: this.application,\n title: 'Deleting ' + this.loadBalancer.name,\n modalInstance: this.$uibModalInstance,\n };\n\n this.taskMonitor = new TaskMonitor(taskMonitorConfig);\n }\n\n public isValid(): boolean {\n return this.verification.verified;\n }\n\n public submit(): void {\n this.taskMonitor.submit(this.getSubmitMethod());\n }\n\n public cancel(): void {\n this.$uibModalInstance.dismiss();\n }\n\n public hasHealthChecks(): boolean {\n if (this.gceHttpLoadBalancerUtils.isHttpLoadBalancer(this.loadBalancer)) {\n return true;\n } else {\n return !!this.loadBalancer.healthCheck;\n }\n }\n\n private getSubmitMethod(): () => PromiseLike<any> {\n if (this.gceHttpLoadBalancerUtils.isHttpLoadBalancer(this.loadBalancer)) {\n return () => {\n return this.gceHttpLoadBalancerWriter.deleteLoadBalancers(this.loadBalancer, this.application, this.params);\n };\n } else {\n return () => {\n const command: IGoogleLoadBalancerDeleteOperation = {\n cloudProvider: 'gce',\n loadBalancerName: this.loadBalancer.name,\n accountName: this.loadBalancer.account,\n credentials: this.loadBalancer.account,\n region: this.loadBalancer.region,\n loadBalancerType: this.loadBalancer.loadBalancerType || 'NETWORK',\n deleteHealthChecks: this.params.deleteHealthChecks,\n };\n return LoadBalancerWriter.deleteLoadBalancer(command, this.application);\n };\n }\n }\n}\n\nexport const DELETE_MODAL_CONTROLLER = 'spinnaker.gce.loadBalancer.deleteModal.controller';\nmodule(DELETE_MODAL_CONTROLLER, [\n ANGULAR_UI_BOOTSTRAP as any,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_HTTPLOADBALANCER_WRITE_SERVICE,\n GCE_HTTP_LOAD_BALANCER_UTILS,\n]).controller('gceLoadBalancerDeleteModalCtrl', DeleteLoadBalancerModalController);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_LOADBALANCER_DETAILS_HEALTHCHECK_HEALTHCHECK_COMPONENT =\n 'spinnaker.deck.gce.loadBalancer.details.healthCheck.component';\nexport const name = GOOGLE_LOADBALANCER_DETAILS_HEALTHCHECK_HEALTHCHECK_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_DETAILS_HEALTHCHECK_HEALTHCHECK_COMPONENT, []).component('gceHealthCheck', {\n bindings: {\n healthCheck: '=',\n },\n templateUrl: require('./healthCheck.component.html'),\n});\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nexport const GOOGLE_LOADBALANCER_DETAILS_LOADBALANCERTYPE_LOADBALANCERTYPE_COMPONENT =\n 'spinnaker.deck.gce.loadBalancer.loadBalancerType';\nexport const name = GOOGLE_LOADBALANCER_DETAILS_LOADBALANCERTYPE_LOADBALANCERTYPE_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_LOADBALANCER_DETAILS_LOADBALANCERTYPE_LOADBALANCERTYPE_COMPONENT, []).component('gceLoadBalancerType', {\n template: '<span>{{ $ctrl.type }}</span>',\n bindings: {\n loadBalancer: '=',\n },\n controller: function () {\n this.$onInit = () => {\n this.type = (function (lb) {\n if (lb.loadBalancerType === 'HTTP') {\n if (_.isString(lb.certificate)) {\n return 'HTTPS';\n } else {\n return 'HTTP';\n }\n } else {\n return lb.loadBalancerType;\n }\n })(this.loadBalancer);\n };\n },\n});\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, LOAD_BALANCER_READ_SERVICE } from '@spinnaker/core';\n\nimport { GCE_BACKEND_SERVICE_DETAILS_COMPONENT } from './backendService/backendService.component';\nimport { SESSION_AFFINITY_FILTER } from './backendService/sessionAffinity.filter';\nimport { GOOGLE_COMMON_XPNNAMING_GCE_SERVICE } from '../../common/xpnNaming.gce.service';\nimport { GCE_LOAD_BALANCER_TYPE_TO_WIZARD_CONSTANT } from '../configure/choice/loadBalancerTypeToWizardMap.constant';\nimport { DELETE_MODAL_CONTROLLER } from './deleteModal/deleteModal.controller';\nimport { GOOGLE_LOADBALANCER_DETAILS_HEALTHCHECK_HEALTHCHECK_COMPONENT } from './healthCheck/healthCheck.component';\nimport { GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULESBUTTON_COMPONENT } from './hostAndPathRules/hostAndPathRulesButton.component';\nimport { GCE_HTTP_LOAD_BALANCER_UTILS } from '../httpLoadBalancerUtils.service';\nimport { GOOGLE_LOADBALANCER_DETAILS_LOADBALANCERTYPE_LOADBALANCERTYPE_COMPONENT } from './loadBalancerType/loadBalancerType.component';\n\nexport const GOOGLE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER =\n 'spinnaker.loadBalancer.gce.details.controller';\nexport const name = GOOGLE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER; // for backwards compatibility\nangular\n .module(GOOGLE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER, [\n UIROUTER_ANGULARJS,\n LOAD_BALANCER_READ_SERVICE,\n GOOGLE_COMMON_XPNNAMING_GCE_SERVICE,\n GOOGLE_LOADBALANCER_DETAILS_HOSTANDPATHRULES_HOSTANDPATHRULESBUTTON_COMPONENT,\n GOOGLE_LOADBALANCER_DETAILS_LOADBALANCERTYPE_LOADBALANCERTYPE_COMPONENT,\n GCE_HTTP_LOAD_BALANCER_UTILS,\n GOOGLE_LOADBALANCER_DETAILS_HEALTHCHECK_HEALTHCHECK_COMPONENT,\n GCE_BACKEND_SERVICE_DETAILS_COMPONENT,\n DELETE_MODAL_CONTROLLER,\n SESSION_AFFINITY_FILTER,\n GCE_LOAD_BALANCER_TYPE_TO_WIZARD_CONSTANT,\n ])\n .controller('gceLoadBalancerDetailsCtrl', [\n '$scope',\n '$state',\n '$uibModal',\n 'loadBalancer',\n 'app',\n 'gceHttpLoadBalancerUtils',\n 'loadBalancerReader',\n '$q',\n 'loadBalancerTypeToWizardMap',\n 'gceXpnNamingService',\n function (\n $scope,\n $state,\n $uibModal,\n loadBalancer,\n app,\n gceHttpLoadBalancerUtils,\n loadBalancerReader,\n $q,\n loadBalancerTypeToWizardMap,\n gceXpnNamingService,\n ) {\n const application = (this.application = app);\n\n $scope.state = {\n loading: true,\n };\n\n function extractLoadBalancer() {\n $scope.loadBalancer = application.loadBalancers.data.filter(function (test) {\n const testVpc = test.vpcId || null;\n return (\n test.name === loadBalancer.name &&\n (test.region === loadBalancer.region || test.region === 'global') &&\n test.account === loadBalancer.accountId &&\n testVpc === loadBalancer.vpcId\n );\n })[0];\n\n if ($scope.loadBalancer) {\n return createDetailsLoader().then(function (details) {\n $scope.state.loading = false;\n const filtered = details.filter(function (test) {\n return test.vpcid === loadBalancer.vpcId || (!test.vpcid && !loadBalancer.vpcId);\n });\n if (filtered.length) {\n $scope.loadBalancer.elb = filtered[0];\n $scope.loadBalancer.account = loadBalancer.accountId;\n\n AccountService.getCredentialsKeyedByAccount('gce').then(function () {\n if (gceHttpLoadBalancerUtils.isHttpLoadBalancer($scope.loadBalancer)) {\n $scope.loadBalancer.elb.backendServices = getBackendServices($scope.loadBalancer);\n $scope.loadBalancer.elb.healthChecks = _.chain($scope.loadBalancer.elb.backendServices)\n .map('healthCheck')\n .uniqBy('name')\n .value();\n }\n });\n }\n AccountService.getAccountDetails(loadBalancer.accountId).then(function (accountDetails) {\n let resourceTypes;\n\n if ($scope.loadBalancer.loadBalancerType === 'INTERNAL') {\n resourceTypes = ['gce_forwarding_rule', 'gce_backend_service'];\n } else if ($scope.loadBalancer.loadBalancerType === 'NETWORK') {\n resourceTypes = ['gce_forwarding_rule', 'gce_target_pool', 'gce_health_check'];\n } else if ($scope.loadBalancer.loadBalancerType === 'SSL') {\n resourceTypes = ['gce_forwarding_rule', 'gce_backend_service'];\n } else if ($scope.loadBalancer.loadBalancerType === 'TCP') {\n resourceTypes = ['gce_forwarding_rule', 'gce_backend_service'];\n } else if ($scope.loadBalancer.loadBalancerType === 'INTERNAL_MANAGED') {\n resourceTypes = ['http_load_balancer', 'gce_target_http_proxy', 'gce_url_map', 'gce_backend_service'];\n } else {\n // $scope.loadBalancer.loadBalancerType === 'HTTP'\n resourceTypes = ['http_load_balancer', 'gce_target_http_proxy', 'gce_url_map', 'gce_backend_service'];\n }\n\n resourceTypes = _.join(resourceTypes, ' OR ');\n\n $scope.loadBalancer.project = accountDetails.project;\n $scope.loadBalancer.logsLink =\n 'https://console.developers.google.com/project/' +\n accountDetails.project +\n '/logs?advancedFilter=resource.type=(' +\n resourceTypes +\n ')%0A\"' +\n $scope.loadBalancer.name +\n '\"';\n });\n }, autoClose);\n }\n if (!$scope.loadBalancer) {\n autoClose();\n }\n return $q.when(null);\n }\n\n function createDetailsLoader() {\n if (gceHttpLoadBalancerUtils.isHttpLoadBalancer($scope.loadBalancer)) {\n const detailsPromises = $scope.loadBalancer.listeners.map((listener) => {\n return loadBalancerReader.getLoadBalancerDetails(\n $scope.loadBalancer.provider,\n loadBalancer.accountId,\n $scope.loadBalancer.region,\n listener.name,\n );\n });\n\n return $q.all(detailsPromises).then((loadBalancers) => {\n loadBalancers = _.flatten(loadBalancers);\n const representativeLb = loadBalancers[0];\n representativeLb.dns = loadBalancers.map((loadBalancer) => {\n let protocol;\n if (loadBalancer.listenerDescriptions[0].listener.loadBalancerPort === '443') {\n protocol = 'https:';\n } else {\n protocol = 'http:';\n }\n return { dnsname: loadBalancer.dnsname, protocol: protocol };\n });\n representativeLb.dns = _.uniqBy(representativeLb.dns, 'dnsname');\n representativeLb.listenerDescriptions = _.flatten(loadBalancers.map((lb) => lb.listenerDescriptions));\n return [representativeLb];\n });\n } else {\n return loadBalancerReader\n .getLoadBalancerDetails(\n $scope.loadBalancer.provider,\n loadBalancer.accountId,\n $scope.loadBalancer.region,\n $scope.loadBalancer.name,\n )\n .then((loadBalancerDetails) => {\n const loadBalancer = loadBalancerDetails[0];\n let protocol;\n if (loadBalancer.listenerDescriptions[0].listener.loadBalancerPort === '443') {\n protocol = 'https:';\n } else {\n protocol = 'http:';\n }\n loadBalancer.dns = { dnsname: loadBalancer.dnsname, protocol: protocol };\n return loadBalancerDetails;\n });\n }\n }\n\n function getBackendServices(loadBalancer) {\n let backendServices = [loadBalancer.defaultService];\n\n if (loadBalancer.hostRules.length) {\n backendServices = _.chain(loadBalancer.hostRules)\n .reduce((services, hostRule) => {\n services.push(hostRule.pathMatcher.defaultService);\n return services.concat(_.map(hostRule.pathMatcher.pathRules, 'backendService'));\n }, backendServices)\n .uniqBy('name')\n .value();\n }\n return backendServices;\n }\n\n function autoClose() {\n if ($scope.$$destroyed) {\n return;\n }\n $state.go('^', { allowModalToStayOpen: true }, { location: 'replace' });\n }\n\n app.loadBalancers\n .ready()\n .then(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.loadBalancers.onRefresh($scope, extractLoadBalancer);\n }\n });\n\n this.editLoadBalancer = function editLoadBalancer() {\n const wizard = loadBalancerTypeToWizardMap[$scope.loadBalancer.loadBalancerType];\n\n $uibModal.open({\n templateUrl: wizard.editTemplateUrl,\n controller: `${wizard.controller} as ctrl`,\n size: 'lg',\n resolve: {\n application: function () {\n return application;\n },\n loadBalancer: function () {\n return angular.copy($scope.loadBalancer);\n },\n isNew: function () {\n return false;\n },\n },\n });\n };\n\n this.deleteLoadBalancer = function deleteLoadBalancer() {\n if (!($scope.loadBalancer.instances && $scope.loadBalancer.instances.length)) {\n $uibModal.open({\n controller: 'gceLoadBalancerDeleteModalCtrl as ctrl',\n templateUrl: require('./deleteModal/deleteModal.html'),\n resolve: {\n application: () => application,\n loadBalancer: () => $scope.loadBalancer,\n },\n });\n }\n };\n\n this.isHttpLoadBalancer = (lb) => gceHttpLoadBalancerUtils.isHttpLoadBalancer(lb);\n\n this.getNetworkId = function getNetworkId(loadBalancer) {\n return gceXpnNamingService.decorateXpnResourceIfNecessary(loadBalancer.project, loadBalancer.network);\n };\n\n this.getSubnetId = function getSubnetId(loadBalancer) {\n return gceXpnNamingService.decorateXpnResourceIfNecessary(loadBalancer.project, loadBalancer.subnet);\n };\n },\n ]);\n","import { module } from 'angular';\nimport { cloneDeep, groupBy, map, partition } from 'lodash';\n\nimport type { IGceHttpLoadBalancer, IGceLoadBalancer } from '../domain/loadBalancer';\n\nimport type { GceHttpLoadBalancerUtils } from './httpLoadBalancerUtils.service';\nimport { GCE_HTTP_LOAD_BALANCER_UTILS } from './httpLoadBalancerUtils.service';\n\nexport class GceLoadBalancerSetTransformer {\n private static normalizeHttpLoadBalancerGroup(group: IGceHttpLoadBalancer[]): IGceHttpLoadBalancer {\n const normalized = cloneDeep(group[0]);\n\n normalized.listeners = group.map((loadBalancer) => {\n const port = loadBalancer.portRange ? GceLoadBalancerSetTransformer.parsePortRange(loadBalancer.portRange) : null;\n return {\n port,\n name: loadBalancer.name,\n certificate: loadBalancer.certificate,\n ipAddress: loadBalancer.ipAddress,\n subnet: loadBalancer.subnet,\n };\n });\n\n normalized.name = normalized.urlMapName;\n delete normalized.subnet;\n return normalized;\n }\n\n private static parsePortRange(portRange: string): string {\n return portRange.split('-')[0];\n }\n\n public static $inject = ['gceHttpLoadBalancerUtils'];\n constructor(private gceHttpLoadBalancerUtils: GceHttpLoadBalancerUtils) {}\n\n public normalizeLoadBalancerSet = (loadBalancers: IGceLoadBalancer[]): IGceLoadBalancer[] => {\n const [httpLoadBalancers, otherLoadBalancers] = partition(loadBalancers, (lb) =>\n this.gceHttpLoadBalancerUtils.isHttpLoadBalancer(lb),\n );\n\n const groupedByUrlMap = groupBy(httpLoadBalancers, 'urlMapName');\n const normalizedElSevenLoadBalancers = map(\n groupedByUrlMap,\n GceLoadBalancerSetTransformer.normalizeHttpLoadBalancerGroup,\n );\n\n return (normalizedElSevenLoadBalancers as IGceLoadBalancer[]).concat(otherLoadBalancers);\n };\n}\n\nexport const LOAD_BALANCER_SET_TRANSFORMER = 'spinnaker.gce.loadBalancer.setTransformer.service';\nmodule(LOAD_BALANCER_SET_TRANSFORMER, [GCE_HTTP_LOAD_BALANCER_UTILS]).service(\n 'gceLoadBalancerSetTransformer',\n GceLoadBalancerSetTransformer,\n);\n","export default \"gce.logo2ae85d8704b1d6b8.png\"","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\n\nimport { SETTINGS } from '@spinnaker/core';\n\nexport const GOOGLE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER =\n 'spinnaker.gce.pipeline.stage.bake.executionDetails.controller';\nexport const name = GOOGLE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER, [UIROUTER_ANGULARJS]).controller(\n 'gceBakeExecutionDetailsCtrl',\n [\n '$scope',\n '$stateParams',\n 'executionDetailsSectionService',\n '$interpolate',\n function ($scope, $stateParams, executionDetailsSectionService, $interpolate) {\n $scope.configSections = ['bakeConfig', 'taskStatus', 'artifactStatus'];\n\n const initialized = () => {\n $scope.detailsSection = $stateParams.details;\n $scope.provider = $scope.stage.context.cloudProviderType || 'gce';\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 };\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 {\n ArtifactReferenceService,\n AuthenticationService,\n BakeExecutionLabel,\n BakeryReader,\n ExpectedArtifactService,\n PipelineTemplates,\n Registry,\n SETTINGS,\n} from '@spinnaker/core';\nimport { GOOGLE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER } from './bakeExecutionDetails.controller';\n\nexport const GOOGLE_PIPELINE_STAGES_BAKE_GCEBAKESTAGE = 'spinnaker.gce.pipeline.stage..bakeStage';\nexport const name = GOOGLE_PIPELINE_STAGES_BAKE_GCEBAKESTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_BAKE_GCEBAKESTAGE, [GOOGLE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'bake',\n cloudProvider: 'gce',\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 producesArtifacts: true,\n supportsCustomTimeout: true,\n validators: [\n {\n type: 'anyFieldRequired',\n fields: [\n { fieldName: 'package', fieldLabel: 'Package' },\n { fieldName: 'packageArtifactIds', fieldLabel: 'Package Artifacts' },\n ],\n },\n ],\n restartable: true,\n artifactExtractor: ExpectedArtifactService.accumulateArtifacts(['packageArtifactIds']),\n artifactRemover: ArtifactReferenceService.removeArtifactFromFields(['packageArtifactIds']),\n });\n })\n .controller('gceBakeStageCtrl', [\n '$scope',\n '$q',\n '$uibModal',\n function ($scope, $q, $uibModal) {\n $scope.stage.extendedAttributes = $scope.stage.extendedAttributes || {};\n $scope.stage.region = 'global';\n\n if (!$scope.stage.cloudProvider) {\n $scope.stage.cloudProvider = 'gce';\n }\n\n if (!$scope.stage.user) {\n $scope.stage.user = AuthenticationService.getAuthenticatedUser().name;\n }\n\n $scope.viewState = {\n loading: true,\n };\n\n function initialize() {\n $scope.viewState.providerSelected = true;\n $q.all([\n BakeryReader.getBaseOsOptions('gce'),\n BakeryReader.getBaseLabelOptions(),\n ExpectedArtifactService.getExpectedArtifactsAvailableToStage($scope.stage, $scope.pipeline),\n ]).then(function ([baseOsOptions, baseLabelOptions, expectedArtifacts]) {\n $scope.baseOsOptions = baseOsOptions.baseImages;\n $scope.baseLabelOptions = baseLabelOptions;\n $scope.viewState.expectedArtifacts = expectedArtifacts;\n\n if (!$scope.stage.baseOs && $scope.baseOsOptions && $scope.baseOsOptions.length) {\n $scope.stage.baseOs = $scope.baseOsOptions[0].id;\n }\n if (!$scope.stage.baseLabel && $scope.baseLabelOptions && $scope.baseLabelOptions.length) {\n $scope.stage.baseLabel = $scope.baseLabelOptions[0];\n }\n $scope.viewState.roscoMode =\n SETTINGS.feature.roscoMode ||\n (typeof SETTINGS.feature.roscoSelector === 'function' && SETTINGS.feature.roscoSelector($scope.stage));\n $scope.showAdvancedOptions = showAdvanced();\n $scope.viewState.loading = false;\n });\n }\n\n function showAdvanced() {\n const stage = $scope.stage;\n return !!(\n stage.templateFileName ||\n (stage.extendedAttributes && _.size(stage.extendedAttributes) > 0) ||\n stage.varFileName ||\n stage.baseAmi ||\n stage.accountName\n );\n }\n\n function stageUpdated() {\n deleteEmptyProperties();\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 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.showAccountName = function () {\n return $scope.viewState.roscoMode || $scope.stage.accountName;\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 $scope.$watch('stage', stageUpdated, true);\n\n initialize();\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, NameUtils, Registry, StageConstants } from '@spinnaker/core';\n\nexport const GOOGLE_PIPELINE_STAGES_CLONESERVERGROUP_GCECLONESERVERGROUPSTAGE =\n 'spinnaker.gce.pipeline.stage..cloneServerGroupStage';\nexport const name = GOOGLE_PIPELINE_STAGES_CLONESERVERGROUP_GCECLONESERVERGROUPSTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_CLONESERVERGROUP_GCECLONESERVERGROUPSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'cloneServerGroup',\n cloudProvider: 'gce',\n templateUrl: require('./cloneServerGroupStage.html'),\n executionStepLabelUrl: require('./cloneServerGroupStepLabel.html'),\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('gceCloneServerGroupStageCtrl', [\n '$scope',\n function ($scope) {\n const stage = $scope.stage;\n\n $scope.viewState = {\n accountsLoaded: false,\n };\n\n AccountService.listAccounts('gce').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 = 'gce';\n stage.cloudProviderType = 'gce';\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Google'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.gce) {\n stage.credentials = $scope.application.defaultCredentials.gce;\n }\n\n this.targetClusterUpdated = () => {\n if (stage.targetCluster) {\n const clusterName = NameUtils.parseServerGroupName(stage.targetCluster);\n stage.stack = clusterName.stack;\n stage.freeFormDetails = clusterName.freeFormDetails;\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.toggleDisableTraffic = () => {\n stage.disableTraffic = !stage.disableTraffic;\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const GOOGLE_PIPELINE_STAGES_DESTROYASG_GCEDESTROYASGSTAGE = 'spinnaker.gce.pipeline.stage..destroyAsgStage';\nexport const name = GOOGLE_PIPELINE_STAGES_DESTROYASG_GCEDESTROYASGSTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_DESTROYASG_GCEDESTROYASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'destroyServerGroup',\n cloudProvider: 'gce',\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('gceDestroyAsgStageCtrl', [\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('gce').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 = 'gce';\n\n if (!stage.credentials && $scope.application.defaultCredentials.gce) {\n stage.credentials = $scope.application.defaultCredentials.gce;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.gce) {\n stage.regions.push($scope.application.defaultRegions.gce);\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 GOOGLE_PIPELINE_STAGES_DISABLEASG_GCEDISABLEASGSTAGE = 'spinnaker.gce.pipeline.stage..disableAsgStage';\nexport const name = GOOGLE_PIPELINE_STAGES_DISABLEASG_GCEDISABLEASGSTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_DISABLEASG_GCEDISABLEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'disableServerGroup',\n cloudProvider: 'gce',\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('gceDisableAsgStageCtrl', [\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('gce').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 = 'gce';\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Google'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.gce) {\n stage.credentials = $scope.application.defaultCredentials.gce;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.gce) {\n stage.regions.push($scope.application.defaultRegions.gce);\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 GOOGLE_PIPELINE_STAGES_DISABLECLUSTER_GCEDISABLECLUSTERSTAGE =\n 'spinnaker.gce.pipeline.stage..disableClusterStage';\nexport const name = GOOGLE_PIPELINE_STAGES_DISABLECLUSTER_GCEDISABLECLUSTERSTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_DISABLECLUSTER_GCEDISABLECLUSTERSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'disableCluster',\n cloudProvider: 'gce',\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('gceDisableClusterStageCtrl', [\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('gce').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'gce';\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Google'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.gce) {\n stage.credentials = $scope.application.defaultCredentials.gce;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.gce) {\n stage.regions.push($scope.application.defaultRegions.gce);\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 GOOGLE_PIPELINE_STAGES_ENABLEASG_GCEENABLEASGSTAGE = 'spinnaker.gce.pipeline.stage..enableAsgStage';\nexport const name = GOOGLE_PIPELINE_STAGES_ENABLEASG_GCEENABLEASGSTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_ENABLEASG_GCEENABLEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'enableServerGroup',\n cloudProvider: 'gce',\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('gceEnableAsgStageCtrl', [\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('gce').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 = 'gce';\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Google'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.gce) {\n stage.credentials = $scope.application.defaultCredentials.gce;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.gce) {\n stage.regions.push($scope.application.defaultRegions.gce);\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 GOOGLE_PIPELINE_STAGES_FINDAMI_GCEFINDAMISTAGE = 'spinnaker.gce.pipeline.stage..findAmiStage';\nexport const name = GOOGLE_PIPELINE_STAGES_FINDAMI_GCEFINDAMISTAGE; // for backwards compatibility\nangular\n .module(GOOGLE_PIPELINE_STAGES_FINDAMI_GCEFINDAMISTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'findImage',\n cloudProvider: 'gce',\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('gceFindAmiStageCtrl', [\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('gce').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 = 'gce';\n stage.selectionStrategy = stage.selectionStrategy || $scope.selectionStrategies[0].val;\n\n if (angular.isUndefined(stage.onlyEnabled)) {\n stage.onlyEnabled = true;\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.gce) {\n stage.credentials = $scope.application.defaultCredentials.gce;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.gce) {\n stage.regions.push($scope.application.defaultRegions.gce);\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 GOOGLE_PIPELINE_STAGES_FINDIMAGEFROMTAGS_GCEFINDIMAGEFROMTAGSSTAGE =\n 'spinnaker.gce.pipeline.stage..findImageFromTagsStage';\nexport const name = GOOGLE_PIPELINE_STAGES_FINDIMAGEFROMTAGS_GCEFINDIMAGEFROMTAGSSTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_FINDIMAGEFROMTAGS_GCEFINDIMAGEFROMTAGSSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'findImageFromTags',\n cloudProvider: 'gce',\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: 'tags' },\n ],\n });\n })\n .controller('gceFindImageFromTagsStageCtrl', [\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 || 'gce';\n\n BakeryReader.getRegions('gce').then(function (regions) {\n $scope.regions = regions;\n });\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const GOOGLE_PIPELINE_STAGES_RESIZEASG_GCERESIZEASGSTAGE = 'spinnaker.gce.pipeline.stage..resizeAsgStage';\nexport const name = GOOGLE_PIPELINE_STAGES_RESIZEASG_GCERESIZEASGSTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_RESIZEASG_GCERESIZEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'resizeServerGroup',\n cloudProvider: 'gce',\n templateUrl: require('./resizeAsgStage.html'),\n executionStepLabelUrl: require('./resizeAsgStepLabel.html'),\n accountExtractor: (stage) => [stage.context.credentials],\n configAccountExtractor: (stage) => [stage.credentials],\n supportsCustomTimeout: true,\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: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'action' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('gceResizeAsgStageCtrl', [\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('gce').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.action && stage.resizeType === 'exact') {\n stage.action = 'scale_exact';\n }\n stage.cloudProvider = 'gce';\n stage.cloudProviderType = 'gce';\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Google'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.gce) {\n stage.credentials = $scope.application.defaultCredentials.gce;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.gce) {\n stage.regions.push($scope.application.defaultRegions.gce);\n }\n\n ctrl.updateResizeType = function () {\n if (stage.action === 'scale_exact') {\n stage.resizeType = 'exact';\n delete stage.scalePct;\n delete stage.scaleNum;\n } else {\n stage.capacity = {};\n if (stage.resizeType === 'pct') {\n delete stage.scaleNum;\n } else {\n stage.resizeType = 'incr';\n delete stage.scalePct;\n stage.scaleNum = stage.scaleNum || 0;\n }\n }\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry } from '@spinnaker/core';\n\nexport const GOOGLE_PIPELINE_STAGES_SCALEDOWNCLUSTER_GCESCALEDOWNCLUSTERSTAGE =\n 'spinnaker.gce.pipeline.stage..scaleDownClusterStage';\nexport const name = GOOGLE_PIPELINE_STAGES_SCALEDOWNCLUSTER_GCESCALEDOWNCLUSTERSTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_SCALEDOWNCLUSTER_GCESCALEDOWNCLUSTERSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'scaleDownCluster',\n cloudProvider: 'gce',\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('gceScaleDownClusterStageCtrl', [\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('gce').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'gce';\n\n if (!stage.credentials && $scope.application.defaultCredentials.gce) {\n stage.credentials = $scope.application.defaultCredentials.gce;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.gce) {\n stage.regions.push($scope.application.defaultRegions.gce);\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 GOOGLE_PIPELINE_STAGES_SHRINKCLUSTER_GCESHRINKCLUSTERSTAGE =\n 'spinnaker.gce.pipeline.stage..shrinkClusterStage';\nexport const name = GOOGLE_PIPELINE_STAGES_SHRINKCLUSTER_GCESHRINKCLUSTERSTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_SHRINKCLUSTER_GCESHRINKCLUSTERSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'shrinkCluster',\n cloudProvider: 'gce',\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('gceShrinkClusterStageCtrl', [\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('gce').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'gce';\n\n if (!stage.credentials && $scope.application.defaultCredentials.gce) {\n stage.credentials = $scope.application.defaultCredentials.gce;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.gce) {\n stage.regions.push($scope.application.defaultRegions.gce);\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 { AccountService, PipelineConfigService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const GOOGLE_PIPELINE_STAGES_TAGIMAGE_GCETAGIMAGESTAGE = 'spinnaker.gce.pipeline.stage..tagImageStage';\nexport const name = GOOGLE_PIPELINE_STAGES_TAGIMAGE_GCETAGIMAGESTAGE; // for backwards compatibility\nmodule(GOOGLE_PIPELINE_STAGES_TAGIMAGE_GCETAGIMAGESTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'upsertImageTags',\n cloudProvider: 'gce',\n templateUrl: require('./tagImageStage.html'),\n executionDetailsUrl: require('./tagImageExecutionDetails.html'),\n executionConfigSections: ['tagImageConfig', 'taskStatus'],\n });\n })\n .controller('gceTagImageStageCtrl', [\n '$scope',\n ($scope) => {\n AccountService.listAccounts('gce').then((accounts) => ($scope.accounts = accounts));\n\n $scope.stage.tags = $scope.stage.tags || {};\n $scope.stage.cloudProvider = $scope.stage.cloudProvider || 'gce';\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('pipeline.stages', initUpstreamStages);\n },\n ]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\n\nimport { AccountService, InfrastructureCaches } from '@spinnaker/core';\n\nexport const GOOGLE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUP_CONTROLLER =\n 'spinnaker.gce.securityGroup.create.controller';\nexport const name = GOOGLE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUP_CONTROLLER; // for backwards compatibility\nangular\n .module(GOOGLE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUP_CONTROLLER, [UIROUTER_ANGULARJS])\n .controller('gceCreateSecurityGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n '$state',\n '$controller',\n 'application',\n 'securityGroup',\n function ($scope, $uibModalInstance, $state, $controller, application, securityGroup) {\n $scope.pages = {\n location: require('./createSecurityGroupProperties.html'),\n targets: require('./createSecurityGroupTargets.html'),\n sourceFilters: require('./createSecurityGroupSourceFilters.html'),\n ingress: require('./createSecurityGroupIngress.html'),\n };\n\n const ctrl = this;\n\n securityGroup.backingData = {};\n securityGroup.network = 'default';\n securityGroup.sourceRanges = [];\n securityGroup.sourceTags = [];\n securityGroup.ipIngress = [];\n\n angular.extend(\n this,\n $controller('gceConfigSecurityGroupMixin', {\n $scope: $scope,\n $uibModalInstance: $uibModalInstance,\n application: application,\n securityGroup: securityGroup,\n mode: 'create',\n }),\n );\n\n AccountService.listAccounts('gce').then(function (accounts) {\n $scope.accounts = accounts;\n ctrl.accountUpdated();\n });\n\n this.getSecurityGroupRefreshTime = function () {\n return InfrastructureCaches.get('securityGroups').getStats().ageMax;\n };\n\n ctrl.upsert = function () {\n ctrl.mixinUpsert('Create');\n };\n\n ctrl.initializeSecurityGroups();\n },\n ]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\n\nimport { FirewallLabels, InfrastructureCaches, SecurityGroupWriter, TaskMonitor } from '@spinnaker/core';\n\nexport const GOOGLE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUP_CONTROLLER =\n 'spinnaker.google.securityGroup.edit.controller';\nexport const name = GOOGLE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUP_CONTROLLER; // for backwards compatibility\nangular\n .module(GOOGLE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUP_CONTROLLER, [UIROUTER_ANGULARJS])\n .controller('gceEditSecurityGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n '$state',\n 'application',\n 'securityGroup',\n '$controller',\n function ($scope, $uibModalInstance, $state, application, securityGroup, $controller) {\n $scope.pages = {\n targets: require('./createSecurityGroupTargets.html'),\n sourceFilters: require('./createSecurityGroupSourceFilters.html'),\n ingress: require('./createSecurityGroupIngress.html'),\n };\n\n $scope.securityGroup = securityGroup;\n\n $scope.state = {\n refreshingSecurityGroups: false,\n };\n\n angular.extend(\n this,\n $controller('gceConfigSecurityGroupMixin', {\n $scope: $scope,\n $uibModalInstance: $uibModalInstance,\n application: application,\n securityGroup: securityGroup,\n mode: 'edit',\n }),\n );\n\n $scope.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.sourceRanges = _.map(securityGroup.sourceRanges, function (sourceRange) {\n return { value: sourceRange };\n });\n\n securityGroup.ipIngress = _.chain(securityGroup.ipIngressRules)\n .map(function (rule) {\n if (rule.portRanges && rule.portRanges.length > 0) {\n return rule.portRanges.map(function (portRange) {\n return {\n type: rule.protocol,\n startPort: portRange.startPort,\n endPort: portRange.endPort,\n };\n });\n } else {\n return [\n {\n type: rule.protocol,\n },\n ];\n }\n })\n .flatten()\n .value();\n\n securityGroup.sourceTags = securityGroup.sourceTags || [];\n\n this.getSecurityGroupRefreshTime = function () {\n return InfrastructureCaches.get('securityGroups').getStats().ageMax;\n };\n\n this.addSourceCIDR = function (sourceRanges) {\n sourceRanges.push({ value: '0.0.0.0/0' });\n };\n\n this.removeSourceCIDR = function (sourceRanges, index) {\n sourceRanges.splice(index, 1);\n };\n\n this.addRule = function (ruleset) {\n ruleset.push({\n type: 'tcp',\n startPort: 7001,\n endPort: 7001,\n });\n };\n\n this.removeRule = function (ruleset, index) {\n ruleset.splice(index, 1);\n };\n\n this.upsert = function () {\n $scope.taskMonitor.submit(function () {\n const allowed = _.map($scope.securityGroup.ipIngress, function (ipIngressRule) {\n const rule = {\n ipProtocol: ipIngressRule.type,\n };\n\n if (ipIngressRule.startPort && ipIngressRule.endPort) {\n rule.portRanges = [ipIngressRule.startPort + '-' + ipIngressRule.endPort];\n }\n\n return rule;\n });\n\n return SecurityGroupWriter.upsertSecurityGroup($scope.securityGroup, application, 'Update', {\n cloudProvider: 'gce',\n sourceRanges: _.uniq(_.map($scope.securityGroup.sourceRanges, 'value')),\n allowed: allowed,\n targetTags: $scope.securityGroup.targetTags || [],\n region: 'global',\n });\n });\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n },\n ]);\n","import { module } from 'angular';\nimport { has } from 'lodash';\n\nimport type { Application, IServerGroup } from '@spinnaker/core';\nimport { FirewallLabels } from '@spinnaker/core';\n\nexport class GceSecurityGroupHelpTextService {\n private serverGroupsIndexedByTag: Map<string, Set<string>>;\n private application: Application;\n private account: string;\n private network: string;\n\n public register(application: Application, account: string, network: string): PromiseLike<void> {\n this.reset();\n this.application = application;\n this.account = account;\n this.network = network;\n return this.indexServerGroupsByTag();\n }\n\n public getHelpTextForTag(tag: string, tagType: 'source' | 'target'): string {\n const serverGroups = this.getServerGroupsWithTag(tag);\n let text: string;\n switch (serverGroups.length) {\n case 0:\n text = null;\n break;\n case 1:\n text = `This ${tagType} tag associates this ${FirewallLabels.get('firewall')} with the server group <em>${\n serverGroups[0]\n }</em>.`;\n break;\n default:\n text = `This ${tagType} tag associates this ${FirewallLabels.get('firewall')} with the server groups\n ${serverGroups.map((serverGroup) => `<em>${serverGroup}</em>`).join(', ')}.`;\n break;\n }\n return text;\n }\n\n public getServerGroupsWithTag(tag: string): string[] {\n if (this.serverGroupsIndexedByTag.get(tag)) {\n return Array.from(this.serverGroupsIndexedByTag.get(tag)).sort();\n } else {\n return [];\n }\n }\n\n public reset(): void {\n this.application = null;\n this.account = null;\n this.serverGroupsIndexedByTag = new Map<string, Set<string>>();\n }\n\n private indexServerGroupsByTag(): PromiseLike<void> {\n return this.application.ready().then(() => {\n this.application.getDataSource('serverGroups').data.forEach((serverGroup: IServerGroup) => {\n if (\n has(serverGroup, 'providerMetadata.tags.length') &&\n serverGroup.account === this.account &&\n serverGroup.providerMetadata?.networkName === this.network\n ) {\n serverGroup.providerMetadata.tags.forEach((tag: string) => {\n if (!this.serverGroupsIndexedByTag.get(tag)) {\n this.serverGroupsIndexedByTag.set(\n tag,\n new Set<string>([serverGroup.name]),\n );\n } else {\n this.serverGroupsIndexedByTag.get(tag).add(serverGroup.name);\n }\n });\n }\n });\n });\n }\n}\n\nexport const GCE_SECURITY_GROUP_HELP_TEXT_SERVICE = 'spinnaker.gce.securityGroupHelpText.service';\nmodule(GCE_SECURITY_GROUP_HELP_TEXT_SERVICE, []).service(\n 'gceSecurityGroupHelpTextService',\n GceSecurityGroupHelpTextService,\n);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport {\n FirewallLabels,\n ModalWizard,\n NetworkReader,\n SECURITY_GROUP_READER,\n SecurityGroupWriter,\n TaskMonitor,\n} from '@spinnaker/core';\n\nimport { GCE_SECURITY_GROUP_HELP_TEXT_SERVICE } from '../securityGroupHelpText.service';\n\nimport './securityGroup.configure.less';\n\nexport const GOOGLE_SECURITYGROUP_CONFIGURE_CONFIGSECURITYGROUPMIXIN_CONTROLLER =\n 'spinnaker.google.securityGroup.baseConfig.controller';\nexport const name = GOOGLE_SECURITYGROUP_CONFIGURE_CONFIGSECURITYGROUPMIXIN_CONTROLLER; // for backwards compatibility\nmodule(GOOGLE_SECURITYGROUP_CONFIGURE_CONFIGSECURITYGROUPMIXIN_CONTROLLER, [\n UIROUTER_ANGULARJS,\n SECURITY_GROUP_READER,\n GCE_SECURITY_GROUP_HELP_TEXT_SERVICE,\n]).controller('gceConfigSecurityGroupMixin', [\n '$scope',\n '$state',\n '$uibModalInstance',\n 'application',\n 'securityGroup',\n 'securityGroupReader',\n 'cacheInitializer',\n 'gceSecurityGroupHelpTextService',\n 'mode',\n function (\n $scope,\n $state,\n $uibModalInstance,\n application,\n securityGroup,\n securityGroupReader,\n cacheInitializer,\n gceSecurityGroupHelpTextService,\n mode,\n ) {\n const ctrl = this;\n\n $scope.isNew = true;\n\n $scope.state = {\n submitting: false,\n refreshingSecurityGroups: false,\n removedRules: [],\n infiniteScroll: {\n numToAdd: 20,\n currentItems: 20,\n },\n mode: mode,\n target: null,\n targetOptions: null,\n };\n\n $scope.wizard = ModalWizard;\n\n ctrl.getTagHelpText = function (tag, tagType) {\n return gceSecurityGroupHelpTextService.getHelpTextForTag(tag, tagType);\n };\n\n ctrl.addMoreItems = function () {\n $scope.state.infiniteScroll.currentItems += $scope.state.infiniteScroll.numToAdd;\n };\n\n ctrl.registerHelpTextService = function () {\n gceSecurityGroupHelpTextService.register(\n application,\n $scope.securityGroup.credentials || $scope.securityGroup.accountName,\n securityGroup.network,\n );\n };\n\n ctrl.initializeTargetOptions = function () {\n const options = ['allowAllTraffic', 'specifyTags'];\n if ($scope.state.mode === 'edit') {\n $scope.state.targetOptions = options;\n } else {\n $scope.state.targetOptions = ['autoGenerate'].concat(options);\n }\n };\n\n ctrl.initializeTarget = function () {\n if ($scope.state.mode === 'create') {\n $scope.state.target = 'autoGenerate';\n } else {\n if ($scope.securityGroup.targetTags && $scope.securityGroup.targetTags.length > 0) {\n $scope.state.target = 'specifyTags';\n } else {\n $scope.state.target = 'allowAllTraffic';\n }\n }\n };\n\n ctrl.getTargetLabel = function (target) {\n switch (target) {\n case 'autoGenerate':\n return 'Auto-generate target tag';\n case 'allowAllTraffic':\n return 'Allow traffic to all server groups';\n case 'specifyTags':\n return 'Specify target tags';\n default:\n return null;\n }\n };\n\n ctrl.onTargetChange = function () {\n switch ($scope.state.target) {\n case 'autoGenerate':\n $scope.securityGroup.targetTags = null;\n break;\n case 'allowAllTraffic':\n $scope.securityGroup.targetTags = [];\n break;\n case 'specifyTags':\n $scope.securityGroup.targetTags = $scope.securityGroup.targetTags || [];\n break;\n default:\n break;\n }\n };\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n $uibModalInstance.close();\n const newStateParams = {\n name: $scope.securityGroup.name,\n accountId: $scope.securityGroup.credentials || $scope.securityGroup.accountName,\n region: 'global',\n vpcId: $scope.securityGroup.vpcId,\n provider: 'gce',\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 ctrl.initializeTargetOptions();\n ctrl.initializeTarget();\n ctrl.onTargetChange();\n ctrl.registerHelpTextService();\n\n ctrl.upsert = function () {\n $scope.taskMonitor.submit(function () {\n return SecurityGroupWriter.upsertSecurityGroup($scope.securityGroup, application, 'Create');\n });\n };\n\n ctrl.mixinUpsert = function (descriptor) {\n $scope.taskMonitor.submit(function () {\n const allowed = _.map($scope.securityGroup.ipIngress, function (ipIngressRule) {\n const rule = {\n ipProtocol: ipIngressRule.type,\n };\n\n if (ipIngressRule.startPort && ipIngressRule.endPort) {\n rule.portRanges = [ipIngressRule.startPort + '-' + ipIngressRule.endPort];\n }\n\n return rule;\n });\n\n return SecurityGroupWriter.upsertSecurityGroup($scope.securityGroup, application, descriptor, {\n cloudProvider: 'gce',\n sourceRanges: _.uniq(_.map($scope.securityGroup.sourceRanges, 'value')),\n targetTags: $scope.securityGroup.targetTags,\n sourceTags: $scope.securityGroup.sourceTags,\n allowed: allowed,\n region: 'global',\n network: $scope.securityGroup.network,\n });\n });\n };\n\n ctrl.accountUpdated = function () {\n ctrl.initializeSecurityGroups();\n ctrl.updateNetworks();\n ctrl.updateName();\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 $scope.state.refreshingSecurityGroups = false;\n });\n });\n };\n\n ctrl.initializeSecurityGroups = function () {\n return securityGroupReader.getAllSecurityGroups().then(function (securityGroups) {\n const account = $scope.securityGroup.credentials || $scope.securityGroup.accountName;\n\n let existingGroups;\n if (account) {\n existingGroups = securityGroups[account].gce.global;\n } else {\n existingGroups = securityGroups;\n }\n\n $scope.existingSecurityGroupNames = _.map(existingGroups, 'name');\n });\n };\n\n ctrl.cancel = function () {\n $uibModalInstance.dismiss();\n };\n\n ctrl.updateNetworks = function () {\n NetworkReader.listNetworksByProvider('gce').then(function (gceNetworks) {\n const account = $scope.securityGroup.credentials || $scope.securityGroup.accountName;\n $scope.securityGroup.backingData.networks = _(gceNetworks)\n .filter((n) => n.account === account && !n.id.includes('/'))\n .map((n) => n.id)\n .value();\n });\n };\n\n ctrl.getCurrentNamePattern = function () {\n return /^[a-zA-Z0-9-]*$/;\n };\n\n ctrl.updateName = function () {\n const securityGroup = $scope.securityGroup;\n let name = application.name;\n if (securityGroup.detail) {\n name += '-' + securityGroup.detail;\n name = _.trimEnd(name, '-');\n }\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.addSourceCIDR = function (sourceRanges) {\n sourceRanges.push({ value: '0.0.0.0/0' });\n };\n\n ctrl.removeSourceCIDR = function (sourceRanges, index) {\n sourceRanges.splice(index, 1);\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.dismissRemovedRules = function () {\n $scope.state.removedRules = [];\n ModalWizard.markClean('Ingress');\n ModalWizard.markComplete('Ingress');\n };\n\n ctrl.isValid = function () {\n return (\n ($scope.state.target === 'specifyTags' ? $scope.securityGroup.targetTags.length > 0 : true) &&\n $scope.securityGroup.ipIngress.length > 0 &&\n ($scope.securityGroup.sourceTags.length > 0 || $scope.securityGroup.sourceRanges.length > 0)\n );\n };\n\n ctrl.addTargetTag = function () {\n $scope.securityGroup.targetTags.push('');\n };\n\n ctrl.removeTargetTag = function (index) {\n $scope.securityGroup.targetTags.splice(index, 1);\n };\n\n ctrl.addSourceTag = function () {\n $scope.securityGroup.sourceTags.push('');\n };\n\n ctrl.removeSourceTag = function (index) {\n $scope.securityGroup.sourceTags.splice(index, 1);\n };\n },\n]);\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, FirewallLabels } from '@spinnaker/core';\nimport { GOOGLE_SECURITYGROUP_CONFIGURE_CONFIGSECURITYGROUPMIXIN_CONTROLLER } from '../configure/ConfigSecurityGroupMixin.controller';\n\nexport const GOOGLE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER =\n 'spinnaker.google.securityGroup.clone.controller';\nexport const name = GOOGLE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER; // for backwards compatibility\nangular\n .module(GOOGLE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER, [\n GOOGLE_SECURITYGROUP_CONFIGURE_CONFIGSECURITYGROUPMIXIN_CONTROLLER,\n ])\n .controller('gceCloneSecurityGroupController', [\n '$scope',\n '$uibModalInstance',\n '$controller',\n 'securityGroup',\n 'application',\n function ($scope, $uibModalInstance, $controller, securityGroup, application) {\n const vm = this;\n\n $scope.pages = {\n location: require('../configure/createSecurityGroupProperties.html'),\n targets: require('../configure/createSecurityGroupTargets.html'),\n sourceFilters: require('../configure/createSecurityGroupSourceFilters.html'),\n ingress: require('../configure/createSecurityGroupIngress.html'),\n };\n\n $scope.firewallLabel = FirewallLabels.get('Firewall');\n\n angular.extend(\n this,\n $controller('gceConfigSecurityGroupMixin', {\n $scope: $scope,\n $uibModalInstance: $uibModalInstance,\n application: application,\n securityGroup: securityGroup,\n mode: 'clone',\n }),\n );\n\n AccountService.listAccounts('gce').then(function (accounts) {\n $scope.accounts = accounts;\n vm.accountUpdated();\n });\n\n securityGroup.sourceRanges = _.map(securityGroup.sourceRanges, function (sourceRange) {\n return { value: sourceRange };\n });\n\n securityGroup.ipIngress = _.chain(securityGroup.ipIngressRules)\n .map(function (rule) {\n if (rule.portRanges && rule.portRanges.length > 0) {\n return rule.portRanges.map(function (portRange) {\n return {\n type: rule.protocol,\n startPort: portRange.startPort,\n endPort: portRange.endPort,\n };\n });\n } else {\n return [\n {\n type: rule.protocol,\n },\n ];\n }\n })\n .flatten()\n .value();\n\n securityGroup.backingData = {};\n\n securityGroup.sourceTags = securityGroup.sourceTags || [];\n\n vm.upsert = function () {\n vm.mixinUpsert('Clone');\n };\n\n vm.initializeSecurityGroups();\n },\n ]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport {\n AccountService,\n CloudProviderRegistry,\n ConfirmationModalService,\n FirewallLabels,\n SECURITY_GROUP_READER,\n SecurityGroupWriter,\n} from '@spinnaker/core';\n\nimport { GOOGLE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER } from '../clone/cloneSecurityGroup.controller';\nimport { GCE_SECURITY_GROUP_HELP_TEXT_SERVICE } from '../securityGroupHelpText.service';\n\nexport const GOOGLE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER =\n 'spinnaker.securityGroup.gce.details.controller';\nexport const name = GOOGLE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER; // for backwards compatibility\nangular\n .module(GOOGLE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER, [\n UIROUTER_ANGULARJS,\n SECURITY_GROUP_READER,\n GOOGLE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER,\n GCE_SECURITY_GROUP_HELP_TEXT_SERVICE,\n ])\n .controller('gceSecurityGroupDetailsCtrl', [\n '$scope',\n '$state',\n 'resolvedSecurityGroup',\n 'app',\n 'securityGroupReader',\n '$uibModal',\n 'gceSecurityGroupHelpTextService',\n function (\n $scope,\n $state,\n resolvedSecurityGroup,\n app,\n securityGroupReader,\n $uibModal,\n gceSecurityGroupHelpTextService,\n ) {\n const application = (this.application = app);\n const securityGroup = resolvedSecurityGroup;\n\n // needed for standalone instances\n $scope.detailsTemplateUrl = CloudProviderRegistry.getValue('gce', 'securityGroup.detailsTemplateUrl');\n\n $scope.state = {\n loading: true,\n standalone: app.isStandalone,\n };\n\n $scope.firewallLabel = FirewallLabels.get('Firewall');\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 $scope.state.loading = false;\n\n if (!details || _.isEmpty(details)) {\n fourOhFour();\n } else {\n $scope.securityGroup = details;\n const applicationSecurityGroup = securityGroupReader.getApplicationSecurityGroup(\n application,\n securityGroup.accountId,\n securityGroup.region,\n securityGroup.name,\n );\n $scope.securityGroup = angular.extend(_.cloneDeep(applicationSecurityGroup), $scope.securityGroup);\n\n // These come back from the global firewall endpoint as '[tag-a, tag-b]'\n if (typeof $scope.securityGroup.targetTags === 'string') {\n const targetTags = $scope.securityGroup.targetTags;\n $scope.securityGroup.targetTags = targetTags.substring(1, targetTags.length - 1).split(', ');\n }\n if (typeof $scope.securityGroup.sourceTags === 'string') {\n const sourceTags = $scope.securityGroup.sourceTags;\n $scope.securityGroup.sourceTags = sourceTags.substring(1, sourceTags.length - 1).split(', ');\n }\n\n // These come back from the global firewall endpoint as '[account-a@project.iam.gserviceaccount.com, account-b@project.iam.gserviceaccount.com]'\n if (typeof $scope.securityGroup.targetServiceAccounts === 'string') {\n const targetServiceAccounts = $scope.securityGroup.targetServiceAccounts;\n $scope.securityGroup.targetServiceAccounts = targetServiceAccounts\n .substring(1, targetServiceAccounts.length - 1)\n .split(', ');\n }\n if (typeof $scope.securityGroup.sourceServiceAccounts === 'string') {\n const sourceServiceAccounts = $scope.securityGroup.sourceServiceAccounts;\n $scope.securityGroup.sourceServiceAccounts = sourceServiceAccounts\n .substring(1, sourceServiceAccounts.length - 1)\n .split(', ');\n }\n\n $scope.securityGroup.sourceRanges = _.chain($scope.securityGroup.ipRangeRules)\n .map((rule) => {\n return rule.range.ip && rule.range.cidr ? rule.range.ip + rule.range.cidr : null;\n })\n .compact()\n .uniq()\n .value();\n\n const ipIngress = _.map($scope.securityGroup.ipRangeRules, function (ipRangeRule) {\n return {\n protocol: ipRangeRule.protocol,\n portRanges: ipRangeRule.portRanges,\n };\n });\n\n let ipIngressRules = {};\n\n ipIngress.forEach(function (ipIngressRule) {\n if (_.has(ipIngressRules, ipIngressRule.protocol)) {\n ipIngressRules[ipIngressRule.protocol] = ipIngressRules[ipIngressRule.protocol].concat(\n ipIngressRule.portRanges,\n );\n\n ipIngressRules[ipIngressRule.protocol] = _.uniqBy(ipIngressRules[ipIngressRule.protocol], function (\n portRange,\n ) {\n return portRange.startPort + '->' + portRange.endPort;\n });\n } else {\n ipIngressRules[ipIngressRule.protocol] = ipIngressRule.portRanges;\n }\n });\n\n ipIngressRules = _.map(ipIngressRules, function (portRanges, protocol) {\n return {\n protocol: protocol,\n portRanges: portRanges,\n };\n });\n\n $scope.securityGroup.ipIngressRules = ipIngressRules;\n\n $scope.securityGroup.protocolPortRangeCount = _.sumBy(ipIngressRules, function (ipIngressRule) {\n return ipIngressRule.portRanges.length > 1 ? ipIngressRule.portRanges.length : 1;\n });\n\n AccountService.getAccountDetails(securityGroup.accountId).then(function (accountDetails) {\n $scope.securityGroup.logsLink =\n 'https://console.developers.google.com/project/' +\n accountDetails.project +\n '/logs?service=gce_firewall_rule&minLogLevel=0&filters=text:' +\n securityGroup.name;\n });\n\n gceSecurityGroupHelpTextService.register(\n application,\n $scope.securityGroup.accountName,\n $scope.securityGroup.network,\n );\n }\n }, fourOhFour);\n }\n\n function fourOhFour() {\n if ($scope.$$destroyed) {\n return;\n }\n $state.go('^', { allowModalToStayOpen: true }, { location: 'replace' });\n }\n\n application.securityGroups\n .ready()\n .then(() => extractSecurityGroup())\n .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 this.getTagHelpText = function (tag, tagType) {\n return gceSecurityGroupHelpTextService.getHelpTextForTag(tag, tagType);\n };\n\n this.editInboundRules = function editInboundRules() {\n $uibModal.open({\n templateUrl: require('../configure/editSecurityGroup.html'),\n controller: 'gceEditSecurityGroupCtrl 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 this.cloneSecurityGroup = function cloneSecurityGroup() {\n $uibModal.open({\n templateUrl: require('../clone/cloneSecurityGroup.html'),\n controller: 'gceCloneSecurityGroupController 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 const taskMonitor = {\n application: application,\n title: 'Deleting ' + securityGroup.name,\n };\n\n const submitMethod = function () {\n return SecurityGroupWriter.deleteSecurityGroup(securityGroup, application, {\n cloudProvider: $scope.securityGroup.type,\n securityGroupName: securityGroup.name,\n });\n };\n\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 });\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","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_SECURITYGROUP_SECURITYGROUP_READER = 'spinnaker.gce.securityGroup.reader';\nexport const name = GOOGLE_SECURITYGROUP_SECURITYGROUP_READER; // for backwards compatibility\nmodule(GOOGLE_SECURITYGROUP_SECURITYGROUP_READER, []).factory('gceSecurityGroupReader', function () {\n function resolveIndexedSecurityGroup(indexedSecurityGroups, container, securityGroupId) {\n return indexedSecurityGroups[container.account].global[securityGroupId];\n }\n\n return {\n resolveIndexedSecurityGroup: resolveIndexedSecurityGroup,\n };\n});\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER = 'spinnaker.gce.securityGroup.transformer';\nexport const name = GOOGLE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER; // for backwards compatibility\nmodule(GOOGLE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER, []).factory('gceSecurityGroupTransformer', [\n '$q',\n function ($q) {\n function normalizeSecurityGroup(securityGroup) {\n return $q.when(securityGroup); // no-op\n }\n\n return {\n normalizeSecurityGroup: normalizeSecurityGroup,\n };\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_BASICSETTINGS_BASICSETTINGS_COMPONENT =\n 'spinnaker.deck.gce.autoscalingPolicy.basicSettings.component';\nexport const name = GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_BASICSETTINGS_BASICSETTINGS_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_BASICSETTINGS_BASICSETTINGS_COMPONENT, []).component(\n 'gceAutoscalingPolicyBasicSettings',\n {\n bindings: {\n policy: '=',\n updatePolicy: '<',\n },\n templateUrl: require('./basicSettings.component.html'),\n controller: function controller() {\n this.modes = ['ON', 'OFF', 'ONLY_SCALE_OUT'];\n },\n },\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nexport const GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_METRICSETTINGS_METRICSETTINGS_COMPONENT =\n 'spinnaker.deck.gce.autoscalingPolicy.metricSettings.component';\nexport const name = GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_METRICSETTINGS_METRICSETTINGS_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_METRICSETTINGS_METRICSETTINGS_COMPONENT, []).component(\n 'gceAutoscalingPolicyMetricSettings',\n {\n bindings: {\n policy: '=',\n showNoMetricsWarning: '=',\n updatePolicy: '<',\n },\n templateUrl: require('./metricSettings.component.html'),\n controller: function () {\n this.$onInit = () => {\n const multipleAllowedFor = {\n cpuUtilization: false,\n loadBalancingUtilization: false,\n customMetricUtilizations: true,\n };\n\n const metricTypes = Object.keys(multipleAllowedFor);\n\n this.targetTypesToDisplayMap = {\n GAUGE: 'Gauge',\n DELTA_PER_SECOND: 'Delta / second',\n DELTA_PER_MINUTE: 'Delta / minute',\n };\n\n this.metricScopeTypesToDisplayMap = {\n TIME_SERIES_PER_INSTANCE: 'Time series per instance',\n SINGLE_TIME_SERIES_PER_GROUP: 'Single time series per group',\n };\n\n this.scalingpolicyTypesToDisplayMap = {\n UTILIZATION_TARGET: 'Utilization target',\n SINGLE_INSTANCE_ASSIGNMENT: 'singleInstanceAssignment',\n };\n\n this.addMetric = (metricType) => {\n if (multipleAllowedFor[metricType]) {\n this.policy[metricType] = this.policy[metricType] || [];\n this.policy[metricType].push({});\n } else if (emptyOrUndefined(this.policy[metricType])) {\n this.policy[metricType] = { utilizationTarget: null };\n }\n };\n\n this.deleteMetric = (metricType, index) => {\n if (multipleAllowedFor[metricType]) {\n this.policy[metricType].splice(index, 1);\n } else {\n // sending an empty object to the API deletes the policy.\n this.policy[metricType] = {};\n }\n };\n\n this.showMetric = (metricType) => {\n const metric = this.policy[metricType];\n // should not show policy form if the policy is undefined or an empty object.\n return !emptyOrUndefined(metric);\n };\n\n this.isSingleTimeSeriesPerGroup = (scopeType, index) => {\n if (this.policy.customMetricUtilizations[index].metricExportScope === scopeType) return true;\n };\n\n this.isScalingPolicySingleInstanceAssignment = (policyType, index) => {\n if (this.policy.customMetricUtilizations[index].scalingpolicy === policyType) return true;\n };\n\n this.showNoMetricsWarning = () => {\n return _.every(\n metricTypes.map((type) => {\n return _.some([\n multipleAllowedFor[type] && !_.get(this.policy, [type, 'length']),\n emptyOrUndefined(this.policy[type]),\n ]);\n }),\n );\n };\n\n this.setUtilizationTargetFromDisplay = (metricType, value) => {\n this.policy[metricType].utilizationTarget = value / 100;\n };\n\n this.initializeTargetDisplay = (metricType) => {\n this[`${metricType}TargetDisplay`] = safeDecimalToPercent(this.policy[metricType].utilizationTarget);\n };\n\n function safeDecimalToPercent(value) {\n if (value === 0) {\n return 0;\n }\n return value ? Math.round(value * 100) : undefined;\n }\n\n function emptyOrUndefined(value) {\n return _.isEqual(value, {}) || _.isUndefined(value);\n }\n };\n },\n },\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\nimport timezones from './standardTimezone.json';\n\nexport const GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_SCALINGSCHEDULES_SCALINGSCHEDULES_COMPONENT =\n 'spinnaker.deck.gce.autoscalingPolicy.scalingSchedules.component';\nexport const name = GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_SCALINGSCHEDULES_SCALINGSCHEDULES_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_SCALINGSCHEDULES_SCALINGSCHEDULES_COMPONENT, []).component(\n 'gceAutoscalingPolicyScalingSchedules',\n {\n bindings: {\n policy: '=',\n updatePolicy: '<',\n },\n templateUrl: require('./scalingSchedules.component.html'),\n controller: function () {\n this.$onInit = () => {\n const multipleAllowedFor = {\n scalingSchedules: true,\n };\n\n this.timezones = timezones;\n\n this.addSchedule = (scheduleType) => {\n if (multipleAllowedFor[scheduleType]) {\n this.policy[scheduleType] = this.policy[scheduleType] || [];\n this.policy[scheduleType].push({});\n } else if (emptyOrUndefined(this.policy[scheduleType])) {\n this.policy[scheduleType] = {};\n }\n };\n\n this.deleteSchedule = (scheduleType, index) => {\n if (multipleAllowedFor[scheduleType]) {\n this.policy[scheduleType].splice(index, 1);\n } else {\n // sending an empty object to the API deletes the policy.\n this.policy[scheduleType] = {};\n }\n };\n\n this.selectTimezone = (timezone, index) => {\n const { scalingSchedules } = this.policy;\n const schedule = scalingSchedules[index];\n scalingSchedules[index] = { ...schedule, timezone };\n\n this.updatePolicy({\n ...this.policy,\n scalingSchedules: [...scalingSchedules],\n });\n };\n\n function emptyOrUndefined(value) {\n return _.isEqual(value, {}) || _.isUndefined(value);\n }\n };\n },\n },\n);\n","import { module } from 'angular';\nimport { chain } from 'lodash';\nimport React from 'react';\nimport type { AutocompleteResult, Option } from 'react-select';\nimport { Async } from 'react-select';\nimport { react2angular } from 'react2angular';\nimport { withErrorBoundary } from '@spinnaker/core';\n\ninterface ITimezoneSelectProps {\n availableTimezones: string[];\n selectedTimezone: string;\n selectTimezone: (timezone: string, target?: any) => void;\n target?: any;\n}\n\nexport class TimezoneSelect extends React.Component<ITimezoneSelectProps> {\n private loadOptions = (inputValue: string): Promise<AutocompleteResult<string>> => {\n return new Promise((resolve) => {\n if (!inputValue || inputValue.length < 3) {\n resolve({\n options: [],\n complete: false,\n });\n } else {\n const filteredOptions = chain(this.props.availableTimezones)\n .filter((i) => i.toLowerCase().includes(inputValue))\n .map((i) => ({ value: i, label: i }))\n .value();\n resolve({\n options: filteredOptions,\n complete: false,\n });\n }\n });\n };\n\n public render() {\n return (\n <Async\n cache={null}\n clearable={false}\n ignoreAccents={false}\n loadOptions={this.loadOptions}\n onChange={(selected: Option<string>) => this.props.selectTimezone(selected.value, this.props.target)}\n placeholder=\"Type at least 3 characters to search for an timezone...\"\n searchPromptText=\"Type at least 3 characters to search for an timezone...\"\n value={{ value: this.props.selectedTimezone, label: this.props.selectedTimezone }}\n required={true}\n />\n );\n }\n}\n\nexport const GCE_TIMEZONE_SELECT = 'spinnaker.gce.timezoneSelect';\nmodule(GCE_TIMEZONE_SELECT, []).component(\n 'gceTimezoneSelect',\n react2angular(withErrorBoundary(TimezoneSelect, 'gceTimezoneSelect'), [\n 'availableTimezones',\n 'selectedTimezone',\n 'selectTimezone',\n 'target',\n ]),\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport { defaults } from 'lodash';\n\nimport { GCE_HTTP_LOAD_BALANCER_UTILS } from '../loadBalancer/httpLoadBalancerUtils.service';\n\nexport const GOOGLE_SERVERGROUP_SERVERGROUP_TRANSFORMER = 'spinnaker.gce.serverGroup.transformer';\nexport const name = GOOGLE_SERVERGROUP_SERVERGROUP_TRANSFORMER; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_SERVERGROUP_TRANSFORMER, [GCE_HTTP_LOAD_BALANCER_UTILS]).factory(\n 'gceServerGroupTransformer',\n [\n 'gceHttpLoadBalancerUtils',\n function (gceHttpLoadBalancerUtils) {\n function normalizeServerGroup(serverGroup, application) {\n return application\n .getDataSource('loadBalancers')\n .ready()\n .then(() => {\n if (serverGroup.loadBalancers) {\n // At this point, the HTTP(S) load balancers have been normalized (listener names mapped to URL map names).\n // Our server groups' lists of load balancer names still need to make this mapping.\n serverGroup.loadBalancers = gceHttpLoadBalancerUtils.normalizeLoadBalancerNamesForAccount(\n serverGroup.loadBalancers,\n serverGroup.account,\n application.getDataSource('loadBalancers').data,\n );\n }\n return serverGroup;\n });\n }\n\n function convertServerGroupCommandToDeployConfiguration(base) {\n const truncatedZones = base.backingData.filtered.truncatedZones;\n\n // use defaults to avoid copying the backingData, which is huge and expensive to copy over\n const command = defaults({ backingData: [], viewState: [] }, base);\n if (base.viewState.mode !== 'clone') {\n delete command.source;\n }\n // We took this approach to avoid a breaking change to existing pipelines.\n command.disableTraffic = !command.enableTraffic;\n command.cloudProvider = 'gce';\n command.availabilityZones = {};\n command.availabilityZones[command.region] = base.zone ? [base.zone] : truncatedZones;\n command.account = command.credentials;\n delete command.viewState;\n delete command.backingData;\n delete command.selectedProvider;\n delete command.implicitSecurityGroups;\n delete command.enableTraffic;\n delete command.providerType;\n delete command.enableAutoHealing;\n\n return command;\n }\n\n return {\n convertServerGroupCommandToDeployConfiguration: convertServerGroupCommandToDeployConfiguration,\n normalizeServerGroup: normalizeServerGroup,\n };\n },\n ],\n);\n","import type { IGceHealthCheck, IGceHealthCheckKind } from '../domain';\n\nexport interface IGceHealthCheckOption {\n displayName: string;\n kind: IGceHealthCheckKind;\n name: string;\n selfLink: string;\n}\n\nexport function parseHealthCheckUrl(url: string): { healthCheckName: string; healthCheckKind: IGceHealthCheckKind } {\n const healthCheckPathParts = url.split('/');\n if (healthCheckPathParts.length < 2) {\n throw new Error(`Health check url ${url} missing expected segments.`);\n }\n const healthCheckName = healthCheckPathParts[healthCheckPathParts.length - 1];\n const healthCheckKind = healthCheckPathParts[healthCheckPathParts.length - 2].slice(0, -1);\n return {\n healthCheckName,\n healthCheckKind: healthCheckKind as IGceHealthCheckKind,\n };\n}\n\nexport function getHealthCheckOptions(healthChecks: IGceHealthCheck[]): IGceHealthCheckOption[] {\n const duplicateNames = getDuplicateHealthCheckNames(healthChecks);\n return healthChecks.map((hc) => {\n const isNameDupe = duplicateNames.has(hc.name);\n return {\n displayName: isNameDupe ? `${hc.name} (${hc.kind})` : hc.name,\n kind: hc.kind,\n name: hc.name,\n selfLink: hc.selfLink,\n };\n });\n}\n\nexport function getDuplicateHealthCheckNames(healthChecks: IGceHealthCheck[]): Set<string> {\n const allNames = new Set<string>();\n const duplicateNames = new Set<string>();\n healthChecks.forEach((hc) => {\n if (allNames.has(hc.name)) {\n duplicateNames.add(hc.name);\n } else {\n allNames.add(hc.name);\n }\n });\n return duplicateNames;\n}\n","import { get, intersectionBy, isFinite } from 'lodash';\n\nexport interface IGceAcceleratorTypeRaw {\n name: string;\n description: string;\n maximumCardsPerInstance: number;\n}\n\nexport interface IGceAcceleratorType extends IGceAcceleratorTypeRaw {\n availableCardCounts: number[];\n}\n\ninterface IZoneToAcceleratorTypesMap {\n [zone: string]: IGceAcceleratorTypeRaw[];\n}\n\nexport interface IGceAcceleratorCommand {\n backingData: any;\n credentials: string;\n distributionPolicy: { zones: string[]; targetShape?: string };\n regional: boolean;\n selectZones: boolean;\n zone: string;\n}\n\nexport class GceAcceleratorService {\n public static getAvailableAccelerators({\n backingData,\n credentials,\n distributionPolicy,\n regional,\n selectZones,\n zone,\n }: IGceAcceleratorCommand): IGceAcceleratorType[] {\n const acceleratorMap = this.getZoneToAcceleratorTypesMap(backingData, credentials);\n\n if (zone && !regional) {\n return this.getAcceleratorTypesForZone(acceleratorMap, zone);\n }\n\n if (regional && selectZones) {\n const zones = get(distributionPolicy, 'zones', []);\n const allZonesAcceleratorTypes = zones.map((z) => this.getAcceleratorTypesForZone(acceleratorMap, z));\n return intersectionBy.apply(null, [...allZonesAcceleratorTypes, 'name']);\n }\n\n return [];\n }\n\n private static getZoneToAcceleratorTypesMap(backingData: any, credentials: string): IZoneToAcceleratorTypesMap {\n return get(backingData, ['credentialsKeyedByAccount', credentials, 'zoneToAcceleratorTypesMap'], {});\n }\n\n private static getAcceleratorTypesForZone(\n acceleratorMap: IZoneToAcceleratorTypesMap,\n zone: string,\n ): IGceAcceleratorType[] {\n return get(acceleratorMap, [zone, 'acceleratorTypes', 'acceleratorTypes'], []).map((a) => {\n return {\n ...a,\n availableCardCounts: this.getAvailableCardCounts(a),\n };\n });\n }\n\n private static getAvailableCardCounts(accelerator: IGceAcceleratorTypeRaw): number[] {\n const maxCards = isFinite(accelerator.maximumCardsPerInstance) ? accelerator.maximumCardsPerInstance : 4;\n const availableCardCounts = [];\n for (let i = 1; i <= maxCards; i *= 2) {\n availableCardCounts.push(i);\n }\n return availableCardCounts;\n }\n}\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { FirewallLabels } from '@spinnaker/core';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE =\n 'spinnaker.deck.gce.tagManager.service';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE, []).factory('gceTagManager', function () {\n const resetKeys = ['command', 'securityGroups', 'securityGroupObjectsKeyedByTag', 'securityGroupObjectsKeyedById'];\n\n this.reset = () => {\n resetKeys.forEach((key) => delete this[key]);\n };\n\n this.register = (command) => {\n this.command = command;\n const { credentials, backingData } = command;\n if (backingData.securityGroups[credentials] !== undefined) {\n this.securityGroupObjects = _.cloneDeep(backingData.securityGroups[credentials].gce.global);\n\n initializeSecurityGroupObjects(this.securityGroupObjects, command.tags);\n\n const { byTag, bySecurityGroupId } = groupSecurityGroupObjects(this.securityGroupObjects);\n this.securityGroupObjectsKeyedByTag = byTag;\n this.securityGroupObjectsKeyedById = bySecurityGroupId;\n }\n\n if (!command.securityGroups) {\n command.securityGroups = this.inferSecurityGroupIdsFromTags(command.tags);\n }\n };\n\n this.inferSecurityGroupIdsFromTags = (commandTags = []) => {\n return _.chain(commandTags)\n .map((t) => this.securityGroupObjectsKeyedByTag[t.value])\n .flatten()\n .compact()\n .filter((sg) => sg.network === this.command.network)\n .map('id')\n .uniq()\n .value();\n };\n\n const initializeSecurityGroupObjects = (securityGroupObjects, commandTags = []) => {\n securityGroupObjects.forEach((sg) => {\n // Raw target tags look like '[tag-a, tag-b]'.\n const rawTags = sg.targetTags;\n sg.tagsArray = rawTags ? rawTags.substring(1, rawTags.length - 1).split(', ') : [];\n\n sg.selectedTags = commandTags\n ? _.intersection(\n commandTags.map((t) => t.value),\n sg.tagsArray,\n )\n : [];\n });\n };\n\n const groupSecurityGroupObjects = (securityGroupObjects) => {\n return securityGroupObjects.reduce(\n (groupings, sg) => {\n const { bySecurityGroupId } = groupings;\n bySecurityGroupId[sg.id] = sg;\n\n return sg.tagsArray.reduce((groupings, tag) => {\n const { byTag } = groupings;\n if (!byTag[tag]) {\n byTag[tag] = [];\n }\n byTag[tag].push(sg);\n\n return groupings;\n }, groupings);\n },\n { byTag: {}, bySecurityGroupId: {} },\n );\n };\n\n this.inferSelectedSecurityGroupFromTag = _.debounce((tagName) => {\n let securityGroupObjectsWithTag = this.securityGroupObjectsKeyedByTag[tagName];\n const c = this.command;\n\n if (securityGroupObjectsWithTag) {\n securityGroupObjectsWithTag = _.filter(securityGroupObjectsWithTag, (sg) => sg.network === this.command.network);\n }\n\n if (securityGroupObjectsWithTag) {\n updateSelectedTagsOnSecurityGroupObjects(securityGroupObjectsWithTag, tagName);\n c.securityGroups = _.map(\n updateSelectedSecurityGroups(getSecurityGroupObjectsFromIds(c.securityGroups), securityGroupObjectsWithTag),\n 'id',\n );\n }\n\n // If you pause while typing \"tag-a,\" but you really want to add \"tag-abc,\"\n // make sure you remove \"tag-a\".\n this.updateSelectedTags();\n }, 100);\n\n this.updateSelectedTags = () => {\n const c = this.command;\n const tags = c.tags.map((t) => t.value);\n\n getSecurityGroupObjectsFromIds(c.securityGroups).forEach((sg) => {\n if (sg.selectedTags) {\n sg.selectedTags = _.intersection(sg.selectedTags, tags);\n }\n\n if (!_.get(sg, 'selectedTags.length')) {\n c.securityGroups = _.without(c.securityGroups, sg.id);\n }\n });\n };\n\n this.addTag = (tagName) => {\n const c = this.command;\n const tags = c.tags;\n let securityGroupObjectsWithTag = this.securityGroupObjectsKeyedByTag[tagName];\n\n if (securityGroupObjectsWithTag) {\n securityGroupObjectsWithTag = _.filter(securityGroupObjectsWithTag, (sg) => sg.network === this.command.network);\n }\n\n if (\n !_.includes(\n tags.map((t) => t.value),\n tagName,\n )\n ) {\n tags.push({ value: tagName });\n }\n\n if (securityGroupObjectsWithTag) {\n updateSelectedTagsOnSecurityGroupObjects(securityGroupObjectsWithTag, tagName);\n c.securityGroups = _.map(\n updateSelectedSecurityGroups(getSecurityGroupObjectsFromIds(c.securityGroups), securityGroupObjectsWithTag),\n 'id',\n );\n }\n };\n\n const getSecurityGroupObjectsFromIds = (ids) => ids.map((id) => this.securityGroupObjectsKeyedById[id]);\n\n const updateSelectedTagsOnSecurityGroupObjects = (securityGroupObjects, newTag) => {\n securityGroupObjects.forEach((sg) => {\n sg.selectedTags = _.chain(sg.selectedTags || [])\n .concat([newTag])\n .uniq()\n .value();\n });\n };\n\n const updateSelectedSecurityGroups = (oldGroups, newGroups) => {\n return _.chain(oldGroups).concat(newGroups).uniq().value();\n };\n\n this.removeTag = (tagName) => {\n const c = this.command;\n const securityGroupIds = c.securityGroups || [];\n const securityGroupObjects = getSecurityGroupObjectsFromIds(securityGroupIds);\n\n securityGroupObjects.forEach((sg) => {\n if (sg.selectedTags) {\n sg.selectedTags = sg.selectedTags.filter((tag) => tag !== tagName);\n }\n });\n\n c.tags = c.tags.filter((tag) => tag.value !== tagName);\n };\n\n this.removeSecurityGroup = (securityGroupId) => {\n const securityGroupObject = this.securityGroupObjectsKeyedById[securityGroupId];\n const tagsToRemove = securityGroupObject.selectedTags;\n const c = this.command;\n\n getSecurityGroupObjectsFromIds(c.securityGroups).forEach((sg) => {\n if (sg.selectedTags) {\n sg.selectedTags = _.difference(sg.selectedTags, tagsToRemove);\n }\n });\n\n securityGroupObject.selectedTags = [];\n c.tags = _.chain(c.tags)\n .map((t) => t.value)\n .difference(tagsToRemove)\n .map((t) => ({ value: t }))\n .value();\n };\n\n this.getToolTipContent = (tagName) => {\n const groups = _.get(this, ['securityGroupObjectsKeyedByTag', tagName]);\n const groupIds = groups ? groups.filter((sg) => sg.network === this.command.network).map((sg) => sg.id) : [];\n\n return `This tag associates this server group with ${\n groupIds.length > 1 ? FirewallLabels.get('firewalls') : FirewallLabels.get('firewall')\n }\n <em>${groupIds.join(', ')}</em>.`;\n };\n\n this.showToolTip = (tagName) => {\n return !!_.get(this, ['securityGroupObjectsKeyedByTag', tagName]);\n };\n\n return this;\n});\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport {\n AccountService,\n CACHE_INITIALIZER_SERVICE,\n LOAD_BALANCER_READ_SERVICE,\n NetworkReader,\n SECURITY_GROUP_READER,\n SubnetReader,\n} from '@spinnaker/core';\n\nimport { GCEProviderSettings } from '../../gce.settings';\nimport { GCE_HEALTH_CHECK_READER } from '../../healthCheck/healthCheck.read.service';\nimport { getHealthCheckOptions } from '../../healthCheck/healthCheckUtils';\nimport { GceImageReader } from '../../image';\nimport { GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE } from './../../instance/custom/customInstanceBuilder.gce.service';\nimport { GOOGLE_INSTANCE_GCEINSTANCETYPE_SERVICE } from '../../instance/gceInstanceType.service';\nimport { GCE_HTTP_LOAD_BALANCER_UTILS } from '../../loadBalancer/httpLoadBalancerUtils.service';\nimport { LOAD_BALANCER_SET_TRANSFORMER } from '../../loadBalancer/loadBalancer.setTransformer';\nimport { GceAcceleratorService } from './wizard/advancedSettings/gceAccelerator.service';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE } from './wizard/securityGroups/tagManager.service';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE =\n 'spinnaker.serverGroup.configure.gce.configuration.service';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE, [\n LOAD_BALANCER_SET_TRANSFORMER,\n SECURITY_GROUP_READER,\n CACHE_INITIALIZER_SERVICE,\n LOAD_BALANCER_READ_SERVICE,\n GOOGLE_INSTANCE_GCEINSTANCETYPE_SERVICE,\n GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE,\n GCE_HTTP_LOAD_BALANCER_UTILS,\n GCE_HEALTH_CHECK_READER,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE,\n ])\n .factory('gceServerGroupConfigurationService', [\n 'securityGroupReader',\n 'gceInstanceTypeService',\n 'cacheInitializer',\n '$q',\n 'loadBalancerReader',\n 'gceCustomInstanceBuilderService',\n 'gceHttpLoadBalancerUtils',\n 'gceHealthCheckReader',\n 'gceTagManager',\n 'gceLoadBalancerSetTransformer',\n function (\n securityGroupReader,\n gceInstanceTypeService,\n cacheInitializer,\n $q,\n loadBalancerReader,\n gceCustomInstanceBuilderService,\n gceHttpLoadBalancerUtils,\n gceHealthCheckReader,\n gceTagManager,\n gceLoadBalancerSetTransformer,\n ) {\n const persistentDiskTypes = ['pd-standard', 'pd-ssd', 'hyperdisk-balanced'];\n const authScopes = [\n 'cloud-platform',\n 'userinfo.email',\n 'compute.readonly',\n 'compute',\n 'cloud.useraccounts.readonly',\n 'cloud.useraccounts',\n 'devstorage.read_only',\n 'devstorage.write_only',\n 'devstorage.full_control',\n 'taskqueue',\n 'bigquery',\n 'sqlservice.admin',\n 'datastore',\n 'logging.write',\n 'logging.read',\n 'logging.admin',\n 'monitoring.write',\n 'monitoring.read',\n 'monitoring',\n 'bigtable.data.readonly',\n 'bigtable.data',\n 'bigtable.admin',\n 'bigtable.admin.table',\n ];\n\n function configureCommand(application, command) {\n return $q\n .all([\n AccountService.getCredentialsKeyedByAccount('gce'),\n securityGroupReader.getAllSecurityGroups(),\n NetworkReader.listNetworksByProvider('gce'),\n SubnetReader.listSubnetsByProvider('gce'),\n loadBalancerReader.listLoadBalancers('gce'),\n loadAllImages(command.credentials),\n gceInstanceTypeService.getAllTypesByRegion(),\n $q.when(angular.copy(persistentDiskTypes)),\n $q.when(angular.copy(authScopes)),\n gceHealthCheckReader.listHealthChecks(),\n AccountService.listAccounts('gce'),\n ])\n .then(function ([\n credentialsKeyedByAccount,\n securityGroups,\n networks,\n subnets,\n loadBalancers,\n allImages,\n instanceTypes,\n persistentDiskTypes,\n authScopes,\n healthChecks,\n accounts,\n ]) {\n const backingData = {\n credentialsKeyedByAccount,\n securityGroups,\n networks,\n subnets,\n loadBalancers,\n allImages,\n instanceTypes,\n persistentDiskTypes,\n authScopes,\n healthChecks,\n accounts,\n };\n let securityGroupReloader = $q.when(null);\n let networkReloader = $q.when(null);\n let healthCheckReloader = $q.when(null);\n backingData.filtered = {};\n backingData.distributionPolicyTargetShapes = getDistributionPolicyTargetShapes();\n command.backingData = backingData;\n configureImages(command);\n\n if (command.securityGroups && command.securityGroups.length) {\n // Verify all firewalls are accounted for; otherwise, try refreshing firewalls cache.\n const securityGroupIds = _.map(getSecurityGroups(command), 'id');\n if (_.intersection(command.securityGroups, securityGroupIds).length < command.securityGroups.length) {\n securityGroupReloader = refreshSecurityGroups(command, true);\n }\n }\n if (command.network) {\n // Verify network is accounted for; otherwise, try refreshing networks cache.\n const networkNames = getNetworkNames(command);\n if (!networkNames.includes(command.network)) {\n networkReloader = refreshNetworks(command);\n }\n }\n\n // eslint-disable-next-line no-console\n if (command.autoScalingPolicy) {\n command.enableAutoScaling = true;\n }\n\n if (command.autoHealingPolicy) {\n command.enableAutoHealing = true;\n }\n if (_.has(command, 'autoHealingPolicy.healthCheck')) {\n // Verify health check is accounted for; otherwise, try refreshing health checks cache.\n const healthChecks = getHealthChecks(command);\n if (!_.chain(healthChecks).map('selfLink').includes(command.autoHealingPolicy.healthCheckUrl).value()) {\n healthCheckReloader = refreshHealthChecks(command, true);\n }\n }\n\n return $q.all([securityGroupReloader, networkReloader, healthCheckReloader]).then(() => {\n gceTagManager.register(command);\n attachEventHandlers(command);\n });\n });\n }\n\n function getDistributionPolicyTargetShapes() {\n return ['ANY', 'EVEN'];\n }\n\n function configureDistributionPolicyTargetShape(command) {\n const accountDetails = command.backingData.credentialsKeyedByAccount[command.credentials];\n if (!command.distributionPolicy.targetShape) {\n command.distributionPolicy.targetShape = 'EVEN';\n }\n }\n\n function loadAllImages(account) {\n return GceImageReader.findImages({\n account: account,\n provider: 'gce',\n q: '*',\n });\n }\n\n function configureInstanceTypes(command) {\n const result = { dirty: {} };\n if (command.region) {\n const results = [result.dirty];\n\n results.push(configureCustomInstanceTypes(command).dirty);\n results.push(configureStandardInstanceTypes(command).dirty);\n\n angular.extend(...results);\n } else {\n command.backingData.filtered.instanceTypes = [];\n }\n return result;\n }\n\n function configureCpuPlatforms(command) {\n const result = { dirty: {} };\n const filteredData = command.backingData.filtered;\n const locationToCpuPlatformsMap =\n command.backingData.credentialsKeyedByAccount[command.credentials].locationToCpuPlatformsMap;\n\n filteredData.cpuPlatforms = ['(Automatic)'];\n\n const location = command.regional ? command.region : command.zone;\n\n if (_.has(locationToCpuPlatformsMap, location)) {\n filteredData.cpuPlatforms = _.concat(filteredData.cpuPlatforms, locationToCpuPlatformsMap[location]);\n }\n\n if (!_.includes(filteredData.cpuPlatforms, command.minCpuPlatform)) {\n delete command.minCpuPlatform;\n result.dirty.minCpuPlatform = true;\n }\n return result;\n }\n\n function configureStandardInstanceTypes(command) {\n const c = command;\n const result = { dirty: {} };\n\n const locations = c.regional ? c.distributionPolicy.zones : [c.zone];\n const { credentialsKeyedByAccount } = c.backingData;\n const { locationToInstanceTypesMap } = credentialsKeyedByAccount[c.credentials];\n\n if (locations.every((l) => !l)) {\n return result;\n }\n\n let filtered = gceInstanceTypeService.getAvailableTypesForLocations(locationToInstanceTypesMap, locations);\n\n filtered = sortInstanceTypes(filtered);\n const instanceType = c.instanceType;\n if (_.every([instanceType, !_.includes(instanceType, 'custom-'), !_.includes(filtered, instanceType)])) {\n result.dirty.instanceType = c.instanceType;\n c.instanceType = null;\n }\n c.backingData.filtered.instanceTypes = filtered;\n return result;\n }\n\n function configureCustomInstanceTypes(command) {\n const c = command;\n const result = { dirty: {} };\n let vCpuCount = _.get(c, 'viewState.customInstance.vCpuCount');\n const instanceFamily = _.get(c, 'viewState.customInstance.instanceFamily');\n const memory = _.get(c, 'viewState.customInstance.memory');\n const extendedMemory = _.get(c, 'viewState.customInstance.extendedMemory');\n const { zone, regional, region } = c;\n const { locationToInstanceTypesMap } = c.backingData.credentialsKeyedByAccount[c.credentials];\n const location = regional ? region : zone;\n\n if (!location) {\n return result;\n }\n\n if (zone || regional) {\n _.set(\n c,\n 'backingData.customInstanceTypes.vCpuList',\n gceCustomInstanceBuilderService.generateValidVCpuListForLocation(location, locationToInstanceTypesMap),\n );\n }\n\n // initializes vCpuCount so that memory selector will be populated.\n if (\n !vCpuCount ||\n !gceCustomInstanceBuilderService.vCpuCountForLocationIsValid(\n instanceFamily,\n vCpuCount,\n location,\n locationToInstanceTypesMap,\n )\n ) {\n vCpuCount = _.get(c, 'backingData.customInstanceTypes.vCpuList[0]');\n _.set(c, 'viewState.customInstance.vCpuCount', vCpuCount);\n }\n\n _.set(\n c,\n 'backingData.customInstanceTypes.memoryList',\n gceCustomInstanceBuilderService.generateValidMemoryListForVCpuCount(instanceFamily, vCpuCount),\n );\n\n if (\n _.every([\n memory,\n vCpuCount,\n !gceCustomInstanceBuilderService.memoryIsValid(instanceFamily, memory, vCpuCount, extendedMemory),\n ])\n ) {\n _.set(c, 'viewState.customInstance.memory', undefined);\n result.dirty.instanceType = c.instanceType;\n c.instanceType = null;\n }\n\n _.set(\n c,\n 'backingData.customInstanceTypes.instanceFamilyList',\n gceCustomInstanceBuilderService.generateValidInstanceFamilyList(),\n );\n\n return result;\n }\n\n function configureAccelerators(command) {\n const result = { dirty: {} };\n const acceleratorTypes = GceAcceleratorService.getAvailableAccelerators(command);\n _.set(command, ['viewState', 'acceleratorTypes'], acceleratorTypes);\n result.dirty.acceleratorTypes = true;\n const chosenAccelerators = _.get(command, 'acceleratorConfigs', []);\n if (chosenAccelerators.length > 0) {\n command.acceleratorConfigs = chosenAccelerators.filter(\n (chosen) => !!acceleratorTypes.find((a) => a.name === chosen.acceleratorType),\n );\n if (command.acceleratorConfigs.length === 0) {\n delete command.acceleratorConfigs;\n }\n }\n return result;\n }\n\n // n1-standard-8 should come before n1-standard-16, so we must sort by the individual segments of the names.\n function sortInstanceTypes(instanceTypes) {\n const tokenizedInstanceTypes = _.map(instanceTypes, (instanceType) => {\n const tokens = instanceType.split('-');\n\n return {\n class: tokens[0],\n group: tokens[1],\n index: Number(tokens[2]) || 0,\n };\n });\n\n const sortedTokenizedInstanceTypes = _.sortBy(tokenizedInstanceTypes, ['class', 'group', 'index']);\n\n return _.map(sortedTokenizedInstanceTypes, (sortedTokenizedInstanceType) => {\n return (\n sortedTokenizedInstanceType.class +\n '-' +\n sortedTokenizedInstanceType.group +\n (sortedTokenizedInstanceType.index ? '-' + sortedTokenizedInstanceType.index : '')\n );\n });\n }\n\n function configureImages(command) {\n command.image = command.viewState.imageId;\n const result = { dirty: {} };\n if (command.credentials !== command.viewState.lastImageAccount) {\n command.viewState.lastImageAccount = command.credentials;\n if (!_.chain(command.backingData.allImages).find({ imageName: command.image }).value()) {\n command.image = null;\n result.dirty.imageName = true;\n }\n }\n return result;\n }\n\n function configureZones(command) {\n const result = { dirty: {} };\n const filteredData = command.backingData.filtered;\n if (command.region === null) {\n return result;\n }\n const regions = command.backingData.credentialsKeyedByAccount[command.credentials].regions;\n if (_.isArray(regions)) {\n filteredData.zones = _.find(regions, { name: command.region }).zones;\n filteredData.truncatedZones = _.takeRight(filteredData.zones.sort(), 3);\n } else {\n // TODO(duftler): Remove this once we finish deprecating the old style regions/zones in clouddriver GCE credentials.\n filteredData.zones = regions[command.region];\n }\n if (!_.chain(filteredData.zones).includes(command.zone).value()) {\n delete command.zone;\n if (!command.regional) {\n result.dirty.zone = true;\n }\n }\n return result;\n }\n\n function getHealthChecks(command) {\n const matchingHealthChecks = _.filter(command.backingData.healthChecks, { account: command.credentials });\n return getHealthCheckOptions(matchingHealthChecks);\n }\n\n function configureHealthChecks(command) {\n const result = { dirty: {} };\n const filteredData = command.backingData.filtered;\n\n if (command.credentials === null) {\n return result;\n }\n\n filteredData.healthChecks = getHealthChecks(command);\n\n if (\n _.has(command, 'autoHealingPolicy.healthCheck') &&\n !_.chain(filteredData.healthChecks).map('selfLink').includes(command.autoHealingPolicy.healthCheckUrl).value()\n ) {\n delete command.autoHealingPolicy.healthCheck;\n result.dirty.autoHealingPolicy = true;\n } else {\n result.dirty.autoHealingPolicy = null;\n }\n\n return result;\n }\n\n function getLoadBalancers(command) {\n return _.chain(command.backingData.loadBalancers)\n .map('accounts')\n .flattenDeep()\n .filter({ name: command.credentials })\n .map('regions')\n .flattenDeep()\n .map('loadBalancers')\n .flattenDeep()\n .filter(_.curry(isRelevantLoadBalancer)(command))\n .uniq()\n .value();\n }\n\n function isRelevantLoadBalancer(command, loadBalancer) {\n return loadBalancer.region === command.region || loadBalancer.region === 'global';\n }\n\n function configureLoadBalancerOptions(command) {\n const results = { dirty: {} };\n const current = command.loadBalancers;\n const newLoadBalancerObjects = gceLoadBalancerSetTransformer.normalizeLoadBalancerSet(\n getLoadBalancers(command),\n );\n command.backingData.filtered.loadBalancerIndex = _.keyBy(newLoadBalancerObjects, 'name');\n command.backingData.filtered.loadBalancers = _.map(newLoadBalancerObjects, 'name');\n\n if (current && command.loadBalancers) {\n command.loadBalancers = gceHttpLoadBalancerUtils.normalizeLoadBalancerNamesForAccount(\n command.loadBalancers,\n command.credentials,\n newLoadBalancerObjects,\n );\n const matched = _.intersection(command.backingData.filtered.loadBalancers, command.loadBalancers);\n const removed = _.xor(matched, command.loadBalancers);\n command.loadBalancers = matched;\n configureBackendServiceOptions(command);\n\n if (removed.length) {\n results.dirty.loadBalancers = removed;\n }\n }\n return results;\n }\n\n function configureBackendServiceOptions(command) {\n /*\n a server group has a list of backend services, but there's no mapping from l7 -> backend service\n for the server group. this will not populate the wizard perfectly,\n but it is the best we can do with the given data.\n */\n\n const backendsFromMetadata = command.backendServiceMetadata;\n const lbIndex = command.backingData.filtered.loadBalancerIndex;\n\n const backendServices = command.loadBalancers.reduce((backendServices, lbName) => {\n if (gceHttpLoadBalancerUtils.isHttpLoadBalancer(lbIndex[lbName])) {\n backendServices[lbName] = _.intersection(lbIndex[lbName].backendServices, backendsFromMetadata);\n }\n return backendServices;\n }, {});\n\n if (Object.keys(backendServices).length > 0) {\n command.backendServices = backendServices;\n }\n }\n\n function refreshLoadBalancers(command, skipCommandReconfiguration) {\n return loadBalancerReader.listLoadBalancers('gce').then(function (loadBalancers) {\n command.backingData.loadBalancers = loadBalancers;\n if (!skipCommandReconfiguration) {\n configureLoadBalancerOptions(command);\n }\n });\n }\n\n function refreshHealthChecks(command, skipCommandReconfiguration) {\n return cacheInitializer\n .refreshCache('healthChecks')\n .then(function () {\n return gceHealthCheckReader.listHealthChecks();\n })\n .then(function (healthChecks) {\n command.backingData.healthChecks = healthChecks;\n if (!skipCommandReconfiguration) {\n configureHealthChecks(command);\n }\n });\n }\n\n function configureSubnets(command) {\n const result = { dirty: {} };\n const filteredData = command.backingData.filtered;\n if (command.region === null) {\n return result;\n }\n filteredData.subnets = _.chain(command.backingData.subnets)\n .filter({ account: command.credentials, network: command.network, region: command.region })\n .map('id')\n .value();\n\n if (!_.chain(filteredData.subnets).includes(command.subnet).value()) {\n command.subnet = '';\n result.dirty.subnet = true;\n }\n return result;\n }\n\n function getSecurityGroups(command) {\n let newSecurityGroups = command.backingData.securityGroups[command.credentials] || { gce: {} };\n newSecurityGroups = _.filter(newSecurityGroups.gce.global, function (securityGroup) {\n return securityGroup.network === command.network;\n });\n return _.chain(newSecurityGroups).sortBy('name').value();\n }\n\n function getXpnHostProjectIfAny(network) {\n if (network && network.includes('/')) {\n return network.split('/')[0] + '/';\n } else {\n return '';\n }\n }\n\n function configureSecurityGroupOptions(command) {\n const results = { dirty: {} };\n const currentOptions = command.backingData.filtered.securityGroups;\n const newSecurityGroups = getSecurityGroups(command);\n if (currentOptions && command.securityGroups) {\n // not initializing - we are actually changing groups\n const currentGroupNames = command.securityGroups.map(function (groupId) {\n const match = _.chain(currentOptions).find({ id: groupId }).value();\n return match ? match.id : groupId;\n });\n const matchedGroups = command.securityGroups\n .map(function (groupId) {\n const securityGroup = _.chain(currentOptions).find({ id: groupId }).value();\n return securityGroup ? securityGroup.id : null;\n })\n .map(function (groupName) {\n return _.chain(newSecurityGroups).find({ id: groupName }).value();\n })\n .filter(function (group) {\n return group;\n });\n command.securityGroups = _.map(matchedGroups, 'id');\n const removed = _.xor(currentGroupNames, command.securityGroups);\n if (removed.length) {\n results.dirty.securityGroups = removed;\n }\n }\n\n // Only include explicit firewall options in the pulldown list.\n command.backingData.filtered.securityGroups = _.filter(newSecurityGroups, function (securityGroup) {\n return !_.isEmpty(securityGroup.targetTags);\n });\n\n // Identify implicit firewalls so they can be optionally listed in a read-only state.\n command.implicitSecurityGroups = _.filter(newSecurityGroups, function (securityGroup) {\n return _.isEmpty(securityGroup.targetTags);\n });\n\n // Only include explicitly-selected firewalls in the body of the command.\n const xpnHostProject = getXpnHostProjectIfAny(command.network);\n const decoratedSecurityGroups = _.map(command.securityGroups, (sg) =>\n !sg.startsWith(xpnHostProject) ? xpnHostProject + sg : sg,\n );\n command.securityGroups = _.difference(decoratedSecurityGroups, _.map(command.implicitSecurityGroups, 'id'));\n\n return results;\n }\n\n function refreshSecurityGroups(command, skipCommandReconfiguration) {\n return cacheInitializer.refreshCache('securityGroups').then(function () {\n return securityGroupReader.getAllSecurityGroups().then(function (securityGroups) {\n command.backingData.securityGroups = securityGroups;\n if (!skipCommandReconfiguration) {\n configureSecurityGroupOptions(command);\n }\n });\n });\n }\n\n function getNetworkNames(command) {\n return _.map(_.filter(command.backingData.networks, { account: command.credentials }), 'id');\n }\n\n function refreshNetworks(command) {\n NetworkReader.listNetworksByProvider('gce').then(function (gceNetworks) {\n command.backingData.networks = gceNetworks;\n });\n }\n\n function refreshInstanceTypes(command) {\n return cacheInitializer.refreshCache('instanceTypes').then(function () {\n return gceInstanceTypeService.getAllTypesByRegion().then(function (instanceTypes) {\n command.backingData.instanceTypes = instanceTypes;\n configureInstanceTypes(command);\n });\n });\n }\n\n function attachEventHandlers(cmd) {\n cmd.regionalChanged = function regionalChanged(command) {\n const result = { dirty: {} };\n const filteredData = command.backingData.filtered;\n const defaults = GCEProviderSettings.defaults;\n if (command.regional) {\n command.zone = null;\n configureDistributionPolicyTargetShape(command);\n } else if (!command.zone) {\n if (command.region === defaults.region) {\n command.zone = defaults.zone;\n } else {\n command.zone = filteredData.zones[0];\n }\n\n angular.extend(result.dirty, configureZones(command).dirty);\n }\n\n command.viewState.dirty = command.viewState.dirty || {};\n angular.extend(command.viewState.dirty, result.dirty);\n return result;\n };\n\n cmd.regionChanged = function regionChanged(command) {\n const result = { dirty: {} };\n const filteredData = command.backingData.filtered;\n angular.extend(result.dirty, configureSubnets(command).dirty);\n if (command.region) {\n angular.extend(result.dirty, configureInstanceTypes(command).dirty);\n angular.extend(result.dirty, configureZones(command).dirty);\n angular.extend(result.dirty, configureCpuPlatforms(command).dirty);\n // TODO: Internal Load Balancers also need to be filtered by network.\n angular.extend(result.dirty, configureLoadBalancerOptions(command).dirty);\n angular.extend(result.dirty, configureImages(command).dirty);\n } else {\n filteredData.zones = null;\n }\n\n command.viewState.dirty = command.viewState.dirty || {};\n angular.extend(command.viewState.dirty, result.dirty);\n return result;\n };\n\n cmd.credentialsChanged = function credentialsChanged(command) {\n const result = { dirty: {} };\n const backingData = command.backingData;\n if (command.credentials) {\n const regions = backingData.credentialsKeyedByAccount[command.credentials].regions;\n if (_.isArray(regions)) {\n backingData.filtered.regions = _.map(regions, 'name');\n } else {\n // TODO(duftler): Remove this once we finish deprecating the old style regions/zones in clouddriver GCE credentials.\n backingData.filtered.regions = _.keys(regions);\n }\n if (!backingData.filtered.regions.includes(command.region)) {\n command.region = null;\n result.dirty.region = true;\n } else {\n angular.extend(result.dirty, command.regionChanged(command).dirty);\n }\n\n backingData.filtered.networks = getNetworkNames(command);\n if (!backingData.filtered.networks.includes(command.network)) {\n command.network = null;\n result.dirty.network = true;\n } else {\n angular.extend(result.dirty, command.networkChanged(command).dirty);\n }\n\n angular.extend(result.dirty, configureHealthChecks(command).dirty);\n angular.extend(result.dirty, configureInstanceTypes(command).dirty);\n\n configureDistributionPolicyTargetShape(command);\n } else {\n command.region = null;\n }\n\n command.viewState.dirty = command.viewState.dirty || {};\n angular.extend(command.viewState.dirty, result.dirty);\n\n return result;\n };\n\n cmd.networkChanged = function networkChanged(command) {\n const result = { dirty: {} };\n\n command.viewState.autoCreateSubnets = _.chain(command.backingData.networks)\n .filter({ account: command.credentials, id: command.network })\n .map('autoCreateSubnets')\n .head()\n .value();\n\n command.viewState.subnets = _.chain(command.backingData.networks)\n .filter({ account: command.credentials, id: command.network })\n .map('subnets')\n .head()\n .value();\n\n angular.extend(result.dirty, configureSubnets(command).dirty);\n angular.extend(result.dirty, configureSecurityGroupOptions(command).dirty);\n\n // TODO: Internal Load Balancers also need to be filtered by network.\n\n command.viewState.dirty = command.viewState.dirty || {};\n angular.extend(command.viewState.dirty, result.dirty);\n\n return result;\n };\n\n cmd.zoneChanged = function zoneChanged(command) {\n const result = { dirty: {} };\n if (command.zone === undefined && !command.regional) {\n result.dirty.zone = true;\n }\n command.viewState.dirty = command.viewState.dirty || {};\n angular.extend(command.viewState.dirty, result.dirty);\n angular.extend(command.viewState.dirty, configureInstanceTypes(command).dirty);\n angular.extend(command.viewState.dirty, configureCpuPlatforms(command).dirty);\n angular.extend(command.viewState.dirty, configureAccelerators(command).dirty);\n return result;\n };\n\n cmd.selectZonesChanged = function selectZonesChanged(command) {\n const result = { dirty: {} };\n command.viewState.dirty = command.viewState.dirty || {};\n angular.extend(command.viewState.dirty, result.dirty);\n angular.extend(command.viewState.dirty, configureAccelerators(command).dirty);\n return result;\n };\n\n cmd.customInstanceChanged = function customInstanceChanged(command) {\n const result = { dirty: {} };\n\n command.viewState.dirty = command.viewState.dirty || {};\n angular.extend(result, command.viewState.dirty, configureCustomInstanceTypes(command).dirty);\n\n return result;\n };\n }\n\n return {\n configureCommand,\n configureInstanceTypes,\n configureImages,\n configureZones,\n configureSubnets,\n configureLoadBalancerOptions,\n refreshLoadBalancers,\n refreshSecurityGroups,\n refreshInstanceTypes,\n refreshHealthChecks,\n };\n },\n ]);\n","import { module } from 'angular';\n\nimport { get, isEmpty } from 'lodash';\nimport React from 'react';\nimport type { Option } from 'react-select';\nimport Select from 'react-select';\nimport { react2angular } from 'react2angular';\n\nimport { HelpField, withErrorBoundary } from '@spinnaker/core';\n\nimport type { IGceAcceleratorType } from './gceAccelerator.service';\n\ninterface IGceAcceleratorConfig {\n acceleratorType: string;\n acceleratorCount: number;\n}\n\nexport interface IGceAcceleratorConfigurerProps {\n acceleratorConfigs: IGceAcceleratorConfig[];\n availableAccelerators: IGceAcceleratorType[];\n regional: boolean;\n setAcceleratorConfigs: (configs: IGceAcceleratorConfig[]) => void;\n zone: string;\n}\n\nexport function GceAcceleratorConfigurer({\n acceleratorConfigs = [],\n availableAccelerators = [],\n regional,\n setAcceleratorConfigs,\n zone,\n}: IGceAcceleratorConfigurerProps) {\n const addAccelerator = (): void => {\n if (isEmpty(availableAccelerators)) {\n return;\n }\n setAcceleratorConfigs(\n acceleratorConfigs.concat([\n {\n acceleratorType: availableAccelerators[0].name,\n acceleratorCount: 1,\n },\n ]),\n );\n };\n\n const removeAccelerator = (indexToRemove: number): void => {\n setAcceleratorConfigs(\n acceleratorConfigs.filter((_config, index) => {\n return indexToRemove !== index;\n }),\n );\n };\n\n const getTypeOptions = (): Array<Option<string>> => {\n return availableAccelerators.map(({ description, name }) => {\n return {\n label: description,\n value: name,\n };\n });\n };\n\n const getAvailableCardCounts = (acceleratorType: string): number[] => {\n const acceleratorConfig = availableAccelerators.find(({ name }) => name === acceleratorType);\n return get(acceleratorConfig, 'availableCardCounts', []);\n };\n\n const getCountOptions = (acceleratorType: string): Array<Option<number>> => {\n return getAvailableCardCounts(acceleratorType).map((count) => ({\n label: count.toString(),\n value: count,\n }));\n };\n\n const getNearestCount = (type: string, currentCount: number): number => {\n const availableCounts = getAvailableCardCounts(type);\n if (availableCounts.includes(currentCount)) {\n return currentCount;\n }\n return availableCounts.reduce((nearest, count) => {\n if (count > currentCount) {\n return nearest;\n }\n return count;\n }, 1);\n };\n\n const onTypeChange = (indexToUpdate: number, type: string): void => {\n setAcceleratorConfigs(\n acceleratorConfigs.map((config, index) => {\n if (indexToUpdate !== index) {\n return config;\n }\n return {\n acceleratorType: type,\n acceleratorCount: getNearestCount(type, config.acceleratorCount),\n };\n }),\n );\n };\n\n const onCountChange = (indexToUpdate: number, count: number) => {\n setAcceleratorConfigs(\n acceleratorConfigs.map((config, index) => {\n if (indexToUpdate !== index) {\n return config;\n }\n return {\n ...config,\n acceleratorCount: count,\n };\n }),\n );\n };\n\n return (\n <div className=\"form-group\">\n <div className=\"sm-label-left\">\n Accelerators <HelpField id=\"gce.serverGroup.accelerator\" />\n </div>\n <table className=\"table table-condensed packed tags\">\n <thead>\n <tr>\n <th style={{ width: '75%' }}>Type</th>\n <th style={{ width: '15%' }}>Count</th>\n <th />\n </tr>\n </thead>\n <tbody>\n {acceleratorConfigs.map(({ acceleratorType, acceleratorCount }, i) => (\n <tr key={i}>\n <td>\n <Select\n clearable={false}\n onChange={(option: Option<string>) => onTypeChange(i, option.value)}\n options={getTypeOptions()}\n value={acceleratorType}\n />\n </td>\n <td>\n <Select\n clearable={false}\n onChange={(option: Option<number>) => onCountChange(i, option.value)}\n options={getCountOptions(acceleratorType)}\n value={acceleratorCount}\n />\n </td>\n <td>\n <button className=\"btn btn-link\" onClick={() => removeAccelerator(i)}>\n <span className=\"glyphicon glyphicon-trash\" />\n </button>\n </td>\n </tr>\n ))}\n {!isEmpty(acceleratorConfigs) && (\n <tr>\n <td colSpan={3}>\n Adding Accelerators places constraints on the instances that you can deploy. See\n <a href=\"https://cloud.google.com/compute/docs/gpus/#restrictions\" target=\"_blank\">\n {' '}\n the complete list of these restrictions\n </a>{' '}\n for more information.\n </td>\n </tr>\n )}\n {!isEmpty(availableAccelerators) && (\n <tr>\n <td colSpan={3}>\n <button className=\"btn btn-block btn-sm add-new\" onClick={addAccelerator}>\n <span className=\"glyphicon glyphicon-plus-sign\" /> Add Accelerator\n </button>\n </td>\n </tr>\n )}\n {isEmpty(availableAccelerators) && !regional && !zone && (\n <tr>\n <td colSpan={3}>\n A zone must be selected to configure accelerators. Please note: the set of available accelerator types\n are limited by zone. See{' '}\n <a href=\"https://cloud.google.com/compute/docs/gpus/#gpus-list\" target=\"_blank\">\n the complete list of types in each zone\n </a>{' '}\n for more information.\n </td>\n </tr>\n )}\n {isEmpty(availableAccelerators) && !regional && zone && (\n <tr>\n <td colSpan={3}>There are no accelerators available in the currently selected zone.</td>\n </tr>\n )}\n {isEmpty(availableAccelerators) && regional && (\n <tr>\n <td colSpan={3}>\n There are no accelerators available in all of the currently selected zone(s). Please explicitly select\n only zones that each support the accelerators you would like to configure. See{' '}\n <a href=\"https://cloud.google.com/compute/docs/gpus/#gpus-list\" target=\"_blank\">\n the complete list of types in each zone\n </a>{' '}\n for more information.\n </td>\n </tr>\n )}\n </tbody>\n </table>\n </div>\n );\n}\n\nexport const GCE_ACCELERATOR_CONFIGURER = 'spinnaker.gce.accelerator.component';\nmodule(GCE_ACCELERATOR_CONFIGURER, []).component(\n 'gceAcceleratorConfigurer',\n react2angular(withErrorBoundary(GceAcceleratorConfigurer, 'gceAcceleratorConfigurer'), [\n 'acceleratorConfigs',\n 'availableAccelerators',\n 'regional',\n 'setAcceleratorConfigs',\n 'zone',\n ]),\n);\n","import { module } from 'angular';\nimport UI_SELECT from 'ui-select';\n\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE } from '../securityGroups/tagManager.service';\n\n('use strict');\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE =\n 'spinnaker.google.serverGroup.configure.wizard.advancedSettings.selector.directive';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE, [\n UI_SELECT,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE,\n])\n .directive('gceServerGroupAdvancedSettingsSelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./advancedSettings.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'vm',\n controller: 'gceServerGroupAdvancedSettingsSelectorCtrl',\n };\n })\n .controller('gceServerGroupAdvancedSettingsSelectorCtrl', [\n '$scope',\n 'gceTagManager',\n function ($scope, gceTagManager) {\n this.addTag = () => {\n this.command.tags.push({});\n };\n\n this.removeTag = (index) => {\n this.command.tags.splice(index, 1);\n gceTagManager.updateSelectedTags();\n };\n\n this.setDisks = (disks) => {\n this.command.disks = disks;\n };\n\n this.inferSelectedSecurityGroupFromTag = gceTagManager.inferSelectedSecurityGroupFromTag;\n this.showToolTip = gceTagManager.showToolTip;\n this.getToolTipContent = gceTagManager.getToolTipContent;\n\n this.setPreemptible = () => {\n if (this.command.preemptible) {\n this.command.automaticRestart = false;\n this.command.onHostMaintenance = 'TERMINATE';\n } else {\n this.command.automaticRestart = true;\n this.command.onHostMaintenance = 'MIGRATE';\n }\n };\n\n this.setEnableVtpm = () => {\n if (!this.command.enableVtpm) {\n // Integrity monitoring requires vTPM to be enabled.\n this.command.enableIntegrityMonitoring = false;\n }\n };\n\n this.setAcceleratorConfigs = (configs) => {\n $scope.$apply(() => {\n this.command.acceleratorConfigs = configs;\n });\n };\n },\n ]);\n","import type { IComponentController, IComponentOptions, IScope } from 'angular';\nimport { module } from 'angular';\nimport { without } from 'lodash';\n\ninterface IGceDisk {\n type: string;\n sizeGb: number;\n sourceImage?: string;\n}\n\nclass GceDiskConfigurerController implements IComponentController {\n public localSSDCount: number;\n public persistentDisks: IGceDisk[];\n public isDefault: boolean;\n\n // From component bindings.\n public command: any;\n public disks: IGceDisk[];\n private updateDisks: (arg: { disks: IGceDisk[] }) => void;\n\n public static $inject = ['$scope'];\n constructor(public $scope: IScope) {}\n\n public $onInit(): void {\n this.setLocalSSDCount();\n this.setPersistentDisks();\n\n if (this.getLocalSSDDisks().length && !this.command?.viewState?.instanceTypeDetails?.storage?.localSSDSupported) {\n this.updateDisks({ disks: this.sortDisks(this.getPersistentDisks()) });\n }\n\n this.isDefault = !!this.command?.viewState?.instanceTypeDetails?.storage?.isDefault;\n }\n\n public $onChanges(): void {\n this.$onInit();\n }\n\n public handleLocalSSDCountChange(): void {\n // Handles invalid input.\n if (this.localSSDCount === undefined) {\n return;\n }\n\n let disks = this.getPersistentDisks();\n for (let i = 0; i < this.localSSDCount; i++) {\n disks = disks.concat([{ type: 'local-ssd', sizeGb: 375 }]);\n }\n\n disks = this.sortDisks(disks);\n this.updateDisks({ disks });\n }\n\n public handlePersistentDiskChange(): void {\n let disks = this.persistentDisks.concat(this.getLocalSSDDisks());\n disks = this.sortDisks(disks);\n this.updateDisks({ disks });\n }\n\n public handleImageChange = (imageName: string, target: IGceDisk) => {\n // called from a React component\n this.$scope.$apply(() => {\n target.sourceImage = imageName;\n this.handlePersistentDiskChange();\n });\n };\n\n public addPersistentDisk(): void {\n this.persistentDisks = this.persistentDisks.concat([{ type: 'pd-ssd', sizeGb: 10, sourceImage: null }]);\n this.handlePersistentDiskChange();\n }\n\n public removePersistentDisk(index: number): void {\n this.persistentDisks.splice(index, 1);\n this.handlePersistentDiskChange();\n }\n\n private setPersistentDisks(): void {\n this.persistentDisks = this.getPersistentDisks();\n }\n\n private setLocalSSDCount(): void {\n this.localSSDCount = this.getLocalSSDDisks().length;\n }\n\n private sortDisks(disks: IGceDisk[]): IGceDisk[] {\n const diskWithoutImage = disks.find(\n (disk) => (disk.type.startsWith('pd-') || disk.type.startsWith('hyperdisk-')) && disk.sourceImage === undefined,\n );\n return [diskWithoutImage].concat(without(disks, diskWithoutImage));\n }\n\n private getLocalSSDDisks(): IGceDisk[] {\n return (this.command.disks || []).filter((disk: IGceDisk) => disk.type === 'local-ssd');\n }\n\n private getPersistentDisks(): IGceDisk[] {\n return (this.command.disks || []).filter(\n (disk: IGceDisk) => disk.type.startsWith('pd-') || disk.type.startsWith('hyperdisk-'),\n );\n }\n}\n\nconst gceDiskConfigurer: IComponentOptions = {\n controller: GceDiskConfigurerController,\n bindings: { command: '<', disks: '<', updateDisks: '&' },\n template: `\n <ng-form name=\"diskConfigurer\">\n <div class=\"form-group\">\n <div class=\"col-md-5 sm-label-right\">\n <b>Number of Local SSD Disks</b>\n <help-field key=\"gce.instance.storage.localSSD\"></help-field>\n </div>\n <div class=\"col-md-2\">\n <input type=\"number\"\n class=\"form-control input-sm\"\n ng-model=\"$ctrl.localSSDCount\"\n ng-change=\"$ctrl.handleLocalSSDCountChange()\"\n required\n min=\"0\"\n max=\"{{$ctrl.command.viewState.instanceTypeDetails.storage.localSSDSupported ? 8 : 0}}\"\n ng-disabled=\"!$ctrl.command.viewState.instanceTypeDetails.storage.localSSDSupported\"/>\n </div>\n </div>\n <div class=\"form-group\">\n <div class=\"sm-label-left\" style=\"margin-bottom: 5px;\">Persistent Disks\n <span class=\"glyphicon glyphicon-warning-sign\"\n style=\"color: #EEBB3C;\"\n ng-if=\"$ctrl.isDefault && !diskConfigurer.$dirty\"\n uib-tooltip=\"This instance type does not have an explicitly configured persistent disk option and is using the\n default disk storage specified in settings.js.\"></span>\n </div>\n <table class=\"table table-condensed packed tags\">\n <thead>\n <tr>\n <th style=\"width: 25%;\">Type</th>\n <th>Size (GB)</th>\n <th style=\"width: 50%;\">Image</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat=\"disk in $ctrl.persistentDisks\">\n <td>\n <ui-select ng-model=\"disk.type\" class=\"form-control input-sm\" on-select=\"$ctrl.handlePersistentDiskChange()\" required>\n <ui-select-match placeholder=\"Select...\">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat=\"persistentDiskType in $ctrl.command.backingData.persistentDiskTypes | filter: $select.search\">\n <span ng-bind-html=\"persistentDiskType | highlight: $select.search\"></span>\n </ui-select-choices>\n </ui-select>\n </td>\n <td>\n <input type=\"number\"\n class=\"form-control input-sm\"\n ng-model=\"disk.sizeGb\"\n ng-change=\"$ctrl.handlePersistentDiskChange()\"\n required\n min=\"10\"/>\n </td>\n <td>\n <div ng-if=\"$index === 0\">\n <p class=\"small\" style=\"margin: 0;\" ng-if=\"$ctrl.command.viewState.mode === 'create' || $ctrl.command.viewState.mode === 'clone'\">\n This disk will use the image selected at the top of this dialogue.\n </p>\n <p class=\"small\" style=\"margin: 0;\" ng-if=\"$ctrl.command.viewState.mode === 'createPipeline' || $ctrl.command.viewState.mode === 'editPipeline'\">\n This disk will use the image inferred from this pipeline's execution context.\n </p>\n </div>\n <gce-image-select\n ng-if=\"$index > 0\"\n available-images=\"$ctrl.command.backingData.allImages\"\n selected-image=\"disk.sourceImage\"\n select-image=\"$ctrl.handleImageChange\"\n target=\"disk\"\n ></gce-image-select>\n </td>\n <td ng-if=\"$index > 0\">\n <a class=\"btn btn-link sm-label\" style=\"margin-top: 0;\" ng-click=\"$ctrl.removePersistentDisk($index)\">\n <span class=\"glyphicon glyphicon-trash\"></span>\n </a>\n </td>\n </tr>\n </tbody>\n <tfoot>\n <tr>\n <td colspan=\"4\">\n <button class=\"btn btn-block btn-sm add-new\" ng-click=\"$ctrl.addPersistentDisk()\">\n <span class=\"glyphicon glyphicon-plus-sign\"></span> Add New Persistent Disk\n </button>\n </td>\n </tr>\n </tfoot>\n </table>\n </div>\n </ng-form>`,\n};\n\nexport const GCE_DISK_CONFIGURER = 'spinnaker.gce.diskConfigurer.component';\nmodule(GCE_DISK_CONFIGURER, []).component('gceDiskConfigurer', gceDiskConfigurer);\n","import type { IComponentOptions, IController } from 'angular';\nimport { module } from 'angular';\nimport { set } from 'lodash';\n\nimport type { IGceAutoHealingPolicy } from '../../../../domain/autoHealingPolicy';\nimport type { IGceHealthCheckOption } from '../../../../healthCheck/healthCheckUtils';\nimport { parseHealthCheckUrl } from '../../../../healthCheck/healthCheckUtils';\n\nclass GceAutoHealingPolicySelector implements IController {\n public healthChecks: string[];\n public autoHealingPolicy: IGceAutoHealingPolicy;\n public enabled: boolean;\n public viewState: { maxUnavailableMetric: 'percent' | 'fixed' };\n private setAutoHealingPolicy: Function;\n\n public $onInit(): void {\n if (this.autoHealingPolicy && this.autoHealingPolicy.maxUnavailable) {\n if (typeof this.autoHealingPolicy.maxUnavailable.fixed === 'number') {\n this.viewState = { maxUnavailableMetric: 'fixed' };\n } else if (typeof this.autoHealingPolicy.maxUnavailable.percent === 'number') {\n this.viewState = { maxUnavailableMetric: 'percent' };\n }\n }\n\n if (!this.autoHealingPolicy) {\n this.setAutoHealingPolicy({ autoHealingPolicy: { initialDelaySec: 300 } });\n }\n }\n\n public $onDestroy(): void {\n this.setAutoHealingPolicy({ autoHealingPolicy: null });\n }\n\n public manageMaxUnavailableMetric(selectedMetric: string): void {\n if (!selectedMetric) {\n // Clouddriver deletes maxUnavailable if maxUnavailable is an empty object.\n this.autoHealingPolicy.maxUnavailable = {};\n } else {\n const toDeleteKey = selectedMetric === 'percent' ? 'fixed' : 'percent';\n set(this.autoHealingPolicy, ['maxUnavailable', toDeleteKey], undefined);\n }\n }\n\n public onHealthCheckChange(_healthCheck: IGceHealthCheckOption, healthCheckUrl: string) {\n if (healthCheckUrl) {\n const { healthCheckName, healthCheckKind } = parseHealthCheckUrl(healthCheckUrl);\n this.autoHealingPolicy.healthCheck = healthCheckName;\n this.autoHealingPolicy.healthCheckKind = healthCheckKind;\n }\n }\n}\n\nconst gceAutoHealingPolicySelectorComponent: IComponentOptions = {\n bindings: {\n onHealthCheckRefresh: '&',\n setAutoHealingPolicy: '&',\n healthChecks: '<',\n autoHealingPolicy: '<',\n enabled: '<',\n labelColumns: '@?',\n },\n templateUrl: require('./autoHealingPolicySelector.component.html'),\n controller: GceAutoHealingPolicySelector,\n};\n\nexport const GCE_AUTOHEALING_POLICY_SELECTOR = 'spinnaker.gce.autoHealingPolicy.selector.component';\nmodule(GCE_AUTOHEALING_POLICY_SELECTOR, []).component(\n 'gceAutoHealingPolicySelector',\n gceAutoHealingPolicySelectorComponent,\n);\n","/* eslint-disable no-debugger */\nimport { IComponentOptions, module } from 'angular';\nimport { cloneDeep } from 'lodash';\n\nimport { TaskMonitor } from '@spinnaker/core';\n\nimport { GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_BASICSETTINGS_BASICSETTINGS_COMPONENT } from '../../../../autoscalingPolicy/components/basicSettings/basicSettings.component';\nimport { GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_METRICSETTINGS_METRICSETTINGS_COMPONENT } from '../../../../autoscalingPolicy/components/metricSettings/metricSettings.component';\nimport { GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_SCALINGSCHEDULES_SCALINGSCHEDULES_COMPONENT } from '../../../../autoscalingPolicy/components/scalingSchedules/scalingSchedules.component';\n\nimport './autoScalingPolicySelector.less';\n\nconst gceAutoScalingPolicySelectorComponent = {\n bindings: {\n policy: '<',\n enabled: '<',\n setAutoScalingPolicy: '&',\n autoscalingPolicy: '<',\n },\n templateUrl: require('./autoScalingPolicySelector.component.html'),\n controller: 'gceUpsertAutoscalingPolicyCtrl',\n};\n\nexport const GCE_AUTOSCALING_POLICY_SELECTOR_COMPONENT = 'spinnaker.gce.autoScalingPolicy.selector.component';\nmodule(GCE_AUTOSCALING_POLICY_SELECTOR_COMPONENT, [\n GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_BASICSETTINGS_BASICSETTINGS_COMPONENT,\n GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_METRICSETTINGS_METRICSETTINGS_COMPONENT,\n GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_SCALINGSCHEDULES_SCALINGSCHEDULES_COMPONENT,\n])\n .controller('gceUpsertAutoscalingPolicyCtrl', [\n '$scope',\n function ($scope) {\n var vm = this;\n this.$onInit = function () {\n this.policy = cloneDeep({});\n this.setAutoScalingPolicy({ autoscalingPolicy: this.policy });\n\n this.updatePolicy = (updatedPolicy) => {\n $scope.$applyAsync(() => {\n this.policy = updatedPolicy;\n this.setAutoScalingPolicy({ autoscalingPolicy: this.policy });\n });\n };\n };\n },\n ])\n .component('gceAutoScalingPolicySelectorComponent', gceAutoScalingPolicySelectorComponent);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_ADVANCEDCAPACITYSELECTOR_COMPONENT =\n 'spinnaker.deck.gce.serverGroup.configure.advancedCapacitySelector.component';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_ADVANCEDCAPACITYSELECTOR_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_ADVANCEDCAPACITYSELECTOR_COMPONENT, []).component(\n 'gceServerGroupAdvancedCapacitySelector',\n {\n bindings: {\n command: '=',\n },\n templateUrl: require('./advancedCapacitySelector.component.html'),\n },\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_SIMPLECAPACITYSELECTOR_COMPONENT =\n 'spinnaker.google.serverGroup.configure.wizard.simpleCapacity.selector.component';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_SIMPLECAPACITYSELECTOR_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_SIMPLECAPACITYSELECTOR_COMPONENT, [])\n .component('gceServerGroupSimpleCapacitySelector', {\n templateUrl: require('./simpleCapacitySelector.component.html'),\n bindings: {\n command: '=',\n setSimpleCapacity: '=',\n },\n controller: 'gceServerGroupSimpleCapacitySelectorCtrl',\n })\n .controller('gceServerGroupSimpleCapacitySelectorCtrl', function () {\n this.setMinMax = (newVal) => {\n this.command.capacity.min = newVal;\n this.command.capacity.max = newVal;\n };\n });\n","import React from 'react';\nimport type { Option } from 'react-select';\nimport Select from 'react-select';\n\nimport { CheckboxInput, HelpField } from '@spinnaker/core';\nimport './customInstanceConfigurer.component.less';\n\nexport interface ICustomInstanceConfig {\n vCpuCount: number;\n memory: number;\n instanceFamily: string;\n extendedMemory: boolean;\n}\n\nexport interface ICustomInstanceConfigurerProps {\n vCpuList: number[];\n memoryList: number[];\n instanceFamilyList: string[];\n selectedVCpuCount: number;\n selectedMemory: number;\n selectedInstanceFamily: string;\n selectedExtendedMemory: boolean;\n onChange: (config: ICustomInstanceConfig) => void;\n}\n\nexport class CustomInstanceConfigurer extends React.Component<ICustomInstanceConfigurerProps> {\n public render() {\n const instanceFamilyOptions: Option[] = (this.props.instanceFamilyList || []).map((instanceFamily) => ({\n label: instanceFamily,\n value: instanceFamily,\n }));\n const vCpuOptions: Option[] = (this.props.vCpuList || []).map((vCpu) => ({ label: vCpu + '', value: vCpu }));\n const memoryOptions: Option[] = (this.props.memoryList || []).map((memory) => ({\n label: memory + '',\n value: memory,\n }));\n const selectedVCpuCountLabel = this.props.selectedVCpuCount ? this.props.selectedVCpuCount + '' : null;\n const selectedMemoryLabel = this.props.selectedMemory ? this.props.selectedMemory + '' : null;\n const selectedInstanceFamilyLabel = this.props.selectedInstanceFamily ? this.props.selectedInstanceFamily : null;\n\n return (\n <div>\n <div className=\"row\">\n <div className=\"col-md-5 sm-label-right\">\n <b>Family </b>\n </div>\n <div className=\"col-md-3\">\n <Select\n options={instanceFamilyOptions}\n clearable={false}\n value={{ label: selectedInstanceFamilyLabel, value: this.props.selectedInstanceFamily }}\n onChange={this.handleInstanceFamilyChange}\n />\n </div>\n </div>\n <div className=\"row gce-instance-build-custom-select\">\n <div className=\"col-md-5 sm-label-right\">\n <b>Cores </b>\n <HelpField id=\"gce.instance.customInstance.cores\" />\n </div>\n <div className=\"col-md-3\">\n <Select\n options={vCpuOptions}\n clearable={false}\n value={{ label: selectedVCpuCountLabel, value: this.props.selectedVCpuCount }}\n onChange={this.handleVCpuChange}\n />\n </div>\n </div>\n <div className=\"row gce-instance-build-custom-select\">\n <div className=\"col-md-5 sm-label-right\">\n <b>Memory (Gb) </b>\n <HelpField id=\"gce.instance.customInstance.memory\" />\n </div>\n <div className=\"col-md-3\">\n {this.props.selectedExtendedMemory ? (\n <input\n type=\"number\"\n name=\"memory\"\n className=\"form-control\"\n value={this.props.selectedMemory}\n onChange={(event) => this.handleMemoryChangeCustom(event.target.value)}\n />\n ) : (\n <Select\n options={memoryOptions}\n clearable={false}\n value={{ label: selectedMemoryLabel, value: this.props.selectedMemory }}\n onChange={this.handleMemoryChange}\n />\n )}\n </div>\n </div>\n {this.props.selectedInstanceFamily !== 'E2' ? (\n <div className=\"row gce-instance-build-custom-select\">\n <div className=\"col-md-5 sm-label-right\"></div>\n <div className=\"col-md-3\">\n <span className=\"gce-instance-build-custom-extended-memory-checkbox\">\n <CheckboxInput\n name=\"extendedMemory\"\n text=\"Extended Memory\"\n checked={this.props.selectedExtendedMemory}\n onChange={(event: { target: { checked: boolean } }) => {\n this.handleExtendedMemory(event.target.checked);\n }}\n />\n <div className=\"gce-instance-build-custom-extended-memory-checkbox-helptext\">\n <HelpField id=\"gce.instance.customInstance.extendedmemory\" />\n </div>\n </span>\n </div>\n </div>\n ) : null}\n </div>\n );\n }\n\n private handleVCpuChange = (option: Option) => {\n const value = (option ? option.value : null) as number;\n this.props.onChange({\n instanceFamily: this.props.selectedInstanceFamily,\n vCpuCount: value,\n memory: this.props.selectedMemory,\n extendedMemory: this.props.selectedExtendedMemory,\n });\n };\n\n private handleMemoryChange = (option: Option) => {\n const value = (option ? option.value : null) as number;\n this.props.onChange({\n instanceFamily: this.props.selectedInstanceFamily,\n vCpuCount: this.props.selectedVCpuCount,\n memory: value,\n extendedMemory: this.props.selectedExtendedMemory,\n });\n };\n\n private handleInstanceFamilyChange = (option: Option) => {\n const value = (option ? option.value : null) as string;\n this.props.onChange({\n instanceFamily: value,\n vCpuCount: this.props.selectedVCpuCount,\n memory: this.props.selectedMemory,\n extendedMemory: value === 'E2' ? false : this.props.selectedExtendedMemory,\n });\n };\n\n private handleMemoryChangeCustom = (val: string) => {\n const value = +val;\n this.props.onChange({\n instanceFamily: this.props.selectedInstanceFamily,\n vCpuCount: this.props.selectedVCpuCount,\n memory: value,\n extendedMemory: this.props.selectedExtendedMemory,\n });\n };\n\n private handleExtendedMemory = (checked: boolean) => {\n this.props.onChange({\n instanceFamily: this.props.selectedInstanceFamily,\n vCpuCount: this.props.selectedVCpuCount,\n memory: this.props.selectedMemory,\n extendedMemory: checked,\n });\n };\n}\n","import { module } from 'angular';\nimport { react2angular } from 'react2angular';\n\nimport { withErrorBoundary } from '@spinnaker/core';\n\nimport { CustomInstanceConfigurer } from './CustomInstanceConfigurer';\n\nexport const GCE_CUSTOM_INSTANCE_CONFIGURER = 'spinnaker.gce.customInstanceConfigurer';\nmodule(GCE_CUSTOM_INSTANCE_CONFIGURER, []).component(\n 'gceCustomInstanceConfigurer',\n react2angular(withErrorBoundary(CustomInstanceConfigurer, 'gceCustomInstanceConfigurer'), [\n 'vCpuList',\n 'instanceFamilyList',\n 'memoryList',\n 'selectedVCpuCount',\n 'selectedMemory',\n 'selectedInstanceFamily',\n 'selectedExtendedMemory',\n 'onChange',\n ]),\n);\n","'use strict';\n\nimport { module } from 'angular';\n\n// TODO(dpeach): this approach is unmaintainable because we\n// have to intercept ui-select event emitters to make it work.\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_ELSEVENOPTIONS_BACKENDSERVICESELECTOR_COMPONENT =\n 'spinnaker.deck.gce.backendServiceSelector.component';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_ELSEVENOPTIONS_BACKENDSERVICESELECTOR_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_ELSEVENOPTIONS_BACKENDSERVICESELECTOR_COMPONENT, []).component(\n 'gceBackendServiceSelector',\n {\n bindings: {\n command: '=',\n loadBalancerName: '=',\n },\n templateUrl: require('./backendServiceSelector.component.html'),\n controller: [\n '$scope',\n function ($scope) {\n $scope.$on('$destroy', () => {\n if (this.command.backendServices) {\n delete this.command.backendServices[this.loadBalancerName];\n }\n });\n\n $scope.$on('uis:select', function (event) {\n event.preventDefault();\n });\n },\n ],\n },\n);\n","import * as angular from 'angular';\n\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_ELSEVENOPTIONS_BACKENDSERVICESELECTOR_COMPONENT } from './backendServiceSelector.component';\n\n('use strict');\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_ELSEVENOPTIONS_ELSEVENOPTIONSGENERATOR_COMPONENT =\n 'spinnaker.deck.gce.elSevenOptionsGenerator.component';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_ELSEVENOPTIONS_ELSEVENOPTIONSGENERATOR_COMPONENT; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_ELSEVENOPTIONS_ELSEVENOPTIONSGENERATOR_COMPONENT, [\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_ELSEVENOPTIONS_BACKENDSERVICESELECTOR_COMPONENT,\n ])\n .directive('gceElSevenOptionsGenerator', [\n '$compile',\n function ($compile) {\n const template = `<gce-backend-service-selector load-balancer-name=\"loadBalancerName\" command=\"command\">\n </gce-backend-service-selector>`;\n\n return {\n restrict: 'E',\n scope: {\n command: '=',\n loadBalancerName: '@',\n },\n link: function (scope, element) {\n const compiledTemplate = $compile(template)(scope);\n\n // Look up DOM to find container for selected load balancer.\n const listItem = angular.element(element).closest('.ui-select-match-item');\n\n // Drop service selector in between load balancers.\n listItem.after(compiledTemplate);\n\n scope.$on('$destroy', () => {\n // Remove selector if load balancer is removed.\n listItem.next().remove();\n });\n },\n };\n },\n ]);\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_ELSEVENOPTIONS_ELSEVENOPTIONSGENERATOR_COMPONENT } from './elSevenOptions/elSevenOptionsGenerator.component';\nimport { GCE_HTTP_LOAD_BALANCER_UTILS } from '../../../../loadBalancer/httpLoadBalancerUtils.service';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE } from '../../serverGroupConfiguration.service';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_LOADBALANCERSELECTOR_DIRECTIVE =\n 'spinnaker.google.serverGroup.configure.wizard.loadBalancers.selector.directive';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_LOADBALANCERSELECTOR_DIRECTIVE; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_LOADBALANCERSELECTOR_DIRECTIVE, [\n GCE_HTTP_LOAD_BALANCER_UTILS,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_ELSEVENOPTIONS_ELSEVENOPTIONSGENERATOR_COMPONENT,\n GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE,\n ])\n .directive('gceServerGroupLoadBalancerSelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./loadBalancerSelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'vm',\n controller: 'gceServerGroupLoadBalancerSelectorCtrl',\n };\n })\n .controller('gceServerGroupLoadBalancerSelectorCtrl', [\n 'gceHttpLoadBalancerUtils',\n function (gceHttpLoadBalancerUtils) {\n this.showLoadBalancingPolicy = () => {\n if (_.has(this, 'command.backingData.filtered.loadBalancerIndex')) {\n const index = this.command.backingData.filtered.loadBalancerIndex;\n const selected = this.command.loadBalancers;\n\n return (\n angular.isDefined(selected) &&\n _.some(selected, (s) => {\n return (\n index[s].loadBalancerType === 'HTTP' ||\n index[s].loadBalancerType === 'INTERNAL_MANAGED' ||\n index[s].loadBalancerType === 'SSL' ||\n index[s].loadBalancerType === 'TCP'\n );\n })\n );\n }\n };\n\n this.isHttpLoadBalancer = (lb) => gceHttpLoadBalancerUtils.isHttpLoadBalancer(lb);\n },\n ]);\n","import type { IComponentOptions, IController } from 'angular';\nimport { module } from 'angular';\nimport { chain, get, has, intersection, set, without } from 'lodash';\n\nimport type { IGceBackendService, INamedPort } from '../../../../domain';\n\nimport './loadBalancingPolicySelector.component.less';\n\nclass GceLoadBalancingPolicySelectorController implements IController {\n public maxPort = 65535;\n public command: any;\n [key: string]: any;\n public globalBackendServices: IGceBackendService[];\n\n public static $inject = ['gceBackendServiceReader'];\n constructor(private gceBackendServiceReader: any) {}\n\n public setModel(propertyName: string, viewValue: number): void {\n set(this, propertyName, viewValue / 100);\n }\n\n public setView(propertyName: string, modelValue: number): void {\n this[propertyName] = this.decimalToPercent(modelValue);\n }\n\n public onBalancingModeChange(mode: string): void {\n const keys: string[] = ['maxUtilization', 'maxRatePerInstance', 'maxConnectionsPerInstance'];\n let toDelete: string[] = [];\n switch (mode) {\n case 'RATE':\n toDelete = without(keys, 'maxRatePerInstance');\n break;\n case 'UTILIZATION':\n toDelete = without(keys, 'maxUtilization');\n break;\n case 'CONNECTION':\n toDelete = without(keys, 'maxConnectionsPerInstance');\n break;\n default:\n break;\n }\n\n toDelete.forEach((key) => delete this.command.loadBalancingPolicy[key]);\n }\n\n public getBalancingModes(): string[] {\n let balancingModes: string[] = [];\n /*\n * Three cases:\n * - If we have only HTTP(S) load balancers, our balancing mode can be RATE or UTILIZATION.\n * - If we have only SSL/TCP load balancers, our balancing mode can be CONNECTION or UTILIZATION.\n * - If we have both, only UTILIZATION.\n * */\n if (has(this, 'command.backingData.filtered.loadBalancerIndex')) {\n const index = this.command.backingData.filtered.loadBalancerIndex;\n const selected = this.command.loadBalancers;\n\n const hasSsl = selected.find((loadBalancer: any) => get(index[loadBalancer], 'loadBalancerType') === 'SSL');\n const hasTcp = selected.find((loadBalancer: any) => get(index[loadBalancer], 'loadBalancerType') === 'TCP');\n const hasHttp = selected.find((loadBalancer: any) => get(index[loadBalancer], 'loadBalancerType') === 'HTTP');\n\n if ((hasSsl || hasTcp) && hasHttp) {\n balancingModes = ['UTILIZATION'];\n } else if (hasSsl || hasTcp) {\n balancingModes = ['CONNECTION', 'UTILIZATION'];\n } else {\n balancingModes = ['RATE', 'UTILIZATION'];\n }\n }\n\n if (!balancingModes.includes(get(this.command, 'loadBalancingPolicy.balancingMode') as string)) {\n set(this.command, 'loadBalancingPolicy.balancingMode', balancingModes[0]);\n }\n return balancingModes;\n }\n\n public $onInit(): void {\n this.gceBackendServiceReader.listBackendServices('globalBackendService').then((services: IGceBackendService[]) => {\n this.globalBackendServices = services;\n });\n }\n\n public $onDestroy(): void {\n delete this.command.loadBalancingPolicy;\n }\n\n public addNamedPort() {\n if (!get(this.command, 'loadBalancingPolicy.namedPorts')) {\n set(this.command, 'loadBalancingPolicy.namedPorts', []);\n }\n\n this.command.loadBalancingPolicy.namedPorts.push({ name: '', port: 80 });\n }\n\n public removeNamedPort(index: number) {\n this.command.loadBalancingPolicy.namedPorts.splice(index, 1);\n }\n\n public getPortNames(): string[] {\n const index = this.command.backingData.filtered.loadBalancerIndex;\n const selected = this.command.loadBalancers;\n const inUsePortNames = this.command.loadBalancingPolicy.namedPorts.map((namedPort: INamedPort) => namedPort.name);\n\n const getThem = (globalBackendServices: IGceBackendService[], loadBalancer: string): string[] => {\n switch (get(index[loadBalancer], 'loadBalancerType')) {\n case 'SSL':\n case 'TCP':\n case 'HTTP': {\n const lbBackendServices: string[] = get(index[loadBalancer], 'backendServices');\n const filteredBackendServices = globalBackendServices.filter((service: IGceBackendService) =>\n lbBackendServices.includes(service.name),\n );\n const portNames = filteredBackendServices.map((service: IGceBackendService) => service.portName);\n const portNameIntersection = intersection(portNames, inUsePortNames);\n return portNames.filter((portName) => !portNameIntersection.includes(portName));\n }\n default:\n return [];\n }\n };\n\n return chain(selected)\n .flatMap((lbName: string) => getThem(this.globalBackendServices, lbName))\n .uniq()\n .value();\n }\n\n private decimalToPercent(value: number): number {\n if (value === 0) {\n return 0;\n }\n return value ? Math.round(value * 100) : undefined;\n }\n}\n\nconst gceLoadBalancingPolicySelectorComponent: IComponentOptions = {\n bindings: {\n command: '=',\n },\n controller: GceLoadBalancingPolicySelectorController,\n templateUrl: require('./loadBalancingPolicySelector.component.html'),\n};\n\nexport const GCE_LOAD_BALANCING_POLICY_SELECTOR = 'spinnaker.gce.loadBalancingPolicy.selector.component';\n\nmodule(GCE_LOAD_BALANCING_POLICY_SELECTOR, []).component(\n 'gceLoadBalancingPolicySelector',\n gceLoadBalancingPolicySelectorComponent,\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_GCENETWORKSELECTFIELD_DIRECTIVE = 'spinnaker.google.networkSelectField.directive';\nexport const name = GOOGLE_GCENETWORKSELECTFIELD_DIRECTIVE; // for backwards compatibility\nmodule(GOOGLE_GCENETWORKSELECTFIELD_DIRECTIVE, []).directive('gceNetworkSelectField', function () {\n return {\n restrict: 'E',\n templateUrl: require('./networkSelectField.directive.html'),\n scope: {\n networks: '=',\n component: '=',\n field: '@',\n account: '=',\n helpKey: '@',\n onChange: '&',\n labelColumns: '@',\n fieldColumns: '@',\n },\n };\n});\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_SUBNET_SUBNETSELECTFIELD_DIRECTIVE = 'spinnaker.google.subnet.subnetSelectField.directive';\nexport const name = GOOGLE_SUBNET_SUBNETSELECTFIELD_DIRECTIVE; // for backwards compatibility\nmodule(GOOGLE_SUBNET_SUBNETSELECTFIELD_DIRECTIVE, []).directive('gceSubnetSelectField', function () {\n return {\n restrict: 'E',\n templateUrl: require('./subnetSelectField.directive.html'),\n scope: {\n subnets: '=',\n subnetPlaceholder: '=',\n autoCreateSubnets: '=',\n component: '=',\n field: '@',\n account: '=',\n region: '=',\n onChange: '&',\n labelColumns: '@',\n helpKey: '@',\n },\n };\n});\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\n\nimport {\n ArtifactTypePatterns,\n excludeAllTypesExcept,\n ExpectedArtifactSelectorViewController,\n IMAGE_READER,\n NgGCEImageArtifactDelegate,\n} from '@spinnaker/core';\n\nimport { GOOGLE_GCENETWORKSELECTFIELD_DIRECTIVE } from '../../../../gceNetworkSelectField.directive';\nimport { GOOGLE_GCEREGIONSELECTFIELD_DIRECTIVE } from '../../../../gceRegionSelectField.directive';\nimport { GceImageReader } from '../../../../image';\nimport { GOOGLE_SUBNET_SUBNETSELECTFIELD_DIRECTIVE } from '../../../../subnet/subnetSelectField.directive';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOCATION_BASICSETTINGS_CONTROLLER =\n 'spinnaker.google.serverGroup.configure.wizard.basicSettings.controller';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOCATION_BASICSETTINGS_CONTROLLER; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOCATION_BASICSETTINGS_CONTROLLER, [\n UIROUTER_ANGULARJS,\n ANGULAR_UI_BOOTSTRAP,\n IMAGE_READER,\n GOOGLE_GCEREGIONSELECTFIELD_DIRECTIVE,\n GOOGLE_GCENETWORKSELECTFIELD_DIRECTIVE,\n GOOGLE_SUBNET_SUBNETSELECTFIELD_DIRECTIVE,\n ])\n .controller('gceServerGroupBasicSettingsCtrl', [\n '$scope',\n '$controller',\n '$uibModalStack',\n '$state',\n function ($scope, $controller, $uibModalStack, $state) {\n function fetchImagesForAccount() {\n return observableFrom(\n GceImageReader.findImages({\n account: $scope.command.credentials,\n provider: $scope.command.selectedProvider,\n q: '*',\n }),\n );\n }\n\n const imageSearchResultsStream = new Subject();\n imageSearchResultsStream.pipe(switchMap(fetchImagesForAccount)).subscribe((images) => {\n $scope.command.backingData.allImages = images;\n });\n\n this.accountUpdated = () => {\n imageSearchResultsStream.next();\n };\n\n this.selectImage = (image) => {\n // called from a React component\n $scope.$apply(() => {\n $scope.command.image = image;\n });\n };\n\n angular.extend(\n this,\n $controller('BasicSettingsMixin', {\n $scope: $scope,\n imageReader: GceImageReader,\n $uibModalStack: $uibModalStack,\n $state: $state,\n }),\n );\n\n this.stackPattern = {\n test: function (stack) {\n const pattern = $scope.command.viewState.templatingEnabled ? /^([a-zA-Z0-9]*(\\${.+})*)*$/ : /^[a-zA-Z0-9]*$/;\n return pattern.test(stack);\n },\n };\n\n this.detailPattern = {\n test: function (detail) {\n const pattern = $scope.command.viewState.templatingEnabled\n ? /^([a-zA-Z0-9-]*(\\${.+})*)*$/\n : /^[a-zA-Z0-9-]*$/;\n return pattern.test(detail);\n },\n };\n\n this.getSubnetPlaceholder = () => {\n if (!$scope.command.region) {\n return '(Select an account)';\n } else if ($scope.command.viewState.autoCreateSubnets) {\n return '(Subnet will be automatically selected)';\n } else if ($scope.command.viewState.autoCreateSubnets === null) {\n return '(Subnets not supported)';\n } else {\n return null;\n }\n };\n\n this.imageSources = ['artifact', 'priorStage'];\n\n this.excludedImageArtifactTypes = excludeAllTypesExcept(ArtifactTypePatterns.CUSTOM_OBJECT);\n\n this.onImageArtifactEdited = (artifact) => {\n $scope.$applyAsync(() => {\n $scope.command.imageArtifactId = null;\n $scope.command.imageArtifact = artifact;\n });\n };\n\n this.onImageArtifactSelected = (expectedArtifact) => {\n this.onChangeImageArtifactId(expectedArtifact.id);\n };\n\n this.onChangeImageArtifactId = (artifactId) => {\n $scope.$applyAsync(() => {\n $scope.command.imageArtifactId = artifactId;\n $scope.command.imageArtifact = null;\n });\n };\n\n this.onImageArtifactAccountSelected = (accountName) => {\n $scope.$applyAsync(() => {\n $scope.command.imageAccountName = accountName;\n });\n };\n\n const gceImageDelegate = new NgGCEImageArtifactDelegate($scope);\n $scope.gceImageArtifact = {\n showCreateArtifactForm: false,\n delegate: gceImageDelegate,\n controller: new ExpectedArtifactSelectorViewController(gceImageDelegate),\n };\n },\n ]);\n","import { module } from 'angular';\n\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE } from './tagManager.service';\n\n('use strict');\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGSELECTOR_COMPONENT =\n 'spinnaker.deck.gce.tagSelector.component';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGSELECTOR_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGSELECTOR_COMPONENT, [\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE,\n]).component('gceTagSelector', {\n bindings: {\n command: '=',\n securityGroupId: '=',\n },\n templateUrl: require('./tagSelector.component.html'),\n controller: [\n '$scope',\n 'gceTagManager',\n function ($scope, gceTagManager) {\n this.securityGroup = gceTagManager.securityGroupObjectsKeyedById[this.securityGroupId];\n this.onSelect = gceTagManager.addTag;\n this.onRemove = gceTagManager.removeTag;\n\n $scope.$on('uis:select', function (event) {\n event.preventDefault();\n });\n },\n ],\n});\n","import * as angular from 'angular';\n\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE } from './tagManager.service';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGSELECTOR_COMPONENT } from './tagSelector.component';\n\n('use strict');\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGSELECTORGENERATOR_COMPONENT =\n 'spinnaker.deck.gce.tagSelectorGenerator.component';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGSELECTORGENERATOR_COMPONENT; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGSELECTORGENERATOR_COMPONENT, [\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGSELECTOR_COMPONENT,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE,\n ])\n .directive('gceTagSelectorGenerator', [\n '$compile',\n 'gceTagManager',\n function ($compile, gceTagManager) {\n const template = `<gce-tag-selector security-group-id=\"securityGroupId\" command=\"command\">\n </gce-tag-selector>`;\n\n return {\n restrict: 'E',\n scope: {\n command: '=',\n securityGroupId: '=',\n },\n link: function (scope, element) {\n const { securityGroupId } = scope;\n const securityGroupObject = gceTagManager.securityGroupObjectsKeyedById[securityGroupId];\n\n if (securityGroupObject && securityGroupObject.tagsArray.length < 2) {\n securityGroupObject.tagsArray.forEach((tagName) => gceTagManager.addTag(tagName));\n return;\n }\n\n const compiledTemplate = $compile(template)(scope);\n\n angular.element(element).closest('.ui-select-match-item').after(compiledTemplate);\n },\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { InfrastructureCaches } from '@spinnaker/core';\n\nimport { GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE } from '../../serverGroupConfiguration.service';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE } from './tagManager.service';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGSELECTORGENERATOR_COMPONENT } from './tagSelectorGenerator.component';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_SECURITYGROUPSELECTOR_DIRECTIVE =\n 'spinnaker.google.serverGroup.configure.wizard.securityGroups.selector.directive';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_SECURITYGROUPSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_SECURITYGROUPSELECTOR_DIRECTIVE, [\n GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGSELECTORGENERATOR_COMPONENT,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE,\n])\n .directive('gceServerGroupSecurityGroupSelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./securityGroupSelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'vm',\n controller: 'gceServerGroupSecurityGroupsSelectorCtrl',\n };\n })\n .controller('gceServerGroupSecurityGroupsSelectorCtrl', [\n 'gceServerGroupConfigurationService',\n 'gceTagManager',\n function (gceServerGroupConfigurationService, gceTagManager) {\n this.getSecurityGroupRefreshTime = () => {\n return InfrastructureCaches.get('securityGroups').getStats().ageMax;\n };\n\n this.refreshSecurityGroups = () => {\n this.refreshing = true;\n gceServerGroupConfigurationService.refreshSecurityGroups(this.command).then(() => {\n this.refreshing = false;\n });\n };\n\n this.onRemove = gceTagManager.removeSecurityGroup;\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_SECURITYGROUPSREMOVED_DIRECTIVE =\n 'spinnaker.google.serverGroup.configure.wizard.securityGroups.removed.directive';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_SECURITYGROUPSREMOVED_DIRECTIVE; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_SECURITYGROUPSREMOVED_DIRECTIVE, [])\n .directive('gceServerGroupSecurityGroupsRemoved', function () {\n return {\n restrict: 'E',\n templateUrl: require('./securityGroupsRemoved.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'vm',\n controller: 'gceServerGroupSecurityGroupsRemovedCtrl',\n };\n })\n .controller('gceServerGroupSecurityGroupsRemovedCtrl', function () {\n this.acknowledgeSecurityGroupRemoval = () => {\n this.command.viewState.dirty.securityGroups = null;\n };\n });\n","'use strict';\n\nimport * as angular from 'angular';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_REGIONALSELECTOR_DIRECTIVE =\n 'spinnaker.google.serverGroup.configure.wizard.capacity.regional.directive';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_REGIONALSELECTOR_DIRECTIVE; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_REGIONALSELECTOR_DIRECTIVE, [])\n .directive('gceRegionalSelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./regionalSelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'vm',\n controller: angular.noop,\n };\n });\n","import { module, noop } from 'angular';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_TARGETSHAPESELECTOR_DIRECTIVE =\n 'spinnaker.google.serverGroup.configure.wizard.capacity.targetShape.directive';\n\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_TARGETSHAPESELECTOR_DIRECTIVE, []).directive(\n 'gceTargetShapeSelector',\n function () {\n return {\n restrict: 'E',\n templateUrl: require('./targetShapeSelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'vm',\n controller: noop,\n };\n },\n);\n","'use strict';\n\nimport * as angular from 'angular';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE =\n 'spinnaker.google.serverGroup.configure.wizard.capacity.zone.directive';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE, [])\n .directive('gceZoneSelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./zoneSelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'vm',\n controller: angular.noop,\n };\n });\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_BASICSETTINGS_BASICSETTINGS_COMPONENT } from '../../autoscalingPolicy/components/basicSettings/basicSettings.component';\nimport { GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_METRICSETTINGS_METRICSETTINGS_COMPONENT } from '../../autoscalingPolicy/components/metricSettings/metricSettings.component';\nimport { GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_SCALINGSCHEDULES_SCALINGSCHEDULES_COMPONENT } from '../../autoscalingPolicy/components/scalingSchedules/scalingSchedules.component';\nimport { GCE_TIMEZONE_SELECT } from '../../autoscalingPolicy/components/scalingSchedules/timeZoneSelect';\nimport { GCE_CACHE_REFRESH } from '../../cache/cacheRefresh.component';\nimport { GCE_IMAGE_SELECT } from '../../image/ImageSelect';\nimport { GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE } from './../../instance/custom/customInstanceBuilder.gce.service';\nimport { GOOGLE_SERVERGROUP_SERVERGROUP_TRANSFORMER } from '../serverGroup.transformer';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE } from './serverGroupConfiguration.service';\nimport { GCE_ACCELERATOR_CONFIGURER } from './wizard/advancedSettings/GceAcceleratorConfigurer';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE } from './wizard/advancedSettings/advancedSettingsSelector.directive';\nimport { GCE_DISK_CONFIGURER } from './wizard/advancedSettings/diskConfigurer.component';\nimport { GCE_AUTOHEALING_POLICY_SELECTOR } from './wizard/autoHealingPolicy/autoHealingPolicySelector.component';\nimport { GCE_AUTOSCALING_POLICY_SELECTOR_COMPONENT } from './wizard/autoScalingPolicy/autoScalingPolicySelector.component';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_ADVANCEDCAPACITYSELECTOR_COMPONENT } from './wizard/capacity/advancedCapacitySelector.component';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_SIMPLECAPACITYSELECTOR_COMPONENT } from './wizard/capacity/simpleCapacitySelector.component';\nimport { GCE_CUSTOM_INSTANCE_CONFIGURER } from './wizard/customInstance/customInstanceConfigurer.component';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_LOADBALANCERSELECTOR_DIRECTIVE } from './wizard/loadBalancers/loadBalancerSelector.directive';\nimport { GCE_LOAD_BALANCING_POLICY_SELECTOR } from './wizard/loadBalancingPolicy/loadBalancingPolicySelector.component';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOCATION_BASICSETTINGS_CONTROLLER } from './wizard/location/basicSettings.controller';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_SECURITYGROUPSELECTOR_DIRECTIVE } from './wizard/securityGroups/securityGroupSelector.directive';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_SECURITYGROUPSREMOVED_DIRECTIVE } from './wizard/securityGroups/securityGroupsRemoved.directive';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_REGIONALSELECTOR_DIRECTIVE } from './wizard/zones/regionalSelector.directive';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_TARGETSHAPESELECTOR_DIRECTIVE } from './wizard/zones/targetShapeSelector.directive';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE } from './wizard/zones/zoneSelector.directive';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_GCE_MODULE = 'spinnaker.serverGroup.configure.gce';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_GCE_MODULE; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_GCE_MODULE, [\n GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_BASICSETTINGS_BASICSETTINGS_COMPONENT,\n GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_METRICSETTINGS_METRICSETTINGS_COMPONENT,\n GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_SCALINGSCHEDULES_SCALINGSCHEDULES_COMPONENT,\n GCE_LOAD_BALANCING_POLICY_SELECTOR,\n GCE_AUTOSCALING_POLICY_SELECTOR_COMPONENT,\n GCE_AUTOHEALING_POLICY_SELECTOR,\n GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE,\n GCE_CACHE_REFRESH,\n GCE_CUSTOM_INSTANCE_CONFIGURER,\n GCE_DISK_CONFIGURER,\n GCE_ACCELERATOR_CONFIGURER,\n GCE_IMAGE_SELECT,\n GCE_TIMEZONE_SELECT,\n GOOGLE_SERVERGROUP_SERVERGROUP_TRANSFORMER,\n GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_ADVANCEDCAPACITYSELECTOR_COMPONENT,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_SIMPLECAPACITYSELECTOR_COMPONENT,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_LOADBALANCERSELECTOR_DIRECTIVE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_LOCATION_BASICSETTINGS_CONTROLLER,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_SECURITYGROUPSREMOVED_DIRECTIVE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_SECURITYGROUPSELECTOR_DIRECTIVE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_REGIONALSELECTOR_DIRECTIVE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_TARGETSHAPESELECTOR_DIRECTIVE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE,\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_HIDDENMETADATAKEYS_VALUE =\n 'spinnaker.deck.gce.serverGroup.hiddenMetadataKeys.value';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_HIDDENMETADATAKEYS_VALUE; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_HIDDENMETADATAKEYS_VALUE, []).value('gceServerGroupHiddenMetadataKeys', [\n 'load-balancer-names',\n 'global-load-balancer-names',\n 'backend-service-names',\n 'load-balancing-policy',\n 'select-zones',\n 'customUserData',\n]);\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, ExpectedArtifactService, INSTANCE_TYPE_SERVICE } from '@spinnaker/core';\nimport { GOOGLE_COMMON_XPNNAMING_GCE_SERVICE } from '../../common/xpnNaming.gce.service';\nimport { GCEProviderSettings } from '../../gce.settings';\nimport { parseHealthCheckUrl } from '../../healthCheck/healthCheckUtils';\n\nimport { GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE } from './../../instance/custom/customInstanceBuilder.gce.service';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_HIDDENMETADATAKEYS_VALUE } from './wizard/hiddenMetadataKeys.value';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE =\n 'spinnaker.gce.serverGroupCommandBuilder.service';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE, [\n INSTANCE_TYPE_SERVICE,\n GOOGLE_COMMON_XPNNAMING_GCE_SERVICE,\n GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_HIDDENMETADATAKEYS_VALUE,\n ])\n .factory('gceServerGroupCommandBuilder', [\n '$q',\n 'instanceTypeService',\n 'gceCustomInstanceBuilderService',\n 'gceServerGroupHiddenMetadataKeys',\n 'gceXpnNamingService',\n function (\n $q,\n instanceTypeService,\n gceCustomInstanceBuilderService,\n gceServerGroupHiddenMetadataKeys,\n gceXpnNamingService,\n ) {\n // Two assumptions here:\n // 1) All GCE machine types are represented in the tree of choices.\n // 2) Each machine type appears in exactly one category.\n function determineInstanceCategoryFromInstanceType(command) {\n return instanceTypeService.getCategories('gce').then(function (categories) {\n categories.forEach(function (category) {\n category.families.forEach(function (family) {\n family.instanceTypes.forEach(function (instanceType) {\n if (instanceType.name === command.instanceType) {\n command.viewState.instanceProfile = category.type;\n }\n });\n });\n });\n });\n }\n\n function extractNetworkName(serverGroup) {\n const projectId = gceXpnNamingService.deriveProjectId(serverGroup.launchConfig.instanceTemplate);\n const networkUrl = _.get(serverGroup, 'launchConfig.instanceTemplate.properties.networkInterfaces[0].network');\n return gceXpnNamingService.decorateXpnResourceIfNecessary(projectId, networkUrl);\n }\n\n function extractSubnetName(serverGroup) {\n const projectId = gceXpnNamingService.deriveProjectId(serverGroup.launchConfig.instanceTemplate);\n const subnetworkUrl = _.get(\n serverGroup,\n 'launchConfig.instanceTemplate.properties.networkInterfaces[0].subnetwork',\n );\n return gceXpnNamingService.decorateXpnResourceIfNecessary(projectId, subnetworkUrl);\n }\n\n function determineAssociatePublicIPAddress(serverGroup) {\n return _.has(serverGroup, 'launchConfig.instanceTemplate.properties.networkInterfaces[0].accessConfigs');\n }\n\n function extractLoadBalancers(asg) {\n return ['load-balancer-names', 'global-load-balancer-names'].reduce((loadBalancers, property) => {\n if (asg[property]) {\n loadBalancers = loadBalancers.concat(asg[property]);\n }\n return loadBalancers;\n }, []);\n }\n\n function extractLoadBalancersFromMetadata(metadata) {\n return ['load-balancer-names', 'global-load-balancer-names'].reduce((loadBalancers, property) => {\n if (metadata[property]) {\n loadBalancers = loadBalancers.concat(metadata[property].split(','));\n }\n return loadBalancers;\n }, []);\n }\n\n function populateDisksFromExisting(disks, command) {\n disks = disks.map((disk, index) => {\n if (index === 0) {\n return {\n type: disk.initializeParams.diskType,\n sizeGb: disk.initializeParams.diskSizeGb,\n };\n } else {\n return {\n type: disk.initializeParams.diskType,\n sizeGb: disk.initializeParams.diskSizeGb,\n sourceImage: _.last(_.get(disk, 'initializeParams.sourceImage', '').split('/')) || null,\n };\n }\n });\n const localSSDDisks = disks.filter((disk) => disk.type === 'local-ssd');\n const persistentDisks = disks.filter(\n (disk) => disk.type.startsWith('pd-') || disk.type.startsWith('hyperdisk-'),\n );\n\n if (persistentDisks.length) {\n command.disks = persistentDisks.concat(localSSDDisks);\n return instanceTypeService\n .getInstanceTypeDetails(\n command.selectedProvider,\n _.includes(command.instanceType, 'custom-') ? 'buildCustom' : command.instanceType,\n )\n .then((instanceTypeDetails) => {\n command.viewState.instanceTypeDetails = instanceTypeDetails;\n calculateOverriddenStorageDescription(instanceTypeDetails, command);\n });\n } else {\n command.disks = [{ type: 'pd-ssd', sizeGb: 10 }].concat(localSSDDisks);\n return $q.when(null);\n }\n }\n\n function populateDisksFromPipeline(command) {\n const persistentDisks = getPersistentDisks(command);\n const localSSDDisks = getLocalSSDDisks(command);\n\n if (persistentDisks.length) {\n command.disks = persistentDisks.concat(localSSDDisks);\n return instanceTypeService\n .getInstanceTypeDetails(\n command.selectedProvider,\n _.includes(command.instanceType, 'custom-') ? 'buildCustom' : command.instanceType,\n )\n .then((instanceTypeDetails) => {\n command.viewState.instanceTypeDetails = instanceTypeDetails;\n calculateOverriddenStorageDescription(instanceTypeDetails, command);\n });\n } else {\n command.disks = [{ type: 'pd-ssd', sizeGb: 10 }].concat(localSSDDisks);\n return $q.when(null);\n }\n }\n\n function getLocalSSDDisks(command) {\n return (command.disks || []).filter((disk) => disk.type === 'local-ssd');\n }\n\n function getPersistentDisks(command) {\n return (command.disks || []).filter(\n (disk) => disk.type.startsWith('pd-') || disk.type.startsWith('hyperdisk-'),\n );\n }\n\n function calculatePersistentDiskOverriddenStorageDescription(command) {\n const persistentDisks = getPersistentDisks(command);\n\n const diskCountBySizeGb = new Map();\n persistentDisks.forEach((disk) => {\n if (diskCountBySizeGb.has(disk.sizeGb)) {\n diskCountBySizeGb.set(disk.sizeGb, diskCountBySizeGb.get(disk.sizeGb) + 1);\n } else {\n diskCountBySizeGb.set(disk.sizeGb, 1);\n }\n });\n\n return Array.from(diskCountBySizeGb)\n .sort(([sizeA], [sizeB]) => sizeB - sizeA)\n .map(([sizeGb, count]) => count + '×' + sizeGb)\n .join(', ');\n }\n\n function calculateOverriddenStorageDescription(instanceTypeDetails, command) {\n if (instanceTypeDetails.storage.localSSDSupported) {\n if (getLocalSSDDisks(command).length !== instanceTypeDetails.storage.count) {\n command.viewState.overriddenStorageDescription = getLocalSSDDisks(command).length + '×375';\n }\n } else {\n const persistentDisks = getPersistentDisks(command);\n const overrideStorageDescription =\n persistentDisks.some((disk) => disk.sizeGb !== instanceTypeDetails.storage.size) ||\n persistentDisks.length !== instanceTypeDetails.storage.count;\n\n if (overrideStorageDescription) {\n command.viewState.overriddenStorageDescription = calculatePersistentDiskOverriddenStorageDescription(\n command,\n );\n }\n }\n }\n\n function populateAvailabilityPolicies(scheduling, command) {\n if (scheduling) {\n command.preemptible = scheduling.preemptible;\n command.automaticRestart = scheduling.automaticRestart;\n command.onHostMaintenance = scheduling.onHostMaintenance;\n } else {\n command.preemptible = false;\n command.automaticRestart = true;\n command.onHostMaintenance = 'MIGRATE';\n }\n }\n\n function populateAutoHealingPolicy(serverGroup, command) {\n const autoHealingPolicy = serverGroup.autoHealingPolicy;\n if (autoHealingPolicy) {\n const healthCheckUrl = autoHealingPolicy.healthCheckUrl\n ? autoHealingPolicy.healthCheckUrl\n : autoHealingPolicy.healthCheck;\n\n if (healthCheckUrl) {\n const { healthCheckName, healthCheckKind } = parseHealthCheckUrl(healthCheckUrl);\n command.autoHealingPolicy = {\n healthCheck: healthCheckName,\n healthCheckKind: healthCheckKind,\n healthCheckUrl: healthCheckUrl,\n initialDelaySec: autoHealingPolicy.initialDelaySec,\n };\n }\n\n const maxUnavailable = autoHealingPolicy.maxUnavailable;\n if (maxUnavailable) {\n command.autoHealingPolicy.maxUnavailable = maxUnavailable;\n command.viewState.maxUnavailableMetric = typeof maxUnavailable.percent === 'number' ? 'percent' : 'fixed';\n }\n }\n }\n\n function populateShieldedVmConfig(serverGroup, command) {\n command.enableSecureBoot = serverGroup.enableSecureBoot;\n command.enableVtpm = serverGroup.enableVtpm;\n command.enableIntegrityMonitoring = serverGroup.enableIntegrityMonitoring;\n }\n\n function populateCustomMetadata(metadataItems, command) {\n // Hide metadata items in the wizard.\n if (metadataItems) {\n let customUserData = '';\n let customUserDataKeys = [];\n if (angular.isArray(metadataItems)) {\n const customUserDataItem = metadataItems.find((metadataItem) => metadataItem.key === 'customUserData');\n if (customUserDataItem) {\n customUserData = customUserDataItem.value;\n customUserDataKeys = getCustomUserDataKeys(customUserData);\n command.userData = customUserData;\n }\n metadataItems.forEach(function (metadataItem) {\n if (\n !_.includes(customUserDataKeys, metadataItem.key) &&\n !_.includes(gceServerGroupHiddenMetadataKeys, metadataItem.key)\n ) {\n command.instanceMetadata[metadataItem.key] = metadataItem.value;\n }\n });\n } else {\n if (metadataItems.customUserData) {\n customUserData = metadataItems.customUserData;\n customUserDataKeys = getCustomUserDataKeys(customUserData);\n command.userData = customUserData;\n metadataItems = _.omit(metadataItems, customUserDataKeys);\n }\n angular.extend(command.instanceMetadata, _.omit(metadataItems, gceServerGroupHiddenMetadataKeys));\n }\n }\n\n if (command.labels['spinnaker-moniker-sequence']) {\n delete command.labels['spinnaker-moniker-sequence'];\n }\n }\n\n function getCustomUserDataKeys(customUserData) {\n const customUserDataKeys = [];\n customUserData.split(/\\n|,/).forEach(function (userDataItem) {\n const customUserDataKey = userDataItem.split('=')[0];\n customUserDataKeys.push(customUserDataKey);\n });\n return customUserDataKeys;\n }\n\n function populateTags(instanceTemplateTags, command) {\n if (instanceTemplateTags && instanceTemplateTags.items) {\n _.map(instanceTemplateTags.items, function (tag) {\n command.tags.push({ value: tag });\n });\n }\n }\n\n function populateResourceManagerTags(instanceTemplateResourceManagerTags, command) {\n if (instanceTemplateResourceManagerTags) {\n Object.assign(command.resourceManagerTags, instanceTemplateResourceManagerTags);\n }\n }\n\n function populatePartnerMetadata(instanceTemplatePartnerMetadata, command) {\n if (instanceTemplatePartnerMetadata) {\n Object.assign(command.partnerMetadata, instanceTemplatePartnerMetadata);\n }\n }\n\n function populateLabels(instanceTemplateLabels, command) {\n if (instanceTemplateLabels) {\n Object.assign(command.labels, instanceTemplateLabels);\n\n if (command.labels['spinnaker-region']) {\n delete command.labels['spinnaker-region'];\n }\n\n if (command.labels['spinnaker-server-group']) {\n delete command.labels['spinnaker-server-group'];\n }\n\n // Need to delete the sequence, otherwise it won't increment\n if (command.labels['spinnaker-moniker-sequence']) {\n delete command.labels['spinnaker-moniker-sequence'];\n }\n }\n }\n\n function populateAuthScopes(serviceAccounts, command) {\n if (serviceAccounts && serviceAccounts.length) {\n command.serviceAccountEmail = serviceAccounts[0].email;\n command.authScopes = _.map(serviceAccounts[0].scopes, (authScope) => {\n return authScope.replace('https://www.googleapis.com/auth/', '');\n });\n } else {\n command.authScopes = [];\n }\n }\n\n function attemptToSetValidCredentials(application, defaultCredentials, command) {\n return AccountService.listAccounts('gce').then(function (gceAccounts) {\n const gceAccountNames = _.map(gceAccounts, 'name');\n const firstGCEAccount = gceAccountNames[0];\n\n const defaultCredentialsAreValid = defaultCredentials && gceAccountNames.includes(defaultCredentials);\n\n command.credentials = defaultCredentialsAreValid ? defaultCredentials : firstGCEAccount || 'my-account-name';\n });\n }\n\n function buildNewServerGroupCommand(application, defaults) {\n defaults = defaults || {};\n\n const defaultCredentials = defaults.account || GCEProviderSettings.defaults.account;\n const defaultRegion = defaults.region || GCEProviderSettings.defaults.region;\n const defaultZone = defaults.zone || GCEProviderSettings.defaults.zone;\n const associatePublicIpAddress = _.has(application, 'attributes.providerSettings.gce.associatePublicIpAddress')\n ? application.attributes.providerSettings.gce.associatePublicIpAddress\n : true;\n\n const command = {\n application: application.name,\n credentials: defaultCredentials,\n region: defaultRegion,\n zone: defaultZone,\n regional: false, // TODO(duftler): Externalize this default alongside defaultRegion and defaultZone.\n selectZones: false, // Explicitly select zones for regional server groups.\n distributionPolicy: { zones: [] },\n network: 'default',\n associatePublicIpAddress: associatePublicIpAddress,\n canIpForward: false,\n strategy: '',\n capacity: {\n min: 0,\n max: 0,\n desired: 1,\n },\n backendServiceMetadata: [],\n minCpuPlatform: '(Automatic)',\n disks: [\n { type: 'pd-ssd', sizeGb: 10 },\n { type: 'local-ssd', sizeGb: 375 },\n ],\n imageSource: 'priorStage',\n instanceMetadata: {},\n tags: [],\n labels: {},\n resourceManagerTags: {},\n partnerMetadata: {},\n enableSecureBoot: false,\n enableVtpm: false,\n enableIntegrityMonitoring: false,\n preemptible: false,\n automaticRestart: true,\n onHostMaintenance: 'MIGRATE',\n serviceAccountEmail: 'default',\n authScopes: ['cloud.useraccounts.readonly', 'devstorage.read_only', 'logging.write', 'monitoring.write'],\n enableTraffic: true,\n cloudProvider: 'gce',\n selectedProvider: 'gce',\n availabilityZones: [],\n viewState: {\n instanceProfile: 'custom',\n allImageSelection: null,\n useSimpleCapacity: true,\n usePreferredZones: true,\n listImplicitSecurityGroups: false,\n mode: defaults.mode || 'create',\n disableStrategySelection: true,\n expectedArtifacts: [],\n },\n };\n\n if (\n application.attributes &&\n application.attributes.platformHealthOnlyShowOverride &&\n application.attributes.platformHealthOnly\n ) {\n command.interestingHealthProviderNames = ['Google'];\n }\n\n return attemptToSetValidCredentials(application, defaultCredentials, command).then(() => command);\n }\n\n // Only used to prepare view requiring template selecting\n function buildNewServerGroupCommandForPipeline(currentStage, pipeline) {\n const expectedArtifacts = ExpectedArtifactService.getExpectedArtifactsAvailableToStage(currentStage, pipeline);\n return $q.when({\n viewState: {\n pipeline,\n expectedArtifacts: expectedArtifacts,\n requiresTemplateSelection: true,\n stage: currentStage,\n },\n });\n }\n\n function buildServerGroupCommandFromExisting(application, serverGroup, mode) {\n mode = mode || 'clone';\n const moniker = serverGroup.moniker;\n\n const command = {\n application: application.name,\n autoscalingPolicy: _.cloneDeep(serverGroup.autoscalingPolicy),\n strategy: '',\n stack: moniker.stack,\n freeFormDetails: moniker.detail,\n credentials: serverGroup.account,\n loadBalancers: extractLoadBalancers(serverGroup.asg),\n loadBalancingPolicy: _.cloneDeep(serverGroup.loadBalancingPolicy),\n backendServiceMetadata: serverGroup.asg['backend-service-names'],\n securityGroups: serverGroup.securityGroups,\n region: serverGroup.region,\n capacity: {\n min: serverGroup.asg.minSize,\n max: serverGroup.asg.maxSize,\n desired: serverGroup.asg.desiredCapacity,\n },\n regional: serverGroup.regional,\n network: extractNetworkName(serverGroup),\n subnet: extractSubnetName(serverGroup),\n associatePublicIpAddress: determineAssociatePublicIPAddress(serverGroup),\n canIpForward: serverGroup.canIpForward,\n minCpuPlatform: serverGroup.launchConfig.minCpuPlatform || '(Automatic)',\n instanceMetadata: {},\n tags: [],\n labels: {},\n resourceManagerTags: {},\n partnerMetadata: {},\n availabilityZones: [],\n enableSecureBoot: serverGroup.enableSecureBoot,\n enableVtpm: serverGroup.enableVtpm,\n enableIntegrityMonitoring: serverGroup.enableIntegrityMonitoring,\n enableTraffic: true,\n cloudProvider: 'gce',\n selectedProvider: 'gce',\n distributionPolicy: {\n zones: serverGroup.distributionPolicy ? serverGroup.distributionPolicy.zones : [],\n targetShape: serverGroup.distributionPolicy ? serverGroup.distributionPolicy.targetShape : null,\n },\n selectZones: serverGroup.selectZones,\n source: {\n account: serverGroup.account,\n region: serverGroup.region,\n serverGroupName: serverGroup.name,\n asgName: serverGroup.name,\n },\n viewState: {\n allImageSelection: null,\n useSimpleCapacity: !serverGroup.autoscalingPolicy,\n usePreferredZones: false,\n listImplicitSecurityGroups: false,\n mode: mode,\n },\n };\n\n if (!command.regional) {\n command.zone = serverGroup.zones[0];\n command.source.zone = serverGroup.zones[0];\n }\n\n if (\n application.attributes &&\n application.attributes.platformHealthOnlyShowOverride &&\n application.attributes.platformHealthOnly\n ) {\n command.interestingHealthProviderNames = ['Google'];\n }\n\n populateAutoHealingPolicy(serverGroup, command);\n\n if (serverGroup.launchConfig) {\n const instanceType = serverGroup.launchConfig.instanceType;\n angular.extend(command, {\n instanceType: instanceType,\n });\n\n if (_.includes(instanceType, 'custom-')) {\n command.viewState.customInstance = gceCustomInstanceBuilderService.parseInstanceTypeString(instanceType);\n command.viewState.instanceProfile = 'buildCustom';\n }\n\n command.viewState.imageId = serverGroup.launchConfig.imageId;\n return determineInstanceCategoryFromInstanceType(command).then(function () {\n populateAvailabilityPolicies(serverGroup.launchConfig.instanceTemplate.properties.scheduling, command);\n populateCustomMetadata(serverGroup.launchConfig.instanceTemplate.properties.metadata.items, command);\n populateTags(serverGroup.launchConfig.instanceTemplate.properties.tags, command);\n populateLabels(serverGroup.instanceTemplateLabels, command);\n populateAuthScopes(serverGroup.launchConfig.instanceTemplate.properties.serviceAccounts, command);\n populateResourceManagerTags(\n serverGroup.launchConfig.instanceTemplate.properties.resourceManagerTags,\n command,\n );\n populatePartnerMetadata(serverGroup.launchConfig.instanceTemplate.properties.partnerMetadata, command);\n\n return populateDisksFromExisting(serverGroup.launchConfig.instanceTemplate.properties.disks, command).then(\n function () {\n return command;\n },\n );\n });\n }\n\n return $q.when(command);\n }\n\n function buildServerGroupCommandFromPipeline(application, originalCluster, currentStage, pipeline) {\n const pipelineCluster = _.cloneDeep(originalCluster);\n const region = Object.keys(pipelineCluster.availabilityZones)[0];\n const zone = pipelineCluster.zone;\n const instanceTypeCategoryLoader = instanceTypeService.getCategoryForInstanceType(\n 'gce',\n pipelineCluster.instanceType,\n );\n\n const commandOptions = { account: pipelineCluster.account, region: region, zone: zone };\n return $q\n .all([buildNewServerGroupCommand(application, commandOptions), instanceTypeCategoryLoader])\n .then(function ([command, instanceProfile]) {\n const expectedArtifacts = ExpectedArtifactService.getExpectedArtifactsAvailableToStage(\n currentStage,\n pipeline,\n );\n const viewState = {\n pipeline,\n stage: currentStage,\n instanceProfile,\n disableImageSelection: true,\n expectedArtifacts: expectedArtifacts,\n showImageSourceSelector: true,\n useSimpleCapacity: !pipelineCluster.autoscalingPolicy,\n mode: 'editPipeline',\n submitButtonLabel: 'Done',\n customInstance:\n instanceProfile === 'buildCustom'\n ? gceCustomInstanceBuilderService.parseInstanceTypeString(pipelineCluster.instanceType)\n : null,\n templatingEnabled: true,\n };\n\n const viewOverrides = {\n region: region,\n credentials: pipelineCluster.account,\n enableTraffic: !pipelineCluster.disableTraffic,\n viewState: viewState,\n };\n\n pipelineCluster.strategy = pipelineCluster.strategy || '';\n\n const extendedCommand = angular.extend({}, command, pipelineCluster, viewOverrides);\n\n return populateDisksFromPipeline(extendedCommand).then(function () {\n const instanceMetadata = extendedCommand.instanceMetadata;\n extendedCommand.loadBalancers = extractLoadBalancersFromMetadata(instanceMetadata);\n extendedCommand.backendServiceMetadata = instanceMetadata['backend-service-names']\n ? instanceMetadata['backend-service-names'].split(',')\n : [];\n extendedCommand.minCpuPlatform = pipelineCluster.minCpuPlatform || '(Automatic)';\n extendedCommand.instanceMetadata = {};\n populateCustomMetadata(instanceMetadata, extendedCommand);\n populateAutoHealingPolicy(pipelineCluster, extendedCommand);\n populateShieldedVmConfig(pipelineCluster, extendedCommand);\n\n const instanceTemplateTags = { items: extendedCommand.tags };\n extendedCommand.tags = [];\n populateTags(instanceTemplateTags, extendedCommand);\n\n const resourceManagerTags = extendedCommand.resourceManagerTags;\n populateResourceManagerTags(resourceManagerTags, extendedCommand);\n\n const partnerMetadata = extendedCommand.partnerMetadata;\n populatePartnerMetadata(partnerMetadata, extendedCommand);\n\n return extendedCommand;\n });\n });\n }\n\n return {\n buildNewServerGroupCommand: buildNewServerGroupCommand,\n buildNewServerGroupCommandForPipeline: buildNewServerGroupCommandForPipeline,\n buildServerGroupCommandFromExisting: buildServerGroupCommandFromExisting,\n buildServerGroupCommandFromPipeline: buildServerGroupCommandFromPipeline,\n };\n },\n ]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport _, { isEmpty } from 'lodash';\n\nimport { FirewallLabels, INSTANCE_TYPE_SERVICE, ModalWizard, TaskMonitor } from '@spinnaker/core';\n\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_HIDDENMETADATAKEYS_VALUE } from './hiddenMetadataKeys.value';\nimport { GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE } from '../../../instance/custom/customInstanceBuilder.gce.service';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE } from './securityGroups/tagManager.service';\n\nexport const GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_GCE_CONTROLLER =\n 'spinnaker.serverGroup.configure.gce.cloneServerGroup';\nexport const name = GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_GCE_CONTROLLER; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_GCE_CONTROLLER, [\n UIROUTER_ANGULARJS,\n GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE,\n INSTANCE_TYPE_SERVICE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_HIDDENMETADATAKEYS_VALUE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE,\n ])\n .controller('gceCloneServerGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n '$q',\n '$state',\n '$log',\n 'serverGroupWriter',\n 'gceServerGroupConfigurationService',\n 'serverGroupCommand',\n 'application',\n 'title',\n 'gceCustomInstanceBuilderService',\n 'instanceTypeService',\n 'wizardSubFormValidation',\n 'gceServerGroupHiddenMetadataKeys',\n 'gceTagManager',\n function (\n $scope,\n $uibModalInstance,\n $q,\n $state,\n $log,\n serverGroupWriter,\n gceServerGroupConfigurationService,\n serverGroupCommand,\n application,\n title,\n gceCustomInstanceBuilderService,\n instanceTypeService,\n wizardSubFormValidation,\n gceServerGroupHiddenMetadataKeys,\n gceTagManager,\n ) {\n $scope.pages = {\n templateSelection: require('./templateSelection/templateSelection.html'),\n basicSettings: require('./location/basicSettings.html'),\n loadBalancers: require('./loadBalancers/loadBalancers.html'),\n securityGroups: require('./securityGroups/securityGroups.html'),\n instanceType: require('./instanceType/instanceType.html'),\n capacity: require('./capacity/capacity.html'),\n autoHealingPolicy: require('./autoHealingPolicy/autoHealingPolicy.html'),\n autoScalingPolicy: require('./autoScalingPolicy/autoScalingPolicy.html'),\n zones: require('./capacity/zones.html'),\n advancedSettings: require('./advancedSettings/advancedSettings.html'),\n };\n\n $scope.firewallsLabel = FirewallLabels.get('Firewalls');\n\n $scope.title = title;\n\n $scope.applicationName = application.name;\n $scope.application = application;\n\n $scope.command = serverGroupCommand;\n\n $scope.state = {\n loaded: false,\n requiresTemplateSelection: !!serverGroupCommand.viewState.requiresTemplateSelection,\n };\n\n this.templateSelectionText = {\n copied: [\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: [],\n };\n\n if (!$scope.command.viewState.disableStrategySelection) {\n this.templateSelectionText.notCopied.push(\n 'the deployment strategy (if any) used to deploy the most recent server group',\n );\n }\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n const cloneStage = $scope.taskMonitor.task.execution.stages.find((stage) => stage.type === 'cloneServerGroup');\n if (cloneStage && cloneStage.context['deploy.server.groups']) {\n const newServerGroupName = cloneStage.context['deploy.server.groups'][$scope.command.region];\n if (newServerGroupName) {\n const newStateParams = {\n serverGroup: newServerGroupName,\n accountId: $scope.command.credentials,\n region: $scope.command.region,\n provider: 'gce',\n };\n let transitionTo = '^.^.^.clusters.serverGroup';\n if ($state.includes('**.clusters.serverGroup')) {\n // clone via details, all view\n transitionTo = '^.serverGroup';\n }\n if ($state.includes('**.clusters.cluster.serverGroup')) {\n // clone or create with details open\n transitionTo = '^.^.serverGroup';\n }\n if ($state.includes('**.clusters')) {\n // create new, no details open\n transitionTo = '.serverGroup';\n }\n $state.go(transitionTo, newStateParams);\n }\n }\n }\n\n function onTaskComplete() {\n application.serverGroups.refresh();\n application.serverGroups.onNextRefresh($scope, onApplicationRefresh);\n }\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: 'Creating your server group',\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n function configureCommand() {\n gceServerGroupConfigurationService\n .configureCommand(application, serverGroupCommand)\n .then(function () {\n $scope.state.loaded = true;\n initializeSelectOptions();\n initializeWatches();\n wizardSubFormValidation\n .config({ scope: $scope, form: 'form' })\n .register({ page: 'location', subForm: 'basicSettings' })\n .register({ page: 'capacity', subForm: 'capacitySubForm' })\n .register({ page: 'zones', subForm: 'zonesSubForm' })\n .register({ page: 'load-balancers', subForm: 'loadBalancerSubForm' })\n .register({ page: 'autohealing-policy', subForm: 'autoHealingPolicySubForm' })\n .register({ page: 'autoscaling-policy', subForm: 'autoScalingPolicySubForm' });\n })\n .catch((e) => {\n $log.error('Error generating server group command: ', e);\n });\n }\n\n function initializeWatches() {\n $scope.$watch('command.credentials', createResultProcessor($scope.command.credentialsChanged));\n $scope.$watch('command.regional', createResultProcessor($scope.command.regionalChanged));\n $scope.$watch('command.region', createResultProcessor($scope.command.regionChanged));\n $scope.$watch('command.network', createResultProcessor($scope.command.networkChanged));\n $scope.$watch('command.zone', createResultProcessor($scope.command.zoneChanged));\n $scope.$watch('command.viewState.instanceTypeDetails', updateStorageSettingsFromInstanceType());\n $scope.$watch('command.selectZones', createResultProcessor($scope.command.selectZonesChanged));\n $scope.$watch('command.distributionPolicy.zones', createResultProcessor($scope.command.selectZonesChanged));\n $scope.$watch(\n 'command.viewState.customInstance',\n () => {\n $scope.command.customInstanceChanged($scope.command);\n setInstanceTypeFromCustomChoices();\n },\n true,\n );\n }\n\n function initializeSelectOptions() {\n processCommandUpdateResult($scope.command.credentialsChanged($scope.command));\n processCommandUpdateResult($scope.command.regionalChanged($scope.command));\n processCommandUpdateResult($scope.command.regionChanged($scope.command));\n processCommandUpdateResult($scope.command.networkChanged($scope.command));\n processCommandUpdateResult($scope.command.zoneChanged($scope.command));\n processCommandUpdateResult($scope.command.customInstanceChanged($scope.command));\n gceServerGroupConfigurationService.configureSubnets($scope.command);\n }\n\n function createResultProcessor(method) {\n return function () {\n processCommandUpdateResult(method($scope.command));\n };\n }\n\n function processCommandUpdateResult(result) {\n if (result.dirty.loadBalancers) {\n ModalWizard.markDirty('load-balancers');\n }\n if (result.dirty.securityGroups) {\n ModalWizard.markDirty('security-groups');\n }\n if (result.dirty.availabilityZones) {\n ModalWizard.markDirty('capacity');\n }\n if (result.dirty.instanceType) {\n ModalWizard.markDirty('instance-type');\n }\n }\n\n function setInstanceTypeFromCustomChoices() {\n const c = $scope.command;\n const location = c.regional ? c.region : c.zone;\n const { locationToInstanceTypesMap } = c.backingData.credentialsKeyedByAccount[c.credentials];\n const extendedMemory = _.get(c, 'viewState.customInstance.extendedMemory');\n const customInstanceChoices = [\n _.get(c, 'viewState.customInstance.instanceFamily'),\n _.get(c, 'viewState.customInstance.vCpuCount'),\n _.get(c, 'viewState.customInstance.memory'),\n ];\n\n if (\n _.every([\n ...customInstanceChoices,\n gceCustomInstanceBuilderService.customInstanceChoicesAreValid(\n ...customInstanceChoices,\n location,\n locationToInstanceTypesMap,\n extendedMemory,\n ),\n ])\n ) {\n c.instanceType = gceCustomInstanceBuilderService.generateInstanceTypeString(\n ...customInstanceChoices,\n extendedMemory,\n );\n\n instanceTypeService.getInstanceTypeDetails(c.selectedProvider, 'buildCustom').then((instanceTypeDetails) => {\n c.viewState.instanceTypeDetails = instanceTypeDetails;\n });\n }\n }\n\n function updateStorageSettingsFromInstanceType() {\n return function (instanceTypeDetails) {\n if ($scope.command.viewState.initialized) {\n if (instanceTypeDetails && instanceTypeDetails.storage && instanceTypeDetails.storage.defaultSettings) {\n $scope.command.disks = instanceTypeDetails.storage.defaultSettings.disks;\n delete $scope.command.viewState.overriddenStorageDescription;\n }\n } else {\n $scope.command.viewState.initialized = true;\n }\n };\n }\n\n this.isValid = function () {\n const selectedZones =\n $scope.command.selectZones && _.get($scope, 'command.distributionPolicy.zones.length') >= 1;\n const autoScalingPolicy = $scope.command.autoscalingPolicy;\n return (\n $scope.command &&\n ($scope.command.viewState.disableImageSelection || $scope.command.image) &&\n $scope.command.application &&\n $scope.command.credentials &&\n $scope.command.instanceType &&\n $scope.command.region &&\n ($scope.command.regional || $scope.command.zone) &&\n $scope.command.capacity.desired !== null &&\n (!$scope.command.selectZones || selectedZones) &&\n $scope.form.$valid &&\n (!autoScalingPolicy ||\n (autoScalingPolicy &&\n (!isEmpty(autoScalingPolicy.cpuUtilization) ||\n !isEmpty(autoScalingPolicy.customMetricUtilizations) ||\n !isEmpty(autoScalingPolicy.loadBalancingUtilization)))) &&\n ModalWizard.isComplete()\n );\n };\n\n this.showSubmitButton = function () {\n return ModalWizard.allPagesVisited();\n };\n\n function buildLoadBalancerMetadata(loadBalancerNames, loadBalancerIndex, backendServices) {\n let metadata = {};\n\n if (_.get(loadBalancerNames, 'length') > 0) {\n metadata = loadBalancerNames.reduce(\n (metadata, name) => {\n const loadBalancerDetails = loadBalancerIndex[name];\n\n if (loadBalancerDetails.loadBalancerType === 'HTTP') {\n metadata['global-load-balancer-names'] = metadata['global-load-balancer-names'].concat(\n loadBalancerDetails.listeners.map((listener) => listener.name),\n );\n } else if (loadBalancerDetails.loadBalancerType === 'INTERNAL_MANAGED') {\n metadata['load-balancer-names'] = metadata['load-balancer-names'].concat(\n loadBalancerDetails.listeners.map((listener) => listener.name),\n );\n } else if (loadBalancerDetails.loadBalancerType === 'SSL') {\n metadata['global-load-balancer-names'].push(name);\n } else if (loadBalancerDetails.loadBalancerType === 'TCP') {\n metadata['global-load-balancer-names'].push(name);\n } else {\n metadata['load-balancer-names'].push(name);\n }\n return metadata;\n },\n { 'load-balancer-names': [], 'global-load-balancer-names': [] },\n );\n }\n\n if (_.isObject(backendServices) && Object.keys(backendServices).length > 0) {\n metadata['backend-service-names'] = _.reduce(\n backendServices,\n (accumulatedBackends, backends) => accumulatedBackends.concat(backends),\n [],\n );\n }\n\n for (const key in metadata) {\n if (metadata[key].length === 0) {\n delete metadata[key];\n } else {\n metadata[key] = _.uniq(metadata[key]).toString();\n }\n }\n\n return metadata;\n }\n\n function collectLoadBalancerNamesForCommand(loadBalancerIndex, loadBalancerMetadata) {\n let loadBalancerNames = [];\n if (loadBalancerMetadata['load-balancer-names']) {\n loadBalancerNames = loadBalancerNames.concat(loadBalancerMetadata['load-balancer-names'].split(','));\n }\n\n const selectedSslLoadBalancerNames = _.chain(loadBalancerIndex)\n .filter({ loadBalancerType: 'SSL' })\n .map('name')\n .intersection(\n loadBalancerMetadata['global-load-balancer-names']\n ? loadBalancerMetadata['global-load-balancer-names'].split(',')\n : [],\n )\n .value();\n\n const selectedTcpLoadBalancerNames = _.chain(loadBalancerIndex)\n .filter({ loadBalancerType: 'TCP' })\n .map('name')\n .intersection(\n loadBalancerMetadata['global-load-balancer-names']\n ? loadBalancerMetadata['global-load-balancer-names'].split(',')\n : [],\n )\n .value();\n\n return loadBalancerNames.concat(selectedSslLoadBalancerNames).concat(selectedTcpLoadBalancerNames);\n }\n\n this.submit = function () {\n // We use this list of load balancer names when 'Enabling' a server group.\n const loadBalancerMetadata = buildLoadBalancerMetadata(\n $scope.command.loadBalancers,\n $scope.command.backingData.filtered.loadBalancerIndex,\n $scope.command.backendServices,\n );\n\n const origLoadBalancers = $scope.command.loadBalancers;\n $scope.command.loadBalancers = collectLoadBalancerNamesForCommand(\n $scope.command.backingData.filtered.loadBalancerIndex,\n loadBalancerMetadata,\n );\n\n if ($scope.command.minCpuPlatform === '(Automatic)') {\n $scope.command.minCpuPlatform = '';\n }\n\n angular.extend($scope.command.instanceMetadata, loadBalancerMetadata);\n\n const origTags = $scope.command.tags;\n const transformedTags = [];\n // The tags are stored using a 'value' attribute to enable the Add/Remove behavior in the wizard.\n $scope.command.tags.forEach(function (tag) {\n transformedTags.push(tag.value);\n });\n $scope.command.tags = transformedTags;\n\n $scope.command.targetSize = $scope.command.capacity.desired;\n\n if ($scope.command.autoscalingPolicy) {\n $scope.command.capacity.min = $scope.command.autoscalingPolicy.minNumReplicas;\n $scope.command.capacity.max = $scope.command.autoscalingPolicy.maxNumReplicas;\n } else {\n $scope.command.capacity.min = $scope.command.capacity.desired;\n $scope.command.capacity.max = $scope.command.capacity.desired;\n }\n\n delete $scope.command.securityGroups;\n\n if ($scope.command.viewState.mode === 'editPipeline' || $scope.command.viewState.mode === 'createPipeline') {\n return $uibModalInstance.close($scope.command);\n }\n\n $scope.taskMonitor.submit(function () {\n const promise = serverGroupWriter.cloneServerGroup(angular.copy($scope.command), application);\n\n // Copy back the original objects so the wizard can still be used if the command needs to be resubmitted.\n $scope.command.instanceMetadata = _.omit($scope.command.instanceMetadata, gceServerGroupHiddenMetadataKeys);\n\n $scope.command.tags = origTags;\n $scope.command.loadBalancers = origLoadBalancers;\n $scope.command.securityGroups = gceTagManager.inferSecurityGroupIdsFromTags($scope.command.tags);\n\n return promise;\n });\n };\n\n this.onHealthCheckRefresh = function () {\n gceServerGroupConfigurationService.refreshHealthChecks($scope.command);\n };\n\n this.onEnableAutoHealingChange = function () {\n // Prevent empty auto-healing policies from being overwritten by those of their ancestors\n $scope.command.overwriteAncestorAutoHealingPolicy =\n $scope.command.viewState.mode === 'clone' &&\n $scope.command.autoHealingPolicy != null &&\n $scope.command.enableAutoHealing === false;\n };\n\n this.setAutoHealingPolicy = function (autoHealingPolicy) {\n $scope.command.autoHealingPolicy = autoHealingPolicy;\n };\n\n this.onEnableAutoScalingChange = function () {\n // Prevent empty auto-scaling policies from being overwritten by those of their ancestors\n $scope.command.overwriteAncestorAutoScalingPolicy =\n $scope.command.autoscalingPolicy != null && $scope.command.enableAutoScaling === false;\n };\n\n this.setAutoScalingPolicy = function (autoScalingPolicy) {\n $scope.command.autoscalingPolicy = autoScalingPolicy;\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n\n this.specialInstanceProfiles = new Set(['custom', 'buildCustom']);\n\n // This function is called from within React, and without $apply, Angular does not know when it has been called.\n $scope.command.setCustomInstanceViewState = (customInstanceChoices) => {\n $scope.$apply(() => ($scope.command.viewState.customInstance = customInstanceChoices));\n };\n\n if (!$scope.state.requiresTemplateSelection) {\n configureCommand();\n } else {\n $scope.state.loaded = true;\n }\n\n this.templateSelected = () => {\n $scope.state.requiresTemplateSelection = false;\n configureCommand();\n };\n\n $scope.$on('$destroy', gceTagManager.reset);\n },\n ]);\n","import { has } from 'lodash';\n\nimport { TaskExecutor } from '@spinnaker/core';\nimport type { IGceServerGroup } from '../../../domain';\nimport { GCEProviderSettings } from '../../../gce.settings';\n\nexport class StatefulMIGService {\n public static markDiskStateful(applicationName: string, deviceName: string, serverGroup: IGceServerGroup) {\n return TaskExecutor.executeTask({\n application: applicationName,\n description: 'Mark disk as stateful',\n job: [\n {\n cloudProvider: 'gce',\n credentials: serverGroup.account,\n deviceName,\n region: serverGroup.region,\n serverGroupName: serverGroup.name,\n type: 'setStatefulDisk',\n },\n ],\n });\n }\n\n public static statefullyUpdateBootDisk(applicationName: string, bootImage: string, serverGroup: IGceServerGroup) {\n return TaskExecutor.executeTask({\n application: applicationName,\n description: 'Statefully update boot disk image',\n job: [\n {\n bootImage,\n cloudProvider: 'gce',\n credentials: serverGroup.account,\n region: serverGroup.region,\n serverGroupName: serverGroup.name,\n type: 'statefullyUpdateBootImage',\n },\n ],\n });\n }\n\n public static isDiskStateful(deviceName: string, serverGroup: IGceServerGroup): boolean {\n return has(serverGroup, ['statefulPolicy', 'preservedState', 'disks', deviceName]);\n }\n\n public static statefulMigsEnabled(): boolean {\n return GCEProviderSettings.feature.statefulMigsEnabled;\n }\n}\n","import React from 'react';\n\nimport type { Application } from '@spinnaker/core';\nimport { ConfirmationModalService } from '@spinnaker/core';\n\nimport { StatefulMIGService } from './StatefulMIGService';\nimport type { IGceServerGroup } from '../../../domain';\n\ninterface IMarkDiskStatefulButtonProps {\n application: Application;\n deviceName: string;\n serverGroup: IGceServerGroup;\n}\n\nexport function MarkDiskStatefulButton({ application, deviceName, serverGroup }: IMarkDiskStatefulButtonProps) {\n function openConfirmationModal(): void {\n ConfirmationModalService.confirm({\n account: serverGroup.account,\n askForReason: true,\n buttonText: 'Mark as stateful',\n header: `Really mark disk ${deviceName} as stateful?`,\n submitMethod: () => {\n return StatefulMIGService.markDiskStateful(application.name, deviceName, serverGroup);\n },\n taskMonitorConfig: {\n application,\n title: 'Marking disk as stateful',\n },\n });\n }\n\n if (StatefulMIGService.isDiskStateful(deviceName, serverGroup)) {\n return <span> (Marked as Stateful)</span>;\n }\n\n return (\n <button className=\"btn-link\" onClick={() => openConfirmationModal()}>\n Mark as Stateful\n </button>\n );\n}\n","import React from 'react';\n\nimport type { Application, IModalComponentProps } from '@spinnaker/core';\nimport { FormikFormField, ReactModal, TaskMonitor, WizardModal, WizardPage } from '@spinnaker/core';\n\nimport { StatefulMIGService } from './StatefulMIGService';\nimport type { IGceServerGroup } from '../../../domain';\nimport type { IGceImage } from '../../../image';\nimport { GceImageReader, ImageSelect } from '../../../image';\n\ninterface IUpdateBootImageButtonProps {\n application: Application;\n bootImage: string;\n serverGroup: IGceServerGroup;\n}\n\nexport function UpdateBootImageButton(props: IUpdateBootImageButtonProps) {\n function openUpdateImageModal() {\n const componentProps = { ...props } as IUpdateBootImageModalProps;\n ReactModal.show(UpdateBootImageModal, componentProps, { dialogClassName: 'wizard-modal modal-lg' });\n }\n\n return (\n <button className=\"btn-link\" onClick={openUpdateImageModal}>\n Statefully Update\n </button>\n );\n}\n\ninterface IUpdateBootImageModalProps extends IModalComponentProps, IUpdateBootImageButtonProps {\n application: Application;\n serverGroup: IGceServerGroup;\n}\n\ninterface IUpdateBootImageModalState {\n availableImages: IGceImage[];\n taskMonitor: TaskMonitor;\n}\n\ninterface IUpdateBootImageModalFormValues {\n image: string;\n}\n\nclass UpdateBootImageModal extends React.Component<IUpdateBootImageModalProps, IUpdateBootImageModalState> {\n public constructor(props: IUpdateBootImageModalProps) {\n super(props);\n this.state = {\n availableImages: [],\n taskMonitor: new TaskMonitor({\n application: props.application,\n title: 'Updating Boot Image',\n modalInstance: TaskMonitor.modalInstanceEmulation(() => this.props.dismissModal()),\n }),\n };\n }\n\n public componentDidMount() {\n GceImageReader.findImages({\n account: this.props.serverGroup.account,\n provider: 'gce',\n q: '*',\n }).then((images) => {\n this.setState({ availableImages: images });\n });\n }\n\n private submit = (values: IUpdateBootImageModalFormValues): void => {\n this.state.taskMonitor.submit(() =>\n StatefulMIGService.statefullyUpdateBootDisk(this.props.application.name, values.image, this.props.serverGroup),\n );\n };\n\n public render() {\n return (\n <WizardModal<IUpdateBootImageModalFormValues>\n closeModal={this.submit}\n dismissModal={this.props.dismissModal}\n heading=\"Update Boot Disk Image\"\n initialValues={{ image: this.props.bootImage }}\n submitButtonLabel=\"Update Image\"\n taskMonitor={this.state.taskMonitor}\n render={({ formik, nextIdx, wizard }) => (\n <WizardPage\n label=\"Boot Image\"\n wizard={wizard}\n order={nextIdx()}\n render={() => (\n <FormikFormField\n input={(props) => (\n <div className=\"full-width\" style={{ height: '225px' }}>\n <ImageSelect\n availableImages={this.state.availableImages}\n selectedImage={props.value}\n selectImage={(imageName: string) => formik.setFieldValue('image', imageName)}\n />\n </div>\n )}\n label=\"Boot image name:\"\n name=\"image\"\n required={true}\n />\n )}\n />\n )}\n />\n );\n }\n}\n","import { module } from 'angular';\nimport { get, last } from 'lodash';\nimport React from 'react';\nimport { react2angular } from 'react2angular';\n\nimport type { Application } from '@spinnaker/core';\nimport { withErrorBoundary } from '@spinnaker/core';\n\nimport type { IGceDisk, IGceServerGroup } from '../../domain';\nimport { MarkDiskStatefulButton } from './stateful/MarkDiskStatefulButton';\nimport { StatefulMIGService } from './stateful/StatefulMIGService';\nimport { UpdateBootImageButton } from './stateful/UpdateBootImageButton';\n\ninterface IServerGroupDiskDescriptionProps {\n application: Application;\n serverGroup: IGceServerGroup;\n}\n\nclass ServerGroupDiskDescriptions extends React.Component<IServerGroupDiskDescriptionProps> {\n public render() {\n const { application, serverGroup } = this.props;\n const disks: IGceDisk[] = get(serverGroup, 'launchConfig.instanceTemplate.properties.disks', []);\n const statefulOperationsEnabled: boolean = StatefulMIGService.statefulMigsEnabled();\n const canUpdateBootImage =\n statefulOperationsEnabled &&\n disks.some((disk) => StatefulMIGService.isDiskStateful(disk.deviceName, serverGroup));\n\n return disks.map((disk) => {\n if (disk.boot) {\n return (\n <React.Fragment key={disk.deviceName}>\n <dt>\n Boot Disk\n {canUpdateBootImage && (\n <UpdateBootImageButton\n application={application}\n bootImage={ServerGroupDiskDescriptions.getDiskImageName(disk)}\n serverGroup={serverGroup}\n />\n )}\n </dt>\n <dd>{ServerGroupDiskDescriptions.getDiskTypeLabel(disk)}</dd>\n <dd>{ServerGroupDiskDescriptions.getDiskImageLabel(disk)}</dd>\n </React.Fragment>\n );\n }\n return (\n <React.Fragment key={disk.deviceName}>\n <dt>\n Disk\n {statefulOperationsEnabled && (\n <MarkDiskStatefulButton\n application={application}\n deviceName={disk.deviceName}\n serverGroup={serverGroup}\n />\n )}\n </dt>\n <dd>{ServerGroupDiskDescriptions.getDiskTypeLabel(disk)}</dd>\n <dd>{ServerGroupDiskDescriptions.getDiskImageLabel(disk)}</dd>\n </React.Fragment>\n );\n });\n }\n\n private static translateDiskType = (disk: IGceDisk): string => {\n const diskType = disk.initializeParams.diskType;\n if (diskType === 'pd-ssd') {\n return 'Persistent SSD';\n } else if (diskType === 'local-ssd') {\n return 'Local SSD';\n } else {\n return 'Persistent Std';\n }\n };\n\n private static getDiskTypeLabel = (disk: IGceDisk): string => {\n return `${ServerGroupDiskDescriptions.translateDiskType(disk)}: ${disk.initializeParams.diskSizeGb}GB`;\n };\n\n private static getDiskImageLabel = (disk: IGceDisk): string => {\n return `Image: ${ServerGroupDiskDescriptions.getDiskImageName(disk)}`;\n };\n\n private static getDiskImageName = (disk: IGceDisk): string => {\n return last(get(disk, 'initializeParams.sourceImage', '').split('/'));\n };\n}\n\nexport const GCE_SERVER_GROUP_DISK_DESCRIPTIONS = 'spinnaker.gce.serverGroupDiskDescriptions';\nmodule(GCE_SERVER_GROUP_DISK_DESCRIPTIONS, []).component(\n 'gceServerGroupDiskDescriptions',\n react2angular(withErrorBoundary(ServerGroupDiskDescriptions, 'gceServerGroupDiskDescriptions'), [\n 'application',\n 'serverGroup',\n ]),\n);\n","import { module } from 'angular';\nimport { isEmpty } from 'lodash';\nimport React from 'react';\nimport { react2angular } from 'react2angular';\n\nimport {\n CheckboxInput,\n FormField,\n LayoutProvider,\n NumberInput,\n ReactSelectInput,\n withErrorBoundary,\n} from '@spinnaker/core';\n\nimport type { IGceAutoscalingPolicy, IGceScaleInControl } from '../../../../autoscalingPolicy';\nimport { GceAutoScalingFieldLayout } from '../../../../autoscalingPolicy';\n\nenum maxReplicasUnit {\n fixed = 'fixed',\n percent = 'percent',\n}\n\ninterface IGceScaleInControlsProps {\n policy: IGceAutoscalingPolicy;\n updatePolicy: (policy: IGceAutoscalingPolicy) => void;\n}\n\nconst defaultScaleInControl: IGceScaleInControl = {\n maxScaledInReplicas: {\n fixed: null,\n percent: 0,\n },\n timeWindowSec: 60,\n};\n\nfunction GceScaleInControls({ policy, updatePolicy }: IGceScaleInControlsProps) {\n function updateScaleInControl(scaleInControl: IGceScaleInControl) {\n const scaleInControlExist = Object.keys(scaleInControl).length;\n if (scaleInControlExist) {\n updatePolicy({\n ...policy,\n scaleInControl,\n });\n } else {\n const updatedPolicy: any = policy;\n delete updatedPolicy['scaleInControl'];\n updatePolicy({\n ...updatedPolicy,\n });\n }\n }\n\n function getMaxReplicasUnit(): maxReplicasUnit {\n if (Number.isInteger(policy.scaleInControl.maxScaledInReplicas.percent)) {\n return maxReplicasUnit.percent;\n }\n return maxReplicasUnit.fixed;\n }\n\n return (\n <LayoutProvider value={GceAutoScalingFieldLayout}>\n <div className=\"row\">\n <FormField\n input={(inputProps) => <CheckboxInput {...inputProps} />}\n label=\"Enable scale-in controls\"\n onChange={(e: React.ChangeEvent<any>) => {\n updateScaleInControl(e.target.checked ? defaultScaleInControl : {});\n }}\n value={!isEmpty(policy.scaleInControl)}\n />\n </div>\n {!isEmpty(policy.scaleInControl) && (\n <>\n <div className=\"row\">\n <FormField\n input={(inputProps) => (\n <NumberInput\n {...inputProps}\n min={0}\n max={getMaxReplicasUnit() === maxReplicasUnit.percent ? 100 : null}\n />\n )}\n label=\"Max scaled-in replicas\"\n onChange={(e: React.ChangeEvent<any>) => {\n updateScaleInControl({\n ...policy.scaleInControl,\n maxScaledInReplicas: {\n [getMaxReplicasUnit()]: parseInt(e.target.value, 10),\n },\n });\n }}\n value={policy.scaleInControl.maxScaledInReplicas[getMaxReplicasUnit()]}\n />\n <FormField\n input={(inputProps) => (\n <ReactSelectInput\n {...inputProps}\n clearable={false}\n stringOptions={[maxReplicasUnit.percent, maxReplicasUnit.fixed]}\n />\n )}\n label=\"\"\n onChange={(e: React.ChangeEvent<any>) => {\n updateScaleInControl({\n ...policy.scaleInControl,\n maxScaledInReplicas: {\n [e.target.value]: policy.scaleInControl.maxScaledInReplicas[getMaxReplicasUnit()],\n },\n });\n }}\n value={getMaxReplicasUnit()}\n />\n </div>\n <div className=\"row\">\n <FormField\n input={(inputProps) => <NumberInput {...inputProps} min={60} max={3600} />}\n label=\"Time window (seconds)\"\n onChange={(e: React.ChangeEvent<any>) => {\n updateScaleInControl({\n ...policy.scaleInControl,\n timeWindowSec: parseInt(e.target.value, 10),\n });\n }}\n value={policy.scaleInControl.timeWindowSec}\n />\n </div>\n </>\n )}\n </LayoutProvider>\n );\n}\n\nexport const GCE_SCALE_IN_CONTROLS = 'spinnaker.gce.scaleInControls';\nmodule(GCE_SCALE_IN_CONTROLS, []).component(\n 'gceScaleInControls',\n react2angular(withErrorBoundary(GceScaleInControls, 'gceScaleInControls'), ['policy', 'updatePolicy']),\n);\n","import type { IComponentOptions, IController } from 'angular';\nimport { module } from 'angular';\nimport type { IModalService } from 'angular-ui-bootstrap';\n\nimport type { Application, IServerGroup } from '@spinnaker/core';\n\nclass GceAddAutoHealingPolicyButtonCtrl implements IController {\n public application: Application;\n public serverGroup: IServerGroup;\n\n public static $inject = ['$uibModal'];\n constructor(private $uibModal: IModalService) {}\n\n public addAutoHealingPolicy(): void {\n this.$uibModal.open({\n templateUrl: require('./modal/upsertAutoHealingPolicy.modal.html'),\n controller: 'gceUpsertAutoHealingPolicyModalCtrl',\n controllerAs: 'ctrl',\n size: 'md',\n resolve: {\n serverGroup: () => this.serverGroup,\n application: () => this.application,\n },\n });\n }\n}\n\nconst gceAddAutoHealingPolicyButton: IComponentOptions = {\n bindings: {\n application: '<',\n serverGroup: '<',\n },\n template: '<a href ng-click=\"$ctrl.addAutoHealingPolicy()\">Create new autohealing policy</a>',\n controller: GceAddAutoHealingPolicyButtonCtrl,\n};\n\nexport const GCE_ADD_AUTOHEALING_POLICY_BUTTON = 'spinnaker.gce.addAutoHealingPolicyButton.component';\nmodule(GCE_ADD_AUTOHEALING_POLICY_BUTTON, []).component('gceAddAutoHealingPolicyButton', gceAddAutoHealingPolicyButton);\n","import type { IComponentOptions, IController } from 'angular';\nimport { module } from 'angular';\nimport type { IModalService } from 'angular-ui-bootstrap';\n\nimport type { Application } from '@spinnaker/core';\nimport { ConfirmationModalService } from '@spinnaker/core';\nimport type { IGceServerGroup } from '../../../domain/index';\n\nclass GceAutoHealingPolicyDetailsCtrl implements IController {\n public serverGroup: IGceServerGroup;\n public application: Application;\n\n public static $inject = ['$uibModal', 'gceAutoscalingPolicyWriter'];\n constructor(private $uibModal: IModalService, private gceAutoscalingPolicyWriter: any) {}\n\n public editPolicy(): void {\n this.$uibModal.open({\n templateUrl: require('./modal/upsertAutoHealingPolicy.modal.html'),\n controller: 'gceUpsertAutoHealingPolicyModalCtrl',\n controllerAs: 'ctrl',\n size: 'md',\n resolve: {\n application: () => this.application,\n serverGroup: () => this.serverGroup,\n },\n });\n }\n\n public deletePolicy(): void {\n const taskMonitor = {\n application: this.application,\n title: `Deleting autohealing policy for ${this.serverGroup.name}`,\n };\n\n ConfirmationModalService.confirm({\n header: `Really delete autohealer for ${this.serverGroup.name}?`,\n buttonText: 'Delete autohealer',\n account: this.serverGroup.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: () => this.gceAutoscalingPolicyWriter.deleteAutoHealingPolicy(this.application, this.serverGroup),\n });\n }\n}\n\nconst gceAutoHealingPolicyDetails: IComponentOptions = {\n bindings: { serverGroup: '<', application: '<' },\n template: `\n <dt>\n Health Check\n <help-field key=\"gce.serverGroup.autoHealing\"></help-field>\n </dt>\n <dd>{{$ctrl.serverGroup.autoHealingPolicyHealthCheck}}</dd>\n <dt>\n Initial Delay\n <help-field key=\"gce.serverGroup.initialDelaySec\"></help-field>\n </dt>\n <dd>{{$ctrl.serverGroup.initialDelaySec}} seconds</dd>\n <dt ng-if=\"$ctrl.serverGroup.maxUnavailable\">\n Max Unavailable\n <help-field key=\"gce.serverGroup.maxUnavailable\"></help-field>\n </dt>\n <dd ng-if=\"$ctrl.serverGroup.maxUnavailable\">{{$ctrl.serverGroup.maxUnavailable}}</dd>\n <action-icons class=\"text-right\"\n edit=\"$ctrl.editPolicy()\"\n edit-info=\"Edit Policy\"\n destroy=\"$ctrl.deletePolicy()\"\n destroy-info=\"Delete Policy\">\n </action-icons>`,\n controller: GceAutoHealingPolicyDetailsCtrl,\n};\n\nexport const GCE_AUTOHEALING_POLICY_DETAILS = 'spinnaker.gce.autoHealingPolicyDetails.component';\nmodule(GCE_AUTOHEALING_POLICY_DETAILS, []).component('gceAutoHealingPolicyDetails', gceAutoHealingPolicyDetails);\n","'use strict';\n\nimport * as angular from 'angular';\n\nimport { TaskExecutor } from '@spinnaker/core';\n\nexport const GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE =\n 'spinnaker.gce.serverGroup.details.scalingPolicy.write.service';\nexport const name = GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE; // for backwards compatibility\nangular\n .module(GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE, [])\n .factory('gceAutoscalingPolicyWriter', function () {\n function upsertAutoscalingPolicy(application, serverGroup, policy, params = {}) {\n const job = {\n type: 'upsertScalingPolicy',\n cloudProvider: serverGroup.type,\n credentials: serverGroup.account,\n region: serverGroup.region,\n serverGroupName: serverGroup.name,\n autoscalingPolicy: policy,\n };\n angular.extend(job, params);\n\n return TaskExecutor.executeTask({\n application,\n description: 'Upsert scaling policy ' + serverGroup.name,\n job: [job],\n });\n }\n\n function deleteAutoscalingPolicy(application, serverGroup) {\n return TaskExecutor.executeTask({\n application,\n description: 'Delete scaling policy ' + serverGroup.name,\n job: [\n {\n type: 'deleteScalingPolicy',\n cloudProvider: serverGroup.type,\n credentials: serverGroup.account,\n region: serverGroup.region,\n serverGroupName: serverGroup.name,\n },\n ],\n });\n }\n\n function upsertAutoHealingPolicy(application, serverGroup, policy, params = {}) {\n const job = {\n type: 'upsertScalingPolicy',\n cloudProvider: serverGroup.type,\n credentials: serverGroup.account,\n region: serverGroup.region,\n serverGroupName: serverGroup.name,\n autoHealingPolicy: policy,\n };\n angular.extend(job, params);\n\n return TaskExecutor.executeTask({\n application,\n description: 'Upsert autohealing policy ' + serverGroup.name,\n job: [job],\n });\n }\n\n function deleteAutoHealingPolicy(application, serverGroup) {\n return TaskExecutor.executeTask({\n application,\n description: 'Delete autohealing policy ' + serverGroup.name,\n job: [\n {\n type: 'deleteScalingPolicy',\n cloudProvider: serverGroup.type,\n credentials: serverGroup.account,\n region: serverGroup.region,\n serverGroupName: serverGroup.name,\n deleteAutoHealingPolicy: true,\n },\n ],\n });\n }\n\n return { upsertAutoscalingPolicy, deleteAutoscalingPolicy, upsertAutoHealingPolicy, deleteAutoHealingPolicy };\n });\n","import type { IController } from 'angular';\nimport { module } from 'angular';\nimport type { IModalServiceInstance } from 'angular-ui-bootstrap';\nimport { cloneDeep } from 'lodash';\n\nimport type { Application } from '@spinnaker/core';\nimport { TaskMonitor } from '@spinnaker/core';\nimport { GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE } from '../../../../autoscalingPolicy/autoscalingPolicy.write.service';\nimport type { IGceAutoHealingPolicy, IGceServerGroup } from '../../../../domain/index';\nimport type { GceHealthCheckReader } from '../../../../healthCheck/healthCheck.read.service';\nimport { GCE_HEALTH_CHECK_READER } from '../../../../healthCheck/healthCheck.read.service';\nimport type { IGceHealthCheckOption } from '../../../../healthCheck/healthCheckUtils';\nimport { getHealthCheckOptions } from '../../../../healthCheck/healthCheckUtils';\n\nimport './upsertAutoHealingPolicy.modal.less';\n\nclass GceUpsertAutoHealingPolicyModalCtrl implements IController {\n public autoHealingPolicy: IGceAutoHealingPolicy;\n public taskMonitor: TaskMonitor;\n public healthChecks: IGceHealthCheckOption[];\n public action: 'Edit' | 'New';\n public isNew: boolean;\n public submitButtonLabel: string;\n\n public static $inject = [\n '$uibModalInstance',\n 'application',\n 'serverGroup',\n 'gceHealthCheckReader',\n 'gceAutoscalingPolicyWriter',\n ];\n constructor(\n private $uibModalInstance: IModalServiceInstance,\n private application: Application,\n public serverGroup: IGceServerGroup,\n private gceHealthCheckReader: GceHealthCheckReader,\n private gceAutoscalingPolicyWriter: any,\n ) {\n this.initialize();\n }\n\n public submit(): void {\n const submitMethod = () => {\n return this.gceAutoscalingPolicyWriter.upsertAutoHealingPolicy(\n this.application,\n this.serverGroup,\n this.autoHealingPolicy,\n );\n };\n this.taskMonitor.submit(submitMethod);\n }\n\n public cancel(): void {\n this.$uibModalInstance.dismiss();\n }\n\n public setAutoHealingPolicy(autoHealingPolicy: IGceAutoHealingPolicy): void {\n this.autoHealingPolicy = autoHealingPolicy;\n }\n\n public onHealthCheckRefresh(): void {\n this.gceHealthCheckReader.listHealthChecks().then((healthChecks) => {\n const matchingHealthChecks = healthChecks.filter((hc) => hc.account === this.serverGroup.account);\n this.healthChecks = getHealthCheckOptions(matchingHealthChecks);\n });\n }\n\n private initialize(): void {\n this.onHealthCheckRefresh();\n this.action = this.serverGroup.autoHealingPolicy ? 'Edit' : 'New';\n this.isNew = !this.serverGroup.autoHealingPolicy;\n this.submitButtonLabel = this.isNew ? 'Create' : 'Update';\n if (!this.isNew) {\n this.autoHealingPolicy = cloneDeep(this.serverGroup.autoHealingPolicy);\n }\n this.taskMonitor = new TaskMonitor({\n application: this.application,\n title: `${this.action} autohealing policy for ${this.serverGroup.name}`,\n modalInstance: this.$uibModalInstance,\n });\n }\n}\n\nexport const GCE_UPSERT_AUTOHEALING_POLICY_MODAL_CTRL = 'spinnaker.gce.upsertAutoHealingPolicy.modal.controller';\nmodule(GCE_UPSERT_AUTOHEALING_POLICY_MODAL_CTRL, [\n GCE_HEALTH_CHECK_READER,\n GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE,\n]).controller('gceUpsertAutoHealingPolicyModalCtrl', GceUpsertAutoHealingPolicyModalCtrl);\n","'use strict';\n\nimport { module } from 'angular';\nimport { cloneDeep } from 'lodash';\n\nimport { TaskMonitor } from '@spinnaker/core';\n\nimport { GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE } from '../../../../autoscalingPolicy/autoscalingPolicy.write.service';\nimport { GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_BASICSETTINGS_BASICSETTINGS_COMPONENT } from '../../../../autoscalingPolicy/components/basicSettings/basicSettings.component';\nimport { GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_METRICSETTINGS_METRICSETTINGS_COMPONENT } from '../../../../autoscalingPolicy/components/metricSettings/metricSettings.component';\nimport { GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_SCALINGSCHEDULES_SCALINGSCHEDULES_COMPONENT } from '../../../../autoscalingPolicy/components/scalingSchedules/scalingSchedules.component';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_GCE_MODULE } from '../../../configure/serverGroup.configure.gce.module';\n\nimport './upsertAutoscalingPolicy.modal.less';\n\nexport const GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_MODAL_UPSERTAUTOSCALINGPOLICY_MODAL_CONTROLLER =\n 'spinnaker.deck.gce.upsertAutoscalingPolicy.modal.controller';\nexport const name = GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_MODAL_UPSERTAUTOSCALINGPOLICY_MODAL_CONTROLLER; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_MODAL_UPSERTAUTOSCALINGPOLICY_MODAL_CONTROLLER, [\n GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE,\n GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_BASICSETTINGS_BASICSETTINGS_COMPONENT,\n GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_METRICSETTINGS_METRICSETTINGS_COMPONENT,\n GOOGLE_AUTOSCALINGPOLICY_COMPONENTS_SCALINGSCHEDULES_SCALINGSCHEDULES_COMPONENT,\n]).controller('gceUpsertAutoscalingPolicyModalCtrl', [\n 'policy',\n 'application',\n 'serverGroup',\n '$uibModalInstance',\n 'gceAutoscalingPolicyWriter',\n '$scope',\n function (policy, application, serverGroup, $uibModalInstance, gceAutoscalingPolicyWriter, $scope) {\n [this.action, this.isNew] = policy ? ['Edit', false] : ['New', true];\n this.policy = cloneDeep(policy || {});\n\n this.cancel = $uibModalInstance.dismiss;\n\n this.taskMonitor = new TaskMonitor({\n application: application,\n title: `${this.action} scaling policy for ${serverGroup.name}`,\n modalInstance: $uibModalInstance,\n });\n\n this.save = () => {\n const submitMethod = () =>\n gceAutoscalingPolicyWriter.upsertAutoscalingPolicy(application, serverGroup, this.policy);\n\n this.taskMonitor.submit(submitMethod);\n };\n\n this.updatePolicy = (updatedPolicy) => {\n $scope.$applyAsync(() => {\n this.policy = updatedPolicy;\n });\n };\n },\n]);\n","import { module } from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\n\nimport { GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_MODAL_UPSERTAUTOSCALINGPOLICY_MODAL_CONTROLLER } from './modal/upsertAutoscalingPolicy.modal.controller';\n\n('use strict');\n\nexport const GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_ADDAUTOSCALINGPOLICYBUTTON_COMPONENT =\n 'spinnaker.gce.serverGroup.details.scalingPolicy.addButton';\nexport const name = GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_ADDAUTOSCALINGPOLICYBUTTON_COMPONENT; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_ADDAUTOSCALINGPOLICYBUTTON_COMPONENT, [\n ANGULAR_UI_BOOTSTRAP,\n GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_MODAL_UPSERTAUTOSCALINGPOLICY_MODAL_CONTROLLER,\n]).component('gceAddAutoscalingPolicyButton', {\n bindings: {\n serverGroup: '=',\n application: '=',\n },\n template: '<a href ng-click=\"$ctrl.addAutoscalingPolicy()\">Create new scaling policy</a>',\n controller: [\n '$uibModal',\n function ($uibModal) {\n this.addAutoscalingPolicy = () => {\n $uibModal.open({\n templateUrl: require('./modal/upsertAutoscalingPolicy.modal.html'),\n controller: 'gceUpsertAutoscalingPolicyModalCtrl',\n controllerAs: 'ctrl',\n size: 'lg',\n resolve: {\n policy: () => undefined,\n serverGroup: () => this.serverGroup,\n application: () => this.application,\n },\n });\n };\n },\n ],\n});\n","'use strict';\n\nimport { module } from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\n\nimport { ConfirmationModalService, SETTINGS } from '@spinnaker/core';\n\nimport { GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE } from './../../../autoscalingPolicy/autoscalingPolicy.write.service';\nimport { GCE_AUTOSCALING_POLICY_SELECTOR_COMPONENT } from '../../configure/wizard/autoScalingPolicy/autoScalingPolicySelector.component';\nimport { GCEProviderSettings } from '../../../gce.settings';\nimport { GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_MODAL_UPSERTAUTOSCALINGPOLICY_MODAL_CONTROLLER } from './modal/upsertAutoscalingPolicy.modal.controller';\nexport const GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_DIRECTIVE =\n 'spinnaker.gce.instance.details.scalingPolicy.directive';\nexport const name = GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_DIRECTIVE; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_DIRECTIVE, [\n ANGULAR_UI_BOOTSTRAP,\n GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE,\n GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_MODAL_UPSERTAUTOSCALINGPOLICY_MODAL_CONTROLLER,\n GCE_AUTOSCALING_POLICY_SELECTOR_COMPONENT,\n]).component('gceAutoscalingPolicy', {\n bindings: {\n policy: '=',\n application: '=',\n serverGroup: '=',\n },\n templateUrl: require('./autoscalingPolicy.directive.html'),\n controller: [\n '$uibModal',\n 'gceAutoscalingPolicyWriter',\n function ($uibModal, gceAutoscalingPolicyWriter) {\n var scope = this;\n scope.$onInit = function () {\n const policy = scope.policy;\n\n policy.bases = [];\n\n if (policy.cpuUtilization) {\n const basis = {\n description: 'CPU Usage',\n helpKey: 'gce.serverGroup.autoscaling.targetCPUUsage',\n };\n\n if (policy.cpuUtilization.utilizationTarget) {\n basis.targets = [Math.round(policy.cpuUtilization.utilizationTarget * 100) + '%'];\n }\n\n policy.bases.push(basis);\n }\n\n if (policy.loadBalancingUtilization) {\n const basis = {\n description: 'HTTP Load Balancing Usage',\n helpKey: 'gce.serverGroup.autoscaling.targetHTTPLoadBalancingUsage',\n };\n\n if (policy.loadBalancingUtilization.utilizationTarget) {\n basis.targets = [Math.round(policy.loadBalancingUtilization.utilizationTarget * 100) + '%'];\n }\n\n policy.bases.push(basis);\n }\n\n if (policy.customMetricUtilizations) {\n const basis = {\n description: policy.customMetricUtilizations.length > 1 ? 'Monitoring Metrics' : 'Monitoring Metric',\n helpKey: 'gce.serverGroup.autoscaling.targetMetric',\n };\n\n if (policy.customMetricUtilizations.length > 0) {\n basis.targets = [];\n policy.customMetricUtilizations.forEach((metric) => {\n let target = metric.metric + ': ' + metric.utilizationTarget;\n\n if (metric.utilizationTargetType === 'DELTA_PER_SECOND') {\n target += '/sec';\n } else if (metric.utilizationTargetType === 'DELTA_PER_MINUTE') {\n target += '/min';\n }\n\n basis.targets.push(target);\n });\n }\n\n policy.bases.push(basis);\n }\n\n scope.scaleInControlsConfigured =\n policy.scaleInControl &&\n policy.scaleInControl.timeWindowSec &&\n policy.scaleInControl.maxScaledInReplicas &&\n (policy.scaleInControl.maxScaledInReplicas.percent || policy.scaleInControl.maxScaledInReplicas.fixed);\n\n if (scope.scaleInControlsConfigured) {\n scope.maxScaledInReplicasMessage = policy.scaleInControl.maxScaledInReplicas.percent\n ? `${policy.scaleInControl.maxScaledInReplicas.percent}%`\n : `${policy.scaleInControl.maxScaledInReplicas.fixed}`;\n\n scope.timeWindowSecMessage = `${policy.scaleInControl.timeWindowSec} seconds`;\n }\n\n scope.predictiveAutoscalingEnabled =\n GCEProviderSettings.feature.predictiveAutoscaling &&\n policy.cpuUtilization &&\n policy.cpuUtilization.predictiveMethod;\n\n scope.editPolicy = () => {\n $uibModal.open({\n templateUrl: require('./modal/upsertAutoscalingPolicy.modal.html'),\n controller: 'gceUpsertAutoscalingPolicyModalCtrl',\n controllerAs: 'ctrl',\n size: 'lg',\n resolve: {\n policy: () => scope.policy,\n application: () => scope.application,\n serverGroup: () => scope.serverGroup,\n },\n });\n };\n\n scope.deletePolicy = () => {\n const taskMonitor = {\n application: scope.application,\n title: `Deleting autoscaler for ${scope.serverGroup.name}`,\n };\n\n ConfirmationModalService.confirm({\n header: `Really delete autoscaler for ${scope.serverGroup.name}?`,\n buttonText: 'Delete autoscaler',\n account: scope.serverGroup.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: () =>\n gceAutoscalingPolicyWriter.deleteAutoscalingPolicy(scope.application, scope.serverGroup),\n });\n };\n };\n },\n ],\n});\n","'use strict';\n\nimport * as angular from 'angular';\n\nexport const GOOGLE_COMMON_FOOTER_DIRECTIVE = 'spinnaker.google.footer.directive';\nexport const name = GOOGLE_COMMON_FOOTER_DIRECTIVE; // for backwards compatibility\nangular.module(GOOGLE_COMMON_FOOTER_DIRECTIVE, []).directive('gceFooter', function () {\n return {\n restrict: 'E',\n templateUrl: require('./footer.directive.html'),\n scope: {},\n bindToController: {\n action: '&',\n isValid: '&',\n cancel: '&',\n account: '=?',\n verification: '=?',\n },\n controllerAs: 'vm',\n controller: angular.noop,\n };\n});\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE } from '../../../autoscalingPolicy/autoscalingPolicy.write.service';\n\nexport const GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZEAUTOSCALINGPOLICY_COMPONENT =\n 'spinnaker.deck.gce.serverGroup.details.resizeAutoscalingPolicy.component';\nexport const name = GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZEAUTOSCALINGPOLICY_COMPONENT; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZEAUTOSCALINGPOLICY_COMPONENT, [\n GOOGLE_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_WRITE_SERVICE,\n ])\n .component('gceResizeAutoscalingPolicy', {\n bindings: {\n serverGroup: '=',\n command: '=',\n formMethods: '=',\n application: '=',\n },\n templateUrl: require('./resizeAutoscalingPolicy.component.html'),\n controller: [\n '$scope',\n 'gceAutoscalingPolicyWriter',\n function ($scope, gceAutoscalingPolicyWriter) {\n // In Angular 1.7 Directive bindings were removed in the constructor, default values now must be instantiated within $onInit\n // See https://docs.angularjs.org/guide/migration#-compile- and https://docs.angularjs.org/guide/migration#migrate1.5to1.6-ng-services-$compile\n this.$onInit = () => {\n const newPolicyBounds = ['newMinNumReplicas', 'newMaxNumReplicas'];\n newPolicyBounds.forEach((prop) => (this.command[prop] = null));\n\n angular.extend(this.formMethods, {\n formIsValid: () =>\n _.every([\n _.chain(newPolicyBounds)\n .map((bound) => this.command[bound] !== null)\n .every()\n .value(),\n $scope.resizeAutoscalingPolicyForm.$valid,\n ]),\n submitMethod: () => {\n return gceAutoscalingPolicyWriter.upsertAutoscalingPolicy(\n this.application,\n this.serverGroup,\n {\n minNumReplicas: this.command.newMinNumReplicas,\n maxNumReplicas: this.command.newMaxNumReplicas,\n },\n {\n reason: this.command.reason,\n interestingHealthProviderNames: this.command.interestingHealthProviderNames,\n },\n );\n },\n });\n };\n },\n ],\n });\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { SERVER_GROUP_WRITER } from '@spinnaker/core';\n\nexport const GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZECAPACITY_COMPONENT =\n 'spinnaker.google.serverGroup.details.resize.capacity.component';\nexport const name = GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZECAPACITY_COMPONENT; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZECAPACITY_COMPONENT, [SERVER_GROUP_WRITER])\n .component('gceResizeCapacity', {\n bindings: {\n command: '=',\n application: '=',\n serverGroup: '=',\n formMethods: '=',\n },\n templateUrl: require('./resizeCapacity.component.html'),\n controller: [\n '$scope',\n 'serverGroupWriter',\n function ($scope, serverGroupWriter) {\n // In Angular 1.7 Directive bindings were removed in the constructor, default values now must be instantiated within $onInit\n // See https://docs.angularjs.org/guide/migration#-compile- and https://docs.angularjs.org/guide/migration#migrate1.5to1.6-ng-services-$compile\n this.$onInit = () => {\n this.command.newSize = null;\n\n angular.extend(this.formMethods, {\n formIsValid: () => _.every([this.command.newSize !== null, $scope.resizeCapacityForm.$valid]),\n submitMethod: () => {\n return serverGroupWriter.resizeServerGroup(this.serverGroup, this.application, {\n capacity: { min: this.command.newSize, max: this.command.newSize, desired: this.command.newSize },\n serverGroupName: this.serverGroup.name,\n targetSize: this.command.newSize,\n region: this.serverGroup.region,\n interestingHealthProviderNames: this.command.interestingHealthProviderNames,\n reason: this.command.reason,\n });\n },\n });\n };\n },\n ],\n });\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { TaskMonitor } from '@spinnaker/core';\n\nimport { GOOGLE_COMMON_FOOTER_DIRECTIVE } from '../../../common/footer.directive';\nimport { GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZEAUTOSCALINGPOLICY_COMPONENT } from './resizeAutoscalingPolicy.component';\nimport { GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZECAPACITY_COMPONENT } from './resizeCapacity.component';\n\nexport const GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER =\n 'spinnaker.google.serverGroup.details.resize.controller';\nexport const name = GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER, [\n GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZECAPACITY_COMPONENT,\n GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZEAUTOSCALINGPOLICY_COMPONENT,\n GOOGLE_COMMON_FOOTER_DIRECTIVE,\n]).controller('gceResizeServerGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n 'application',\n 'serverGroup',\n function ($scope, $uibModalInstance, application, serverGroup) {\n $scope.serverGroup = serverGroup;\n $scope.application = application;\n $scope.verification = {};\n $scope.command = {};\n $scope.formMethods = {};\n\n if (application && application.attributes) {\n if (application.attributes.platformHealthOnlyShowOverride && application.attributes.platformHealthOnly) {\n $scope.command.interestingHealthProviderNames = ['Google'];\n }\n\n $scope.command.platformHealthOnlyShowOverride = application.attributes.platformHealthOnlyShowOverride;\n }\n\n this.isValid = function () {\n if (!$scope.verification.verified) {\n return false;\n }\n return $scope.formMethods.formIsValid();\n };\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: 'Resizing ' + serverGroup.name,\n modalInstance: $uibModalInstance,\n });\n\n this.resize = function () {\n this.submitting = true;\n if (!this.isValid()) {\n return;\n }\n\n $scope.taskMonitor.submit($scope.formMethods.submitMethod);\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { SERVER_GROUP_WRITER, TaskMonitor } from '@spinnaker/core';\nimport { GOOGLE_COMMON_FOOTER_DIRECTIVE } from '../../../common/footer.directive';\n\nexport const GOOGLE_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER =\n 'spinnaker.google.serverGroup.details.rollback.controller';\nexport const name = GOOGLE_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER, [\n SERVER_GROUP_WRITER,\n GOOGLE_COMMON_FOOTER_DIRECTIVE,\n]).controller('gceRollbackServerGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n 'serverGroupWriter',\n 'application',\n 'serverGroup',\n 'disabledServerGroups',\n function ($scope, $uibModalInstance, serverGroupWriter, application, serverGroup, disabledServerGroups) {\n $scope.serverGroup = serverGroup;\n $scope.disabledServerGroups = disabledServerGroups.sort((a, b) => b.name.localeCompare(a.name));\n $scope.verification = {};\n\n $scope.command = {\n rollbackType: 'EXPLICIT',\n rollbackContext: {\n rollbackServerGroupName: serverGroup.name,\n },\n };\n\n if (application && application.attributes) {\n if (application.attributes.platformHealthOnlyShowOverride && application.attributes.platformHealthOnly) {\n $scope.command.interestingHealthProviderNames = ['Google'];\n }\n\n $scope.command.platformHealthOnlyShowOverride = application.attributes.platformHealthOnlyShowOverride;\n }\n\n this.isValid = function () {\n const command = $scope.command;\n if (!$scope.verification.verified) {\n return false;\n }\n\n return command.rollbackContext.restoreServerGroupName !== undefined;\n };\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: 'Rollback ' + serverGroup.name,\n modalInstance: $uibModalInstance,\n });\n\n this.rollback = function () {\n this.submitting = true;\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]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport {\n AccountService,\n ClusterTargetBuilder,\n ConfirmationModalService,\n FirewallLabels,\n NetworkReader,\n SERVER_GROUP_WRITER,\n ServerGroupReader,\n ServerGroupTemplates,\n ServerGroupWarningMessageService,\n} from '@spinnaker/core';\n\nimport { GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_ADDAUTOSCALINGPOLICYBUTTON_COMPONENT } from './autoscalingPolicy/addAutoscalingPolicyButton.component';\nimport { GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_DIRECTIVE } from './autoscalingPolicy/autoscalingPolicy.directive';\nimport { GOOGLE_COMMON_XPNNAMING_GCE_SERVICE } from '../../common/xpnNaming.gce.service';\nimport '../configure/serverGroup.configure.gce.module';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE } from '../configure/serverGroupCommandBuilder.service';\nimport { GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER } from './resize/resizeServerGroup.controller';\nimport { GOOGLE_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER } from './rollback/rollbackServerGroup.controller';\n\nimport './serverGroupDetails.less';\n\nexport const GOOGLE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_GCE_CONTROLLER =\n 'spinnaker.serverGroup.details.gce.controller';\nexport const name = GOOGLE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_GCE_CONTROLLER; // for backwards compatibility\nangular\n .module(GOOGLE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_GCE_CONTROLLER, [\n UIROUTER_ANGULARJS,\n GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE,\n SERVER_GROUP_WRITER,\n GOOGLE_COMMON_XPNNAMING_GCE_SERVICE,\n GOOGLE_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER,\n GOOGLE_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER,\n GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_AUTOSCALINGPOLICY_DIRECTIVE,\n GOOGLE_SERVERGROUP_DETAILS_AUTOSCALINGPOLICY_ADDAUTOSCALINGPOLICYBUTTON_COMPONENT,\n ])\n .controller('gceServerGroupDetailsCtrl', [\n '$scope',\n '$state',\n '$templateCache',\n '$interpolate',\n 'app',\n 'serverGroup',\n 'gceServerGroupCommandBuilder',\n '$uibModal',\n 'serverGroupWriter',\n 'gceXpnNamingService',\n function (\n $scope,\n $state,\n $templateCache,\n $interpolate,\n app,\n serverGroup,\n gceServerGroupCommandBuilder,\n $uibModal,\n serverGroupWriter,\n gceXpnNamingService,\n ) {\n this.state = {\n loading: true,\n };\n\n this.firewallsLabel = FirewallLabels.get('Firewalls');\n\n this.application = app;\n\n const extractServerGroupSummary = () => {\n let summary = _.find(app.serverGroups.data, (toCheck) => {\n return (\n toCheck.name === serverGroup.name &&\n toCheck.account === serverGroup.accountId &&\n toCheck.region === serverGroup.region\n );\n });\n if (!summary) {\n app.loadBalancers.data.some((loadBalancer) => {\n if (loadBalancer.account === serverGroup.accountId && loadBalancer.region === serverGroup.region) {\n return loadBalancer.serverGroups.some((possibleServerGroup) => {\n if (possibleServerGroup.name === serverGroup.name) {\n summary = possibleServerGroup;\n return true;\n }\n });\n }\n });\n }\n return summary;\n };\n\n const autoClose = () => {\n if ($scope.$$destroyed) {\n return;\n }\n $state.go('^', { allowModalToStayOpen: true }, { location: 'replace' });\n };\n\n const cancelLoader = () => {\n this.state.loading = false;\n };\n\n const retrieveServerGroup = () => {\n const summary = extractServerGroupSummary();\n return ServerGroupReader.getServerGroup(\n app.name,\n serverGroup.accountId,\n serverGroup.region,\n serverGroup.name,\n ).then((details) => {\n cancelLoader();\n\n angular.extend(details, summary);\n // it's possible the summary was not found because the clusters are still loading\n details.account = serverGroup.accountId;\n\n this.serverGroup = details;\n\n if (!_.isEmpty(this.serverGroup)) {\n if (details.securityGroups) {\n this.securityGroups = _.chain(details.securityGroups)\n .map((id) => {\n return (\n _.find(app.securityGroups.data, { accountName: serverGroup.accountId, region: 'global', id: id }) ||\n _.find(app.securityGroups.data, { accountName: serverGroup.accountId, region: 'global', name: id })\n );\n })\n .compact()\n .value();\n }\n\n this.serverGroup.zones.sort();\n\n const projectId = gceXpnNamingService.deriveProjectId(this.serverGroup.launchConfig.instanceTemplate);\n this.serverGroup.logsLink =\n 'https://console.developers.google.com/project/' +\n projectId +\n '/logs?advancedFilter=resource.type=(gce_instance_group_manager OR gce_instance OR gce_autoscaler)%0A\"' +\n this.serverGroup.name +\n '\"';\n\n this.serverGroup.network = getNetwork(projectId);\n retrieveSubnet(projectId);\n determineAssociatePublicIPAddress();\n\n findStartupScript();\n prepareAvailabilityPolicies();\n prepareShieldedVmConfig();\n prepareAutoHealingPolicy();\n prepareAuthScopes();\n prepareCurrentActions();\n augmentTagsWithHelp();\n configureEntityTagTargets();\n processLabels();\n } else {\n autoClose();\n }\n }, autoClose);\n };\n\n const findStartupScript = () => {\n if (_.has(this.serverGroup, 'launchConfig.instanceTemplate.properties.metadata.items')) {\n const metadataItems = this.serverGroup.launchConfig.instanceTemplate.properties.metadata.items;\n const startupScriptItem = _.find(metadataItems, (metadataItem) => {\n return metadataItem.key === 'startup-script';\n });\n\n if (startupScriptItem) {\n this.serverGroup.startupScript = startupScriptItem.value;\n }\n }\n };\n\n const prepareAvailabilityPolicies = () => {\n if (_.has(this.serverGroup, 'launchConfig.instanceTemplate.properties.scheduling')) {\n const scheduling = this.serverGroup.launchConfig.instanceTemplate.properties.scheduling;\n\n this.serverGroup.availabilityPolicies = {\n preemptibility: scheduling.preemptible ? 'On' : 'Off',\n automaticRestart: scheduling.automaticRestart ? 'On' : 'Off',\n onHostMaintenance: scheduling.onHostMaintenance === 'MIGRATE' ? 'Migrate' : 'Terminate',\n };\n }\n };\n\n const prepareShieldedVmConfig = () => {\n if (_.has(this.serverGroup, 'launchConfig.instanceTemplate.properties.shieldedVmConfig')) {\n const shieldedVmConfig = this.serverGroup.launchConfig.instanceTemplate.properties.shieldedVmConfig;\n\n this.serverGroup.shieldedVmConfig = {\n enableSecureBoot: shieldedVmConfig.enableSecureBoot ? 'On' : 'Off',\n enableVtpm: shieldedVmConfig.enableVtpm ? 'On' : 'Off',\n enableIntegrityMonitoring: shieldedVmConfig.enableIntegrityMonitoring ? 'On' : 'Off',\n };\n }\n };\n\n const prepareAutoHealingPolicy = () => {\n if (this.serverGroup.autoHealingPolicy) {\n const autoHealingPolicy = this.serverGroup.autoHealingPolicy;\n const healthCheckUrl = autoHealingPolicy.healthCheck;\n\n this.serverGroup.autoHealingPolicyHealthCheck = healthCheckUrl ? _.last(healthCheckUrl.split('/')) : null;\n this.serverGroup.initialDelaySec = autoHealingPolicy.initialDelaySec;\n\n if (autoHealingPolicy.maxUnavailable) {\n if (typeof autoHealingPolicy.maxUnavailable.percent === 'number') {\n this.serverGroup.maxUnavailable = autoHealingPolicy.maxUnavailable.percent + '%';\n } else {\n this.serverGroup.maxUnavailable = autoHealingPolicy.maxUnavailable.fixed + ' instances';\n }\n }\n }\n };\n\n const prepareAuthScopes = () => {\n if (_.has(this.serverGroup, 'launchConfig.instanceTemplate.properties.serviceAccounts')) {\n const serviceAccounts = this.serverGroup.launchConfig.instanceTemplate.properties.serviceAccounts;\n if (serviceAccounts.length) {\n const serviceAccount = this.serverGroup.launchConfig.instanceTemplate.properties.serviceAccounts[0];\n\n this.serverGroup.serviceAccountEmail = serviceAccount.email;\n this.serverGroup.authScopes = _.map(serviceAccount.scopes, (authScope) => {\n return authScope.replace('https://www.googleapis.com/auth/', '');\n });\n }\n }\n };\n\n const prepareCurrentActions = () => {\n if (this.serverGroup.currentActions) {\n this.serverGroup.currentActionsSummary = [];\n\n _.forOwn(this.serverGroup.currentActions, (value, key) => {\n if (key !== 'none' && value) {\n this.serverGroup.currentActionsSummary.push({ action: _.startCase(key), count: value });\n }\n });\n\n if (!this.serverGroup.currentActionsSummary.length) {\n delete this.serverGroup.currentActionsSummary;\n }\n }\n };\n\n const augmentTagsWithHelp = () => {\n if (_.has(this.serverGroup, 'launchConfig.instanceTemplate.properties.tags.items') && this.securityGroups) {\n const helpMap = {};\n\n this.serverGroup.launchConfig.instanceTemplate.properties.tags.items.forEach((tag) => {\n const securityGroupsMatches = _.filter(this.securityGroups, (securityGroup) =>\n _.includes(securityGroup.targetTags, tag),\n );\n const securityGroupMatchNames = _.map(securityGroupsMatches, 'name');\n\n if (!_.isEmpty(securityGroupMatchNames)) {\n const groupOrGroups = securityGroupMatchNames.length > 1 ? 'groups' : 'group';\n\n helpMap[tag] =\n 'This tag associates this server group with security ' +\n groupOrGroups +\n ' <em>' +\n securityGroupMatchNames.join(', ') +\n '</em>.';\n }\n });\n\n this.serverGroup.launchConfig.instanceTemplate.properties.tags.helpMap = helpMap;\n }\n };\n\n const processLabels = () => {\n if (!_.size(this.serverGroup.instanceTemplateLabels)) {\n delete this.serverGroup.instanceTemplateLabels;\n }\n };\n\n const getNetwork = (projectId) => {\n const networkUrl = _.get(\n this.serverGroup,\n 'launchConfig.instanceTemplate.properties.networkInterfaces[0].network',\n );\n return gceXpnNamingService.decorateXpnResourceIfNecessary(projectId, networkUrl);\n };\n\n const retrieveSubnet = (projectId) => {\n NetworkReader.listNetworksByProvider('gce').then((networks) => {\n const autoCreateSubnets = _.chain(networks)\n .filter({ account: this.serverGroup.account, id: this.serverGroup.network })\n .map('autoCreateSubnets')\n .head()\n .value();\n\n if (autoCreateSubnets) {\n this.serverGroup.subnet = '(Auto-select)';\n } else {\n const subnetUrl = _.get(\n this.serverGroup,\n 'launchConfig.instanceTemplate.properties.networkInterfaces[0].subnetwork',\n );\n this.serverGroup.subnet = gceXpnNamingService.decorateXpnResourceIfNecessary(projectId, subnetUrl);\n }\n });\n };\n\n const determineAssociatePublicIPAddress = () => {\n this.serverGroup.associatePublicIPAddress = _.has(\n this.serverGroup,\n 'launchConfig.instanceTemplate.properties.networkInterfaces[0].accessConfigs',\n );\n };\n\n retrieveServerGroup().then(() => {\n // If the user navigates away from the view before the initial retrieveServerGroup call completes,\n // do not bother subscribing to the refresh\n if (!$scope.$$destroyed) {\n app.serverGroups.onRefresh($scope, retrieveServerGroup);\n }\n });\n\n this.destroyServerGroup = () => {\n const serverGroup = this.serverGroup;\n\n const taskMonitor = {\n application: app,\n title: 'Destroying ' + serverGroup.name,\n onTaskComplete: () => {\n if ($state.includes('**.serverGroup', stateParams)) {\n $state.go('^');\n }\n },\n };\n\n const submitMethod = (params) => serverGroupWriter.destroyServerGroup(serverGroup, app, params);\n\n const stateParams = {\n name: serverGroup.name,\n accountId: serverGroup.account,\n region: serverGroup.region,\n };\n\n const confirmationModalParams = {\n header: 'Really destroy ' + serverGroup.name + '?',\n buttonText: 'Destroy ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n askForReason: true,\n platformHealthOnlyShowOverride: app.attributes.platformHealthOnlyShowOverride,\n platformHealthType: 'Google',\n };\n\n ServerGroupWarningMessageService.addDestroyWarningMessage(app, serverGroup, confirmationModalParams);\n\n if (app.attributes.platformHealthOnlyShowOverride && app.attributes.platformHealthOnly) {\n confirmationModalParams.interestingHealthProviderNames = ['Google'];\n }\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n this.disableServerGroup = () => {\n const serverGroup = this.serverGroup;\n\n const taskMonitor = {\n application: app,\n title: 'Disabling ' + serverGroup.name,\n };\n\n const submitMethod = (params) => serverGroupWriter.disableServerGroup(serverGroup, app, params);\n\n const confirmationModalParams = {\n header: 'Really disable ' + serverGroup.name + '?',\n buttonText: 'Disable ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n platformHealthOnlyShowOverride: app.attributes.platformHealthOnlyShowOverride,\n platformHealthType: 'Google',\n submitMethod: submitMethod,\n askForReason: true,\n };\n\n ServerGroupWarningMessageService.addDisableWarningMessage(app, serverGroup, confirmationModalParams);\n\n if (app.attributes.platformHealthOnlyShowOverride && app.attributes.platformHealthOnly) {\n confirmationModalParams.interestingHealthProviderNames = ['Google'];\n }\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n this.enableServerGroup = () => {\n const serverGroup = this.serverGroup;\n\n const taskMonitor = {\n application: app,\n title: 'Enabling ' + serverGroup.name,\n };\n\n const submitMethod = (params) => serverGroupWriter.enableServerGroup(serverGroup, app, params);\n\n const confirmationModalParams = {\n header: 'Really enable ' + serverGroup.name + '?',\n buttonText: 'Enable ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n platformHealthOnlyShowOverride: app.attributes.platformHealthOnlyShowOverride,\n platformHealthType: 'Google',\n submitMethod: submitMethod,\n askForReason: true,\n };\n\n if (app.attributes.platformHealthOnlyShowOverride && app.attributes.platformHealthOnly) {\n confirmationModalParams.interestingHealthProviderNames = ['Google'];\n }\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n this.rollbackServerGroup = () => {\n $uibModal.open({\n templateUrl: require('./rollback/rollbackServerGroup.html'),\n controller: 'gceRollbackServerGroupCtrl as ctrl',\n resolve: {\n serverGroup: () => this.serverGroup,\n disabledServerGroups: () => {\n const cluster = _.find(app.clusters, {\n name: this.serverGroup.cluster,\n account: this.serverGroup.account,\n });\n return _.filter(cluster.serverGroups, { isDisabled: true, region: this.serverGroup.region });\n },\n application: () => app,\n },\n });\n };\n\n this.resizeServerGroup = () => {\n $uibModal.open({\n templateUrl: require('./resize/resizeServerGroup.html'),\n controller: 'gceResizeServerGroupCtrl as ctrl',\n resolve: {\n serverGroup: () => {\n return this.serverGroup;\n },\n application: () => {\n return app;\n },\n },\n });\n };\n\n this.cloneServerGroup = (serverGroup) => {\n $uibModal.open({\n templateUrl: require('../configure/wizard/serverGroupWizard.html'),\n controller: 'gceCloneServerGroupCtrl as ctrl',\n size: 'lg',\n resolve: {\n title: () => {\n return 'Clone ' + serverGroup.name;\n },\n application: () => {\n return app;\n },\n serverGroup: () => {\n return serverGroup;\n },\n serverGroupCommand: () => {\n return gceServerGroupCommandBuilder.buildServerGroupCommandFromExisting(app, serverGroup);\n },\n },\n });\n };\n\n this.showStartupScript = () => {\n $scope.userDataModalTitle = 'Startup Script';\n $scope.serverGroup = { name: this.serverGroup.name };\n $scope.userData = this.serverGroup.startupScript;\n $uibModal.open({\n templateUrl: ServerGroupTemplates.userData,\n scope: $scope,\n });\n };\n\n this.buildJenkinsLink = () => {\n if (this.serverGroup && this.serverGroup.buildInfo && this.serverGroup.buildInfo.buildInfoUrl) {\n return this.serverGroup.buildInfo.buildInfoUrl;\n } else if (this.serverGroup && this.serverGroup.buildInfo && this.serverGroup.buildInfo.jenkins) {\n const jenkins = this.serverGroup.buildInfo.jenkins;\n return jenkins.host + 'job/' + jenkins.name + '/' + jenkins.number;\n }\n return null;\n };\n\n this.truncateCommitHash = () => {\n if (this.serverGroup && this.serverGroup.buildInfo && this.serverGroup.buildInfo.commit) {\n return this.serverGroup.buildInfo.commit.substring(0, 8);\n }\n return null;\n };\n\n const configureEntityTagTargets = () => {\n this.entityTagTargets = ClusterTargetBuilder.buildClusterTargets(this.serverGroup);\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { GCE_ADD_AUTOHEALING_POLICY_BUTTON } from './autoHealingPolicy/addAutoHealingPolicyButton.component';\nimport { GCE_AUTOHEALING_POLICY_DETAILS } from './autoHealingPolicy/autoHealingPolicy.component';\nimport { GCE_UPSERT_AUTOHEALING_POLICY_MODAL_CTRL } from './autoHealingPolicy/modal/upsertAutoHealingPolicy.modal.controller';\nimport { GOOGLE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_GCE_CONTROLLER } from './serverGroupDetails.gce.controller';\n\nexport const GOOGLE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_GCE_MODULE = 'spinnaker.serverGroup.details.gce';\nexport const name = GOOGLE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_GCE_MODULE; // for backwards compatibility\nmodule(GOOGLE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_GCE_MODULE, [\n GOOGLE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_GCE_CONTROLLER,\n GCE_ADD_AUTOHEALING_POLICY_BUTTON,\n GCE_UPSERT_AUTOHEALING_POLICY_MODAL_CTRL,\n GCE_AUTOHEALING_POLICY_DETAILS,\n]);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { NetworkReader } from '@spinnaker/core';\n\nexport const GOOGLE_SUBNET_SUBNET_RENDERER = 'spinnaker.gce.subnet.renderer';\nexport const name = GOOGLE_SUBNET_SUBNET_RENDERER; // for backwards compatibility\nmodule(GOOGLE_SUBNET_SUBNET_RENDERER, []).factory('gceSubnetRenderer', function () {\n let gceNetworks;\n\n NetworkReader.listNetworksByProvider('gce').then(function (networks) {\n gceNetworks = networks;\n });\n\n function render(serverGroup) {\n if (serverGroup.subnet) {\n return serverGroup.subnet;\n } else {\n const autoCreateSubnets = _.chain(gceNetworks)\n .filter({ account: serverGroup.account, name: serverGroup.network })\n .map('autoCreateSubnets')\n .head()\n .value();\n\n return autoCreateSubnets ? '(Auto-select)' : '[none]';\n }\n }\n\n return {\n render: render,\n };\n});\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { ApplicationNameValidator, FirewallLabels } from '@spinnaker/core';\n\nexport const GOOGLE_VALIDATION_APPLICATIONNAME_VALIDATOR = 'spinnaker.gce.validation.applicationName';\nexport const name = GOOGLE_VALIDATION_APPLICATIONNAME_VALIDATOR; // for backwards compatibility\nmodule(GOOGLE_VALIDATION_APPLICATIONNAME_VALIDATOR, [])\n .factory('gceApplicationNameValidator', function () {\n function validateSpecialCharacters(name, errors) {\n const pattern = /^([a-zA-Z][a-zA-Z0-9]*)?$/;\n if (!pattern.test(name)) {\n errors.push(\n 'The application name must begin with a letter and must contain only letters or digits. No ' +\n 'special characters are allowed.',\n );\n }\n }\n\n function validateLength(name, warnings, errors) {\n // GCE resource names must comply with https://www.ietf.org/rfc/rfc1035.txt\n // [a-z]([-a-z0-9]*[a-z0-9])?\n const maxResourceNameLength = 63;\n\n // e.g. $appName-$stack-$detail-tp-1451531076528 and $appName-$stack-$detail-hc-1451531076528\n const loadBalancerNameSuffixLength = 17;\n const maxLengthForLoadBalancers = maxResourceNameLength - loadBalancerNameSuffixLength;\n\n // e.g. $appName-$stack-$detail-v000-abcd\n const instanceNameSuffixLength = 10;\n const maxLengthForServerGroups = maxResourceNameLength - instanceNameSuffixLength;\n\n if (name.length > maxResourceNameLength) {\n errors.push('The maximum length for an application in Google is 63 characters.');\n return;\n }\n\n if (name.length > maxLengthForLoadBalancers - 12) {\n if (name.length > maxLengthForLoadBalancers) {\n warnings.push(`You will not be able to create a Google load balancer for this application if the\n application's name is longer than ${maxLengthForLoadBalancers} characters (currently: ${name.length}\n characters).`);\n } else if (name.length >= maxLengthForLoadBalancers - 2) {\n warnings.push(\n 'With separators (\"-\"), you will not be able to include a stack and detail field for ' +\n 'Google load balancers.',\n );\n } else {\n const remaining = maxLengthForLoadBalancers - 2 - name.length;\n warnings.push(`If you plan to include a stack or detail field for Google load balancers, you will only\n have ~${remaining} characters to do so.`);\n }\n }\n\n if (name.length > maxLengthForServerGroups - 12) {\n if (name.length > maxLengthForServerGroups) {\n warnings.push(`You will not be able to create a Google server group for this application if the\n application's name is longer than ${maxLengthForServerGroups} characters (currently: ${name.length}\n characters).`);\n } else if (name.length >= maxLengthForServerGroups - 2) {\n warnings.push(\n 'With separators (\"-\"), you will not be able to include a stack and detail field for ' +\n 'Google server groups.',\n );\n } else {\n const remaining = maxLengthForServerGroups - 2 - name.length;\n warnings.push(`If you plan to include a stack or detail field for Google server groups, you will only\n have ~${remaining} characters to do so.`);\n }\n }\n\n if (name.length > maxResourceNameLength - 12) {\n if (name.length >= maxResourceNameLength - 2) {\n warnings.push(\n `With separators (\"-\"), you will not be able to include a stack and detail field for Google ${FirewallLabels.get(\n 'firewalls',\n )}.`,\n );\n } else {\n const remaining = maxResourceNameLength - 2 - name.length;\n warnings.push(`If you plan to include a stack or detail field for Google ${FirewallLabels.get(\n 'firewalls',\n )}, you will only\n have ~${remaining} characters to do so.`);\n }\n }\n }\n\n function validate(name) {\n const warnings = [];\n const errors = [];\n\n if (name && name.length) {\n validateSpecialCharacters(name, errors);\n validateLength(name, warnings, errors);\n }\n\n return {\n warnings: warnings,\n errors: errors,\n };\n }\n\n return {\n validate: validate,\n };\n })\n .run([\n 'gceApplicationNameValidator',\n function (gceApplicationNameValidator) {\n ApplicationNameValidator.registerValidator('gce', gceApplicationNameValidator);\n },\n ]);\n","import { module } from 'angular';\n\nimport { CloudProviderRegistry, DeploymentStrategyRegistry } from '@spinnaker/core';\n\nimport { GCE_PREDICTIVE_AUTOSCALING } from './autoscalingPolicy/components/metricSettings/GcePredictiveAutoscaling';\nimport { GOOGLE_CACHE_CACHECONFIGURER_SERVICE } from './cache/cacheConfigurer.service';\nimport { GOOGLE_COMMON_XPNNAMING_GCE_SERVICE } from './common/xpnNaming.gce.service';\nimport './help/gce.help';\nimport { GceImageReader } from './image';\nimport { GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCE_FILTER } from './instance/custom/customInstance.filter';\nimport { GOOGLE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER } from './instance/details/instance.details.controller';\nimport { GOOGLE_INSTANCE_GCEINSTANCETYPE_SERVICE } from './instance/gceInstanceType.service';\nimport { GOOGLE_INSTANCE_GCEMULTIINSTANCETASK_TRANSFORMER } from './instance/gceMultiInstanceTask.transformer';\nimport { IAP_INTERCEPTOR } from './interceptors/iap.interceptor';\nimport { GCE_LOAD_BALANCER_CHOICE_MODAL } from './loadBalancer/configure/choice/gceLoadBalancerChoice.modal';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_HTTP_CREATEHTTPLOADBALANCER_CONTROLLER } from './loadBalancer/configure/http/createHttpLoadBalancer.controller';\nimport { GCE_INTERNAL_LOAD_BALANCER_CTRL } from './loadBalancer/configure/internal/gceCreateInternalLoadBalancer.controller';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_INTERNAL_HTTP_CREATEHTTPLOADBALANCER_CONTROLLER } from './loadBalancer/configure/internalhttp/createInternalHttpLoadBalancer.controller';\nimport { GOOGLE_LOADBALANCER_CONFIGURE_NETWORK_CREATELOADBALANCER_CONTROLLER } from './loadBalancer/configure/network/createLoadBalancer.controller';\nimport { GCE_SSL_LOAD_BALANCER_CTRL } from './loadBalancer/configure/ssl/gceCreateSslLoadBalancer.controller';\nimport { GCE_TCP_LOAD_BALANCER_CTRL } from './loadBalancer/configure/tcp/gceCreateTcpLoadBalancer.controller';\nimport { GOOGLE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER } from './loadBalancer/details/loadBalancerDetail.controller';\nimport { LOAD_BALANCER_SET_TRANSFORMER } from './loadBalancer/loadBalancer.setTransformer';\nimport { GOOGLE_LOADBALANCER_LOADBALANCER_TRANSFORMER } from './loadBalancer/loadBalancer.transformer';\nimport logo from './logo/gce.logo.png';\nimport { GOOGLE_PIPELINE_STAGES_BAKE_GCEBAKESTAGE } from './pipeline/stages/bake/gceBakeStage';\nimport { GOOGLE_PIPELINE_STAGES_CLONESERVERGROUP_GCECLONESERVERGROUPSTAGE } from './pipeline/stages/cloneServerGroup/gceCloneServerGroupStage';\nimport { GOOGLE_PIPELINE_STAGES_DESTROYASG_GCEDESTROYASGSTAGE } from './pipeline/stages/destroyAsg/gceDestroyAsgStage';\nimport { GOOGLE_PIPELINE_STAGES_DISABLEASG_GCEDISABLEASGSTAGE } from './pipeline/stages/disableAsg/gceDisableAsgStage';\nimport { GOOGLE_PIPELINE_STAGES_DISABLECLUSTER_GCEDISABLECLUSTERSTAGE } from './pipeline/stages/disableCluster/gceDisableClusterStage';\nimport { GOOGLE_PIPELINE_STAGES_ENABLEASG_GCEENABLEASGSTAGE } from './pipeline/stages/enableAsg/gceEnableAsgStage';\nimport { GOOGLE_PIPELINE_STAGES_FINDAMI_GCEFINDAMISTAGE } from './pipeline/stages/findAmi/gceFindAmiStage';\nimport { GOOGLE_PIPELINE_STAGES_FINDIMAGEFROMTAGS_GCEFINDIMAGEFROMTAGSSTAGE } from './pipeline/stages/findImageFromTags/gceFindImageFromTagsStage';\nimport { GOOGLE_PIPELINE_STAGES_RESIZEASG_GCERESIZEASGSTAGE } from './pipeline/stages/resizeAsg/gceResizeAsgStage';\nimport { GOOGLE_PIPELINE_STAGES_SCALEDOWNCLUSTER_GCESCALEDOWNCLUSTERSTAGE } from './pipeline/stages/scaleDownCluster/gceScaleDownClusterStage';\nimport { GOOGLE_PIPELINE_STAGES_SHRINKCLUSTER_GCESHRINKCLUSTERSTAGE } from './pipeline/stages/shrinkCluster/gceShrinkClusterStage';\nimport { GOOGLE_PIPELINE_STAGES_TAGIMAGE_GCETAGIMAGESTAGE } from './pipeline/stages/tagImage/gceTagImageStage';\nimport { GOOGLE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUP_CONTROLLER } from './securityGroup/configure/createSecurityGroup.controller';\nimport { GOOGLE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUP_CONTROLLER } from './securityGroup/configure/editSecurityGroup.controller';\nimport { GOOGLE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER } from './securityGroup/details/securityGroupDetail.controller';\nimport { GOOGLE_SECURITYGROUP_SECURITYGROUP_READER } from './securityGroup/securityGroup.reader';\nimport { GOOGLE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER } from './securityGroup/securityGroup.transformer';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_GCE_MODULE } from './serverGroup/configure/serverGroup.configure.gce.module';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE } from './serverGroup/configure/serverGroupCommandBuilder.service';\nimport { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_GCE_CONTROLLER } from './serverGroup/configure/wizard/cloneServerGroup.gce.controller';\nimport { GCE_SERVER_GROUP_DISK_DESCRIPTIONS } from './serverGroup/details/ServerGroupDiskDescriptions';\nimport { GCE_SCALE_IN_CONTROLS } from './serverGroup/details/autoscalingPolicy/modal/GceScaleInControls';\nimport { GOOGLE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_GCE_MODULE } from './serverGroup/details/serverGroup.details.gce.module';\nimport { GOOGLE_SERVERGROUP_SERVERGROUP_TRANSFORMER } from './serverGroup/serverGroup.transformer';\nimport { GOOGLE_SUBNET_SUBNET_RENDERER } from './subnet/subnet.renderer';\nimport { GOOGLE_VALIDATION_APPLICATIONNAME_VALIDATOR } from './validation/applicationName.validator';\n\nimport './logo/gce.logo.less';\n\nexport const GOOGLE_MODULE = 'spinnaker.gce';\nmodule(GOOGLE_MODULE, [\n LOAD_BALANCER_SET_TRANSFORMER,\n GCE_INTERNAL_LOAD_BALANCER_CTRL,\n GCE_LOAD_BALANCER_CHOICE_MODAL,\n GCE_SSL_LOAD_BALANCER_CTRL,\n GCE_TCP_LOAD_BALANCER_CTRL,\n IAP_INTERCEPTOR,\n GCE_SERVER_GROUP_DISK_DESCRIPTIONS,\n GCE_SCALE_IN_CONTROLS,\n GCE_PREDICTIVE_AUTOSCALING,\n GOOGLE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_GCE_MODULE,\n GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE,\n GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_GCE_CONTROLLER,\n GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_GCE_MODULE,\n GOOGLE_SERVERGROUP_SERVERGROUP_TRANSFORMER,\n GOOGLE_PIPELINE_STAGES_BAKE_GCEBAKESTAGE,\n GOOGLE_PIPELINE_STAGES_CLONESERVERGROUP_GCECLONESERVERGROUPSTAGE,\n GOOGLE_PIPELINE_STAGES_DESTROYASG_GCEDESTROYASGSTAGE,\n GOOGLE_PIPELINE_STAGES_DISABLEASG_GCEDISABLEASGSTAGE,\n GOOGLE_PIPELINE_STAGES_DISABLECLUSTER_GCEDISABLECLUSTERSTAGE,\n GOOGLE_PIPELINE_STAGES_ENABLEASG_GCEENABLEASGSTAGE,\n GOOGLE_PIPELINE_STAGES_FINDAMI_GCEFINDAMISTAGE,\n GOOGLE_PIPELINE_STAGES_FINDIMAGEFROMTAGS_GCEFINDIMAGEFROMTAGSSTAGE,\n GOOGLE_PIPELINE_STAGES_RESIZEASG_GCERESIZEASGSTAGE,\n GOOGLE_PIPELINE_STAGES_SCALEDOWNCLUSTER_GCESCALEDOWNCLUSTERSTAGE,\n GOOGLE_PIPELINE_STAGES_SHRINKCLUSTER_GCESHRINKCLUSTERSTAGE,\n GOOGLE_PIPELINE_STAGES_TAGIMAGE_GCETAGIMAGESTAGE,\n GOOGLE_INSTANCE_GCEINSTANCETYPE_SERVICE,\n GOOGLE_INSTANCE_GCEMULTIINSTANCETASK_TRANSFORMER,\n GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCE_FILTER,\n GOOGLE_LOADBALANCER_LOADBALANCER_TRANSFORMER,\n GOOGLE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER,\n GOOGLE_LOADBALANCER_CONFIGURE_NETWORK_CREATELOADBALANCER_CONTROLLER,\n GOOGLE_LOADBALANCER_CONFIGURE_HTTP_CREATEHTTPLOADBALANCER_CONTROLLER,\n GOOGLE_LOADBALANCER_CONFIGURE_INTERNAL_HTTP_CREATEHTTPLOADBALANCER_CONTROLLER,\n GOOGLE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER,\n GOOGLE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER,\n GOOGLE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUP_CONTROLLER,\n GOOGLE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUP_CONTROLLER,\n GOOGLE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER,\n GOOGLE_SECURITYGROUP_SECURITYGROUP_READER,\n GOOGLE_SUBNET_SUBNET_RENDERER,\n GOOGLE_VALIDATION_APPLICATIONNAME_VALIDATOR,\n GOOGLE_CACHE_CACHECONFIGURER_SERVICE,\n GOOGLE_COMMON_XPNNAMING_GCE_SERVICE,\n]).config(() => {\n CloudProviderRegistry.registerProvider('gce', {\n name: 'Google',\n logo: {\n path: logo,\n },\n cache: {\n configurer: 'gceCacheConfigurer',\n },\n image: {\n reader: GceImageReader,\n },\n serverGroup: {\n transformer: 'gceServerGroupTransformer',\n detailsTemplateUrl: require('./serverGroup/details/serverGroupDetails.html'),\n detailsController: 'gceServerGroupDetailsCtrl',\n cloneServerGroupTemplateUrl: require('./serverGroup/configure/wizard/serverGroupWizard.html'),\n cloneServerGroupController: 'gceCloneServerGroupCtrl',\n commandBuilder: 'gceServerGroupCommandBuilder',\n configurationService: 'gceServerGroupConfigurationService',\n },\n instance: {\n instanceTypeService: 'gceInstanceTypeService',\n detailsTemplateUrl: require('./instance/details/instanceDetails.html'),\n detailsController: 'gceInstanceDetailsCtrl',\n multiInstanceTaskTransformer: 'gceMultiInstanceTaskTransformer',\n customInstanceBuilderTemplateUrl: require('./serverGroup/configure/wizard/customInstance/customInstanceBuilder.html'),\n },\n loadBalancer: {\n transformer: 'gceLoadBalancerTransformer',\n setTransformer: 'gceLoadBalancerSetTransformer',\n detailsTemplateUrl: require('./loadBalancer/details/loadBalancerDetails.html'),\n detailsController: 'gceLoadBalancerDetailsCtrl',\n createLoadBalancerTemplateUrl: require('./loadBalancer/configure/choice/gceLoadBalancerChoice.modal.html'),\n createLoadBalancerController: 'gceLoadBalancerChoiceCtrl',\n },\n securityGroup: {\n transformer: 'gceSecurityGroupTransformer',\n reader: 'gceSecurityGroupReader',\n detailsTemplateUrl: require('./securityGroup/details/securityGroupDetail.html'),\n detailsController: 'gceSecurityGroupDetailsCtrl',\n createSecurityGroupTemplateUrl: require('./securityGroup/configure/createSecurityGroup.html'),\n createSecurityGroupController: 'gceCreateSecurityGroupCtrl',\n },\n subnet: {\n renderer: 'gceSubnetRenderer',\n },\n snapshotsEnabled: true,\n applicationProviderFields: {\n templateUrl: require('./applicationProviderFields/gceFields.html'),\n },\n });\n});\n\nDeploymentStrategyRegistry.registerProvider('gce', ['custom', 'redblack']);\n"],"names":["_","ViewState","observableFrom"],"mappings":"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CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxdO,MAAM,kBAAkB,CAAC;AAChC,EAAE,OAAO,gBAAgB,CAAC,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE;AACpE,IAAI,OAAO,YAAY,CAAC,WAAW,CAAC;AACpC,MAAM,WAAW,EAAE,eAAe;AAClC,MAAM,WAAW,EAAE,uBAAuB;AAC1C,MAAM,GAAG,EAAE;AACX,QAAQ;AACR,UAAU,aAAa,EAAE,KAAK;AAC9B,UAAU,WAAW,EAAE,WAAW,CAAC,OAAO;AAC1C,UAAU,UAAU;AACpB,UAAU,MAAM,EAAE,WAAW,CAAC,MAAM;AACpC,UAAU,eAAe,EAAE,WAAW,CAAC,IAAI;AAC3C,UAAU,IAAI,EAAE,iBAAiB;AACjC,SAAS;AACT,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,OAAO,wBAAwB,CAAC,eAAe,EAAE,SAAS,EAAE,WAAW,EAAE;AAC3E,IAAI,OAAO,YAAY,CAAC,WAAW,CAAC;AACpC,MAAM,WAAW,EAAE,eAAe;AAClC,MAAM,WAAW,EAAE,mCAAmC;AACtD,MAAM,GAAG,EAAE;AACX,QAAQ;AACR,UAAU,SAAS;AACnB,UAAU,aAAa,EAAE,KAAK;AAC9B,UAAU,WAAW,EAAE,WAAW,CAAC,OAAO;AAC1C,UAAU,MAAM,EAAE,WAAW,CAAC,MAAM;AACpC,UAAU,eAAe,EAAE,WAAW,CAAC,IAAI;AAC3C,UAAU,IAAI,EAAE,2BAA2B;AAC3C,SAAS;AACT,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,OAAO,cAAc,CAAC,UAAU,EAAE,WAAW,EAAE;AACjD,IAAI,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;AACvF,GAAG;AACH,EAAE,OAAO,mBAAmB,GAAG;AAC/B,IAAI,OAAO,mBAAmB,CAAC,OAAO,CAAC,mBAAmB,CAAC;AAC3D,GAAG;AACH;;ACvCO,SAAS,sBAAsB,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE;AACjF,EAAE,SAAS,qBAAqB,GAAG;AACnC,IAAI,wBAAwB,CAAC,OAAO,CAAC;AACrC,MAAM,OAAO,EAAE,WAAW,CAAC,OAAO;AAClC,MAAM,YAAY,EAAE,IAAI;AACxB,MAAM,UAAU,EAAE,kBAAkB;AACpC,MAAM,MAAM,EAAE,CAAC,iBAAiB,EAAE,UAAU,CAAC,aAAa,CAAC;AAC3D,MAAM,YAAY,EAAE,MAAM;AAC1B,QAAQ,OAAO,kBAAkB,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;AAC9F,OAAO;AACP,MAAM,iBAAiB,EAAE;AACzB,QAAQ,WAAW;AACnB,QAAQ,KAAK,EAAE,0BAA0B;AACzC,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,IAAI,kBAAkB,CAAC,cAAc,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE;AAClE,IAAI,uBAAuB,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,uBAAuB,CAAC,CAAC;AACtF,GAAG;AACH,EAAE,uBAAuB,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE;AACvD,IAAI,SAAS,EAAE,UAAU;AACzB,IAAI,OAAO,EAAE,MAAM,qBAAqB,EAAE;AAC1C,GAAG,EAAE,kBAAkB,CAAC,CAAC;AACzB;;ACtBO,SAAS,qBAAqB,CAAC,KAAK,EAAE;AAC7C,EAAE,SAAS,oBAAoB,GAAG;AAClC,IAAI,MAAM,cAAc,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;AACxC,IAAI,UAAU,CAAC,IAAI,CAAC,oBAAoB,EAAE,cAAc,EAAE,EAAE,eAAe,EAAE,uBAAuB,EAAE,CAAC,CAAC;AACxG,GAAG;AACH,EAAE,uBAAuB,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE;AACvD,IAAI,SAAS,EAAE,UAAU;AACzB,IAAI,OAAO,EAAE,oBAAoB;AACjC,GAAG,EAAE,mBAAmB,CAAC,CAAC;AAC1B,CAAC;AACD,MAAM,oBAAoB,SAAS,KAAK,CAAC,SAAS,CAAC;AACnD,EAAE,WAAW,CAAC,KAAK,EAAE;AACrB,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;AACjB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,KAAK;AAC9B,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,kBAAkB,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;AAC1J,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,KAAK,GAAG;AACjB,MAAM,eAAe,EAAE,EAAE;AACzB,MAAM,WAAW,EAAE,IAAI,WAAW,CAAC;AACnC,QAAQ,WAAW,EAAE,KAAK,CAAC,WAAW;AACtC,QAAQ,KAAK,EAAE,qBAAqB;AACpC,QAAQ,aAAa,EAAE,WAAW,CAAC,sBAAsB,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;AAC1F,OAAO,CAAC;AACR,KAAK,CAAC;AACN,GAAG;AACH,EAAE,iBAAiB,GAAG;AACtB,IAAI,cAAc,CAAC,UAAU,CAAC;AAC9B,MAAM,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO;AAC7C,MAAM,QAAQ,EAAE,KAAK;AACrB,MAAM,CAAC,EAAE,GAAG;AACZ,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK;AACxB,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,CAAC;AACjD,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,MAAM,GAAG;AACX,IAAI,uBAAuB,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE;AAC5D,MAAM,UAAU,EAAE,IAAI,CAAC,MAAM;AAC7B,MAAM,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY;AAC3C,MAAM,OAAO,EAAE,wBAAwB;AACvC,MAAM,aAAa,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;AACpD,MAAM,iBAAiB,EAAE,cAAc;AACvC,MAAM,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW;AACzC,MAAM,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,qBAAqB,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE;AAC/F,QAAQ,KAAK,EAAE,YAAY;AAC3B,QAAQ,MAAM;AACd,QAAQ,KAAK,EAAE,OAAO,EAAE;AACxB,QAAQ,MAAM,EAAE,sBAAsB,KAAK,CAAC,aAAa,CAAC,eAAe,EAAE;AAC3E,UAAU,KAAK,EAAE,CAAC,KAAK,qBAAqB,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE;AACvE,YAAY,SAAS,EAAE,YAAY;AACnC,YAAY,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;AACtC,WAAW,kBAAkB,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE;AAC9D,YAAY,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe;AACvD,YAAY,aAAa,EAAE,KAAK,CAAC,KAAK;AACtC,YAAY,WAAW,EAAE,CAAC,SAAS,KAAK,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC;AAChF,WAAW,CAAC,CAAC;AACb,UAAU,KAAK,EAAE,kBAAkB;AACnC,UAAU,IAAI,EAAE,OAAO;AACvB,UAAU,QAAQ,EAAE,IAAI;AACxB,SAAS,CAAC;AACV,OAAO,CAAC;AACR,KAAK,CAAC,CAAC;AACP,GAAG;AACH;;AC1DA,MAAM,4BAA4B,GAAG,cAAc,KAAK,CAAC,SAAS,CAAC;AACnE,EAAE,MAAM,GAAG;AACX,IAAI,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;AACpD,IAAI,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,gDAAgD,EAAE,EAAE,CAAC,CAAC;AACzF,IAAI,MAAM,yBAAyB,GAAG,kBAAkB,CAAC,mBAAmB,EAAE,CAAC;AAC/E,IAAI,MAAM,kBAAkB,GAAG,yBAAyB,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;AAClJ,IAAI,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK;AAC/B,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE;AACrB,QAAQ,uBAAuB,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE;AACnE,UAAU,GAAG,EAAE,IAAI,CAAC,UAAU;AAC9B,SAAS,kBAAkB,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,kBAAkB,oBAAoB,KAAK,CAAC,aAAa,CAAC,qBAAqB,EAAE;AACzJ,UAAU,WAAW;AACrB,UAAU,SAAS,EAAE,4BAA4B,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACxE,UAAU,WAAW;AACrB,SAAS,CAAC,CAAC,kBAAkB,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,4BAA4B,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,kBAAkB,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,4BAA4B,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC1N,OAAO;AACP,MAAM,uBAAuB,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE;AACjE,QAAQ,GAAG,EAAE,IAAI,CAAC,UAAU;AAC5B,OAAO,kBAAkB,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,yBAAyB,oBAAoB,KAAK,CAAC,aAAa,CAAC,sBAAsB,EAAE;AAC1J,QAAQ,WAAW;AACnB,QAAQ,UAAU,EAAE,IAAI,CAAC,UAAU;AACnC,QAAQ,WAAW;AACnB,OAAO,CAAC,CAAC,kBAAkB,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,4BAA4B,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,kBAAkB,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,4BAA4B,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxN,KAAK,CAAC,CAAC;AACP,GAAG;AACH,CAAC,CAAC;AACF,IAAI,2BAA2B,GAAG,4BAA4B,CAAC;AAC/D,2BAA2B,CAAC,iBAAiB,GAAG,CAAC,IAAI,KAAK;AAC1D,EAAE,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;AAClD,EAAE,IAAI,QAAQ,KAAK,QAAQ,EAAE;AAC7B,IAAI,OAAO,gBAAgB,CAAC;AAC5B,GAAG,MAAM,IAAI,QAAQ,KAAK,WAAW,EAAE;AACvC,IAAI,OAAO,WAAW,CAAC;AACvB,GAAG,MAAM;AACT,IAAI,OAAO,gBAAgB,CAAC;AAC5B,GAAG;AACH,CAAC,CAAC;AACF,2BAA2B,CAAC,gBAAgB,GAAG,CAAC,IAAI,KAAK;AACzD,EAAE,OAAO,CAAC,EAAE,4BAA4B,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AAC1G,CAAC,CAAC;AACF,2BAA2B,CAAC,iBAAiB,GAAG,CAAC,IAAI,KAAK;AAC1D,EAAE,OAAO,CAAC,OAAO,EAAE,4BAA4B,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC,CAAC;AACF,2BAA2B,CAAC,gBAAgB,GAAG,CAAC,IAAI,KAAK;AACzD,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,8BAA8B,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACxE,CAAC,CAAC;AACK,MAAM,kCAAkC,GAAG,2CAA2C,CAAC;AAC9F,MAAM,CAAC,kCAAkC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,gCAAgC,EAAE,aAAa,CAAC,iBAAiB,CAAC,2BAA2B,EAAE,gCAAgC,CAAC,EAAE;AAC3L,EAAE,aAAa;AACf,EAAE,aAAa;AACf,CAAC,CAAC,CAAC;;AC7CH,IAAI,eAAe,CAAC;AACpB,CAAC,SAAS,gBAAgB,EAAE;AAC5B,EAAE,gBAAgB,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;AACtC,EAAE,gBAAgB,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;AAC1C,CAAC,EAAE,eAAe,KAAK,eAAe,GAAG,EAAE,CAAC,CAAC,CAAC;AAC9C,MAAM,qBAAqB,GAAG;AAC9B,EAAE,mBAAmB,EAAE;AACvB,IAAI,KAAK,EAAE,IAAI;AACf,IAAI,OAAO,EAAE,CAAC;AACd,GAAG;AACH,EAAE,aAAa,EAAE,EAAE;AACnB,CAAC,CAAC;AACF,SAAS,kBAAkB,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE;AACtD,EAAE,SAAS,oBAAoB,CAAC,cAAc,EAAE;AAChD,IAAI,MAAM,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC;AACnE,IAAI,IAAI,mBAAmB,EAAE;AAC7B,MAAM,YAAY,CAAC;AACnB,QAAQ,GAAG,MAAM;AACjB,QAAQ,cAAc;AACtB,OAAO,CAAC,CAAC;AACT,KAAK,MAAM;AACX,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AACnC,MAAM,OAAO,aAAa,CAAC,gBAAgB,CAAC,CAAC;AAC7C,MAAM,YAAY,CAAC;AACnB,QAAQ,GAAG,aAAa;AACxB,OAAO,CAAC,CAAC;AACT,KAAK;AACL,GAAG;AACH,EAAE,SAAS,kBAAkB,GAAG;AAChC,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE;AAC7E,MAAM,OAAO,eAAe,CAAC,OAAO,CAAC;AACrC,KAAK;AACL,IAAI,OAAO,eAAe,CAAC,KAAK,CAAC;AACjC,GAAG;AACH,EAAE,uBAAuB,KAAK,CAAC,aAAa,CAAC,cAAc,EAAE;AAC7D,IAAI,KAAK,EAAE,yBAAyB;AACpC,GAAG,kBAAkB,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE;AAChD,IAAI,SAAS,EAAE,KAAK;AACpB,GAAG,kBAAkB,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE;AACpD,IAAI,KAAK,EAAE,CAAC,UAAU,qBAAqB,KAAK,CAAC,aAAa,CAAC,aAAa,EAAE;AAC9E,MAAM,GAAG,UAAU;AACnB,KAAK,CAAC;AACN,IAAI,KAAK,EAAE,0BAA0B;AACrC,IAAI,QAAQ,EAAE,CAAC,CAAC,KAAK;AACrB,MAAM,oBAAoB,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,qBAAqB,GAAG,EAAE,CAAC,CAAC;AAC1E,KAAK;AACL,IAAI,KAAK,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC;AAC1C,GAAG,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,oBAAoB,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,kBAAkB,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE;AAC/I,IAAI,SAAS,EAAE,KAAK;AACpB,GAAG,kBAAkB,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE;AACpD,IAAI,KAAK,EAAE,CAAC,UAAU,qBAAqB,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE;AAC5E,MAAM,GAAG,UAAU;AACnB,MAAM,GAAG,EAAE,CAAC;AACZ,MAAM,GAAG,EAAE,kBAAkB,EAAE,KAAK,eAAe,CAAC,OAAO,GAAG,GAAG,GAAG,IAAI;AACxE,KAAK,CAAC;AACN,IAAI,KAAK,EAAE,wBAAwB;AACnC,IAAI,QAAQ,EAAE,CAAC,CAAC,KAAK;AACrB,MAAM,oBAAoB,CAAC;AAC3B,QAAQ,GAAG,MAAM,CAAC,cAAc;AAChC,QAAQ,mBAAmB,EAAE;AAC7B,UAAU,CAAC,kBAAkB,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;AAC9D,SAAS;AACT,OAAO,CAAC,CAAC;AACT,KAAK;AACL,IAAI,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,CAAC;AAC1E,GAAG,CAAC,kBAAkB,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE;AACrD,IAAI,KAAK,EAAE,CAAC,UAAU,qBAAqB,KAAK,CAAC,aAAa,CAAC,gBAAgB,EAAE;AACjF,MAAM,GAAG,UAAU;AACnB,MAAM,SAAS,EAAE,KAAK;AACtB,MAAM,aAAa,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC;AACrE,KAAK,CAAC;AACN,IAAI,KAAK,EAAE,EAAE;AACb,IAAI,QAAQ,EAAE,CAAC,CAAC,KAAK;AACrB,MAAM,oBAAoB,CAAC;AAC3B,QAAQ,GAAG,MAAM,CAAC,cAAc;AAChC,QAAQ,mBAAmB,EAAE;AAC7B,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,CAAC;AAC3F,SAAS;AACT,OAAO,CAAC,CAAC;AACT,KAAK;AACL,IAAI,KAAK,EAAE,kBAAkB,EAAE;AAC/B,GAAG,CAAC,CAAC,kBAAkB,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE;AAClD,IAAI,SAAS,EAAE,KAAK;AACpB,GAAG,kBAAkB,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE;AACpD,IAAI,KAAK,EAAE,CAAC,UAAU,qBAAqB,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE;AAC5E,MAAM,GAAG,UAAU;AACnB,MAAM,GAAG,EAAE,EAAE;AACb,MAAM,GAAG,EAAE,IAAI;AACf,KAAK,CAAC;AACN,IAAI,KAAK,EAAE,uBAAuB;AAClC,IAAI,QAAQ,EAAE,CAAC,CAAC,KAAK;AACrB,MAAM,oBAAoB,CAAC;AAC3B,QAAQ,GAAG,MAAM,CAAC,cAAc;AAChC,QAAQ,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;AACnD,OAAO,CAAC,CAAC;AACT,KAAK;AACL,IAAI,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC,aAAa;AAC9C,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACR,CAAC;AACM,MAAM,qBAAqB,GAAG,+BAA+B,CAAC;AACrE,MAAM,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,oBAAoB,EAAE,aAAa,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC;;AChHzK,MAAM;AACN,EAAE,WAAW,CAAC,SAAS,EAAE;AACzB;AACA,GAAG;AACH;AACA,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACxB,MAAM,WAAW,EAAE;AACnB,MAAM,UAAU,EAAE;AAClB;AACA,MAAM,IAAI,EAAE,IAAI;AAChB,MAAM,OAAO,EAAE;AACf;AACA,QAAQ,WAAW,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG;AACH,CAAC;AACD;AACA,MAAM;AACN,EAAE,QAAQ,EAAE;AACZ,IAAI,WAAW,EAAE,GAAG;AACpB,IAAI;AACJ,GAAG;AACH,EAAE;AACF;AACA;AACO,MAAM,iCAAiC,GAAG;AACjD,MAAM,CAAC;AACP,MAAM,CAAC,OAAO,CAAC,MAAM;AACrB,EAAE,aAAa,CAAC,GAAG,CAAC;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACnCA,MAAM,+BAA+B,CAAC;AACtC;AACA,IAAI,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC/B,IAAI,IAAI,CAAC,0BAA0B,GAAG;AACtC,GAAG;AACH;AACA,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACxB,MAAM,WAAW,EAAE;AACnB,MAAM,UAAU,EAAE;AAClB;AACA,MAAM,IAAI,EAAE,IAAI;AAChB,MAAM,OAAO,EAAE;AACf;AACA,QAAQ,WAAW,EAAE,MAAM;AAC3B,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,YAAY,GAAG;AACjB,IAAI,MAAM;AACV,MAAM;AACN,MAAM,KAAK,EAAE,CAAC;AACd,KAAK,CAAC;AACN,IAAI;AACJ,MAAM;AACN;AACA;AACA,MAAM,iBAAiB,EAAE;AACzB,MAAM,YAAY,EAAE;AACpB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,CAAC;AACD;AACA,MAAM,2BAA2B,GAAG;AACpC,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE;AAClD,EAAE,QAAQ,EAAE,CAAC;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,CAAC;AACpB,EAAE,UAAU,EAAE;AACd,CAAC,CAAC;AACK;AACP,MAAM,CAAC,8BAA8B,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,6BAA6B,EAAE;AACpF,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACjC,EAAE,aAAa,CAAC,GAAG,CAAC;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACrEO,MAAM,wDAAwD,GAAG,+DAA+D,CAAC;AAExI,OAAO,CAAC,MAAM,CAAC,wDAAwD,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,4BAA4B,EAAE,WAAW;AAC9H,EAAE,SAAS,uBAAuB,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,EAAE,EAAE;AAClF,IAAI,MAAM,GAAG,GAAG;AAChB,MAAM,IAAI,EAAE,qBAAqB;AACjC,MAAM,aAAa,EAAE,WAAW,CAAC,IAAI;AACrC,MAAM,WAAW,EAAE,WAAW,CAAC,OAAO;AACtC,MAAM,MAAM,EAAE,WAAW,CAAC,MAAM;AAChC,MAAM,eAAe,EAAE,WAAW,CAAC,IAAI;AACvC,MAAM,iBAAiB,EAAE,MAAM;AAC/B,KAAK,CAAC;AACN,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAChC,IAAI,OAAO,YAAY,CAAC,WAAW,CAAC;AACpC,MAAM,WAAW;AACjB,MAAM,WAAW,EAAE,wBAAwB,GAAG,WAAW,CAAC,IAAI;AAC9D,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC;AAChB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,SAAS,uBAAuB,CAAC,WAAW,EAAE,WAAW,EAAE;AAC7D,IAAI,OAAO,YAAY,CAAC,WAAW,CAAC;AACpC,MAAM,WAAW;AACjB,MAAM,WAAW,EAAE,wBAAwB,GAAG,WAAW,CAAC,IAAI;AAC9D,MAAM,GAAG,EAAE;AACX,QAAQ;AACR,UAAU,IAAI,EAAE,qBAAqB;AACrC,UAAU,aAAa,EAAE,WAAW,CAAC,IAAI;AACzC,UAAU,WAAW,EAAE,WAAW,CAAC,OAAO;AAC1C,UAAU,MAAM,EAAE,WAAW,CAAC,MAAM;AACpC,UAAU,eAAe,EAAE,WAAW,CAAC,IAAI;AAC3C,SAAS;AACT,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,SAAS,uBAAuB,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,EAAE,EAAE;AAClF,IAAI,MAAM,GAAG,GAAG;AAChB,MAAM,IAAI,EAAE,qBAAqB;AACjC,MAAM,aAAa,EAAE,WAAW,CAAC,IAAI;AACrC,MAAM,WAAW,EAAE,WAAW,CAAC,OAAO;AACtC,MAAM,MAAM,EAAE,WAAW,CAAC,MAAM;AAChC,MAAM,eAAe,EAAE,WAAW,CAAC,IAAI;AACvC,MAAM,iBAAiB,EAAE,MAAM;AAC/B,KAAK,CAAC;AACN,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAChC,IAAI,OAAO,YAAY,CAAC,WAAW,CAAC;AACpC,MAAM,WAAW;AACjB,MAAM,WAAW,EAAE,4BAA4B,GAAG,WAAW,CAAC,IAAI;AAClE,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC;AAChB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,SAAS,uBAAuB,CAAC,WAAW,EAAE,WAAW,EAAE;AAC7D,IAAI,OAAO,YAAY,CAAC,WAAW,CAAC;AACpC,MAAM,WAAW;AACjB,MAAM,WAAW,EAAE,4BAA4B,GAAG,WAAW,CAAC,IAAI;AAClE,MAAM,GAAG,EAAE;AACX,QAAQ;AACR,UAAU,IAAI,EAAE,qBAAqB;AACrC,UAAU,aAAa,EAAE,WAAW,CAAC,IAAI;AACzC,UAAU,WAAW,EAAE,WAAW,CAAC,OAAO;AAC1C,UAAU,MAAM,EAAE,WAAW,CAAC,MAAM;AACpC,UAAU,eAAe,EAAE,WAAW,CAAC,IAAI;AAC3C,UAAU,uBAAuB,EAAE,IAAI;AACvC,SAAS;AACT,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,CAAC;AAChH,CAAC,CAAC;;;;;AC/DF,MAAM,mCAAmC,CAAC;AAC1C,EAAE,WAAW,CAAC,iBAAiB,EAAE,WAAW,EAAE,WAAW,EAAE,oBAAoB,EAAE,0BAA0B,EAAE;AAC7G,IAAI,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;AAC/C,IAAI,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AACnC,IAAI,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AACnC,IAAI,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;AACrD,IAAI,IAAI,CAAC,0BAA0B,GAAG,0BAA0B,CAAC;AACjE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;AACtB,GAAG;AACH,EAAE,MAAM,GAAG;AACX,IAAI,MAAM,YAAY,GAAG,MAAM;AAC/B,MAAM,OAAO,IAAI,CAAC,0BAA0B,CAAC,uBAAuB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACjI,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAC1C,GAAG;AACH,EAAE,MAAM,GAAG;AACX,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;AACrC,GAAG;AACH,EAAE,oBAAoB,CAAC,iBAAiB,EAAE;AAC1C,IAAI,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;AAC/C,GAAG;AACH,EAAE,oBAAoB,GAAG;AACzB,IAAI,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,YAAY,KAAK;AACxE,MAAM,MAAM,oBAAoB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AACxG,MAAM,IAAI,CAAC,YAAY,GAAG,qBAAqB,CAAC,oBAAoB,CAAC,CAAC;AACtE,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,UAAU,GAAG;AACf,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAChC,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,GAAG,MAAM,GAAG,KAAK,CAAC;AACtE,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC;AACrD,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC9D,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACrB,MAAM,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;AAC7E,KAAK;AACL,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC;AACvC,MAAM,WAAW,EAAE,IAAI,CAAC,WAAW;AACnC,MAAM,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC7E,MAAM,aAAa,EAAE,IAAI,CAAC,iBAAiB;AAC3C,KAAK,CAAC,CAAC;AACP,GAAG;AACH,CAAC;AACD,mCAAmC,CAAC,OAAO,GAAG;AAC9C,EAAE,mBAAmB;AACrB,EAAE,aAAa;AACf,EAAE,aAAa;AACf,EAAE,sBAAsB;AACxB,EAAE,4BAA4B;AAC9B,CAAC,CAAC;AACK,MAAM,wCAAwC,GAAG,wDAAwD,CAAC;AACjH,MAAM,CAAC,wCAAwC,EAAE;AACjD,EAAE,uBAAuB;AACzB,EAAE,wDAAwD;AAC1D,CAAC,CAAC,CAAC,UAAU,CAAC,qCAAqC,EAAE,mCAAmC,CAAC;;;;;AClDlF,MAAM,2FAA2F,GAAG,6DAA6D,CAAC;AAEzK,MAAM,CAAC,2FAA2F,EAAE;AACpG,EAAE,wDAAwD;AAC1D,EAAE,yEAAyE;AAC3E,EAAE,2EAA2E;AAC7E,EAAE,+EAA+E;AACjF,CAAC,CAAC,CAAC,UAAU,CAAC,qCAAqC,EAAE;AACrD,EAAE,QAAQ;AACV,EAAE,aAAa;AACf,EAAE,aAAa;AACf,EAAE,mBAAmB;AACrB,EAAE,4BAA4B;AAC9B,EAAE,QAAQ;AACV,EAAE,SAAS,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,EAAE;AACpG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACzE,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;AAC1C,IAAI,IAAI,CAAC,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC;AAC5C,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC;AACvC,MAAM,WAAW;AACjB,MAAM,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;AACpE,MAAM,aAAa,EAAE,iBAAiB;AACtC,KAAK,CAAC,CAAC;AACP,IAAI,IAAI,CAAC,IAAI,GAAG,MAAM;AACtB,MAAM,MAAM,YAAY,GAAG,MAAM,0BAA0B,CAAC,uBAAuB,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAC3H,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAC5C,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,aAAa,KAAK;AAC3C,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM;AAC/B,QAAQ,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC;AACpC,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,GAAG;AACH,CAAC,CAAC;;;ACrCF;AACA,EAAE,oBAAoB;AACtB,EAAE;AACF,CAAC,CAAC,CAAC,SAAS,CAAC,+BAA+B,EAAE;AAC9C,EAAE,QAAQ,EAAE;AACZ,IAAI,WAAW,EAAE,GAAG;AACpB,IAAI,WAAW,EAAE,GAAG;AACpB,GAAG;AACH,EAAE,QAAQ,EAAE;AACZ,EAAE,UAAU,EAAE;AACd,IAAI,WAAW;AACf,IAAI;AACJ,MAAM,IAAI,CAAC,oBAAoB,GAAG,MAAM;AACxC,QAAQ;AACR,UAAU;AACV,UAAU,UAAU,EAAE;AACtB,UAAU,YAAY,EAAE,MAAM;AAC9B,UAAU,IAAI,EAAE,IAAI;AACpB,UAAU,OAAO,EAAE;AACnB,YAAY,MAAM,EAAE,MAAM,KAAK,CAAC;AAChC,YAAY,WAAW,EAAE,MAAM;AAC/B,YAAY;AACZ,WAAW;AACX,SAAS,CAAC,CAAC;AACX,OAAO,CAAC;AACR,KAAK;AACL,GAAG;AACH,CAAC,CAAC,CAAC;AACH,MAAM,CAAC;AACP,EAAE;AACF;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7BO,MAAM,wEAAwE,GAAG;AAExF,MAAM,CAAC,wEAAwE,EAAE;AACjF,EAAE,oBAAoB;AACtB,EAAE,wDAAwD;AAC1D,EAAE,2FAA2F;AAC7F,EAAE,yCAAyC;AAC3C,CAAC,CAAC,CAAC,SAAS,CAAC;AACb,EAAE,QAAQ,EAAE;AACZ,IAAI,MAAM,EAAE,GAAG;AACf,IAAI,WAAW,EAAE,GAAG;AACpB,IAAI,WAAW,EAAE,GAAG;AACpB,GAAG;AACH,EAAE,WAAW,EAAE;AACf,EAAE,UAAU,EAAE;AACd,IAAI,WAAW;AACf,IAAI;AACJ,IAAI,SAAS;AACb,MAAM,IAAI,KAAK;AACf,MAAM,KAAK,CAAC;AACZ,QAAQ,MAAM,MAAM,GAAG,KAAK,CAAC;AAC7B,QAAQ,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;AAC1B,QAAQ,IAAI,MAAM,CAAC;AACnB,UAAU,MAAM,KAAK,GAAG;AACxB,YAAY,WAAW,EAAE,WAAW;AACpC;AACA,WAAW,CAAC;AACZ;AACA,YAAY,KAAK,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC;AAClC,WAAW;AACX,UAAU,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC,SAAS;AACT,QAAQ,IAAI;AACZ;AACA,YAAY,WAAW,EAAE,2BAA2B;AACpD,YAAY,OAAO,EAAE,0DAA0D;AAC/E,WAAW;AACX;AACA,YAAY,KAAK,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC;AAClC;AACA;AACA,SAAS;AACT,QAAQ,IAAI,MAAM,CAAC;AACnB,UAAU,MAAM,KAAK,GAAG;AACxB,YAAY,WAAW,EAAE,MAAM,CAAC,wBAAwB,CAAC,MAAM,GAAG,CAAC,GAAG;AACtE,YAAY;AACZ;AACA,UAAU,IAAI,MAAM,CAAC,wBAAwB,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1D,YAAY,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;AAC/B;AACA;AACA,cAAc,IAAI,MAAM,CAAC;AACzB;AACA;AACA,gBAAgB,MAAM,IAAI,MAAM,CAAC;AACjC,eAAe;AACf,cAAc,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACzC,aAAa,CAAC,CAAC;AACf,WAAW;AACX;AACA,SAAS;AACT,QAAQ,KAAK,CAAC;AACd,QAAQ,IAAI,KAAK,CAAC,yBAAyB,EAAE;AAC7C,UAAU,KAAK,CAAC,0BAA0B,GAAG,MAAM,CAAC,cAAc,CAAC;AACnE;AACA,SAAS;AACT,QAAQ,KAAK,CAAC;AACd,QAAQ,KAAK,CAAC,UAAU,GAAG,MAAM;AACjC,UAAU,SAAS,CAAC,IAAI,CAAC;AACzB,YAAY;AACZ;AACA,YAAY,YAAY,EAAE,MAAM;AAChC,YAAY;AACZ;AACA;AACA,cAAc,WAAW,EAAE,MAAM;AACjC;AACA;AACA,WAAW,CAAC,CAAC;AACb,SAAS,CAAC;AACV,QAAQ,KAAK,CAAC,YAAY,GAAG,MAAM;AACnC,UAAU,MAAM,WAAW,GAAG;AAC9B,YAAY,WAAW,EAAE,KAAK,CAAC,WAAW;AAC1C;AACA,WAAW,CAAC;AACZ,UAAU,wBAAwB,CAAC,OAAO,CAAC;AAC3C,YAAY,MAAM,EAAE,CAAC,6BAA6B,EAAE,KAAK,CAAC,WAAW;AACrE,YAAY,UAAU,EAAE,mBAAmB;AAC3C;AACA,YAAY,iBAAiB,EAAE,WAAW;AAC1C;AACA;AACA,SAAS,CAAC;AACV,OAAO,CAAC;AACR,KAAK;AACL,GAAG;AACH;AACA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACjC,EAAE,aAAa,CAAC,GAAG,CAAC;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvIO,MAAM;AAEb,OAAO,CAAC,MAAM,CAAC,8BAA8B,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE;AAC1E,EAAE,OAAO;AACT,IAAI,QAAQ,EAAE,GAAG;AACjB,IAAI;AACJ,IAAI,KAAK,EAAE,EAAE;AACb,IAAI;AACJ,MAAM,MAAM,EAAE;AACd,MAAM,OAAO,EAAE,GAAG;AAClB,MAAM,MAAM,EAAE,GAAG;AACjB,MAAM,OAAO,EAAE,IAAI;AACnB,MAAM,YAAY;AAClB,KAAK;AACL,IAAI,YAAY,EAAE,IAAI;AACtB,IAAI;AACJ,GAAG,CAAC;AACJ,CAAC,CAAC,CAAC;AACH;AACA,EAAE;;;;;;;;;;;ACfF;AACA,EAAE,wDAAwD;AAC1D,CAAC,CAAC,CAAC,SAAS,CAAC,4BAA4B,EAAE;AAC3C,EAAE,QAAQ,EAAE;AACZ,IAAI;AACJ,IAAI,OAAO,EAAE,GAAG;AAChB,IAAI,WAAW,EAAE,GAAG;AACpB,IAAI;AACJ,GAAG;AACH,EAAE,WAAW,EAAE;AACf,EAAE,UAAU,EAAE;AACd,IAAI,QAAQ;AACZ,IAAI;AACJ,IAAI,SAAS,MAAM,EAAE;AACrB,MAAM;AACN,QAAQ,MAAM;AACd,QAAQ;AACR,QAAQ,OAAO;AACf,UAAU,WAAW,EAAE,MAAMA,GAAC,CAAC;AAC/B,YAAYA,GAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK;AACpD,YAAY,MAAM,CAAC,2BAA2B,CAAC,MAAM;AACrD,WAAW,CAAC;AACZ,UAAU,YAAY,EAAE,MAAM;AAC9B,YAAY,OAAO,0BAA0B,CAAC,uBAAuB,CAAC,IAAI,CAAC;AAC3E,cAAc,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,iBAAiB;AAC5D;AACA,aAAa,EAAE;AACf,cAAc,MAAM,EAAE,IAAI,CAAC;AAC3B,cAAc;AACd,aAAa,CAAC,CAAC;AACf,WAAW;AACX,SAAS,CAAC,CAAC;AACX,OAAO,CAAC;AACR,KAAK;AACL,GAAG;AACH,CAAC,CAAC,CAAC;AACH,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,gBAAgB,EAAE,SAAS;AAC5D,EAAE,aAAa,CAAC,GAAG,CAAC;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrDA;AACA,EAAE,QAAQ,EAAE;AACZ,IAAI,OAAO,EAAE,GAAG;AAChB,IAAI,WAAW,EAAE,GAAG;AACpB,IAAI;AACJ,IAAI,WAAW,EAAE,GAAG;AACpB,GAAG;AACH,EAAE,WAAW,EAAE;AACf,EAAE,UAAU,EAAE;AACd,IAAI,QAAQ;AACZ,IAAI,mBAAmB;AACvB,IAAI,SAAS,MAAM,EAAE;AACrB,MAAM;AACN,QAAQ,IAAI,CAAC;AACb,QAAQ,OAAO,CAAC;AAChB,UAAU;AACV,UAAU,YAAY,EAAE;AACxB,YAAY,OAAO,iBAAiB,CAAC;AACrC,cAAc,QAAQ,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AAC/G,cAAc,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI;AACpD,cAAc,UAAU,EAAE,IAAI;AAC9B,cAAc,MAAM,EAAE,IAAI,CAAC,WAAW;AACtC;AACA,cAAc,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;AACzC,aAAa,CAAC,CAAC;AACf,WAAW;AACX,SAAS,CAAC,CAAC;AACX,OAAO,CAAC;AACR,KAAK;AACL,GAAG;AACH,CAAC,CAAC,CAAC;AACH,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,gBAAgB,EAAE,SAAS,aAAa,EAAE;AAC3E,EAAE,aAAa,CAAC,GAAG,CAAC;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvCO,MAAM,8DAA8D,GAAG,wDAAwD,CAAC;AAEvI,MAAM,CAAC,8DAA8D,EAAE;AACvE,EAAE,0DAA0D;AAC5D,EAAE,mEAAmE;AACrE,EAAE,8BAA8B;AAChC,CAAC,CAAC,CAAC,UAAU,CAAC,0BAA0B,EAAE;AAC1C,EAAE,QAAQ;AACV,EAAE,mBAAmB;AACrB,EAAE,aAAa;AACf,EAAE,aAAa;AACf,EAAE,SAAS,MAAM,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,EAAE;AAChE,IAAI,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;AACrC,IAAI,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;AACrC,IAAI,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC;AAC7B,IAAI,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;AACxB,IAAI,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC;AAC5B,IAAI,IAAI,WAAW,IAAI,WAAW,CAAC,UAAU,EAAE;AAC/C,MAAM,IAAI,WAAW,CAAC,UAAU,CAAC,8BAA8B,IAAI,WAAW,CAAC,UAAU,CAAC,kBAAkB,EAAE;AAC9G,QAAQ,MAAM,CAAC,OAAO,CAAC,8BAA8B,GAAG,CAAC,QAAQ,CAAC,CAAC;AACnE,OAAO;AACP,MAAM,MAAM,CAAC,OAAO,CAAC,8BAA8B,GAAG,WAAW,CAAC,UAAU,CAAC,8BAA8B,CAAC;AAC5G,KAAK;AACL,IAAI,IAAI,CAAC,OAAO,GAAG,WAAW;AAC9B,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE;AACzC,QAAQ,OAAO,KAAK,CAAC;AACrB,OAAO;AACP,MAAM,OAAO,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;AAC9C,KAAK,CAAC;AACN,IAAI,MAAM,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC;AACzC,MAAM,WAAW;AACjB,MAAM,KAAK,EAAE,WAAW,GAAG,WAAW,CAAC,IAAI;AAC3C,MAAM,aAAa,EAAE,iBAAiB;AACtC,KAAK,CAAC,CAAC;AACP,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;AAC7B,MAAM,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AAC7B,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;AAC3B,QAAQ,OAAO;AACf,OAAO;AACP,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AACjE,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;AAC7B,MAAM,iBAAiB,CAAC,OAAO,EAAE,CAAC;AAClC,KAAK,CAAC;AACN,GAAG;AACH,CAAC,CAAC;;AC/CK,MAAM,kEAAkE,GAAG,0DAA0D,CAAC;AAE7I,MAAM,CAAC,kEAAkE,EAAE;AAC3E,EAAE,mBAAmB;AACrB,EAAE,8BAA8B;AAChC,CAAC,CAAC,CAAC,UAAU,CAAC,4BAA4B,EAAE;AAC5C,EAAE,QAAQ;AACV,EAAE,mBAAmB;AACrB,EAAE,mBAAmB;AACrB,EAAE,aAAa;AACf,EAAE,aAAa;AACf,EAAE,sBAAsB;AACxB,EAAE,SAAS,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,EAAE,oBAAoB,EAAE;AACzG,IAAI,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;AACrC,IAAI,MAAM,CAAC,oBAAoB,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACpG,IAAI,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC;AAC7B,IAAI,MAAM,CAAC,OAAO,GAAG;AACrB,MAAM,YAAY,EAAE,UAAU;AAC9B,MAAM,eAAe,EAAE;AACvB,QAAQ,uBAAuB,EAAE,WAAW,CAAC,IAAI;AACjD,OAAO;AACP,KAAK,CAAC;AACN,IAAI,IAAI,WAAW,IAAI,WAAW,CAAC,UAAU,EAAE;AAC/C,MAAM,IAAI,WAAW,CAAC,UAAU,CAAC,8BAA8B,IAAI,WAAW,CAAC,UAAU,CAAC,kBAAkB,EAAE;AAC9G,QAAQ,MAAM,CAAC,OAAO,CAAC,8BAA8B,GAAG,CAAC,QAAQ,CAAC,CAAC;AACnE,OAAO;AACP,MAAM,MAAM,CAAC,OAAO,CAAC,8BAA8B,GAAG,WAAW,CAAC,UAAU,CAAC,8BAA8B,CAAC;AAC5G,KAAK;AACL,IAAI,IAAI,CAAC,OAAO,GAAG,WAAW;AAC9B,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACrC,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE;AACzC,QAAQ,OAAO,KAAK,CAAC;AACrB,OAAO;AACP,MAAM,OAAO,OAAO,CAAC,eAAe,CAAC,sBAAsB,KAAK,KAAK,CAAC,CAAC;AACvE,KAAK,CAAC;AACN,IAAI,MAAM,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC;AACzC,MAAM,WAAW;AACjB,MAAM,KAAK,EAAE,WAAW,GAAG,WAAW,CAAC,IAAI;AAC3C,MAAM,aAAa,EAAE,iBAAiB;AACtC,KAAK,CAAC,CAAC;AACP,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW;AAC/B,MAAM,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AAC7B,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;AAC3B,QAAQ,OAAO;AACf,OAAO;AACP,MAAM,MAAM,YAAY,GAAG,WAAW;AACtC,QAAQ,OAAO,iBAAiB,CAAC,mBAAmB,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AAC/F,OAAO,CAAC;AACR,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAC9C,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;AAC7B,MAAM,iBAAiB,CAAC,OAAO,EAAE,CAAC;AAClC,KAAK,CAAC;AACN,GAAG;AACH,CAAC,CAAC;;;;;ACnCK,MAAM,4DAA4D,GAAG;AAE5E;AACA,EAAE,kBAAkB;AACpB;AACA,EAAE,mBAAmB;AACrB,EAAE,mCAAmC;AACrC,EAAE,8DAA8D;AAChE,EAAE;AACF,EAAE;AACF,EAAE;AACF,CAAC,CAAC,CAAC,UAAU,CAAC,2BAA2B,EAAE;AAC3C,EAAE,QAAQ;AACV,EAAE,QAAQ;AACV,EAAE,gBAAgB;AAClB,EAAE,cAAc;AAChB,EAAE,KAAK;AACP,EAAE,aAAa;AACf,EAAE;AACF,EAAE,WAAW;AACb,EAAE;AACF,EAAE;AACF,EAAE,SAAS,MAAM,EAAE;AACnB,IAAI,IAAI,CAAC,KAAK,GAAG;AACjB,MAAM;AACN,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,cAAc,GAAG;AAC1B,IAAI,IAAI,CAAC;AACT,IAAI,MAAM;AACV,MAAM,IAAI,OAAO,GAAGA,GAAC,CAAC,IAAI;AAC1B,QAAQ;AACR,OAAO,CAAC,CAAC;AACT,MAAM,IAAI,CAAC;AACX,QAAQ,GAAG,CAAC;AACZ,UAAU,IAAI;AACd;AACA,cAAc,IAAI;AAClB,gBAAgB,OAAO,GAAG;AAC1B,gBAAgB;AAChB,eAAe;AACf,aAAa,CAAC,CAAC;AACf;AACA,SAAS,CAAC,CAAC;AACX,OAAO;AACP,MAAM;AACN;AACA,IAAI,MAAM,SAAS,GAAG,MAAM;AAC5B;AACA,QAAQ,OAAO;AACf;AACA,MAAM,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,oBAAoB,EAAE;AAC7C,KAAK,CAAC;AACN,IAAI,MAAM;AACV,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;AACjC,KAAK,CAAC;AACN,IAAI,MAAM,mBAAmB,GAAG,MAAM;AACtC,MAAM,MAAM;AACZ,MAAM;AACN,QAAQ,YAAY,EAAE,CAAC;AACvB,QAAQ,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACzC,QAAQ,OAAO,CAAC,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC;AAChD,QAAQ,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;AACnC,QAAQ,IAAI,CAACA,GAAC,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AAC1C,UAAU,IAAI,OAAO,CAAC,cAAc,EAAE;AACtC,YAAY,IAAI,CAAC;AACjB,cAAc;AACd,aAAa,CAAC,CAAC;AACf,WAAW;AACX,UAAU;AACV;AACA,UAAU,IAAI,CAAC;AACf;AACA;AACA,UAAU;AACV,UAAU,iBAAiB,EAAE,CAAC;AAC9B,UAAU;AACV;AACA,UAAU,wBAAwB,EAAE,CAAC;AACrC;AACA;AACA,UAAU,mBAAmB,EAAE,CAAC;AAChC,UAAU,yBAAyB;AACnC;AACA;AACA,UAAU,SAAS,EAAE,CAAC;AACtB,SAAS;AACT,OAAO,EAAE,SAAS,CAAC,CAAC;AACpB,KAAK,CAAC;AACN,IAAI,MAAM,iBAAiB,GAAG;AAC9B,MAAM,IAAIA,GAAC,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,QAAQ,MAAM,aAAa;AAC3B,QAAQ,MAAM;AACd,UAAU,OAAO;AACjB;AACA,QAAQ,IAAI,iBAAiB,EAAE;AAC/B,UAAU,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,iBAAiB,CAAC,KAAK,CAAC;AACnE,SAAS;AACT;AACA,KAAK,CAAC;AACN;AACA,MAAM,IAAIA,GAAC,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE;AAClC,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC;AAChC,QAAQ,IAAI,CAAC,WAAW,CAAC,oBAAoB,GAAG;AAChD,UAAU,cAAc,EAAE;AAC1B,UAAU,gBAAgB;AAC1B,UAAU,iBAAiB,EAAE,UAAU,CAAC,iBAAiB,KAAK,SAAS,GAAG,SAAS,GAAG,WAAW;AACjG,SAAS,CAAC;AACV,OAAO;AACP,KAAK,CAAC;AACN,IAAI,MAAM;AACV,MAAM,IAAIA,GAAC,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,QAAQ;AACR;AACA,UAAU,gBAAgB,EAAE;AAC5B;AACA,UAAU,yBAAyB,EAAE,gBAAgB,CAAC,yBAAyB,GAAG,IAAI,GAAG,KAAK;AAC9F,SAAS,CAAC;AACV,OAAO;AACP,KAAK,CAAC;AACN,IAAI,MAAM,wBAAwB,GAAG,MAAM;AAC3C,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC;AAC3B,QAAQ,MAAM;AACd;AACA,QAAQ,IAAI,CAAC,WAAW,CAAC,4BAA4B,GAAG;AACxD,QAAQ,IAAI,CAAC,WAAW,CAAC;AACzB,QAAQ,IAAI,iBAAiB,CAAC,cAAc,EAAE;AAC9C;AACA,YAAY,IAAI,CAAC,WAAW,CAAC;AAC7B,WAAW,MAAM;AACjB,YAAY,IAAI,CAAC,WAAW,CAAC;AAC7B,WAAW;AACX,SAAS;AACT,OAAO;AACP,KAAK,CAAC;AACN,IAAI,MAAM,iBAAiB,GAAG,MAAM;AACpC,MAAM,IAAIA,GAAC,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,QAAQ,MAAM;AACd,QAAQ,IAAI;AACZ,UAAU;AACV,UAAU,IAAI,CAAC;AACf;AACA;AACA,WAAW,CAAC,CAAC;AACb,SAAS;AACT,OAAO;AACP,KAAK,CAAC;AACN,IAAI,MAAM,qBAAqB,GAAG,MAAM;AACxC,MAAM,IAAI;AACV;AACA,QAAQA,GAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;AAClC,UAAU,IAAI,GAAG,KAAK,MAAM,IAAI,KAAK,EAAE;AACvC;AACA;AACA;AACA;AACA,UAAU,OAAO,IAAI,CAAC,WAAW,CAAC;AAClC,SAAS;AACT,OAAO;AACP;AACA,IAAI,MAAM,mBAAmB,GAAG,MAAM;AACtC,MAAM,IAAIA,GAAC,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE;AAClC,QAAQ,MAAM,OAAO,GAAG,EAAE,CAAC;AAC3B,QAAQ,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK;AAC9F,UAAU;AACV;AACA;AACA;AACA,YAAY,OAAO,CAAC,GAAG,CAAC,GAAG;AAC3B,WAAW;AACX,SAAS,CAAC,CAAC;AACX;AACA,OAAO;AACP,KAAK,CAAC;AACN,IAAI,MAAM,aAAa,GAAG,MAAM;AAChC,MAAM,IAAI,CAACA,GAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,EAAE;AAC5D,QAAQ;AACR,OAAO;AACP,KAAK,CAAC;AACN;AACA,MAAM,MAAM,UAAU,GAAGA,GAAC,CAAC,GAAG,CAAC,IAAI,CAAC;AACpC,MAAM,OAAO,mBAAmB,CAAC;AACjC,KAAK,CAAC;AACN,IAAI,MAAM,cAAc,GAAG,CAAC,SAAS,KAAK;AAC1C;AACA,QAAQ,MAAM,iBAAiB,GAAGA,GAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,WAAW;AACpH,QAAQ,IAAI,iBAAiB,EAAE;AAC/B;AACA,SAAS,MAAM;AACf,UAAU,MAAM,SAAS,GAAGA,GAAC,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE;AACpD,UAAU,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,mBAAmB,CAAC,8BAA8B,CAAC;AACvF,SAAS;AACT,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,IAAI,MAAM;AACV,MAAM;AACN,KAAK,CAAC;AACN;AACA,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;AAC/B,QAAQ,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;AAChE,OAAO;AACP,KAAK,CAAC,CAAC;AACP,IAAI,IAAI,CAAC,kBAAkB,GAAG,MAAM;AACpC;AACA,MAAM,MAAM,WAAW,GAAG;AAC1B,QAAQ,WAAW,EAAE,GAAG;AACxB,QAAQ,KAAK,EAAE,aAAa,GAAG,YAAY,CAAC,IAAI;AAChD,QAAQ;AACR,UAAU;AACV;AACA;AACA;AACA,OAAO,CAAC;AACR,MAAM,MAAM,YAAY,GAAG,CAAC,MAAM,KAAK;AACvC,MAAM,MAAM,WAAW,GAAG;AAC1B;AACA,QAAQ,SAAS,EAAE,YAAY,CAAC,OAAO;AACvC,QAAQ,MAAM,EAAE,YAAY,CAAC,MAAM;AACnC,OAAO,CAAC;AACR,MAAM,MAAM;AACZ,QAAQ;AACR;AACA,QAAQ,OAAO,EAAE,YAAY,CAAC,OAAO;AACrC,QAAQ,iBAAiB,EAAE,WAAW;AACtC,QAAQ;AACR,QAAQ;AACR,QAAQ;AACR;AACA,OAAO,CAAC;AACR,MAAM,gCAAgC,CAAC,wBAAwB,CAAC,GAAG,EAAE,YAAY,EAAE,uBAAuB,CAAC,CAAC;AAC5G,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC;AACzB;AACA,OAAO;AACP,MAAM,wBAAwB,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;AAChE,KAAK,CAAC;AACN,IAAI,IAAI,CAAC;AACT,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC;AAC5C;AACA,QAAQ,WAAW,EAAE,GAAG;AACxB,QAAQ,KAAK,EAAE,YAAY,GAAG,YAAY,CAAC,IAAI;AAC/C;AACA,MAAM,MAAM,YAAY,GAAG,CAAC;AAC5B,MAAM,MAAM,uBAAuB,GAAG;AACtC,QAAQ,MAAM,EAAE;AAChB,QAAQ,UAAU,EAAE;AACpB,QAAQ,OAAO,EAAE,YAAY,CAAC,OAAO;AACrC,QAAQ,iBAAiB;AACzB,QAAQ;AACR,QAAQ;AACR;AACA,QAAQ,YAAY,EAAE,IAAI;AAC1B,OAAO,CAAC;AACR,MAAM;AACN;AACA,QAAQ,uBAAuB,CAAC;AAChC,OAAO;AACP,MAAM,wBAAwB,CAAC,OAAO,CAAC;AACvC,KAAK,CAAC;AACN,IAAI,IAAI;AACR;AACA,MAAM,MAAM,WAAW,GAAG;AAC1B,QAAQ,WAAW,EAAE,GAAG;AACxB,QAAQ,KAAK,EAAE,WAAW;AAC1B,OAAO,CAAC;AACR,MAAM;AACN,MAAM,MAAM,uBAAuB,GAAG;AACtC,QAAQ;AACR;AACA,QAAQ,OAAO,EAAE,YAAY,CAAC,OAAO;AACrC,QAAQ,iBAAiB,EAAE,WAAW;AACtC,QAAQ,8BAA8B,EAAE,GAAG,CAAC;AAC5C,QAAQ,kBAAkB,EAAE,QAAQ;AACpC,QAAQ,YAAY;AACpB,QAAQ;AACR,OAAO,CAAC;AACR;AACA,QAAQ,uBAAuB,CAAC;AAChC,OAAO;AACP,MAAM;AACN,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,mBAAmB,GAAG;AAC/B,MAAM,SAAS,CAAC,IAAI,CAAC;AACrB,QAAQ;AACR,QAAQ,UAAU,EAAE,oCAAoC;AACxD,QAAQ;AACR,UAAU;AACV;AACA;AACA,cAAc,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO;AAC5C,cAAc,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO;AAC/C,aAAa,CAAC,CAAC;AACf,YAAY,OAAOA,GAAC,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC;AACnF;AACA;AACA;AACA,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,iBAAiB,GAAG,MAAM;AACnC,MAAM,SAAS,CAAC,IAAI,CAAC;AACrB,QAAQ,WAAW,EAAE;AACrB,QAAQ;AACR,QAAQ;AACR;AACA,YAAY,OAAO,IAAI,CAAC,WAAW,CAAC;AACpC,WAAW;AACX;AACA,YAAY,OAAO,GAAG,CAAC;AACvB,WAAW;AACX,SAAS;AACT,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,gBAAgB,GAAG,CAAC;AAC7B,MAAM;AACN,QAAQ;AACR,QAAQ;AACR;AACA,QAAQ,OAAO,EAAE;AACjB;AACA,YAAY,OAAO,QAAQ;AAC3B,WAAW;AACX,UAAU,WAAW,EAAE,MAAM;AAC7B,YAAY,OAAO,GAAG,CAAC;AACvB;AACA;AACA,YAAY,OAAO,YAAY,CAAC;AAChC,WAAW;AACX,UAAU,kBAAkB,EAAE,MAAM;AACpC,YAAY,OAAO;AACnB,WAAW;AACX,SAAS;AACT,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,iBAAiB,GAAG,MAAM;AACnC,MAAM;AACN;AACA,MAAM,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;AACvD;AACA,QAAQ,WAAW,EAAE,oBAAoB,CAAC,QAAQ;AAClD,QAAQ,KAAK,EAAE,MAAM;AACrB,OAAO,CAAC,CAAC;AACT;AACA,IAAI,IAAI,CAAC,gBAAgB,GAAG,MAAM;AAClC,MAAM;AACN;AACA,OAAO,MAAM,IAAI,IAAI,CAAC,WAAW,IAAI;AACrC,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC;AACzC;AACA,OAAO;AACP,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK,CAAC;AACN,IAAI,IAAI,CAAC;AACT;AACA,QAAQ,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACjE;AACA,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK,CAAC;AACN,IAAI,MAAM,yBAAyB,GAAG,MAAM;AAC5C,MAAM,IAAI,CAAC,gBAAgB,GAAG;AAC9B,KAAK,CAAC;AACN,GAAG;AACH,CAAC,CAAC,CAAC;AACH,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACjC,EAAE,aAAa,CAAC,GAAG,CAAC;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,CAAC;AACH,CAAC,CAAC,CAAC,CAAC;AACJ,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACjC,EAAE,aAAa,CAAC,GAAG,CAAC;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,CAAC;AACH,CAAC,CAAC,CAAC,CAAC;AACJ,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,gBAAgB,EAAE,SAAS,aAAa,EAAE;AAC3E,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACxfO,MAAM,yDAAyD,GAAG,mCAAmC,CAAC;AAE7G,MAAM,CAAC,yDAAyD,EAAE;AAClE,EAAE,4DAA4D;AAC9D,EAAE,iCAAiC;AACnC,EAAE,wCAAwC;AAC1C,EAAE,8BAA8B;AAChC,CAAC,CAAC;;ACTK,MAAM,6BAA6B,GAAG,+BAA+B,CAAC;AAE7E,MAAM,CAAC,6BAA6B,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,WAAW;AAClF,EAAE,IAAI,WAAW,CAAC;AAClB,EAAE,aAAa,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,QAAQ,EAAE;AACtE,IAAI,WAAW,GAAG,QAAQ,CAAC;AAC3B,GAAG,CAAC,CAAC;AACL,EAAE,SAAS,MAAM,CAAC,WAAW,EAAE;AAC/B,IAAI,IAAI,WAAW,CAAC,MAAM,EAAE;AAC5B,MAAM,OAAO,WAAW,CAAC,MAAM,CAAC;AAChC,KAAK,MAAM;AACX,MAAM,MAAM,iBAAiB,GAAGA,GAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;AACjK,MAAM,OAAO,iBAAiB,GAAG,eAAe,GAAG,QAAQ,CAAC;AAC5D,KAAK;AACL,GAAG;AACH,EAAE,OAAO;AACT,IAAI,MAAM;AACV,GAAG,CAAC;AACJ,CAAC,CAAC;;ACnBK,MAAM,2CAA2C,GAAG,0CAA0C,CAAC;AAEtG,MAAM,CAAC,2CAA2C,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,6BAA6B,EAAE,WAAW;AAC1G,EAAE,SAAS,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE;AACpD,IAAI,MAAM,OAAO,GAAG,2BAA2B,CAAC;AAChD,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAC9B,MAAM,MAAM,CAAC,IAAI,CAAC,2HAA2H,CAAC,CAAC;AAC/I,KAAK;AACL,GAAG;AACH,EAAE,SAAS,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE;AACnD,IAAI,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACrC,IAAI,MAAM,4BAA4B,GAAG,EAAE,CAAC;AAC5C,IAAI,MAAM,yBAAyB,GAAG,qBAAqB,GAAG,4BAA4B,CAAC;AAC3F,IAAI,MAAM,wBAAwB,GAAG,EAAE,CAAC;AACxC,IAAI,MAAM,wBAAwB,GAAG,qBAAqB,GAAG,wBAAwB,CAAC;AACtF,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,qBAAqB,EAAE;AAC9C,MAAM,MAAM,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;AACvF,MAAM,OAAO;AACb,KAAK;AACL,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,yBAAyB,GAAG,EAAE,EAAE;AACvD,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,yBAAyB,EAAE;AACpD,QAAQ,QAAQ,CAAC,IAAI,CAAC,CAAC;AACvB,8CAA8C,EAAE,yBAAyB,CAAC,wBAAwB,EAAE,KAAK,CAAC,MAAM,CAAC;AACjH,sBAAsB,CAAC,CAAC,CAAC;AACzB,OAAO,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,yBAAyB,GAAG,CAAC,EAAE;AAChE,QAAQ,QAAQ,CAAC,IAAI,CAAC,4GAA4G,CAAC,CAAC;AACpI,OAAO,MAAM;AACb,QAAQ,MAAM,SAAS,GAAG,yBAAyB,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;AACvE,QAAQ,QAAQ,CAAC,IAAI,CAAC,CAAC;AACvB,kBAAkB,EAAE,SAAS,CAAC,qBAAqB,CAAC,CAAC,CAAC;AACtD,OAAO;AACP,KAAK;AACL,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,wBAAwB,GAAG,EAAE,EAAE;AACtD,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,wBAAwB,EAAE;AACnD,QAAQ,QAAQ,CAAC,IAAI,CAAC,CAAC;AACvB,8CAA8C,EAAE,wBAAwB,CAAC,wBAAwB,EAAE,KAAK,CAAC,MAAM,CAAC;AAChH,wBAAwB,CAAC,CAAC,CAAC;AAC3B,OAAO,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,wBAAwB,GAAG,CAAC,EAAE;AAC/D,QAAQ,QAAQ,CAAC,IAAI,CAAC,2GAA2G,CAAC,CAAC;AACnI,OAAO,MAAM;AACb,QAAQ,MAAM,SAAS,GAAG,wBAAwB,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;AACtE,QAAQ,QAAQ,CAAC,IAAI,CAAC,CAAC;AACvB,kBAAkB,EAAE,SAAS,CAAC,qBAAqB,CAAC,CAAC,CAAC;AACtD,OAAO;AACP,KAAK;AACL,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,qBAAqB,GAAG,EAAE,EAAE;AACnD,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,qBAAqB,GAAG,CAAC,EAAE;AACrD,QAAQ,QAAQ,CAAC,IAAI,CAAC,CAAC,2FAA2F,EAAE,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxJ,OAAO,MAAM;AACb,QAAQ,MAAM,SAAS,GAAG,qBAAqB,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;AACnE,QAAQ,QAAQ,CAAC,IAAI,CAAC,CAAC,0DAA0D,EAAE,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AACnH,kBAAkB,EAAE,SAAS,CAAC,qBAAqB,CAAC,CAAC,CAAC;AACtD,OAAO;AACP,KAAK;AACL,GAAG;AACH,EAAE,SAAS,QAAQ,CAAC,KAAK,EAAE;AAC3B,IAAI,MAAM,QAAQ,GAAG,EAAE,CAAC;AACxB,IAAI,MAAM,MAAM,GAAG,EAAE,CAAC;AACtB,IAAI,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;AAC/B,MAAM,yBAAyB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAC/C,MAAM,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC9C,KAAK;AACL,IAAI,OAAO;AACX,MAAM,QAAQ;AACd,MAAM,MAAM;AACZ,KAAK,CAAC;AACN,GAAG;AACH,EAAE,OAAO;AACT,IAAI,QAAQ;AACZ,GAAG,CAAC;AACJ,CAAC,CAAC,CAAC,GAAG,CAAC;AACP,EAAE,6BAA6B;AAC/B,EAAE,SAAS,2BAA2B,EAAE;AACxC,IAAI,wBAAwB,CAAC,iBAAiB,CAAC,KAAK,EAAE,2BAA2B,CAAC,CAAC;AACnF,GAAG;AACH,CAAC,CAAC;;;;;AC5BU,MAAC,aAAa,GAAG,gBAAgB;AAC7C;AACA,EAAE;AACF;AACA,EAAE,8BAA8B;AAChC,EAAE;AACF,EAAE,0BAA0B;AAC5B,EAAE,eAAe;AACjB,EAAE;AACF,EAAE,qBAAqB;AACvB,EAAE,0BAA0B;AAC5B,EAAE;AACF,EAAE;AACF,EAAE;AACF,EAAE;AACF,EAAE,0CAA0C;AAC5C,EAAE,wCAAwC;AAC1C,EAAE,gEAAgE;AAClE,EAAE,oDAAoD;AACtD,EAAE;AACF,EAAE;AACF,EAAE,kDAAkD;AACpD,EAAE,8CAA8C;AAChD,EAAE;AACF,EAAE,kDAAkD;AACpD,EAAE;AACF,EAAE;AACF,EAAE,gDAAgD;AAClD,EAAE,uCAAuC;AACzC,EAAE,gDAAgD;AAClD,EAAE,4CAA4C;AAC9C,EAAE,4CAA4C;AAC9C,EAAE;AACF,EAAE;AACF,EAAE;AACF,EAAE;AACF,EAAE,mDAAmD;AACrD,EAAE,2DAA2D;AAC7D,EAAE,6DAA6D;AAC/D,EAAE,2DAA2D;AAC7D,EAAE,8CAA8C;AAChD,EAAE,yCAAyC;AAC3C,EAAE,6BAA6B;AAC/B,EAAE,2CAA2C;AAC7C,EAAE,oCAAoC;AACtC,EAAE,mCAAmC;AACrC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;AAChB,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,KAAK;AAC9C,IAAI,IAAI,EAAE,QAAQ;AAClB,IAAI,IAAI,EAAE;AACV,MAAM,IAAI,EAAE,IAAI;AAChB,KAAK;AACL,IAAI,KAAK,EAAE;AACX,MAAM;AACN,KAAK;AACL,IAAI;AACJ,MAAM,MAAM;AACZ,KAAK;AACL,IAAI;AACJ,MAAM;AACN,MAAM,kBAAkB,EAAE;AAC1B,MAAM;AACN,MAAM;AACN,MAAM,0BAA0B,EAAE;AAClC,MAAM,cAAc,EAAE;AACtB,MAAM,oBAAoB,EAAE;AAC5B,KAAK;AACL,IAAI,QAAQ,EAAE;AACd,MAAM,mBAAmB,EAAE,wBAAwB;AACnD,MAAM,kBAAkB,EAAE;AAC1B,MAAM;AACN,MAAM;AACN,MAAM,gCAAgC,EAAE;AACxC,KAAK;AACL,IAAI,YAAY,EAAE;AAClB,MAAM,WAAW,EAAE,4BAA4B;AAC/C,MAAM,cAAc,EAAE;AACtB,MAAM;AACN,MAAM;AACN,MAAM,6BAA6B,EAAE;AACrC,MAAM,4BAA4B,EAAE;AACpC,KAAK;AACL,IAAI,aAAa,EAAE;AACnB,MAAM,WAAW,EAAE;AACnB,MAAM,MAAM,EAAE,wBAAwB;AACtC,MAAM;AACN,MAAM;AACN,MAAM,8BAA8B,EAAE;AACtC,MAAM,6BAA6B,EAAE;AACrC,KAAK;AACL,IAAI,MAAM,EAAE;AACZ,MAAM,QAAQ,EAAE,mBAAmB;AACnC,KAAK;AACL,IAAI;AACJ,IAAI;AACJ,MAAM,WAAW,EAAE;AACnB,KAAK;AACL,GAAG,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AACH,wEAAwE,CAAC;AACzE,MAAM;AACN,EAAE;AACF;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}