@spinnaker/google 2026.2.2 → 2026.3.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 (548) hide show
  1. package/dist/autoHealingPolicy/GceAutoHealingPolicyEditor.d.ts +24 -0
  2. package/dist/autoHealingPolicy/index.d.ts +1 -0
  3. package/dist/autoscalingPolicy/GceAutoscalingPolicyEditor.d.ts +8 -0
  4. package/dist/autoscalingPolicy/GceAutoscalingPolicyWriter.d.ts +25 -0
  5. package/dist/autoscalingPolicy/IGceAutoscalingPolicy.d.ts +33 -2
  6. package/dist/autoscalingPolicy/index.d.ts +2 -0
  7. package/dist/cache/cacheConfigurer.service.d.ts +2 -2
  8. package/dist/certificate/certificate.reader.d.ts +1 -2
  9. package/dist/common/xpnNaming.gce.service.d.ts +4 -2
  10. package/dist/domain/autoHealingPolicy.d.ts +0 -5
  11. package/dist/domain/serverGroup.d.ts +24 -0
  12. package/dist/gce.module.d.ts +3 -1
  13. package/dist/healthCheck/healthCheck.read.service.d.ts +1 -2
  14. package/dist/image/ImageSelect.d.ts +0 -1
  15. package/dist/image/image.reader.d.ts +2 -2
  16. package/dist/index.d.ts +1 -1
  17. package/dist/index.js +1 -1
  18. package/dist/index.js.map +1 -1
  19. package/dist/instance/custom/customInstanceBuilder.gce.service.d.ts +17 -2
  20. package/dist/instance/details/GceInstanceDetails.d.ts +24 -0
  21. package/dist/instance/gceInstanceType.service.d.ts +3 -2
  22. package/dist/instance/gceMultiInstanceTask.transformer.d.ts +3 -2
  23. package/dist/loadBalancer/configure/choice/GceLoadBalancerChoiceModal.d.ts +34 -0
  24. package/dist/loadBalancer/configure/common/GceProxyLoadBalancerEditor.d.ts +36 -0
  25. package/dist/loadBalancer/configure/common/GceProxyLoadBalancerModal.d.ts +36 -0
  26. package/dist/loadBalancer/configure/common/gceLoadBalancerData.d.ts +47 -0
  27. package/dist/loadBalancer/configure/common/gceLoadBalancerModels.d.ts +106 -0
  28. package/dist/loadBalancer/configure/common/gceLoadBalancerSubmission.d.ts +10 -0
  29. package/dist/loadBalancer/configure/common/index.d.ts +4 -0
  30. package/dist/loadBalancer/configure/common/useGceLoadBalancerData.d.ts +5 -0
  31. package/dist/loadBalancer/configure/http/GceHttpLoadBalancerEditor.d.ts +33 -0
  32. package/dist/loadBalancer/configure/http/GceHttpLoadBalancerListenerEditor.d.ts +12 -0
  33. package/dist/loadBalancer/configure/http/GceHttpLoadBalancerModal.d.ts +37 -0
  34. package/dist/loadBalancer/configure/http/GceHttpLoadBalancerResourceEditors.d.ts +18 -0
  35. package/dist/loadBalancer/configure/http/GceHttpLoadBalancerRoutingEditor.d.ts +16 -0
  36. package/dist/loadBalancer/configure/network/GceNetworkLoadBalancerEditor.d.ts +30 -0
  37. package/dist/loadBalancer/configure/network/GceNetworkLoadBalancerModal.d.ts +58 -0
  38. package/dist/loadBalancer/details/gceLoadBalancerDetails.d.ts +36 -0
  39. package/dist/loadBalancer/httpLoadBalancerUtils.service.d.ts +0 -1
  40. package/dist/loadBalancer/loadBalancer.setTransformer.d.ts +1 -5
  41. package/dist/loadBalancer/loadBalancer.transformer.d.ts +3 -2
  42. package/dist/pipeline/stages/bake/gceBakeStage.d.ts +2 -2
  43. package/dist/pipeline/stages/cloneServerGroup/gceCloneServerGroupStage.d.ts +1 -2
  44. package/dist/pipeline/stages/destroyAsg/gceDestroyAsgStage.d.ts +1 -2
  45. package/dist/pipeline/stages/disableAsg/gceDisableAsgStage.d.ts +1 -2
  46. package/dist/pipeline/stages/disableCluster/gceDisableClusterStage.d.ts +1 -2
  47. package/dist/pipeline/stages/enableAsg/gceEnableAsgStage.d.ts +1 -2
  48. package/dist/pipeline/stages/findAmi/gceFindAmiStage.d.ts +1 -2
  49. package/dist/pipeline/stages/findImageFromTags/gceFindImageFromTagsStage.d.ts +1 -2
  50. package/dist/pipeline/stages/googleStageConfig.d.ts +40 -0
  51. package/dist/pipeline/stages/resizeAsg/gceResizeAsgStage.d.ts +1 -2
  52. package/dist/pipeline/stages/scaleDownCluster/gceScaleDownClusterStage.d.ts +1 -2
  53. package/dist/pipeline/stages/shrinkCluster/gceShrinkClusterStage.d.ts +1 -2
  54. package/dist/pipeline/stages/tagImage/gceTagImageStage.d.ts +1 -2
  55. package/dist/securityGroup/configure/GceSecurityGroupModal.d.ts +50 -0
  56. package/dist/securityGroup/details/GceSecurityGroupDetails.d.ts +12 -0
  57. package/dist/securityGroup/securityGroup.reader.d.ts +3 -2
  58. package/dist/securityGroup/securityGroup.transformer.d.ts +5 -2
  59. package/dist/serverGroup/configure/serverGroupCommandBuilder.service.d.ts +6 -2
  60. package/dist/serverGroup/configure/serverGroupConfiguration.service.d.ts +8 -0
  61. package/dist/serverGroup/configure/wizard/GceCloneServerGroupModal.d.ts +49 -0
  62. package/dist/serverGroup/configure/wizard/GceServerGroupWizard.helpers.d.ts +4 -0
  63. package/dist/serverGroup/configure/wizard/GceServerGroupWizard.types.d.ts +113 -0
  64. package/dist/serverGroup/configure/wizard/GceServerGroupWizardAdapter.d.ts +16 -0
  65. package/dist/serverGroup/configure/wizard/GceServerGroupWizardPage.d.ts +20 -0
  66. package/dist/serverGroup/configure/wizard/customInstance/GceCustomInstanceBuilder.d.ts +3 -0
  67. package/dist/serverGroup/configure/wizard/hiddenMetadataKeys.value.d.ts +1 -2
  68. package/dist/serverGroup/configure/wizard/index.d.ts +5 -0
  69. package/dist/serverGroup/configure/wizard/pages/AdvancedSettings.d.ts +20 -0
  70. package/dist/serverGroup/configure/wizard/pages/GceServerGroupFirewalls.d.ts +10 -0
  71. package/dist/serverGroup/configure/wizard/pages/GceServerGroupLoadBalancers.d.ts +21 -0
  72. package/dist/serverGroup/configure/wizard/pages/Policies.d.ts +14 -0
  73. package/dist/serverGroup/configure/wizard/pages/ServerGroupBasicSettings.d.ts +13 -0
  74. package/dist/serverGroup/configure/wizard/pages/ServerGroupCapacity.d.ts +35 -0
  75. package/dist/serverGroup/configure/wizard/pages/ServerGroupImageSettings.d.ts +11 -0
  76. package/dist/serverGroup/configure/wizard/pages/ServerGroupInstanceType.d.ts +29 -0
  77. package/dist/serverGroup/configure/wizard/pages/index.d.ts +8 -0
  78. package/dist/serverGroup/configure/wizard/securityGroups/tagManager.service.d.ts +17 -2
  79. package/dist/serverGroup/configure/wizard/zones/GceInstanceFlexibilityConfigurer.d.ts +19 -0
  80. package/dist/serverGroup/details/GceInstanceFlexibilityPolicyDetails.d.ts +6 -0
  81. package/dist/serverGroup/details/autoHealingPolicy/GceAutoHealingPolicyDetails.d.ts +11 -0
  82. package/dist/serverGroup/details/autoHealingPolicy/index.d.ts +2 -0
  83. package/dist/serverGroup/details/autoHealingPolicy/modal/GceUpsertAutoHealingPolicyModal.d.ts +21 -0
  84. package/dist/serverGroup/details/autoscalingPolicy/GceAutoscalingPolicyDetails.d.ts +12 -0
  85. package/dist/serverGroup/details/autoscalingPolicy/index.d.ts +2 -0
  86. package/dist/serverGroup/details/autoscalingPolicy/modal/GceUpsertAutoscalingPolicyModal.d.ts +26 -0
  87. package/dist/serverGroup/details/gceServerGroupDetails.d.ts +32 -0
  88. package/dist/serverGroup/details/resize/GceResizeServerGroupModal.d.ts +60 -0
  89. package/dist/serverGroup/details/rollback/GceRollbackServerGroupModal.d.ts +44 -0
  90. package/dist/serverGroup/details/stateful/StatefulMIGService.d.ts +2 -2
  91. package/dist/serverGroup/serverGroup.transformer.d.ts +2 -2
  92. package/dist/subnet/subnet.renderer.d.ts +4 -2
  93. package/dist/validation/ApplicationNameValidator.d.ts +6 -0
  94. package/package.json +3 -12
  95. package/src/autoHealingPolicy/GceAutoHealingPolicyEditor.spec.tsx +133 -0
  96. package/src/autoHealingPolicy/GceAutoHealingPolicyEditor.tsx +143 -0
  97. package/src/autoHealingPolicy/index.ts +1 -0
  98. package/src/autoscalingPolicy/GceAutoscalingPolicyEditor.spec.tsx +241 -0
  99. package/src/autoscalingPolicy/GceAutoscalingPolicyEditor.tsx +479 -0
  100. package/src/autoscalingPolicy/GceAutoscalingPolicyWriter.spec.ts +135 -0
  101. package/src/autoscalingPolicy/GceAutoscalingPolicyWriter.ts +101 -0
  102. package/src/autoscalingPolicy/IGceAutoscalingPolicy.ts +37 -2
  103. package/src/autoscalingPolicy/index.ts +2 -0
  104. package/src/cache/cacheConfigurer.service.js +30 -22
  105. package/src/certificate/certificate.reader.ts +1 -6
  106. package/src/common/xpnNaming.gce.service.js +4 -12
  107. package/src/domain/autoHealingPolicy.ts +0 -6
  108. package/src/domain/serverGroup.ts +25 -0
  109. package/src/gce.module.spec.ts +638 -0
  110. package/src/gce.module.ts +106 -126
  111. package/src/healthCheck/healthCheck.read.service.ts +1 -5
  112. package/src/help/gce.help.ts +3 -7
  113. package/src/image/ImageSelect.tsx +0 -15
  114. package/src/image/image.reader.spec.ts +10 -0
  115. package/src/image/image.reader.ts +3 -3
  116. package/src/index.ts +1 -1
  117. package/src/instance/custom/customInstanceBuilder.gce.service.js +123 -141
  118. package/src/instance/details/GceInstanceDetails.spec.tsx +354 -0
  119. package/src/instance/details/GceInstanceDetails.tsx +419 -0
  120. package/src/instance/gceInstanceType.service.js +6 -11
  121. package/src/instance/gceMultiInstanceTask.transformer.js +11 -23
  122. package/src/loadBalancer/configure/choice/GceLoadBalancerChoiceModal.less +17 -0
  123. package/src/loadBalancer/configure/choice/GceLoadBalancerChoiceModal.spec.tsx +279 -0
  124. package/src/loadBalancer/configure/choice/GceLoadBalancerChoiceModal.tsx +169 -0
  125. package/src/loadBalancer/configure/common/GceProxyLoadBalancerEditor.spec.tsx +353 -0
  126. package/src/loadBalancer/configure/common/GceProxyLoadBalancerEditor.tsx +503 -0
  127. package/src/loadBalancer/configure/common/GceProxyLoadBalancerModal.spec.tsx +313 -0
  128. package/src/loadBalancer/configure/common/GceProxyLoadBalancerModal.tsx +241 -0
  129. package/src/loadBalancer/configure/common/gceLoadBalancerData.spec.ts +117 -0
  130. package/src/loadBalancer/configure/common/gceLoadBalancerData.ts +191 -0
  131. package/src/loadBalancer/configure/common/gceLoadBalancerModels.spec.ts +409 -0
  132. package/src/loadBalancer/configure/common/gceLoadBalancerModels.ts +534 -0
  133. package/src/loadBalancer/configure/common/gceLoadBalancerSubmission.spec.ts +297 -0
  134. package/src/loadBalancer/configure/common/gceLoadBalancerSubmission.ts +127 -0
  135. package/src/loadBalancer/configure/common/index.spec.ts +17 -0
  136. package/src/loadBalancer/configure/common/index.ts +4 -0
  137. package/src/loadBalancer/configure/common/useGceLoadBalancerData.spec.tsx +78 -0
  138. package/src/loadBalancer/configure/common/useGceLoadBalancerData.ts +34 -0
  139. package/src/loadBalancer/configure/http/GceHttpLoadBalancerEditor.spec.tsx +472 -0
  140. package/src/loadBalancer/configure/http/GceHttpLoadBalancerEditor.tsx +586 -0
  141. package/src/loadBalancer/configure/http/GceHttpLoadBalancerListenerEditor.spec.tsx +94 -0
  142. package/src/loadBalancer/configure/http/GceHttpLoadBalancerListenerEditor.tsx +153 -0
  143. package/src/loadBalancer/configure/http/GceHttpLoadBalancerModal.spec.tsx +326 -0
  144. package/src/loadBalancer/configure/http/GceHttpLoadBalancerModal.tsx +217 -0
  145. package/src/loadBalancer/configure/http/GceHttpLoadBalancerResourceEditors.spec.tsx +86 -0
  146. package/src/loadBalancer/configure/http/GceHttpLoadBalancerResourceEditors.tsx +284 -0
  147. package/src/loadBalancer/configure/http/GceHttpLoadBalancerRoutingEditor.spec.tsx +82 -0
  148. package/src/loadBalancer/configure/http/GceHttpLoadBalancerRoutingEditor.tsx +174 -0
  149. package/src/loadBalancer/configure/http/httpLoadBalancerWizard.component.less +31 -12
  150. package/src/loadBalancer/configure/network/GceNetworkLoadBalancerEditor.spec.tsx +175 -0
  151. package/src/loadBalancer/configure/network/GceNetworkLoadBalancerEditor.tsx +315 -0
  152. package/src/loadBalancer/configure/network/GceNetworkLoadBalancerModal.spec.tsx +303 -0
  153. package/src/loadBalancer/configure/network/GceNetworkLoadBalancerModal.tsx +368 -0
  154. package/src/loadBalancer/details/gceLoadBalancerDetails.spec.tsx +65 -0
  155. package/src/loadBalancer/details/gceLoadBalancerDetails.tsx +456 -0
  156. package/src/loadBalancer/httpLoadBalancerUtils.service.ts +3 -6
  157. package/src/loadBalancer/loadBalancer.setTransformer.ts +3 -12
  158. package/src/loadBalancer/loadBalancer.transformer.js +5 -9
  159. package/src/pipeline/stages/bake/gceBakeStage.js +362 -155
  160. package/src/pipeline/stages/cloneServerGroup/gceCloneServerGroupStage.js +17 -83
  161. package/src/pipeline/stages/destroyAsg/gceDestroyAsgStage.js +24 -62
  162. package/src/pipeline/stages/disableAsg/gceDisableAsgStage.js +22 -68
  163. package/src/pipeline/stages/disableCluster/gceDisableClusterStage.js +21 -79
  164. package/src/pipeline/stages/enableAsg/gceEnableAsgStage.js +17 -65
  165. package/src/pipeline/stages/findAmi/gceFindAmiStage.js +17 -79
  166. package/src/pipeline/stages/findImageFromTags/gceFindImageFromTagsStage.js +121 -35
  167. package/src/pipeline/stages/googleStageConfig.js +580 -0
  168. package/src/pipeline/stages/googleStageConfig.spec.js +44 -0
  169. package/src/pipeline/stages/resizeAsg/gceResizeAsgStage.js +26 -125
  170. package/src/pipeline/stages/scaleDownCluster/gceScaleDownClusterStage.js +24 -78
  171. package/src/pipeline/stages/shrinkCluster/gceShrinkClusterStage.js +19 -73
  172. package/src/pipeline/stages/tagImage/gceTagImageStage.js +165 -36
  173. package/src/securityGroup/configure/GceSecurityGroupModal.spec.tsx +381 -0
  174. package/src/securityGroup/configure/GceSecurityGroupModal.tsx +543 -0
  175. package/src/securityGroup/details/GceSecurityGroupDetails.spec.tsx +232 -0
  176. package/src/securityGroup/details/GceSecurityGroupDetails.tsx +261 -0
  177. package/src/securityGroup/securityGroup.reader.js +3 -11
  178. package/src/securityGroup/securityGroup.transformer.js +8 -15
  179. package/src/serverGroup/configure/serverGroupCommandBuilder.service.js +563 -556
  180. package/src/serverGroup/configure/serverGroupCommandBuilder.service.spec.js +238 -0
  181. package/src/serverGroup/configure/serverGroupConfiguration.service.js +621 -653
  182. package/src/serverGroup/configure/serverGroupConfiguration.service.spec.js +9 -0
  183. package/src/serverGroup/configure/wizard/GceCloneServerGroupModal.spec.tsx +1228 -0
  184. package/src/serverGroup/configure/wizard/GceCloneServerGroupModal.tsx +824 -0
  185. package/src/serverGroup/configure/wizard/GceServerGroupWizard.helpers.ts +51 -0
  186. package/src/serverGroup/configure/wizard/GceServerGroupWizard.types.ts +176 -0
  187. package/src/serverGroup/configure/wizard/GceServerGroupWizardAdapter.ts +115 -0
  188. package/src/serverGroup/configure/wizard/GceServerGroupWizardPage.spec.tsx +460 -0
  189. package/src/serverGroup/configure/wizard/GceServerGroupWizardPage.tsx +285 -0
  190. package/src/serverGroup/configure/wizard/customInstance/GceCustomInstanceBuilder.spec.tsx +125 -0
  191. package/src/serverGroup/configure/wizard/customInstance/GceCustomInstanceBuilder.tsx +127 -0
  192. package/src/serverGroup/configure/wizard/hiddenMetadataKeys.value.js +2 -7
  193. package/src/serverGroup/configure/wizard/index.ts +5 -0
  194. package/src/serverGroup/configure/wizard/pages/AdvancedSettings.spec.tsx +339 -0
  195. package/src/serverGroup/configure/wizard/pages/AdvancedSettings.tsx +871 -0
  196. package/src/serverGroup/configure/wizard/pages/GceServerGroupFirewalls.spec.tsx +196 -0
  197. package/src/serverGroup/configure/wizard/pages/GceServerGroupFirewalls.tsx +278 -0
  198. package/src/serverGroup/configure/wizard/pages/GceServerGroupLoadBalancers.spec.tsx +643 -0
  199. package/src/serverGroup/configure/wizard/pages/GceServerGroupLoadBalancers.tsx +851 -0
  200. package/src/serverGroup/configure/wizard/pages/Policies.spec.tsx +317 -0
  201. package/src/serverGroup/configure/wizard/pages/Policies.tsx +293 -0
  202. package/src/serverGroup/configure/wizard/pages/ServerGroupBasicSettings.spec.tsx +418 -0
  203. package/src/serverGroup/configure/wizard/pages/ServerGroupBasicSettings.tsx +247 -0
  204. package/src/serverGroup/configure/wizard/pages/ServerGroupCapacity.spec.tsx +659 -0
  205. package/src/serverGroup/configure/wizard/pages/ServerGroupCapacity.tsx +470 -0
  206. package/src/serverGroup/configure/wizard/pages/ServerGroupImageSettings.spec.tsx +146 -0
  207. package/src/serverGroup/configure/wizard/pages/ServerGroupImageSettings.tsx +163 -0
  208. package/src/serverGroup/configure/wizard/pages/ServerGroupInstanceType.spec.tsx +536 -0
  209. package/src/serverGroup/configure/wizard/pages/ServerGroupInstanceType.tsx +728 -0
  210. package/src/serverGroup/configure/wizard/pages/index.ts +8 -0
  211. package/src/serverGroup/configure/wizard/securityGroups/tagManager.service.js +186 -182
  212. package/src/serverGroup/configure/wizard/zones/GceInstanceFlexibilityConfigurer.spec.tsx +390 -0
  213. package/src/serverGroup/configure/wizard/zones/GceInstanceFlexibilityConfigurer.tsx +310 -0
  214. package/src/serverGroup/details/GceInstanceFlexibilityPolicyDetails.spec.tsx +32 -0
  215. package/src/serverGroup/details/GceInstanceFlexibilityPolicyDetails.tsx +36 -0
  216. package/src/serverGroup/details/autoHealingPolicy/GceAutoHealingPolicyDetails.spec.tsx +192 -0
  217. package/src/serverGroup/details/autoHealingPolicy/GceAutoHealingPolicyDetails.tsx +83 -0
  218. package/src/serverGroup/details/autoHealingPolicy/index.ts +2 -0
  219. package/src/serverGroup/details/autoHealingPolicy/modal/GceUpsertAutoHealingPolicyModal.spec.tsx +94 -0
  220. package/src/serverGroup/details/autoHealingPolicy/modal/GceUpsertAutoHealingPolicyModal.tsx +102 -0
  221. package/src/serverGroup/details/autoscalingPolicy/GceAutoscalingPolicyDetails.spec.tsx +200 -0
  222. package/src/serverGroup/details/autoscalingPolicy/GceAutoscalingPolicyDetails.tsx +153 -0
  223. package/src/serverGroup/details/autoscalingPolicy/index.ts +2 -0
  224. package/src/serverGroup/details/autoscalingPolicy/modal/GceUpsertAutoscalingPolicyModal.spec.tsx +227 -0
  225. package/src/serverGroup/details/autoscalingPolicy/modal/GceUpsertAutoscalingPolicyModal.tsx +196 -0
  226. package/src/serverGroup/details/gceServerGroupDetails.spec.tsx +290 -0
  227. package/src/serverGroup/details/gceServerGroupDetails.tsx +372 -0
  228. package/src/serverGroup/details/resize/GceResizeServerGroupModal.spec.tsx +390 -0
  229. package/src/serverGroup/details/resize/GceResizeServerGroupModal.tsx +346 -0
  230. package/src/serverGroup/details/rollback/GceRollbackServerGroupModal.spec.tsx +168 -0
  231. package/src/serverGroup/details/rollback/GceRollbackServerGroupModal.tsx +196 -0
  232. package/src/serverGroup/details/stateful/UpdateBootImageButton.tsx +1 -1
  233. package/src/serverGroup/serverGroup.transformer.js +73 -54
  234. package/src/serverGroup/serverGroup.transformer.spec.js +90 -15
  235. package/src/subnet/subnet.renderer.js +10 -15
  236. package/src/validation/ApplicationNameValidator.spec.ts +47 -0
  237. package/src/validation/ApplicationNameValidator.ts +89 -0
  238. package/dist/address/address.reader.d.ts +0 -15
  239. package/dist/autoscalingPolicy/autoscalingPolicy.write.service.d.ts +0 -2
  240. package/dist/autoscalingPolicy/components/basicSettings/basicSettings.component.d.ts +0 -2
  241. package/dist/autoscalingPolicy/components/metricSettings/GcePredictiveAutoscaling.d.ts +0 -1
  242. package/dist/autoscalingPolicy/components/metricSettings/metricSettings.component.d.ts +0 -2
  243. package/dist/autoscalingPolicy/components/scalingSchedules/scalingSchedules.component.d.ts +0 -2
  244. package/dist/autoscalingPolicy/components/scalingSchedules/timeZoneSelect.d.ts +0 -13
  245. package/dist/backendService/backendService.reader.d.ts +0 -2
  246. package/dist/cache/cacheRefresh.component.d.ts +0 -1
  247. package/dist/common/footer.directive.d.ts +0 -2
  248. package/dist/gceNetworkSelectField.directive.d.ts +0 -2
  249. package/dist/gceRegionSelectField.directive.d.ts +0 -2
  250. package/dist/instance/custom/customInstance.filter.d.ts +0 -2
  251. package/dist/instance/details/instance.details.controller.d.ts +0 -2
  252. package/dist/interceptors/iap.interceptor.d.ts +0 -8
  253. package/dist/loadBalancer/configure/choice/gceLoadBalancerChoice.modal.d.ts +0 -1
  254. package/dist/loadBalancer/configure/choice/gceLoadBalancerPipelineModal.d.ts +0 -9
  255. package/dist/loadBalancer/configure/choice/loadBalancerTypeToWizardMap.constant.d.ts +0 -10
  256. package/dist/loadBalancer/configure/common/addressSelector.component.d.ts +0 -1
  257. package/dist/loadBalancer/configure/common/commonLoadBalancer.controller.d.ts +0 -17
  258. package/dist/loadBalancer/configure/common/commonLoadBalancerCommandBuilder.service.d.ts +0 -23
  259. package/dist/loadBalancer/configure/common/healthCheck.component.d.ts +0 -1
  260. package/dist/loadBalancer/configure/http/backendService/backendService.component.d.ts +0 -2
  261. package/dist/loadBalancer/configure/http/basicSettings/basicSettings.component.d.ts +0 -2
  262. package/dist/loadBalancer/configure/http/commandBuilder.service.d.ts +0 -2
  263. package/dist/loadBalancer/configure/http/createHttpLoadBalancer.controller.d.ts +0 -2
  264. package/dist/loadBalancer/configure/http/healthCheck/healthCheck.component.d.ts +0 -2
  265. package/dist/loadBalancer/configure/http/hostRule/hostRule.component.d.ts +0 -2
  266. package/dist/loadBalancer/configure/http/httpLoadBalancer.write.service.d.ts +0 -2
  267. package/dist/loadBalancer/configure/http/listeners/listener.component.d.ts +0 -2
  268. package/dist/loadBalancer/configure/http/pathRule/pathRule.component.d.ts +0 -2
  269. package/dist/loadBalancer/configure/http/transformer.service.d.ts +0 -2
  270. package/dist/loadBalancer/configure/internal/gceCreateInternalLoadBalancer.controller.d.ts +0 -1
  271. package/dist/loadBalancer/configure/internalhttp/createInternalHttpLoadBalancer.controller.d.ts +0 -3
  272. package/dist/loadBalancer/configure/network/createLoadBalancer.controller.d.ts +0 -2
  273. package/dist/loadBalancer/configure/ssl/gceCreateSslLoadBalancer.controller.d.ts +0 -1
  274. package/dist/loadBalancer/configure/tcp/gceCreateTcpLoadBalancer.controller.d.ts +0 -1
  275. package/dist/loadBalancer/details/backendService/backendService.component.d.ts +0 -1
  276. package/dist/loadBalancer/details/backendService/sessionAffinity.filter.d.ts +0 -1
  277. package/dist/loadBalancer/details/deleteModal/deleteModal.controller.d.ts +0 -1
  278. package/dist/loadBalancer/details/healthCheck/healthCheck.component.d.ts +0 -2
  279. package/dist/loadBalancer/details/hostAndPathRules/hostAndPathRules.controller.d.ts +0 -2
  280. package/dist/loadBalancer/details/hostAndPathRules/hostAndPathRules.service.d.ts +0 -2
  281. package/dist/loadBalancer/details/hostAndPathRules/hostAndPathRulesButton.component.d.ts +0 -2
  282. package/dist/loadBalancer/details/loadBalancerDetail.controller.d.ts +0 -2
  283. package/dist/loadBalancer/details/loadBalancerType/loadBalancerType.component.d.ts +0 -2
  284. package/dist/pipeline/stages/bake/bakeExecutionDetails.controller.d.ts +0 -2
  285. package/dist/securityGroup/clone/cloneSecurityGroup.controller.d.ts +0 -2
  286. package/dist/securityGroup/configure/ConfigSecurityGroupMixin.controller.d.ts +0 -2
  287. package/dist/securityGroup/configure/createSecurityGroup.controller.d.ts +0 -2
  288. package/dist/securityGroup/configure/editSecurityGroup.controller.d.ts +0 -2
  289. package/dist/securityGroup/details/securityGroupDetail.controller.d.ts +0 -2
  290. package/dist/securityGroup/securityGroupHelpText.service.d.ts +0 -13
  291. package/dist/serverGroup/configure/serverGroup.configure.gce.module.d.ts +0 -2
  292. package/dist/serverGroup/configure/wizard/advancedSettings/GceAcceleratorConfigurer.d.ts +0 -16
  293. package/dist/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.d.ts +0 -2
  294. package/dist/serverGroup/configure/wizard/advancedSettings/diskConfigurer.component.d.ts +0 -1
  295. package/dist/serverGroup/configure/wizard/autoHealingPolicy/autoHealingPolicySelector.component.d.ts +0 -1
  296. package/dist/serverGroup/configure/wizard/autoScalingPolicy/autoScalingPolicySelector.component.d.ts +0 -1
  297. package/dist/serverGroup/configure/wizard/capacity/advancedCapacitySelector.component.d.ts +0 -2
  298. package/dist/serverGroup/configure/wizard/capacity/simpleCapacitySelector.component.d.ts +0 -2
  299. package/dist/serverGroup/configure/wizard/cloneServerGroup.gce.controller.d.ts +0 -2
  300. package/dist/serverGroup/configure/wizard/customInstance/customInstanceConfigurer.component.d.ts +0 -1
  301. package/dist/serverGroup/configure/wizard/loadBalancers/elSevenOptions/backendServiceSelector.component.d.ts +0 -2
  302. package/dist/serverGroup/configure/wizard/loadBalancers/elSevenOptions/elSevenOptionsGenerator.component.d.ts +0 -2
  303. package/dist/serverGroup/configure/wizard/loadBalancers/loadBalancerSelector.directive.d.ts +0 -2
  304. package/dist/serverGroup/configure/wizard/loadBalancingPolicy/loadBalancingPolicySelector.component.d.ts +0 -2
  305. package/dist/serverGroup/configure/wizard/location/basicSettings.controller.d.ts +0 -2
  306. package/dist/serverGroup/configure/wizard/securityGroups/securityGroupSelector.directive.d.ts +0 -2
  307. package/dist/serverGroup/configure/wizard/securityGroups/securityGroupsRemoved.directive.d.ts +0 -2
  308. package/dist/serverGroup/configure/wizard/securityGroups/tagSelector.component.d.ts +0 -2
  309. package/dist/serverGroup/configure/wizard/securityGroups/tagSelectorGenerator.component.d.ts +0 -2
  310. package/dist/serverGroup/configure/wizard/zones/regionalSelector.directive.d.ts +0 -2
  311. package/dist/serverGroup/configure/wizard/zones/targetShapeSelector.directive.d.ts +0 -1
  312. package/dist/serverGroup/configure/wizard/zones/zoneSelector.directive.d.ts +0 -2
  313. package/dist/serverGroup/details/ServerGroupDiskDescriptions.d.ts +0 -1
  314. package/dist/serverGroup/details/autoHealingPolicy/addAutoHealingPolicyButton.component.d.ts +0 -1
  315. package/dist/serverGroup/details/autoHealingPolicy/autoHealingPolicy.component.d.ts +0 -1
  316. package/dist/serverGroup/details/autoHealingPolicy/modal/upsertAutoHealingPolicy.modal.controller.d.ts +0 -2
  317. package/dist/serverGroup/details/autoscalingPolicy/addAutoscalingPolicyButton.component.d.ts +0 -2
  318. package/dist/serverGroup/details/autoscalingPolicy/autoscalingPolicy.directive.d.ts +0 -2
  319. package/dist/serverGroup/details/autoscalingPolicy/modal/GceScaleInControls.d.ts +0 -1
  320. package/dist/serverGroup/details/autoscalingPolicy/modal/upsertAutoscalingPolicy.modal.controller.d.ts +0 -2
  321. package/dist/serverGroup/details/resize/resizeAutoscalingPolicy.component.d.ts +0 -2
  322. package/dist/serverGroup/details/resize/resizeCapacity.component.d.ts +0 -2
  323. package/dist/serverGroup/details/resize/resizeServerGroup.controller.d.ts +0 -2
  324. package/dist/serverGroup/details/rollback/rollbackServerGroup.controller.d.ts +0 -2
  325. package/dist/serverGroup/details/serverGroup.details.gce.module.d.ts +0 -2
  326. package/dist/serverGroup/details/serverGroupDetails.gce.controller.d.ts +0 -2
  327. package/dist/subnet/subnetSelectField.directive.d.ts +0 -2
  328. package/dist/validation/applicationName.validator.d.ts +0 -2
  329. package/src/address/address.reader.ts +0 -61
  330. package/src/applicationProviderFields/gceFields.html +0 -13
  331. package/src/autoscalingPolicy/autoscalingPolicy.write.service.js +0 -83
  332. package/src/autoscalingPolicy/components/basicSettings/basicSettings.component.html +0 -71
  333. package/src/autoscalingPolicy/components/basicSettings/basicSettings.component.js +0 -20
  334. package/src/autoscalingPolicy/components/metricSettings/GcePredictiveAutoscaling.tsx +0 -54
  335. package/src/autoscalingPolicy/components/metricSettings/metricSettings.component.html +0 -208
  336. package/src/autoscalingPolicy/components/metricSettings/metricSettings.component.js +0 -108
  337. package/src/autoscalingPolicy/components/scalingSchedules/scalingSchedules.component.html +0 -84
  338. package/src/autoscalingPolicy/components/scalingSchedules/scalingSchedules.component.js +0 -61
  339. package/src/autoscalingPolicy/components/scalingSchedules/timeZoneSelect.tsx +0 -63
  340. package/src/backendService/backendService.reader.js +0 -28
  341. package/src/cache/cacheRefresh.component.html +0 -17
  342. package/src/cache/cacheRefresh.component.ts +0 -53
  343. package/src/cache/cacheRefreshTooltip.html +0 -3
  344. package/src/common/footer.directive.html +0 -7
  345. package/src/common/footer.directive.js +0 -22
  346. package/src/gceNetworkSelectField.directive.js +0 -22
  347. package/src/gceRegionSelectField.directive.js +0 -22
  348. package/src/instance/custom/customInstance.filter.js +0 -26
  349. package/src/instance/details/instance.details.controller.js +0 -518
  350. package/src/instance/details/instance.details.controller.spec.js +0 -27
  351. package/src/instance/details/instanceDetails.html +0 -248
  352. package/src/instance/gceInstanceType.service.spec.js +0 -19
  353. package/src/interceptors/iap.interceptor.ts +0 -36
  354. package/src/loadBalancer/configure/choice/gceLoadBalancerChoice.modal.html +0 -33
  355. package/src/loadBalancer/configure/choice/gceLoadBalancerChoice.modal.spec.js +0 -66
  356. package/src/loadBalancer/configure/choice/gceLoadBalancerChoice.modal.ts +0 -64
  357. package/src/loadBalancer/configure/choice/gceLoadBalancerPipelineModal.ts +0 -47
  358. package/src/loadBalancer/configure/choice/loadBalancerTypeToWizardMap.constant.ts +0 -58
  359. package/src/loadBalancer/configure/common/addressSelector.component.ts +0 -47
  360. package/src/loadBalancer/configure/common/commonAdvancedSettingsPage.html +0 -32
  361. package/src/loadBalancer/configure/common/commonCreateLoadBalancer.html +0 -41
  362. package/src/loadBalancer/configure/common/commonEditLoadBalancer.html +0 -38
  363. package/src/loadBalancer/configure/common/commonHealthCheckPage.html +0 -16
  364. package/src/loadBalancer/configure/common/commonLoadBalancer.controller.ts +0 -56
  365. package/src/loadBalancer/configure/common/commonLoadBalancerCommandBuilder.service.ts +0 -87
  366. package/src/loadBalancer/configure/common/healthCheck.component.html +0 -179
  367. package/src/loadBalancer/configure/common/healthCheck.component.ts +0 -82
  368. package/src/loadBalancer/configure/gceL4LoadBalancerPipeline.spec.js +0 -143
  369. package/src/loadBalancer/configure/http/backendService/backendService.component.html +0 -157
  370. package/src/loadBalancer/configure/http/backendService/backendService.component.js +0 -80
  371. package/src/loadBalancer/configure/http/backendService/backendServices.html +0 -57
  372. package/src/loadBalancer/configure/http/basicSettings/basicSettings.component.html +0 -105
  373. package/src/loadBalancer/configure/http/basicSettings/basicSettings.component.js +0 -46
  374. package/src/loadBalancer/configure/http/basicSettings/basicSettings.html +0 -6
  375. package/src/loadBalancer/configure/http/commandBuilder.service.js +0 -404
  376. package/src/loadBalancer/configure/http/createHttpLoadBalancer.controller.js +0 -184
  377. package/src/loadBalancer/configure/http/createHttpLoadBalancer.controller.spec.js +0 -96
  378. package/src/loadBalancer/configure/http/createHttpLoadBalancer.html +0 -39
  379. package/src/loadBalancer/configure/http/defaultService/defaultService.html +0 -24
  380. package/src/loadBalancer/configure/http/editHttpLoadBalancer.html +0 -36
  381. package/src/loadBalancer/configure/http/healthCheck/healthCheck.component.html +0 -180
  382. package/src/loadBalancer/configure/http/healthCheck/healthCheck.component.js +0 -69
  383. package/src/loadBalancer/configure/http/healthCheck/healthChecks.html +0 -55
  384. package/src/loadBalancer/configure/http/hostRule/hostRule.component.html +0 -60
  385. package/src/loadBalancer/configure/http/hostRule/hostRule.component.js +0 -35
  386. package/src/loadBalancer/configure/http/hostRule/hostRules.html +0 -16
  387. package/src/loadBalancer/configure/http/httpLoadBalancer.write.service.js +0 -56
  388. package/src/loadBalancer/configure/http/listeners/listener.component.html +0 -245
  389. package/src/loadBalancer/configure/http/listeners/listener.component.js +0 -164
  390. package/src/loadBalancer/configure/http/listeners/listener.component.spec.js +0 -125
  391. package/src/loadBalancer/configure/http/listeners/listeners.html +0 -17
  392. package/src/loadBalancer/configure/http/pathRule/pathRule.component.html +0 -51
  393. package/src/loadBalancer/configure/http/pathRule/pathRule.component.js +0 -16
  394. package/src/loadBalancer/configure/http/transformer.service.js +0 -191
  395. package/src/loadBalancer/configure/http/transformer.service.spec.js +0 -182
  396. package/src/loadBalancer/configure/internal/createLoadBalancerProperties.html +0 -98
  397. package/src/loadBalancer/configure/internal/gceCreateInternalLoadBalancer.controller.ts +0 -284
  398. package/src/loadBalancer/configure/internal/listener.html +0 -41
  399. package/src/loadBalancer/configure/internalhttp/createInternalHttpLoadBalancer.controller.spec.js +0 -89
  400. package/src/loadBalancer/configure/internalhttp/createInternalHttpLoadBalancer.controller.ts +0 -196
  401. package/src/loadBalancer/configure/network/advancedSettings.html +0 -54
  402. package/src/loadBalancer/configure/network/createLoadBalancer.controller.js +0 -240
  403. package/src/loadBalancer/configure/network/createLoadBalancer.controller.spec.js +0 -118
  404. package/src/loadBalancer/configure/network/createLoadBalancer.html +0 -25
  405. package/src/loadBalancer/configure/network/createLoadBalancerProperties.html +0 -86
  406. package/src/loadBalancer/configure/network/editLoadBalancer.html +0 -29
  407. package/src/loadBalancer/configure/network/healthCheck.html +0 -36
  408. package/src/loadBalancer/configure/network/listeners.html +0 -55
  409. package/src/loadBalancer/configure/ssl/backendService.html +0 -31
  410. package/src/loadBalancer/configure/ssl/createLoadBalancerProperties.html +0 -86
  411. package/src/loadBalancer/configure/ssl/gceCreateSslLoadBalancer.controller.ts +0 -244
  412. package/src/loadBalancer/configure/ssl/listener.html +0 -43
  413. package/src/loadBalancer/configure/tcp/backendService.html +0 -31
  414. package/src/loadBalancer/configure/tcp/createLoadBalancerProperties.html +0 -86
  415. package/src/loadBalancer/configure/tcp/gceCreateTcpLoadBalancer.controller.ts +0 -234
  416. package/src/loadBalancer/configure/tcp/listener.html +0 -15
  417. package/src/loadBalancer/details/backendService/backendService.component.ts +0 -23
  418. package/src/loadBalancer/details/backendService/sessionAffinity.filter.ts +0 -11
  419. package/src/loadBalancer/details/deleteModal/deleteModal.controller.ts +0 -105
  420. package/src/loadBalancer/details/deleteModal/deleteModal.html +0 -31
  421. package/src/loadBalancer/details/healthCheck/healthCheck.component.html +0 -14
  422. package/src/loadBalancer/details/healthCheck/healthCheck.component.js +0 -13
  423. package/src/loadBalancer/details/hostAndPathRules/hostAndPathRules.controller.js +0 -23
  424. package/src/loadBalancer/details/hostAndPathRules/hostAndPathRules.modal.html +0 -40
  425. package/src/loadBalancer/details/hostAndPathRules/hostAndPathRules.service.js +0 -41
  426. package/src/loadBalancer/details/hostAndPathRules/hostAndPathRulesButton.component.js +0 -39
  427. package/src/loadBalancer/details/loadBalancerDetail.controller.js +0 -260
  428. package/src/loadBalancer/details/loadBalancerDetail.controller.spec.js +0 -41
  429. package/src/loadBalancer/details/loadBalancerDetails.html +0 -202
  430. package/src/loadBalancer/details/loadBalancerType/loadBalancerType.component.js +0 -31
  431. package/src/loadBalancer/details/loadBalancerType/loadBalancerType.component.spec.js +0 -85
  432. package/src/networkSelectField.directive.html +0 -14
  433. package/src/pipeline/stages/bake/bakeExecutionDetails.controller.js +0 -40
  434. package/src/pipeline/stages/bake/bakeExecutionDetails.html +0 -60
  435. package/src/pipeline/stages/bake/bakeStage.html +0 -117
  436. package/src/pipeline/stages/cloneServerGroup/cloneServerGroupStage.html +0 -99
  437. package/src/pipeline/stages/cloneServerGroup/cloneServerGroupStepLabel.html +0 -1
  438. package/src/pipeline/stages/destroyAsg/destroyAsgStage.html +0 -9
  439. package/src/pipeline/stages/destroyAsg/destroyAsgStepLabel.html +0 -1
  440. package/src/pipeline/stages/disableAsg/disableAsgStage.html +0 -11
  441. package/src/pipeline/stages/disableAsg/disableAsgStepLabel.html +0 -1
  442. package/src/pipeline/stages/disableCluster/disableClusterStage.html +0 -26
  443. package/src/pipeline/stages/enableAsg/enableAsgStage.html +0 -11
  444. package/src/pipeline/stages/enableAsg/enableAsgStepLabel.html +0 -1
  445. package/src/pipeline/stages/findAmi/findAmiStage.html +0 -20
  446. package/src/pipeline/stages/findImageFromTags/findImageFromTagsExecutionDetails.html +0 -40
  447. package/src/pipeline/stages/findImageFromTags/findImageFromTagsStage.html +0 -8
  448. package/src/pipeline/stages/resizeAsg/resizeAsgStage.html +0 -97
  449. package/src/pipeline/stages/resizeAsg/resizeAsgStepLabel.html +0 -1
  450. package/src/pipeline/stages/scaleDownCluster/scaleDownClusterStage.html +0 -35
  451. package/src/pipeline/stages/shrinkCluster/shrinkClusterStage.html +0 -34
  452. package/src/pipeline/stages/tagImage/tagImageExecutionDetails.html +0 -39
  453. package/src/pipeline/stages/tagImage/tagImageStage.html +0 -14
  454. package/src/regionSelectField.directive.html +0 -18
  455. package/src/securityGroup/clone/cloneSecurityGroup.controller.js +0 -85
  456. package/src/securityGroup/clone/cloneSecurityGroup.html +0 -25
  457. package/src/securityGroup/configure/ConfigSecurityGroupMixin.controller.js +0 -318
  458. package/src/securityGroup/configure/createSecurityGroup.controller.js +0 -62
  459. package/src/securityGroup/configure/createSecurityGroup.html +0 -25
  460. package/src/securityGroup/configure/createSecurityGroupIngress.html +0 -81
  461. package/src/securityGroup/configure/createSecurityGroupProperties.html +0 -70
  462. package/src/securityGroup/configure/createSecurityGroupSourceFilters.html +0 -56
  463. package/src/securityGroup/configure/createSecurityGroupTargets.html +0 -43
  464. package/src/securityGroup/configure/editSecurityGroup.controller.js +0 -132
  465. package/src/securityGroup/configure/editSecurityGroup.html +0 -26
  466. package/src/securityGroup/details/securityGroupDetail.controller.js +0 -258
  467. package/src/securityGroup/details/securityGroupDetail.html +0 -171
  468. package/src/securityGroup/securityGroupHelpText.service.spec.ts +0 -102
  469. package/src/securityGroup/securityGroupHelpText.service.ts +0 -83
  470. package/src/serverGroup/configure/serverGroup.configure.gce.module.js +0 -59
  471. package/src/serverGroup/configure/wizard/advancedSettings/GceAcceleratorConfigurer.tsx +0 -222
  472. package/src/serverGroup/configure/wizard/advancedSettings/advancedSettings.directive.html +0 -277
  473. package/src/serverGroup/configure/wizard/advancedSettings/advancedSettings.html +0 -9
  474. package/src/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.js +0 -71
  475. package/src/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.spec.js +0 -58
  476. package/src/serverGroup/configure/wizard/advancedSettings/diskConfigurer.component.ts +0 -199
  477. package/src/serverGroup/configure/wizard/autoHealingPolicy/autoHealingPolicy.html +0 -20
  478. package/src/serverGroup/configure/wizard/autoHealingPolicy/autoHealingPolicySelector.component.html +0 -90
  479. package/src/serverGroup/configure/wizard/autoHealingPolicy/autoHealingPolicySelector.component.ts +0 -70
  480. package/src/serverGroup/configure/wizard/autoScalingPolicy/autoScalingPolicy.html +0 -20
  481. package/src/serverGroup/configure/wizard/autoScalingPolicy/autoScalingPolicySelector.component.html +0 -21
  482. package/src/serverGroup/configure/wizard/autoScalingPolicy/autoScalingPolicySelector.component.js +0 -44
  483. package/src/serverGroup/configure/wizard/capacity/advancedCapacitySelector.component.html +0 -42
  484. package/src/serverGroup/configure/wizard/capacity/advancedCapacitySelector.component.js +0 -16
  485. package/src/serverGroup/configure/wizard/capacity/capacity.html +0 -16
  486. package/src/serverGroup/configure/wizard/capacity/simpleCapacitySelector.component.html +0 -14
  487. package/src/serverGroup/configure/wizard/capacity/simpleCapacitySelector.component.js +0 -22
  488. package/src/serverGroup/configure/wizard/capacity/simpleCapacitySelector.component.spec.js +0 -31
  489. package/src/serverGroup/configure/wizard/capacity/zones.html +0 -7
  490. package/src/serverGroup/configure/wizard/cloneServerGroup.gce.controller.js +0 -476
  491. package/src/serverGroup/configure/wizard/customInstance/customInstanceBuilder.html +0 -13
  492. package/src/serverGroup/configure/wizard/customInstance/customInstanceConfigurer.component.ts +0 -21
  493. package/src/serverGroup/configure/wizard/instanceType/instanceType.html +0 -11
  494. package/src/serverGroup/configure/wizard/loadBalancers/elSevenOptions/backendServiceSelector.component.html +0 -21
  495. package/src/serverGroup/configure/wizard/loadBalancers/elSevenOptions/backendServiceSelector.component.js +0 -33
  496. package/src/serverGroup/configure/wizard/loadBalancers/elSevenOptions/elSevenOptionsGenerator.component.js +0 -42
  497. package/src/serverGroup/configure/wizard/loadBalancers/loadBalancerSelector.directive.html +0 -53
  498. package/src/serverGroup/configure/wizard/loadBalancers/loadBalancerSelector.directive.js +0 -55
  499. package/src/serverGroup/configure/wizard/loadBalancers/loadBalancers.html +0 -5
  500. package/src/serverGroup/configure/wizard/loadBalancingPolicy/loadBalancingPolicySelector.component.html +0 -182
  501. package/src/serverGroup/configure/wizard/loadBalancingPolicy/loadBalancingPolicySelector.component.less +0 -11
  502. package/src/serverGroup/configure/wizard/loadBalancingPolicy/loadBalancingPolicySelector.component.ts +0 -153
  503. package/src/serverGroup/configure/wizard/location/basicSettings.controller.js +0 -139
  504. package/src/serverGroup/configure/wizard/location/basicSettings.html +0 -167
  505. package/src/serverGroup/configure/wizard/securityGroups/securityGroupSelector.directive.html +0 -66
  506. package/src/serverGroup/configure/wizard/securityGroups/securityGroupSelector.directive.js +0 -48
  507. package/src/serverGroup/configure/wizard/securityGroups/securityGroups.html +0 -4
  508. package/src/serverGroup/configure/wizard/securityGroups/securityGroupsRemoved.directive.html +0 -14
  509. package/src/serverGroup/configure/wizard/securityGroups/securityGroupsRemoved.directive.js +0 -25
  510. package/src/serverGroup/configure/wizard/securityGroups/tagSelector.component.html +0 -26
  511. package/src/serverGroup/configure/wizard/securityGroups/tagSelector.component.js +0 -31
  512. package/src/serverGroup/configure/wizard/securityGroups/tagSelectorGenerator.component.js +0 -44
  513. package/src/serverGroup/configure/wizard/serverGroupWizard.html +0 -52
  514. package/src/serverGroup/configure/wizard/templateSelection/templateSelection.html +0 -9
  515. package/src/serverGroup/configure/wizard/zones/regionalSelector.directive.html +0 -13
  516. package/src/serverGroup/configure/wizard/zones/regionalSelector.directive.js +0 -21
  517. package/src/serverGroup/configure/wizard/zones/targetShapeSelector.directive.html +0 -13
  518. package/src/serverGroup/configure/wizard/zones/targetShapeSelector.directive.ts +0 -20
  519. package/src/serverGroup/configure/wizard/zones/zoneSelector.directive.html +0 -24
  520. package/src/serverGroup/configure/wizard/zones/zoneSelector.directive.js +0 -21
  521. package/src/serverGroup/details/ServerGroupDiskDescriptions.tsx +0 -97
  522. package/src/serverGroup/details/autoHealingPolicy/addAutoHealingPolicyButton.component.ts +0 -38
  523. package/src/serverGroup/details/autoHealingPolicy/autoHealingPolicy.component.ts +0 -73
  524. package/src/serverGroup/details/autoHealingPolicy/modal/upsertAutoHealingPolicy.modal.controller.ts +0 -88
  525. package/src/serverGroup/details/autoHealingPolicy/modal/upsertAutoHealingPolicy.modal.html +0 -29
  526. package/src/serverGroup/details/autoscalingPolicy/addAutoscalingPolicyButton.component.js +0 -38
  527. package/src/serverGroup/details/autoscalingPolicy/autoscalingPolicy.directive.html +0 -49
  528. package/src/serverGroup/details/autoscalingPolicy/autoscalingPolicy.directive.js +0 -138
  529. package/src/serverGroup/details/autoscalingPolicy/modal/GceScaleInControls.tsx +0 -137
  530. package/src/serverGroup/details/autoscalingPolicy/modal/upsertAutoscalingPolicy.modal.controller.js +0 -56
  531. package/src/serverGroup/details/autoscalingPolicy/modal/upsertAutoscalingPolicy.modal.html +0 -38
  532. package/src/serverGroup/details/resize/resizeAutoscalingPolicy.component.html +0 -55
  533. package/src/serverGroup/details/resize/resizeAutoscalingPolicy.component.js +0 -60
  534. package/src/serverGroup/details/resize/resizeCapacity.component.html +0 -36
  535. package/src/serverGroup/details/resize/resizeCapacity.component.js +0 -46
  536. package/src/serverGroup/details/resize/resizeServerGroup.controller.js +0 -64
  537. package/src/serverGroup/details/resize/resizeServerGroup.controller.spec.js +0 -119
  538. package/src/serverGroup/details/resize/resizeServerGroup.html +0 -41
  539. package/src/serverGroup/details/rollback/rollbackServerGroup.controller.js +0 -73
  540. package/src/serverGroup/details/rollback/rollbackServerGroup.html +0 -43
  541. package/src/serverGroup/details/serverGroup.details.gce.module.js +0 -17
  542. package/src/serverGroup/details/serverGroupDetails.gce.controller.js +0 -511
  543. package/src/serverGroup/details/serverGroupDetails.gce.controller.spec.js +0 -26
  544. package/src/serverGroup/details/serverGroupDetails.html +0 -359
  545. package/src/serverGroup/details/serverGroupDetails.less +0 -3
  546. package/src/subnet/subnetSelectField.directive.html +0 -21
  547. package/src/subnet/subnetSelectField.directive.js +0 -24
  548. package/src/validation/applicationName.validator.js +0 -114
