@spinnaker/google 0.0.0-2025.1-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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,781 @@
1
+ 'use strict';
2
+
3
+ import * as angular from 'angular';
4
+ import _ from 'lodash';
5
+
6
+ import {
7
+ AccountService,
8
+ CACHE_INITIALIZER_SERVICE,
9
+ LOAD_BALANCER_READ_SERVICE,
10
+ NetworkReader,
11
+ SECURITY_GROUP_READER,
12
+ SubnetReader,
13
+ } from '@spinnaker/core';
14
+
15
+ import { GCEProviderSettings } from '../../gce.settings';
16
+ import { GCE_HEALTH_CHECK_READER } from '../../healthCheck/healthCheck.read.service';
17
+ import { getHealthCheckOptions } from '../../healthCheck/healthCheckUtils';
18
+ import { GceImageReader } from '../../image';
19
+ import { GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE } from './../../instance/custom/customInstanceBuilder.gce.service';
20
+ import { GOOGLE_INSTANCE_GCEINSTANCETYPE_SERVICE } from '../../instance/gceInstanceType.service';
21
+ import { GCE_HTTP_LOAD_BALANCER_UTILS } from '../../loadBalancer/httpLoadBalancerUtils.service';
22
+ import { LOAD_BALANCER_SET_TRANSFORMER } from '../../loadBalancer/loadBalancer.setTransformer';
23
+ import { GceAcceleratorService } from './wizard/advancedSettings/gceAccelerator.service';
24
+ import { GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE } from './wizard/securityGroups/tagManager.service';
25
+
26
+ export const GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE =
27
+ 'spinnaker.serverGroup.configure.gce.configuration.service';
28
+ export const name = GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE; // for backwards compatibility
29
+ angular
30
+ .module(GOOGLE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE, [
31
+ LOAD_BALANCER_SET_TRANSFORMER,
32
+ SECURITY_GROUP_READER,
33
+ CACHE_INITIALIZER_SERVICE,
34
+ LOAD_BALANCER_READ_SERVICE,
35
+ GOOGLE_INSTANCE_GCEINSTANCETYPE_SERVICE,
36
+ GOOGLE_INSTANCE_CUSTOM_CUSTOMINSTANCEBUILDER_GCE_SERVICE,
37
+ GCE_HTTP_LOAD_BALANCER_UTILS,
38
+ GCE_HEALTH_CHECK_READER,
39
+ GOOGLE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUPS_TAGMANAGER_SERVICE,
40
+ ])
41
+ .factory('gceServerGroupConfigurationService', [
42
+ 'securityGroupReader',
43
+ 'gceInstanceTypeService',
44
+ 'cacheInitializer',
45
+ '$q',
46
+ 'loadBalancerReader',
47
+ 'gceCustomInstanceBuilderService',
48
+ 'gceHttpLoadBalancerUtils',
49
+ 'gceHealthCheckReader',
50
+ 'gceTagManager',
51
+ 'gceLoadBalancerSetTransformer',
52
+ function (
53
+ securityGroupReader,
54
+ gceInstanceTypeService,
55
+ cacheInitializer,
56
+ $q,
57
+ loadBalancerReader,
58
+ gceCustomInstanceBuilderService,
59
+ gceHttpLoadBalancerUtils,
60
+ gceHealthCheckReader,
61
+ gceTagManager,
62
+ gceLoadBalancerSetTransformer,
63
+ ) {
64
+ const persistentDiskTypes = ['pd-standard', 'pd-ssd', 'hyperdisk-balanced'];
65
+ const authScopes = [
66
+ 'cloud-platform',
67
+ 'userinfo.email',
68
+ 'compute.readonly',
69
+ 'compute',
70
+ 'cloud.useraccounts.readonly',
71
+ 'cloud.useraccounts',
72
+ 'devstorage.read_only',
73
+ 'devstorage.write_only',
74
+ 'devstorage.full_control',
75
+ 'taskqueue',
76
+ 'bigquery',
77
+ 'sqlservice.admin',
78
+ 'datastore',
79
+ 'logging.write',
80
+ 'logging.read',
81
+ 'logging.admin',
82
+ 'monitoring.write',
83
+ 'monitoring.read',
84
+ 'monitoring',
85
+ 'bigtable.data.readonly',
86
+ 'bigtable.data',
87
+ 'bigtable.admin',
88
+ 'bigtable.admin.table',
89
+ ];
90
+
91
+ function configureCommand(application, command) {
92
+ return $q
93
+ .all([
94
+ AccountService.getCredentialsKeyedByAccount('gce'),
95
+ securityGroupReader.getAllSecurityGroups(),
96
+ NetworkReader.listNetworksByProvider('gce'),
97
+ SubnetReader.listSubnetsByProvider('gce'),
98
+ loadBalancerReader.listLoadBalancers('gce'),
99
+ loadAllImages(command.credentials),
100
+ gceInstanceTypeService.getAllTypesByRegion(),
101
+ $q.when(angular.copy(persistentDiskTypes)),
102
+ $q.when(angular.copy(authScopes)),
103
+ gceHealthCheckReader.listHealthChecks(),
104
+ AccountService.listAccounts('gce'),
105
+ ])
106
+ .then(function ([
107
+ credentialsKeyedByAccount,
108
+ securityGroups,
109
+ networks,
110
+ subnets,
111
+ loadBalancers,
112
+ allImages,
113
+ instanceTypes,
114
+ persistentDiskTypes,
115
+ authScopes,
116
+ healthChecks,
117
+ accounts,
118
+ ]) {
119
+ const backingData = {
120
+ credentialsKeyedByAccount,
121
+ securityGroups,
122
+ networks,
123
+ subnets,
124
+ loadBalancers,
125
+ allImages,
126
+ instanceTypes,
127
+ persistentDiskTypes,
128
+ authScopes,
129
+ healthChecks,
130
+ accounts,
131
+ };
132
+ let securityGroupReloader = $q.when(null);
133
+ let networkReloader = $q.when(null);
134
+ let healthCheckReloader = $q.when(null);
135
+ backingData.filtered = {};
136
+ backingData.distributionPolicyTargetShapes = getDistributionPolicyTargetShapes();
137
+ command.backingData = backingData;
138
+ configureImages(command);
139
+
140
+ if (command.securityGroups && command.securityGroups.length) {
141
+ // Verify all firewalls are accounted for; otherwise, try refreshing firewalls cache.
142
+ const securityGroupIds = _.map(getSecurityGroups(command), 'id');
143
+ if (_.intersection(command.securityGroups, securityGroupIds).length < command.securityGroups.length) {
144
+ securityGroupReloader = refreshSecurityGroups(command, true);
145
+ }
146
+ }
147
+ if (command.network) {
148
+ // Verify network is accounted for; otherwise, try refreshing networks cache.
149
+ const networkNames = getNetworkNames(command);
150
+ if (!networkNames.includes(command.network)) {
151
+ networkReloader = refreshNetworks(command);
152
+ }
153
+ }
154
+
155
+ // eslint-disable-next-line no-console
156
+ if (command.autoScalingPolicy) {
157
+ command.enableAutoScaling = true;
158
+ }
159
+
160
+ if (command.autoHealingPolicy) {
161
+ command.enableAutoHealing = true;
162
+ }
163
+ if (_.has(command, 'autoHealingPolicy.healthCheck')) {
164
+ // Verify health check is accounted for; otherwise, try refreshing health checks cache.
165
+ const healthChecks = getHealthChecks(command);
166
+ if (!_.chain(healthChecks).map('selfLink').includes(command.autoHealingPolicy.healthCheckUrl).value()) {
167
+ healthCheckReloader = refreshHealthChecks(command, true);
168
+ }
169
+ }
170
+
171
+ return $q.all([securityGroupReloader, networkReloader, healthCheckReloader]).then(() => {
172
+ gceTagManager.register(command);
173
+ attachEventHandlers(command);
174
+ });
175
+ });
176
+ }
177
+
178
+ function getDistributionPolicyTargetShapes() {
179
+ return ['ANY', 'EVEN'];
180
+ }
181
+
182
+ function configureDistributionPolicyTargetShape(command) {
183
+ const accountDetails = command.backingData.credentialsKeyedByAccount[command.credentials];
184
+ if (!command.distributionPolicy.targetShape) {
185
+ command.distributionPolicy.targetShape = 'EVEN';
186
+ }
187
+ }
188
+
189
+ function loadAllImages(account) {
190
+ return GceImageReader.findImages({
191
+ account: account,
192
+ provider: 'gce',
193
+ q: '*',
194
+ });
195
+ }
196
+
197
+ function configureInstanceTypes(command) {
198
+ const result = { dirty: {} };
199
+ if (command.region) {
200
+ const results = [result.dirty];
201
+
202
+ results.push(configureCustomInstanceTypes(command).dirty);
203
+ results.push(configureStandardInstanceTypes(command).dirty);
204
+
205
+ angular.extend(...results);
206
+ } else {
207
+ command.backingData.filtered.instanceTypes = [];
208
+ }
209
+ return result;
210
+ }
211
+
212
+ function configureCpuPlatforms(command) {
213
+ const result = { dirty: {} };
214
+ const filteredData = command.backingData.filtered;
215
+ const locationToCpuPlatformsMap =
216
+ command.backingData.credentialsKeyedByAccount[command.credentials].locationToCpuPlatformsMap;
217
+
218
+ filteredData.cpuPlatforms = ['(Automatic)'];
219
+
220
+ const location = command.regional ? command.region : command.zone;
221
+
222
+ if (_.has(locationToCpuPlatformsMap, location)) {
223
+ filteredData.cpuPlatforms = _.concat(filteredData.cpuPlatforms, locationToCpuPlatformsMap[location]);
224
+ }
225
+
226
+ if (!_.includes(filteredData.cpuPlatforms, command.minCpuPlatform)) {
227
+ delete command.minCpuPlatform;
228
+ result.dirty.minCpuPlatform = true;
229
+ }
230
+ return result;
231
+ }
232
+
233
+ function configureStandardInstanceTypes(command) {
234
+ const c = command;
235
+ const result = { dirty: {} };
236
+
237
+ const locations = c.regional ? c.distributionPolicy.zones : [c.zone];
238
+ const { credentialsKeyedByAccount } = c.backingData;
239
+ const { locationToInstanceTypesMap } = credentialsKeyedByAccount[c.credentials];
240
+
241
+ if (locations.every((l) => !l)) {
242
+ return result;
243
+ }
244
+
245
+ let filtered = gceInstanceTypeService.getAvailableTypesForLocations(locationToInstanceTypesMap, locations);
246
+
247
+ filtered = sortInstanceTypes(filtered);
248
+ const instanceType = c.instanceType;
249
+ if (_.every([instanceType, !_.includes(instanceType, 'custom-'), !_.includes(filtered, instanceType)])) {
250
+ result.dirty.instanceType = c.instanceType;
251
+ c.instanceType = null;
252
+ }
253
+ c.backingData.filtered.instanceTypes = filtered;
254
+ return result;
255
+ }
256
+
257
+ function configureCustomInstanceTypes(command) {
258
+ const c = command;
259
+ const result = { dirty: {} };
260
+ let vCpuCount = _.get(c, 'viewState.customInstance.vCpuCount');
261
+ const instanceFamily = _.get(c, 'viewState.customInstance.instanceFamily');
262
+ const memory = _.get(c, 'viewState.customInstance.memory');
263
+ const extendedMemory = _.get(c, 'viewState.customInstance.extendedMemory');
264
+ const { zone, regional, region } = c;
265
+ const { locationToInstanceTypesMap } = c.backingData.credentialsKeyedByAccount[c.credentials];
266
+ const location = regional ? region : zone;
267
+
268
+ if (!location) {
269
+ return result;
270
+ }
271
+
272
+ if (zone || regional) {
273
+ _.set(
274
+ c,
275
+ 'backingData.customInstanceTypes.vCpuList',
276
+ gceCustomInstanceBuilderService.generateValidVCpuListForLocation(location, locationToInstanceTypesMap),
277
+ );
278
+ }
279
+
280
+ // initializes vCpuCount so that memory selector will be populated.
281
+ if (
282
+ !vCpuCount ||
283
+ !gceCustomInstanceBuilderService.vCpuCountForLocationIsValid(
284
+ instanceFamily,
285
+ vCpuCount,
286
+ location,
287
+ locationToInstanceTypesMap,
288
+ )
289
+ ) {
290
+ vCpuCount = _.get(c, 'backingData.customInstanceTypes.vCpuList[0]');
291
+ _.set(c, 'viewState.customInstance.vCpuCount', vCpuCount);
292
+ }
293
+
294
+ _.set(
295
+ c,
296
+ 'backingData.customInstanceTypes.memoryList',
297
+ gceCustomInstanceBuilderService.generateValidMemoryListForVCpuCount(instanceFamily, vCpuCount),
298
+ );
299
+
300
+ if (
301
+ _.every([
302
+ memory,
303
+ vCpuCount,
304
+ !gceCustomInstanceBuilderService.memoryIsValid(instanceFamily, memory, vCpuCount, extendedMemory),
305
+ ])
306
+ ) {
307
+ _.set(c, 'viewState.customInstance.memory', undefined);
308
+ result.dirty.instanceType = c.instanceType;
309
+ c.instanceType = null;
310
+ }
311
+
312
+ _.set(
313
+ c,
314
+ 'backingData.customInstanceTypes.instanceFamilyList',
315
+ gceCustomInstanceBuilderService.generateValidInstanceFamilyList(),
316
+ );
317
+
318
+ return result;
319
+ }
320
+
321
+ function configureAccelerators(command) {
322
+ const result = { dirty: {} };
323
+ const acceleratorTypes = GceAcceleratorService.getAvailableAccelerators(command);
324
+ _.set(command, ['viewState', 'acceleratorTypes'], acceleratorTypes);
325
+ result.dirty.acceleratorTypes = true;
326
+ const chosenAccelerators = _.get(command, 'acceleratorConfigs', []);
327
+ if (chosenAccelerators.length > 0) {
328
+ command.acceleratorConfigs = chosenAccelerators.filter(
329
+ (chosen) => !!acceleratorTypes.find((a) => a.name === chosen.acceleratorType),
330
+ );
331
+ if (command.acceleratorConfigs.length === 0) {
332
+ delete command.acceleratorConfigs;
333
+ }
334
+ }
335
+ return result;
336
+ }
337
+
338
+ // n1-standard-8 should come before n1-standard-16, so we must sort by the individual segments of the names.
339
+ function sortInstanceTypes(instanceTypes) {
340
+ const tokenizedInstanceTypes = _.map(instanceTypes, (instanceType) => {
341
+ const tokens = instanceType.split('-');
342
+
343
+ return {
344
+ class: tokens[0],
345
+ group: tokens[1],
346
+ index: Number(tokens[2]) || 0,
347
+ };
348
+ });
349
+
350
+ const sortedTokenizedInstanceTypes = _.sortBy(tokenizedInstanceTypes, ['class', 'group', 'index']);
351
+
352
+ return _.map(sortedTokenizedInstanceTypes, (sortedTokenizedInstanceType) => {
353
+ return (
354
+ sortedTokenizedInstanceType.class +
355
+ '-' +
356
+ sortedTokenizedInstanceType.group +
357
+ (sortedTokenizedInstanceType.index ? '-' + sortedTokenizedInstanceType.index : '')
358
+ );
359
+ });
360
+ }
361
+
362
+ function configureImages(command) {
363
+ command.image = command.viewState.imageId;
364
+ const result = { dirty: {} };
365
+ if (command.credentials !== command.viewState.lastImageAccount) {
366
+ command.viewState.lastImageAccount = command.credentials;
367
+ if (!_.chain(command.backingData.allImages).find({ imageName: command.image }).value()) {
368
+ command.image = null;
369
+ result.dirty.imageName = true;
370
+ }
371
+ }
372
+ return result;
373
+ }
374
+
375
+ function configureZones(command) {
376
+ const result = { dirty: {} };
377
+ const filteredData = command.backingData.filtered;
378
+ if (command.region === null) {
379
+ return result;
380
+ }
381
+ const regions = command.backingData.credentialsKeyedByAccount[command.credentials].regions;
382
+ if (_.isArray(regions)) {
383
+ filteredData.zones = _.find(regions, { name: command.region }).zones;
384
+ filteredData.truncatedZones = _.takeRight(filteredData.zones.sort(), 3);
385
+ } else {
386
+ // TODO(duftler): Remove this once we finish deprecating the old style regions/zones in clouddriver GCE credentials.
387
+ filteredData.zones = regions[command.region];
388
+ }
389
+ if (!_.chain(filteredData.zones).includes(command.zone).value()) {
390
+ delete command.zone;
391
+ if (!command.regional) {
392
+ result.dirty.zone = true;
393
+ }
394
+ }
395
+ return result;
396
+ }
397
+
398
+ function getHealthChecks(command) {
399
+ const matchingHealthChecks = _.filter(command.backingData.healthChecks, { account: command.credentials });
400
+ return getHealthCheckOptions(matchingHealthChecks);
401
+ }
402
+
403
+ function configureHealthChecks(command) {
404
+ const result = { dirty: {} };
405
+ const filteredData = command.backingData.filtered;
406
+
407
+ if (command.credentials === null) {
408
+ return result;
409
+ }
410
+
411
+ filteredData.healthChecks = getHealthChecks(command);
412
+
413
+ if (
414
+ _.has(command, 'autoHealingPolicy.healthCheck') &&
415
+ !_.chain(filteredData.healthChecks).map('selfLink').includes(command.autoHealingPolicy.healthCheckUrl).value()
416
+ ) {
417
+ delete command.autoHealingPolicy.healthCheck;
418
+ result.dirty.autoHealingPolicy = true;
419
+ } else {
420
+ result.dirty.autoHealingPolicy = null;
421
+ }
422
+
423
+ return result;
424
+ }
425
+
426
+ function getLoadBalancers(command) {
427
+ return _.chain(command.backingData.loadBalancers)
428
+ .map('accounts')
429
+ .flattenDeep()
430
+ .filter({ name: command.credentials })
431
+ .map('regions')
432
+ .flattenDeep()
433
+ .map('loadBalancers')
434
+ .flattenDeep()
435
+ .filter(_.curry(isRelevantLoadBalancer)(command))
436
+ .uniq()
437
+ .value();
438
+ }
439
+
440
+ function isRelevantLoadBalancer(command, loadBalancer) {
441
+ return loadBalancer.region === command.region || loadBalancer.region === 'global';
442
+ }
443
+
444
+ function configureLoadBalancerOptions(command) {
445
+ const results = { dirty: {} };
446
+ const current = command.loadBalancers;
447
+ const newLoadBalancerObjects = gceLoadBalancerSetTransformer.normalizeLoadBalancerSet(
448
+ getLoadBalancers(command),
449
+ );
450
+ command.backingData.filtered.loadBalancerIndex = _.keyBy(newLoadBalancerObjects, 'name');
451
+ command.backingData.filtered.loadBalancers = _.map(newLoadBalancerObjects, 'name');
452
+
453
+ if (current && command.loadBalancers) {
454
+ command.loadBalancers = gceHttpLoadBalancerUtils.normalizeLoadBalancerNamesForAccount(
455
+ command.loadBalancers,
456
+ command.credentials,
457
+ newLoadBalancerObjects,
458
+ );
459
+ const matched = _.intersection(command.backingData.filtered.loadBalancers, command.loadBalancers);
460
+ const removed = _.xor(matched, command.loadBalancers);
461
+ command.loadBalancers = matched;
462
+ configureBackendServiceOptions(command);
463
+
464
+ if (removed.length) {
465
+ results.dirty.loadBalancers = removed;
466
+ }
467
+ }
468
+ return results;
469
+ }
470
+
471
+ function configureBackendServiceOptions(command) {
472
+ /*
473
+ a server group has a list of backend services, but there's no mapping from l7 -> backend service
474
+ for the server group. this will not populate the wizard perfectly,
475
+ but it is the best we can do with the given data.
476
+ */
477
+
478
+ const backendsFromMetadata = command.backendServiceMetadata;
479
+ const lbIndex = command.backingData.filtered.loadBalancerIndex;
480
+
481
+ const backendServices = command.loadBalancers.reduce((backendServices, lbName) => {
482
+ if (gceHttpLoadBalancerUtils.isHttpLoadBalancer(lbIndex[lbName])) {
483
+ backendServices[lbName] = _.intersection(lbIndex[lbName].backendServices, backendsFromMetadata);
484
+ }
485
+ return backendServices;
486
+ }, {});
487
+
488
+ if (Object.keys(backendServices).length > 0) {
489
+ command.backendServices = backendServices;
490
+ }
491
+ }
492
+
493
+ function refreshLoadBalancers(command, skipCommandReconfiguration) {
494
+ return loadBalancerReader.listLoadBalancers('gce').then(function (loadBalancers) {
495
+ command.backingData.loadBalancers = loadBalancers;
496
+ if (!skipCommandReconfiguration) {
497
+ configureLoadBalancerOptions(command);
498
+ }
499
+ });
500
+ }
501
+
502
+ function refreshHealthChecks(command, skipCommandReconfiguration) {
503
+ return cacheInitializer
504
+ .refreshCache('healthChecks')
505
+ .then(function () {
506
+ return gceHealthCheckReader.listHealthChecks();
507
+ })
508
+ .then(function (healthChecks) {
509
+ command.backingData.healthChecks = healthChecks;
510
+ if (!skipCommandReconfiguration) {
511
+ configureHealthChecks(command);
512
+ }
513
+ });
514
+ }
515
+
516
+ function configureSubnets(command) {
517
+ const result = { dirty: {} };
518
+ const filteredData = command.backingData.filtered;
519
+ if (command.region === null) {
520
+ return result;
521
+ }
522
+ filteredData.subnets = _.chain(command.backingData.subnets)
523
+ .filter({ account: command.credentials, network: command.network, region: command.region })
524
+ .map('id')
525
+ .value();
526
+
527
+ if (!_.chain(filteredData.subnets).includes(command.subnet).value()) {
528
+ command.subnet = '';
529
+ result.dirty.subnet = true;
530
+ }
531
+ return result;
532
+ }
533
+
534
+ function getSecurityGroups(command) {
535
+ let newSecurityGroups = command.backingData.securityGroups[command.credentials] || { gce: {} };
536
+ newSecurityGroups = _.filter(newSecurityGroups.gce.global, function (securityGroup) {
537
+ return securityGroup.network === command.network;
538
+ });
539
+ return _.chain(newSecurityGroups).sortBy('name').value();
540
+ }
541
+
542
+ function getXpnHostProjectIfAny(network) {
543
+ if (network && network.includes('/')) {
544
+ return network.split('/')[0] + '/';
545
+ } else {
546
+ return '';
547
+ }
548
+ }
549
+
550
+ function configureSecurityGroupOptions(command) {
551
+ const results = { dirty: {} };
552
+ const currentOptions = command.backingData.filtered.securityGroups;
553
+ const newSecurityGroups = getSecurityGroups(command);
554
+ if (currentOptions && command.securityGroups) {
555
+ // not initializing - we are actually changing groups
556
+ const currentGroupNames = command.securityGroups.map(function (groupId) {
557
+ const match = _.chain(currentOptions).find({ id: groupId }).value();
558
+ return match ? match.id : groupId;
559
+ });
560
+ const matchedGroups = command.securityGroups
561
+ .map(function (groupId) {
562
+ const securityGroup = _.chain(currentOptions).find({ id: groupId }).value();
563
+ return securityGroup ? securityGroup.id : null;
564
+ })
565
+ .map(function (groupName) {
566
+ return _.chain(newSecurityGroups).find({ id: groupName }).value();
567
+ })
568
+ .filter(function (group) {
569
+ return group;
570
+ });
571
+ command.securityGroups = _.map(matchedGroups, 'id');
572
+ const removed = _.xor(currentGroupNames, command.securityGroups);
573
+ if (removed.length) {
574
+ results.dirty.securityGroups = removed;
575
+ }
576
+ }
577
+
578
+ // Only include explicit firewall options in the pulldown list.
579
+ command.backingData.filtered.securityGroups = _.filter(newSecurityGroups, function (securityGroup) {
580
+ return !_.isEmpty(securityGroup.targetTags);
581
+ });
582
+
583
+ // Identify implicit firewalls so they can be optionally listed in a read-only state.
584
+ command.implicitSecurityGroups = _.filter(newSecurityGroups, function (securityGroup) {
585
+ return _.isEmpty(securityGroup.targetTags);
586
+ });
587
+
588
+ // Only include explicitly-selected firewalls in the body of the command.
589
+ const xpnHostProject = getXpnHostProjectIfAny(command.network);
590
+ const decoratedSecurityGroups = _.map(command.securityGroups, (sg) =>
591
+ !sg.startsWith(xpnHostProject) ? xpnHostProject + sg : sg,
592
+ );
593
+ command.securityGroups = _.difference(decoratedSecurityGroups, _.map(command.implicitSecurityGroups, 'id'));
594
+
595
+ return results;
596
+ }
597
+
598
+ function refreshSecurityGroups(command, skipCommandReconfiguration) {
599
+ return cacheInitializer.refreshCache('securityGroups').then(function () {
600
+ return securityGroupReader.getAllSecurityGroups().then(function (securityGroups) {
601
+ command.backingData.securityGroups = securityGroups;
602
+ if (!skipCommandReconfiguration) {
603
+ configureSecurityGroupOptions(command);
604
+ }
605
+ });
606
+ });
607
+ }
608
+
609
+ function getNetworkNames(command) {
610
+ return _.map(_.filter(command.backingData.networks, { account: command.credentials }), 'id');
611
+ }
612
+
613
+ function refreshNetworks(command) {
614
+ NetworkReader.listNetworksByProvider('gce').then(function (gceNetworks) {
615
+ command.backingData.networks = gceNetworks;
616
+ });
617
+ }
618
+
619
+ function refreshInstanceTypes(command) {
620
+ return cacheInitializer.refreshCache('instanceTypes').then(function () {
621
+ return gceInstanceTypeService.getAllTypesByRegion().then(function (instanceTypes) {
622
+ command.backingData.instanceTypes = instanceTypes;
623
+ configureInstanceTypes(command);
624
+ });
625
+ });
626
+ }
627
+
628
+ function attachEventHandlers(cmd) {
629
+ cmd.regionalChanged = function regionalChanged(command) {
630
+ const result = { dirty: {} };
631
+ const filteredData = command.backingData.filtered;
632
+ const defaults = GCEProviderSettings.defaults;
633
+ if (command.regional) {
634
+ command.zone = null;
635
+ configureDistributionPolicyTargetShape(command);
636
+ } else if (!command.zone) {
637
+ if (command.region === defaults.region) {
638
+ command.zone = defaults.zone;
639
+ } else {
640
+ command.zone = filteredData.zones[0];
641
+ }
642
+
643
+ angular.extend(result.dirty, configureZones(command).dirty);
644
+ }
645
+
646
+ command.viewState.dirty = command.viewState.dirty || {};
647
+ angular.extend(command.viewState.dirty, result.dirty);
648
+ return result;
649
+ };
650
+
651
+ cmd.regionChanged = function regionChanged(command) {
652
+ const result = { dirty: {} };
653
+ const filteredData = command.backingData.filtered;
654
+ angular.extend(result.dirty, configureSubnets(command).dirty);
655
+ if (command.region) {
656
+ angular.extend(result.dirty, configureInstanceTypes(command).dirty);
657
+ angular.extend(result.dirty, configureZones(command).dirty);
658
+ angular.extend(result.dirty, configureCpuPlatforms(command).dirty);
659
+ // TODO: Internal Load Balancers also need to be filtered by network.
660
+ angular.extend(result.dirty, configureLoadBalancerOptions(command).dirty);
661
+ angular.extend(result.dirty, configureImages(command).dirty);
662
+ } else {
663
+ filteredData.zones = null;
664
+ }
665
+
666
+ command.viewState.dirty = command.viewState.dirty || {};
667
+ angular.extend(command.viewState.dirty, result.dirty);
668
+ return result;
669
+ };
670
+
671
+ cmd.credentialsChanged = function credentialsChanged(command) {
672
+ const result = { dirty: {} };
673
+ const backingData = command.backingData;
674
+ if (command.credentials) {
675
+ const regions = backingData.credentialsKeyedByAccount[command.credentials].regions;
676
+ if (_.isArray(regions)) {
677
+ backingData.filtered.regions = _.map(regions, 'name');
678
+ } else {
679
+ // TODO(duftler): Remove this once we finish deprecating the old style regions/zones in clouddriver GCE credentials.
680
+ backingData.filtered.regions = _.keys(regions);
681
+ }
682
+ if (!backingData.filtered.regions.includes(command.region)) {
683
+ command.region = null;
684
+ result.dirty.region = true;
685
+ } else {
686
+ angular.extend(result.dirty, command.regionChanged(command).dirty);
687
+ }
688
+
689
+ backingData.filtered.networks = getNetworkNames(command);
690
+ if (!backingData.filtered.networks.includes(command.network)) {
691
+ command.network = null;
692
+ result.dirty.network = true;
693
+ } else {
694
+ angular.extend(result.dirty, command.networkChanged(command).dirty);
695
+ }
696
+
697
+ angular.extend(result.dirty, configureHealthChecks(command).dirty);
698
+ angular.extend(result.dirty, configureInstanceTypes(command).dirty);
699
+
700
+ configureDistributionPolicyTargetShape(command);
701
+ } else {
702
+ command.region = null;
703
+ }
704
+
705
+ command.viewState.dirty = command.viewState.dirty || {};
706
+ angular.extend(command.viewState.dirty, result.dirty);
707
+
708
+ return result;
709
+ };
710
+
711
+ cmd.networkChanged = function networkChanged(command) {
712
+ const result = { dirty: {} };
713
+
714
+ command.viewState.autoCreateSubnets = _.chain(command.backingData.networks)
715
+ .filter({ account: command.credentials, id: command.network })
716
+ .map('autoCreateSubnets')
717
+ .head()
718
+ .value();
719
+
720
+ command.viewState.subnets = _.chain(command.backingData.networks)
721
+ .filter({ account: command.credentials, id: command.network })
722
+ .map('subnets')
723
+ .head()
724
+ .value();
725
+
726
+ angular.extend(result.dirty, configureSubnets(command).dirty);
727
+ angular.extend(result.dirty, configureSecurityGroupOptions(command).dirty);
728
+
729
+ // TODO: Internal Load Balancers also need to be filtered by network.
730
+
731
+ command.viewState.dirty = command.viewState.dirty || {};
732
+ angular.extend(command.viewState.dirty, result.dirty);
733
+
734
+ return result;
735
+ };
736
+
737
+ cmd.zoneChanged = function zoneChanged(command) {
738
+ const result = { dirty: {} };
739
+ if (command.zone === undefined && !command.regional) {
740
+ result.dirty.zone = true;
741
+ }
742
+ command.viewState.dirty = command.viewState.dirty || {};
743
+ angular.extend(command.viewState.dirty, result.dirty);
744
+ angular.extend(command.viewState.dirty, configureInstanceTypes(command).dirty);
745
+ angular.extend(command.viewState.dirty, configureCpuPlatforms(command).dirty);
746
+ angular.extend(command.viewState.dirty, configureAccelerators(command).dirty);
747
+ return result;
748
+ };
749
+
750
+ cmd.selectZonesChanged = function selectZonesChanged(command) {
751
+ const result = { dirty: {} };
752
+ command.viewState.dirty = command.viewState.dirty || {};
753
+ angular.extend(command.viewState.dirty, result.dirty);
754
+ angular.extend(command.viewState.dirty, configureAccelerators(command).dirty);
755
+ return result;
756
+ };
757
+
758
+ cmd.customInstanceChanged = function customInstanceChanged(command) {
759
+ const result = { dirty: {} };
760
+
761
+ command.viewState.dirty = command.viewState.dirty || {};
762
+ angular.extend(result, command.viewState.dirty, configureCustomInstanceTypes(command).dirty);
763
+
764
+ return result;
765
+ };
766
+ }
767
+
768
+ return {
769
+ configureCommand,
770
+ configureInstanceTypes,
771
+ configureImages,
772
+ configureZones,
773
+ configureSubnets,
774
+ configureLoadBalancerOptions,
775
+ refreshLoadBalancers,
776
+ refreshSecurityGroups,
777
+ refreshInstanceTypes,
778
+ refreshHealthChecks,
779
+ };
780
+ },
781
+ ]);