@@ -0,0 +1,390 @@
1
+ import { shallow } from 'enzyme';
2
+ import React from 'react';
3
+
4
+ import { HelpField } from '@spinnaker/core';
5
+
6
+ import {
7
+ GceInstanceFlexibilityConfigurer,
8
+ hasValidFlexibilityPolicy,
9
+ nextSelectionName,
10
+ } from './GceInstanceFlexibilityConfigurer';
11
+
12
+ describe('GceInstanceFlexibilityConfigurer', () => {
13
+ const policy = {
14
+ instanceSelections: {
15
+ preferred: { rank: 1, machineTypes: ['n2-standard-8'] },
16
+ },
17
+ };
18
+
19
+ it('links the flexibility editor to its help content', () => {
20
+ const wrapper = shallow(
21
+ <GceInstanceFlexibilityConfigurer
22
+ regional={true}
23
+ targetShape="BALANCED"
24
+ setInstanceFlexibilityPolicy={jasmine.createSpy('setPolicy')}
25
+ />,
26
+ );
27
+
28
+ expect(wrapper.find(HelpField).prop('id')).toBe('gce.serverGroup.instanceFlexibilityPolicy');
29
+ });
30
+
31
+ it('allows EVEN when flexibility is absent', () => {
32
+ expect(
33
+ hasValidFlexibilityPolicy({
34
+ regional: true,
35
+ distributionPolicy: { targetShape: 'EVEN' },
36
+ }),
37
+ ).toBe(true);
38
+ });
39
+
40
+ it('blocks zonal and EVEN combinations when selections exist', () => {
41
+ const policy = {
42
+ instanceSelections: {
43
+ preferred: { machineTypes: ['n2-standard-8'] },
44
+ },
45
+ };
46
+ expect(
47
+ hasValidFlexibilityPolicy({
48
+ regional: false,
49
+ distributionPolicy: { targetShape: 'BALANCED' },
50
+ instanceFlexibilityPolicy: policy,
51
+ }),
52
+ ).toBe(false);
53
+ expect(
54
+ hasValidFlexibilityPolicy({
55
+ regional: true,
56
+ distributionPolicy: { targetShape: 'EVEN' },
57
+ instanceFlexibilityPolicy: policy,
58
+ }),
59
+ ).toBe(false);
60
+ });
61
+
62
+ it('rejects blank machine type placeholders', () => {
63
+ expect(
64
+ hasValidFlexibilityPolicy({
65
+ regional: true,
66
+ distributionPolicy: { targetShape: 'BALANCED' },
67
+ instanceFlexibilityPolicy: {
68
+ instanceSelections: {
69
+ preferred: { machineTypes: [''] },
70
+ },
71
+ },
72
+ }),
73
+ ).toBe(false);
74
+ expect(
75
+ hasValidFlexibilityPolicy({
76
+ regional: true,
77
+ distributionPolicy: { targetShape: 'BALANCED' },
78
+ instanceFlexibilityPolicy: {
79
+ instanceSelections: {
80
+ preferred: { machineTypes: ['n2-standard-8', ''] },
81
+ },
82
+ },
83
+ }),
84
+ ).toBe(false);
85
+ });
86
+
87
+ it('rejects duplicate machine types within and across selections', () => {
88
+ [
89
+ {
90
+ preferred: { machineTypes: ['e2-standard-2', 'e2-standard-2'] },
91
+ },
92
+ {
93
+ preferred: { machineTypes: ['e2-standard-2'] },
94
+ fallback: { machineTypes: ['e2-standard-2'] },
95
+ },
96
+ ].forEach((instanceSelections) => {
97
+ expect(
98
+ hasValidFlexibilityPolicy({
99
+ regional: true,
100
+ distributionPolicy: { targetShape: 'BALANCED' },
101
+ instanceFlexibilityPolicy: { instanceSelections },
102
+ }),
103
+ ).toBe(false);
104
+ });
105
+ });
106
+
107
+ it('normalizes duplicate machine types and displays a warning', () => {
108
+ const duplicatePolicy = {
109
+ instanceSelections: {
110
+ preferred: {
111
+ machineTypes: [
112
+ ' https://www.googleapis.com/compute/v1/projects/test-project/zones/us-central1-a/machineTypes/E2-STANDARD-2 ',
113
+ ],
114
+ },
115
+ fallback: { machineTypes: ['zones/us-central1-b/machineTypes/e2-standard-2'] },
116
+ },
117
+ };
118
+
119
+ expect(
120
+ hasValidFlexibilityPolicy({
121
+ regional: true,
122
+ distributionPolicy: { targetShape: 'BALANCED' },
123
+ instanceFlexibilityPolicy: duplicatePolicy,
124
+ }),
125
+ ).toBe(false);
126
+
127
+ const wrapper = shallow(
128
+ <GceInstanceFlexibilityConfigurer
129
+ instanceFlexibilityPolicy={duplicatePolicy}
130
+ regional={true}
131
+ targetShape="BALANCED"
132
+ setInstanceFlexibilityPolicy={jasmine.createSpy('setPolicy')}
133
+ />,
134
+ );
135
+ expect(wrapper.text()).toContain('Machine types must be unique across instance selections.');
136
+ expect(wrapper.find('[role="alert"]').text()).toBe('Machine types must be unique across instance selections.');
137
+ });
138
+
139
+ it('accepts distinct machine types across selections', () => {
140
+ expect(
141
+ hasValidFlexibilityPolicy({
142
+ regional: true,
143
+ distributionPolicy: { targetShape: 'BALANCED' },
144
+ instanceFlexibilityPolicy: {
145
+ instanceSelections: {
146
+ preferred: { machineTypes: ['e2-standard-2', 'n2-standard-2'] },
147
+ fallback: { machineTypes: ['c2-standard-4'] },
148
+ },
149
+ },
150
+ }),
151
+ ).toBe(true);
152
+ });
153
+
154
+ it('rejects ranks that are not finite non-negative integers', () => {
155
+ [-1, 1.5, Number.NaN, Number.POSITIVE_INFINITY].forEach((rank) => {
156
+ expect(
157
+ hasValidFlexibilityPolicy({
158
+ regional: true,
159
+ distributionPolicy: { targetShape: 'BALANCED' },
160
+ instanceFlexibilityPolicy: {
161
+ instanceSelections: {
162
+ preferred: { rank, machineTypes: ['n2-standard-8'] },
163
+ },
164
+ },
165
+ }),
166
+ ).toBe(false);
167
+ });
168
+ });
169
+
170
+ it('announces submission errors and associates malformed persisted controls', () => {
171
+ const wrapper = shallow(
172
+ <GceInstanceFlexibilityConfigurer
173
+ instanceFlexibilityPolicy={{
174
+ instanceSelections: {
175
+ preferred: { rank: -1, machineTypes: ['', 'n2-standard-8'] },
176
+ },
177
+ }}
178
+ regional={true}
179
+ targetShape="BALANCED"
180
+ validationError="Instance flexibility policy is invalid."
181
+ setInstanceFlexibilityPolicy={jasmine.createSpy('setPolicy')}
182
+ />,
183
+ );
184
+ const errorId = 'gce-instance-flexibility-error';
185
+ const rankInput = wrapper.find('#instance-flexibility-selection-preferred-rank');
186
+ const blankMachineType = wrapper.find('input[aria-label="Machine type 1 for selection preferred"]');
187
+ const validMachineType = wrapper.find('input[aria-label="Machine type 2 for selection preferred"]');
188
+
189
+ expect(wrapper.find(`#${errorId}`).prop('role')).toBe('alert');
190
+ expect(wrapper.find(`#${errorId}`).text()).toBe('Instance flexibility policy is invalid.');
191
+ expect(rankInput.prop('aria-invalid')).toBe(true);
192
+ expect(rankInput.prop('aria-describedby')).toBe(errorId);
193
+ expect(blankMachineType.prop('aria-invalid')).toBe(true);
194
+ expect(blankMachineType.prop('aria-describedby')).toBe(errorId);
195
+ expect(validMachineType.prop('aria-invalid')).toBe(false);
196
+ expect(validMachineType.prop('aria-describedby')).toBeUndefined();
197
+ });
198
+
199
+ it('accepts regional BALANCED/ANY/ANY_SINGLE_ZONE with rankless selections', () => {
200
+ const policy = {
201
+ instanceSelections: {
202
+ preferred: { machineTypes: ['n2-standard-8'] },
203
+ fallback: { machineTypes: ['e2-standard-8'] },
204
+ },
205
+ };
206
+ ['BALANCED', 'ANY', 'ANY_SINGLE_ZONE', ' balanced '].forEach((targetShape) => {
207
+ expect(
208
+ hasValidFlexibilityPolicy({
209
+ regional: true,
210
+ distributionPolicy: { targetShape },
211
+ instanceFlexibilityPolicy: policy,
212
+ }),
213
+ ).toBe(true);
214
+ });
215
+ });
216
+
217
+ it('chooses the first unused selection name', () => {
218
+ expect(nextSelectionName([])).toBe('selection-1');
219
+ expect(nextSelectionName(['selection-1', 'preferred'])).toBe('selection-2');
220
+ expect(nextSelectionName(['selection-1', 'selection-2'])).toBe('selection-3');
221
+ expect(nextSelectionName(['selection-2'])).toBe('selection-1');
222
+ });
223
+
224
+ it('adds a named selection through the configurer', () => {
225
+ const setPolicy = jasmine.createSpy('setPolicy');
226
+ const wrapper = shallow(
227
+ <GceInstanceFlexibilityConfigurer
228
+ instanceFlexibilityPolicy={undefined}
229
+ regional={true}
230
+ targetShape="BALANCED"
231
+ setInstanceFlexibilityPolicy={setPolicy}
232
+ />,
233
+ );
234
+
235
+ wrapper.find('button').simulate('click');
236
+
237
+ expect(setPolicy).toHaveBeenCalledWith({
238
+ instanceSelections: {
239
+ 'selection-1': { machineTypes: [''] },
240
+ },
241
+ });
242
+ });
243
+
244
+ it('does not overwrite an existing renamed selection when adding another', () => {
245
+ const setPolicy = jasmine.createSpy('setPolicy');
246
+ const wrapper = shallow(
247
+ <GceInstanceFlexibilityConfigurer
248
+ instanceFlexibilityPolicy={{
249
+ instanceSelections: {
250
+ 'selection-1': { machineTypes: ['n2-standard-8'] },
251
+ },
252
+ }}
253
+ regional={true}
254
+ targetShape="BALANCED"
255
+ setInstanceFlexibilityPolicy={setPolicy}
256
+ />,
257
+ );
258
+
259
+ wrapper.find('button').last().simulate('click');
260
+
261
+ expect(setPolicy).toHaveBeenCalledWith({
262
+ instanceSelections: {
263
+ 'selection-1': { machineTypes: ['n2-standard-8'] },
264
+ 'selection-2': { machineTypes: [''] },
265
+ },
266
+ });
267
+ });
268
+
269
+ it('sends an explicit empty policy when the final selection is removed', () => {
270
+ const setPolicy = jasmine.createSpy('setPolicy');
271
+ const wrapper = shallow(
272
+ <GceInstanceFlexibilityConfigurer
273
+ instanceFlexibilityPolicy={policy}
274
+ regional={true}
275
+ targetShape="BALANCED"
276
+ setInstanceFlexibilityPolicy={setPolicy}
277
+ />,
278
+ );
279
+
280
+ wrapper
281
+ .find('button')
282
+ .filterWhere((button) => button.text() === 'Remove')
283
+ .simulate('click');
284
+
285
+ expect(setPolicy).toHaveBeenCalledWith({ instanceSelections: {} });
286
+ });
287
+
288
+ it('only persists finite non-negative integer ranks and supports rank zero and clearing', () => {
289
+ const setPolicy = jasmine.createSpy('setPolicy');
290
+ const wrapper = shallow(
291
+ <GceInstanceFlexibilityConfigurer
292
+ instanceFlexibilityPolicy={policy}
293
+ regional={true}
294
+ targetShape="BALANCED"
295
+ setInstanceFlexibilityPolicy={setPolicy}
296
+ />,
297
+ );
298
+ const rankInput = wrapper.find('input[type="number"]');
299
+
300
+ expect(rankInput.prop('step')).toBe(1);
301
+
302
+ rankInput.simulate('change', { target: { value: '1.5' } });
303
+ rankInput.simulate('change', { target: { value: '-1' } });
304
+ rankInput.simulate('change', { target: { value: 'not-a-number' } });
305
+ expect(setPolicy).not.toHaveBeenCalled();
306
+
307
+ rankInput.simulate('change', { target: { value: '0' } });
308
+ expect(setPolicy).toHaveBeenCalledWith({
309
+ instanceSelections: {
310
+ preferred: { rank: 0, machineTypes: ['n2-standard-8'] },
311
+ },
312
+ });
313
+
314
+ setPolicy.calls.reset();
315
+ rankInput.simulate('change', { target: { value: '' } });
316
+ expect(setPolicy).toHaveBeenCalledWith({
317
+ instanceSelections: {
318
+ preferred: { machineTypes: ['n2-standard-8'] },
319
+ },
320
+ });
321
+ });
322
+
323
+ it('resets blank and duplicate rename drafts to the current valid selection name', () => {
324
+ const setPolicy = jasmine.createSpy('setPolicy');
325
+ const wrapper = shallow(
326
+ <GceInstanceFlexibilityConfigurer
327
+ instanceFlexibilityPolicy={{
328
+ instanceSelections: {
329
+ preferred: { machineTypes: ['n2-standard-8'] },
330
+ fallback: { machineTypes: ['e2-standard-8'] },
331
+ },
332
+ }}
333
+ regional={true}
334
+ targetShape="BALANCED"
335
+ setInstanceFlexibilityPolicy={setPolicy}
336
+ />,
337
+ );
338
+ const preferredNameInput = wrapper.find('input').filterWhere((input) => input.prop('defaultValue') === 'preferred');
339
+ const blankDraft = { value: ' ' };
340
+ const duplicateDraft = { value: 'fallback' };
341
+
342
+ preferredNameInput.simulate('blur', { currentTarget: blankDraft, target: blankDraft });
343
+ expect(blankDraft.value).toBe('preferred');
344
+ preferredNameInput.simulate('blur', { currentTarget: duplicateDraft, target: duplicateDraft });
345
+ expect(duplicateDraft.value).toBe('preferred');
346
+ expect(setPolicy).not.toHaveBeenCalled();
347
+ });
348
+
349
+ it('associates labels and contextual accessible names with selection controls', () => {
350
+ const wrapper = shallow(
351
+ <GceInstanceFlexibilityConfigurer
352
+ instanceFlexibilityPolicy={policy}
353
+ regional={true}
354
+ targetShape="BALANCED"
355
+ setInstanceFlexibilityPolicy={jasmine.createSpy('setPolicy')}
356
+ />,
357
+ );
358
+ const selectionId = 'instance-flexibility-selection-preferred';
359
+
360
+ expect(wrapper.find(`label[htmlFor="${selectionId}-name"]`).text()).toBe('Selection name');
361
+ expect(wrapper.find(`input#${selectionId}-name`).exists()).toBe(true);
362
+ expect(wrapper.find(`label[htmlFor="${selectionId}-rank"]`).text()).toBe('Rank (optional)');
363
+ expect(wrapper.find(`input#${selectionId}-rank`).exists()).toBe(true);
364
+ expect(wrapper.find(`input[aria-label="Machine type 1 for selection preferred"]`).prop('id')).toBe(
365
+ `${selectionId}-machine-type-0`,
366
+ );
367
+ expect(wrapper.find('button[aria-label="Remove selection preferred"]').exists()).toBe(true);
368
+ expect(wrapper.find('button[aria-label="Remove machine type 1 from selection preferred"]').exists()).toBe(true);
369
+ });
370
+
371
+ it('rerenders when policy and sibling primitive props change identity', () => {
372
+ const wrapper = shallow(
373
+ <GceInstanceFlexibilityConfigurer
374
+ instanceFlexibilityPolicy={undefined}
375
+ regional={true}
376
+ targetShape="BALANCED"
377
+ setInstanceFlexibilityPolicy={jasmine.createSpy('setPolicy')}
378
+ />,
379
+ );
380
+
381
+ expect(wrapper.text()).toContain('Add flexibility policy');
382
+
383
+ wrapper.setProps({ instanceFlexibilityPolicy: policy });
384
+ expect(wrapper.find('button[aria-label="Remove selection preferred"]').exists()).toBe(true);
385
+
386
+ wrapper.setProps({ regional: false, targetShape: 'EVEN' });
387
+ expect(wrapper.text()).toContain('Flexibility requires a regional server group.');
388
+ expect(wrapper.text()).toContain('not EVEN');
389
+ });
390
+ });
@@ -0,0 +1,310 @@
1
+ import { isEmpty } from 'lodash';
2
+ import React from 'react';
3
+
4
+ import { HelpField } from '@spinnaker/core';
5
+
6
+ import type { IGceInstanceFlexibilityPolicy, IGceInstanceSelection } from '../../../../domain/serverGroup';
7
+
8
+ export interface IGceInstanceFlexibilityConfigurerProps {
9
+ instanceFlexibilityPolicy?: IGceInstanceFlexibilityPolicy;
10
+ regional?: boolean;
11
+ targetShape?: string;
12
+ validationError?: string;
13
+ setInstanceFlexibilityPolicy: (policy: IGceInstanceFlexibilityPolicy) => void;
14
+ }
15
+
16
+ const FLEX_TARGET_SHAPES = new Set(['BALANCED', 'ANY', 'ANY_SINGLE_ZONE']);
17
+ const VALIDATION_ERROR_ID = 'gce-instance-flexibility-error';
18
+
19
+ function hasSelections(policy?: IGceInstanceFlexibilityPolicy): boolean {
20
+ return !isEmpty(policy?.instanceSelections);
21
+ }
22
+
23
+ function emptySelection(): IGceInstanceSelection {
24
+ return { machineTypes: [''] };
25
+ }
26
+
27
+ /** First unused selection-N name so rename/remove cannot overwrite an existing entry. */
28
+ export function nextSelectionName(existingNames: string[]): string {
29
+ const used = new Set(existingNames);
30
+ let index = 1;
31
+ while (used.has(`selection-${index}`)) {
32
+ index += 1;
33
+ }
34
+ return `selection-${index}`;
35
+ }
36
+
37
+ function hasNonEmptyMachineTypes(selection?: IGceInstanceSelection): boolean {
38
+ const machineTypes = selection?.machineTypes || [];
39
+ return machineTypes.length > 0 && machineTypes.every((machineType) => !!machineType && machineType.trim().length > 0);
40
+ }
41
+
42
+ function normalizeMachineType(machineType?: string | null): string | undefined {
43
+ const trimmed = machineType?.trim();
44
+ if (!trimmed) {
45
+ return undefined;
46
+ }
47
+ return trimmed.substring(trimmed.lastIndexOf('/') + 1).toLowerCase();
48
+ }
49
+
50
+ // GCP requires each normalized machine type to occur only once across the entire policy.
51
+ function hasUniqueMachineTypes(policy?: IGceInstanceFlexibilityPolicy): boolean {
52
+ const machineTypes = new Set<string>();
53
+ for (const selection of Object.values(policy?.instanceSelections || {})) {
54
+ for (const machineType of selection?.machineTypes || []) {
55
+ const normalizedMachineType = normalizeMachineType(machineType);
56
+ if (normalizedMachineType && machineTypes.has(normalizedMachineType)) {
57
+ return false;
58
+ }
59
+ if (normalizedMachineType) {
60
+ machineTypes.add(normalizedMachineType);
61
+ }
62
+ }
63
+ }
64
+ return true;
65
+ }
66
+
67
+ function hasValidRank(selection?: IGceInstanceSelection): boolean {
68
+ return (
69
+ selection?.rank == null ||
70
+ (Number.isFinite(selection.rank) && Number.isInteger(selection.rank) && selection.rank >= 0)
71
+ );
72
+ }
73
+
74
+ export function GceInstanceFlexibilityConfigurer({
75
+ instanceFlexibilityPolicy,
76
+ regional,
77
+ targetShape: targetShapeProp,
78
+ validationError,
79
+ setInstanceFlexibilityPolicy,
80
+ }: IGceInstanceFlexibilityConfigurerProps) {
81
+ const policy = instanceFlexibilityPolicy || { instanceSelections: {} };
82
+ const entries = Object.entries(policy.instanceSelections || {});
83
+ const enabled = entries.length > 0;
84
+ const targetShape = (targetShapeProp || '').trim().toUpperCase();
85
+ const regionalRequired = enabled && !regional;
86
+ const evenBlocked = enabled && (!targetShape || targetShape === 'EVEN' || !FLEX_TARGET_SHAPES.has(targetShape));
87
+ const duplicateMachineTypes = enabled && !hasUniqueMachineTypes(policy);
88
+
89
+ const updateSelections = (instanceSelections: { [name: string]: IGceInstanceSelection }) => {
90
+ setInstanceFlexibilityPolicy({ instanceSelections });
91
+ };
92
+
93
+ const addSelection = () => {
94
+ const nextName = nextSelectionName(Object.keys(policy.instanceSelections || {}));
95
+ updateSelections({ ...policy.instanceSelections, [nextName]: emptySelection() });
96
+ };
97
+
98
+ const removeSelection = (name: string) => {
99
+ const next = { ...policy.instanceSelections };
100
+ delete next[name];
101
+ updateSelections(next);
102
+ };
103
+
104
+ const renameSelection = (oldName: string, newName: string): boolean => {
105
+ const trimmed = newName.trim();
106
+ if (!trimmed || trimmed === oldName || policy.instanceSelections[trimmed]) {
107
+ return false;
108
+ }
109
+ const next: { [name: string]: IGceInstanceSelection } = {};
110
+ Object.entries(policy.instanceSelections).forEach(([name, selection]) => {
111
+ next[name === oldName ? trimmed : name] = selection;
112
+ });
113
+ updateSelections(next);
114
+ return true;
115
+ };
116
+
117
+ const updateSelection = (name: string, selection: IGceInstanceSelection) => {
118
+ updateSelections({ ...policy.instanceSelections, [name]: selection });
119
+ };
120
+
121
+ const updateMachineType = (name: string, index: number, value: string) => {
122
+ const selection = policy.instanceSelections[name];
123
+ const machineTypes = [...(selection.machineTypes || [])];
124
+ machineTypes[index] = value;
125
+ updateSelection(name, { ...selection, machineTypes });
126
+ };
127
+
128
+ const addMachineType = (name: string) => {
129
+ const selection = policy.instanceSelections[name];
130
+ updateSelection(name, {
131
+ ...selection,
132
+ machineTypes: [...(selection.machineTypes || []), ''],
133
+ });
134
+ };
135
+
136
+ const removeMachineType = (name: string, index: number) => {
137
+ const selection = policy.instanceSelections[name];
138
+ const machineTypes = (selection.machineTypes || []).filter((_type, i) => i !== index);
139
+ updateSelection(name, {
140
+ ...selection,
141
+ machineTypes: machineTypes.length ? machineTypes : [''],
142
+ });
143
+ };
144
+
145
+ const updateRank = (name: string, rawRank: string) => {
146
+ const selection = policy.instanceSelections[name];
147
+ if (rawRank === '') {
148
+ const { rank, ...withoutRank } = selection;
149
+ updateSelection(name, withoutRank as IGceInstanceSelection);
150
+ return;
151
+ }
152
+ const parsed = Number(rawRank);
153
+ if (Number.isFinite(parsed) && Number.isInteger(parsed) && parsed >= 0) {
154
+ updateSelection(name, { ...selection, rank: parsed });
155
+ }
156
+ };
157
+
158
+ return (
159
+ <div className="form-group">
160
+ <div className="col-md-3 sm-label-right">
161
+ <b>Instance Flexibility</b> <HelpField id="gce.serverGroup.instanceFlexibilityPolicy" />
162
+ </div>
163
+ <div className="col-md-9">
164
+ {validationError && (
165
+ <div className="alert alert-danger" id={VALIDATION_ERROR_ID} role="alert">
166
+ {validationError}
167
+ </div>
168
+ )}
169
+ {!enabled && (
170
+ <button type="button" className="btn btn-sm btn-default" onClick={addSelection}>
171
+ Add flexibility policy
172
+ </button>
173
+ )}
174
+ {enabled && (
175
+ <div>
176
+ {regionalRequired && (
177
+ <div className="alert alert-warning">Flexibility requires a regional server group.</div>
178
+ )}
179
+ {evenBlocked && (
180
+ <div className="alert alert-warning">
181
+ Flexibility requires target shape BALANCED, ANY, or ANY_SINGLE_ZONE (not EVEN).
182
+ </div>
183
+ )}
184
+ {duplicateMachineTypes && (
185
+ <div className="alert alert-warning" role="alert">
186
+ Machine types must be unique across instance selections.
187
+ </div>
188
+ )}
189
+ {entries.map(([name, selection]) => (
190
+ <div key={name} className="well well-sm" style={{ marginBottom: '10px' }} data-selection-name={name}>
191
+ {(() => {
192
+ const selectionId = `instance-flexibility-selection-${encodeURIComponent(name)}`;
193
+ const rankInvalid = !hasValidRank(selection);
194
+ return (
195
+ <>
196
+ <div className="form-group">
197
+ <label className="col-md-3 sm-label-right" htmlFor={`${selectionId}-name`}>
198
+ Selection name
199
+ </label>
200
+ <div className="col-md-6">
201
+ <input
202
+ id={`${selectionId}-name`}
203
+ className="form-control input-sm"
204
+ defaultValue={name}
205
+ onBlur={(e) => {
206
+ if (!renameSelection(name, e.currentTarget.value)) {
207
+ e.currentTarget.value = name;
208
+ }
209
+ }}
210
+ />
211
+ </div>
212
+ <div className="col-md-3">
213
+ <button
214
+ type="button"
215
+ className="btn btn-sm btn-default"
216
+ aria-label={`Remove selection ${name}`}
217
+ onClick={() => removeSelection(name)}
218
+ >
219
+ Remove
220
+ </button>
221
+ </div>
222
+ </div>
223
+ <div className="form-group">
224
+ <label className="col-md-3 sm-label-right" htmlFor={`${selectionId}-rank`}>
225
+ Rank (optional)
226
+ </label>
227
+ <div className="col-md-3">
228
+ <input
229
+ id={`${selectionId}-rank`}
230
+ type="number"
231
+ min={0}
232
+ step={1}
233
+ className="form-control input-sm"
234
+ aria-describedby={rankInvalid && validationError ? VALIDATION_ERROR_ID : undefined}
235
+ aria-invalid={rankInvalid}
236
+ value={selection.rank == null ? '' : selection.rank}
237
+ onChange={(e) => updateRank(name, e.target.value)}
238
+ />
239
+ </div>
240
+ </div>
241
+ <div className="form-group">
242
+ <div className="col-md-3 sm-label-right">Machine types</div>
243
+ <div className="col-md-9">
244
+ {(selection.machineTypes || []).map((machineType, index) => (
245
+ <div key={index} style={{ display: 'flex', marginBottom: '4px' }}>
246
+ <input
247
+ id={`${selectionId}-machine-type-${index}`}
248
+ className="form-control input-sm"
249
+ aria-describedby={
250
+ !machineType?.trim() && validationError ? VALIDATION_ERROR_ID : undefined
251
+ }
252
+ aria-invalid={!machineType?.trim()}
253
+ value={machineType}
254
+ onChange={(e) => updateMachineType(name, index, e.target.value)}
255
+ placeholder="e.g. n2-standard-8"
256
+ aria-label={`Machine type ${index + 1} for selection ${name}`}
257
+ />
258
+ <button
259
+ type="button"
260
+ className="btn btn-sm btn-default"
261
+ style={{ marginLeft: '4px' }}
262
+ aria-label={`Remove machine type ${index + 1} from selection ${name}`}
263
+ onClick={() => removeMachineType(name, index)}
264
+ >
265
+ ×
266
+ </button>
267
+ </div>
268
+ ))}
269
+ <button type="button" className="btn btn-sm btn-link" onClick={() => addMachineType(name)}>
270
+ Add machine type
271
+ </button>
272
+ </div>
273
+ </div>
274
+ </>
275
+ );
276
+ })()}
277
+ </div>
278
+ ))}
279
+ <button type="button" className="btn btn-sm btn-default" onClick={addSelection}>
280
+ Add selection
281
+ </button>
282
+ </div>
283
+ )}
284
+ </div>
285
+ </div>
286
+ );
287
+ }
288
+
289
+ export function hasValidFlexibilityPolicy(command: {
290
+ regional?: boolean;
291
+ distributionPolicy?: { targetShape?: string };
292
+ instanceFlexibilityPolicy?: IGceInstanceFlexibilityPolicy;
293
+ }): boolean {
294
+ if (!hasSelections(command.instanceFlexibilityPolicy)) {
295
+ return true;
296
+ }
297
+ if (!command.regional) {
298
+ return false;
299
+ }
300
+ const targetShape = (command.distributionPolicy?.targetShape || '').trim().toUpperCase();
301
+ if (!FLEX_TARGET_SHAPES.has(targetShape)) {
302
+ return false;
303
+ }
304
+ // Clouddriver rejects empty machineTypes and negative ranks; blank placeholders must not pass submit.
305
+ return (
306
+ Object.values(command.instanceFlexibilityPolicy.instanceSelections || {}).every(
307
+ (selection) => hasNonEmptyMachineTypes(selection) && hasValidRank(selection),
308
+ ) && hasUniqueMachineTypes(command.instanceFlexibilityPolicy)
309
+ );
310
+ }