@spinnaker/kubernetes 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 (337) hide show
  1. package/CHANGELOG.md +1663 -0
  2. package/LICENSE.txt +203 -0
  3. package/dist/help/kubernetes.help.d.ts +1 -0
  4. package/dist/index.d.ts +8 -0
  5. package/dist/index.js +6561 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/instance/details/details.controller.d.ts +1 -0
  8. package/dist/instance/index.d.ts +1 -0
  9. package/dist/interfaces/index.d.ts +1 -0
  10. package/dist/interfaces/infrastructure.types.d.ts +27 -0
  11. package/dist/kubernetes.module.d.ts +6 -0
  12. package/dist/loadBalancer/details/details.controller.d.ts +1 -0
  13. package/dist/loadBalancer/index.d.ts +1 -0
  14. package/dist/loadBalancer/transformer.d.ts +1 -0
  15. package/dist/manifest/AnnotationCustomSections.d.ts +5 -0
  16. package/dist/manifest/IManifestCoordinates.d.ts +5 -0
  17. package/dist/manifest/ManifestImageDetails.d.ts +18 -0
  18. package/dist/manifest/ManifestKindSearch.d.ts +13 -0
  19. package/dist/manifest/ManifestLabels.d.ts +15 -0
  20. package/dist/manifest/ManifestQos.d.ts +15 -0
  21. package/dist/manifest/ManifestResources.d.ts +35 -0
  22. package/dist/manifest/ManifestSource.d.ts +4 -0
  23. package/dist/manifest/annotationCustomSections.component.d.ts +3 -0
  24. package/dist/manifest/artifact/ManifestArtifact.d.ts +6 -0
  25. package/dist/manifest/delete/delete.controller.d.ts +12 -0
  26. package/dist/manifest/delete/deleteOptionsForm.component.d.ts +1 -0
  27. package/dist/manifest/editor/json/JsonEditor.d.ts +12 -0
  28. package/dist/manifest/editor/json/jsonEditor.component.d.ts +1 -0
  29. package/dist/manifest/index.d.ts +10 -0
  30. package/dist/manifest/manifest.service.d.ts +25 -0
  31. package/dist/manifest/manifestCommandBuilder.service.d.ts +30 -0
  32. package/dist/manifest/manifestEvents.component.d.ts +1 -0
  33. package/dist/manifest/manifestImageDetails.component.d.ts +1 -0
  34. package/dist/manifest/manifestLabels.component.d.ts +1 -0
  35. package/dist/manifest/manifestQos.component.d.ts +1 -0
  36. package/dist/manifest/manifestResources.component.d.ts +1 -0
  37. package/dist/manifest/rollout/RollingRestart.d.ts +9 -0
  38. package/dist/manifest/rollout/pause.controller.d.ts +1 -0
  39. package/dist/manifest/rollout/resume.controller.d.ts +1 -0
  40. package/dist/manifest/rollout/undo.controller.d.ts +1 -0
  41. package/dist/manifest/scale/ScaleSettingsForm.d.ts +10 -0
  42. package/dist/manifest/scale/scale.controller.d.ts +8 -0
  43. package/dist/manifest/scale/scaleSettingsForm.component.d.ts +1 -0
  44. package/dist/manifest/selector/IManifestLabelSelector.d.ts +9 -0
  45. package/dist/manifest/selector/IManifestSelector.d.ts +30 -0
  46. package/dist/manifest/selector/ManifestSelector.d.ts +46 -0
  47. package/dist/manifest/selector/labelEditor/LabelEditor.d.ts +15 -0
  48. package/dist/manifest/selector/selector.component.d.ts +1 -0
  49. package/dist/manifest/status/ManifestCondition.d.ts +13 -0
  50. package/dist/manifest/status/ManifestStatus.d.ts +8 -0
  51. package/dist/manifest/status/condition.component.d.ts +1 -0
  52. package/dist/manifest/status/status.component.d.ts +1 -0
  53. package/dist/manifest/traffic/ManifestTrafficService.d.ts +12 -0
  54. package/dist/manifest/wizard/BasicSettings.d.ts +17 -0
  55. package/dist/manifest/wizard/ManifestEntry.d.ts +16 -0
  56. package/dist/manifest/wizard/ManifestWizard.d.ts +22 -0
  57. package/dist/pipelines/stages/ManifestCoordinates.d.ts +31 -0
  58. package/dist/pipelines/stages/ManifestExecutionDetails.d.ts +69 -0
  59. package/dist/pipelines/stages/deleteManifest/DeleteManifestOptionsForm.d.ts +18 -0
  60. package/dist/pipelines/stages/deleteManifest/DeleteManifestStageConfig.d.ts +14 -0
  61. package/dist/pipelines/stages/deleteManifest/deleteManifestStage.d.ts +1 -0
  62. package/dist/pipelines/stages/deployManifest/CopyFromTemplateButton.d.ts +15 -0
  63. package/dist/pipelines/stages/deployManifest/DeployManifestStageConfig.d.ts +15 -0
  64. package/dist/pipelines/stages/deployManifest/DeployManifestStageForm.d.ts +31 -0
  65. package/dist/pipelines/stages/deployManifest/ManifestBindArtifactsSelector.d.ts +17 -0
  66. package/dist/pipelines/stages/deployManifest/ManifestCopier.d.ts +36 -0
  67. package/dist/pipelines/stages/deployManifest/ManifestDeploymentOptions.d.ts +34 -0
  68. package/dist/pipelines/stages/deployManifest/NamespaceSelector.d.ts +16 -0
  69. package/dist/pipelines/stages/deployManifest/deployManifest.validator.d.ts +2 -0
  70. package/dist/pipelines/stages/deployManifest/deployManifestStage.d.ts +1 -0
  71. package/dist/pipelines/stages/deployManifest/manifestStatus/DeployStatus.d.ts +23 -0
  72. package/dist/pipelines/stages/deployManifest/manifestStatus/DeployStatusPills.d.ts +8 -0
  73. package/dist/pipelines/stages/deployManifest/manifestStatus/ManifestDetailsLink.d.ts +20 -0
  74. package/dist/pipelines/stages/deployManifest/manifestStatus/ManifestEvents.d.ts +9 -0
  75. package/dist/pipelines/stages/deployManifest/manifestStatus/ManifestStatus.d.ts +8 -0
  76. package/dist/pipelines/stages/findArtifactsFromResource/FindArtifactsFromResourceConfig.d.ts +3 -0
  77. package/dist/pipelines/stages/findArtifactsFromResource/FindArtifactsFromResourceStageForm.d.ts +7 -0
  78. package/dist/pipelines/stages/findArtifactsFromResource/findArtifactsFromResourceStage.d.ts +1 -0
  79. package/dist/pipelines/stages/index.d.ts +8 -0
  80. package/dist/pipelines/stages/patchManifest/PatchManifestOptionsForm.d.ts +8 -0
  81. package/dist/pipelines/stages/patchManifest/PatchManifestStageConfig.d.ts +7 -0
  82. package/dist/pipelines/stages/patchManifest/PatchManifestStageForm.d.ts +21 -0
  83. package/dist/pipelines/stages/patchManifest/patchManifestStage.d.ts +4 -0
  84. package/dist/pipelines/stages/rolloutRestartManifest/RolloutRestartManifestStageConfig.d.ts +13 -0
  85. package/dist/pipelines/stages/rolloutRestartManifest/rolloutRestartManifestStage.d.ts +4 -0
  86. package/dist/pipelines/stages/runJob/KubernetesV2RunJobStageConfig.d.ts +31 -0
  87. package/dist/pipelines/stages/runJob/RunJobExecutionDetails.d.ts +7 -0
  88. package/dist/pipelines/stages/runJob/runJobStage.d.ts +1 -0
  89. package/dist/pipelines/stages/scaleManifest/ScaleManifestConfig.d.ts +3 -0
  90. package/dist/pipelines/stages/scaleManifest/ScaleManifestStageForm.d.ts +7 -0
  91. package/dist/pipelines/stages/scaleManifest/scaleManifestStage.d.ts +1 -0
  92. package/dist/pipelines/stages/traffic/ManifestTrafficStageConfig.d.ts +11 -0
  93. package/dist/pipelines/stages/traffic/disableManifest.stage.d.ts +1 -0
  94. package/dist/pipelines/stages/traffic/enableManifest.stage.d.ts +1 -0
  95. package/dist/pipelines/stages/undoRolloutManifest/UndoRolloutManifestConfig.d.ts +3 -0
  96. package/dist/pipelines/stages/undoRolloutManifest/UndoRolloutManifestStageForm.d.ts +7 -0
  97. package/dist/pipelines/stages/undoRolloutManifest/undoRolloutManifestStage.d.ts +1 -0
  98. package/dist/pipelines/stages/validators/manifestSelectorValidators.d.ts +2 -0
  99. package/dist/pipelines/validation/manifestSelector.validator.d.ts +8 -0
  100. package/dist/rawResource/component/K8sResources.d.ts +25 -0
  101. package/dist/rawResource/component/K8sResourcesFilters.d.ts +20 -0
  102. package/dist/rawResource/component/RawResourceUtils.d.ts +5 -0
  103. package/dist/rawResource/component/group/RawResouceGroup.d.ts +15 -0
  104. package/dist/rawResource/component/group/RawResource.d.ts +12 -0
  105. package/dist/rawResource/component/group/RawResourceDetails.d.ts +32 -0
  106. package/dist/rawResource/component/group/RawResourceGroups.d.ts +14 -0
  107. package/dist/rawResource/controller/FiltersPubSub.d.ts +12 -0
  108. package/dist/rawResource/index.d.ts +1 -0
  109. package/dist/rawResource/model/resource.d.ts +17 -0
  110. package/dist/rawResource/rawResource.dataSource.d.ts +2 -0
  111. package/dist/rawResource/rawResource.module.d.ts +1 -0
  112. package/dist/rawResource/rawResource.states.d.ts +6 -0
  113. package/dist/reactShims/index.d.ts +1 -0
  114. package/dist/reactShims/kubernetes.react.injector.d.ts +11 -0
  115. package/dist/reactShims/kubernetes.react.module.d.ts +1 -0
  116. package/dist/resources/ResourceDetails.d.ts +17 -0
  117. package/dist/resources/resources.state.d.ts +7 -0
  118. package/dist/rolloutStrategy/bluegreen.strategy.d.ts +2 -0
  119. package/dist/rolloutStrategy/highlander.strategy.d.ts +2 -0
  120. package/dist/rolloutStrategy/index.d.ts +1 -0
  121. package/dist/rolloutStrategy/none.strategy.d.ts +2 -0
  122. package/dist/rolloutStrategy/redblack.strategy.d.ts +2 -0
  123. package/dist/securityGroup/details/details.controller.d.ts +1 -0
  124. package/dist/securityGroup/index.d.ts +1 -0
  125. package/dist/securityGroup/securityGroup.reader.d.ts +4 -0
  126. package/dist/securityGroup/transformer.d.ts +1 -0
  127. package/dist/serverGroup/details/KubernetesServerGroupActions.d.ts +7 -0
  128. package/dist/serverGroup/details/kubernetesServerGroupDetailsGetter.d.ts +4 -0
  129. package/dist/serverGroup/details/sections/IKubernetesServerGroupDetailsSectionProps.d.ts +5 -0
  130. package/dist/serverGroup/details/sections/ServerGroupAnnotationCustomSection.d.ts +3 -0
  131. package/dist/serverGroup/details/sections/ServerGroupEventsSection.d.ts +3 -0
  132. package/dist/serverGroup/details/sections/ServerGroupHealthSection.d.ts +3 -0
  133. package/dist/serverGroup/details/sections/ServerGroupImagesSection.d.ts +3 -0
  134. package/dist/serverGroup/details/sections/ServerGroupInformationSection.d.ts +3 -0
  135. package/dist/serverGroup/details/sections/ServerGroupLabelsSection.d.ts +3 -0
  136. package/dist/serverGroup/details/sections/ServerGroupManifestStatusSection.d.ts +3 -0
  137. package/dist/serverGroup/details/sections/ServerGroupSizeSection.d.ts +3 -0
  138. package/dist/serverGroup/details/sections/index.d.ts +9 -0
  139. package/dist/serverGroup/details/useManifest.d.ts +8 -0
  140. package/dist/serverGroup/index.d.ts +3 -0
  141. package/dist/serverGroup/serverGroupCommandBuilder.d.ts +5 -0
  142. package/dist/serverGroup/serverGroupTransformer.d.ts +5 -0
  143. package/dist/serverGroupManager/details/ServerGroupManagerActions.d.ts +9 -0
  144. package/dist/serverGroupManager/details/ServerGroupManagerDetails.d.ts +7 -0
  145. package/dist/serverGroupManager/details/sections/IKubernetesServerGroupManagerDetailsSectionProps.d.ts +6 -0
  146. package/dist/serverGroupManager/details/sections/ServerGroupManagerAnnotationCustomSection.d.ts +3 -0
  147. package/dist/serverGroupManager/details/sections/ServerGroupManagerArtifactsSection.d.ts +3 -0
  148. package/dist/serverGroupManager/details/sections/ServerGroupManagerEventsSection.d.ts +3 -0
  149. package/dist/serverGroupManager/details/sections/ServerGroupManagerInformationSection.d.ts +3 -0
  150. package/dist/serverGroupManager/details/sections/ServerGroupManagerLabelsSection.d.ts +3 -0
  151. package/dist/serverGroupManager/details/sections/ServerGroupManagerManifestConditionSection.d.ts +3 -0
  152. package/dist/serverGroupManager/details/sections/ServerGroupManagerManifestStatusSection.d.ts +3 -0
  153. package/dist/serverGroupManager/details/sections/index.d.ts +8 -0
  154. package/dist/serverGroupManager/details/useKubernetesServerGroupManagerDetails.d.ts +4 -0
  155. package/dist/serverGroupManager/index.d.ts +1 -0
  156. package/dist/validation/applicationName.validator.d.ts +9 -0
  157. package/package.json +58 -0
  158. package/src/help/kubernetes.help.ts +236 -0
  159. package/src/index.ts +8 -0
  160. package/src/instance/details/details.controller.ts +186 -0
  161. package/src/instance/details/details.html +80 -0
  162. package/src/instance/index.ts +1 -0
  163. package/src/interfaces/index.ts +1 -0
  164. package/src/interfaces/infrastructure.types.ts +40 -0
  165. package/src/kubernetes.module.ts +155 -0
  166. package/src/loadBalancer/details/details.controller.ts +101 -0
  167. package/src/loadBalancer/details/details.html +187 -0
  168. package/src/loadBalancer/index.ts +1 -0
  169. package/src/loadBalancer/transformer.ts +60 -0
  170. package/src/logo/kubernetes.icon.svg +102 -0
  171. package/src/logo/kubernetes.logo.less +6 -0
  172. package/src/logo/kubernetes.logo.svg +1 -0
  173. package/src/manifest/AnnotationCustomSections.tsx +6 -0
  174. package/src/manifest/IManifestCoordinates.ts +5 -0
  175. package/src/manifest/ManifestImageDetails.spec.tsx +76 -0
  176. package/src/manifest/ManifestImageDetails.tsx +64 -0
  177. package/src/manifest/ManifestKindSearch.tsx +31 -0
  178. package/src/manifest/ManifestLabels.tsx +31 -0
  179. package/src/manifest/ManifestQos.tsx +68 -0
  180. package/src/manifest/ManifestResources.tsx +69 -0
  181. package/src/manifest/ManifestSource.ts +4 -0
  182. package/src/manifest/annotationCustomSections.component.ts +114 -0
  183. package/src/manifest/artifact/ManifestArtifact.tsx +16 -0
  184. package/src/manifest/delete/delete.controller.ts +80 -0
  185. package/src/manifest/delete/delete.html +42 -0
  186. package/src/manifest/delete/deleteOptionsForm.component.ts +52 -0
  187. package/src/manifest/editor/json/JsonEditor.tsx +56 -0
  188. package/src/manifest/editor/json/jsonEditor.component.ts +12 -0
  189. package/src/manifest/index.ts +10 -0
  190. package/src/manifest/manifest.service.ts +90 -0
  191. package/src/manifest/manifestCommandBuilder.service.ts +126 -0
  192. package/src/manifest/manifestEvents.component.ts +12 -0
  193. package/src/manifest/manifestImageDetails.component.ts +12 -0
  194. package/src/manifest/manifestLabels.component.ts +12 -0
  195. package/src/manifest/manifestLabels.less +3 -0
  196. package/src/manifest/manifestQos.component.ts +12 -0
  197. package/src/manifest/manifestResources.component.ts +12 -0
  198. package/src/manifest/rollout/RollingRestart.tsx +46 -0
  199. package/src/manifest/rollout/pause.controller.ts +66 -0
  200. package/src/manifest/rollout/pause.html +28 -0
  201. package/src/manifest/rollout/resume.controller.ts +66 -0
  202. package/src/manifest/rollout/resume.html +28 -0
  203. package/src/manifest/rollout/undo.controller.ts +74 -0
  204. package/src/manifest/rollout/undo.html +44 -0
  205. package/src/manifest/scale/ScaleSettingsForm.tsx +43 -0
  206. package/src/manifest/scale/scale.controller.ts +75 -0
  207. package/src/manifest/scale/scale.html +32 -0
  208. package/src/manifest/scale/scaleSettingsForm.component.ts +11 -0
  209. package/src/manifest/selector/IManifestLabelSelector.ts +19 -0
  210. package/src/manifest/selector/IManifestSelector.ts +64 -0
  211. package/src/manifest/selector/ManifestSelector.spec.tsx +414 -0
  212. package/src/manifest/selector/ManifestSelector.tsx +424 -0
  213. package/src/manifest/selector/labelEditor/LabelEditor.spec.tsx +81 -0
  214. package/src/manifest/selector/labelEditor/LabelEditor.tsx +126 -0
  215. package/src/manifest/selector/labelEditor/labelEditor.less +3 -0
  216. package/src/manifest/selector/selector.component.ts +17 -0
  217. package/src/manifest/status/ManifestCondition.tsx +32 -0
  218. package/src/manifest/status/ManifestStatus.tsx +39 -0
  219. package/src/manifest/status/condition.component.ts +12 -0
  220. package/src/manifest/status/status.component.ts +11 -0
  221. package/src/manifest/traffic/ManifestTrafficService.spec.ts +30 -0
  222. package/src/manifest/traffic/ManifestTrafficService.ts +67 -0
  223. package/src/manifest/wizard/BasicSettings.tsx +57 -0
  224. package/src/manifest/wizard/ManifestEntry.tsx +46 -0
  225. package/src/manifest/wizard/ManifestWizard.tsx +94 -0
  226. package/src/pipelines/stages/ManifestCoordinates.spec.tsx +90 -0
  227. package/src/pipelines/stages/ManifestCoordinates.tsx +128 -0
  228. package/src/pipelines/stages/ManifestExecutionDetails.tsx +58 -0
  229. package/src/pipelines/stages/deleteManifest/DeleteManifestOptionsForm.spec.tsx +85 -0
  230. package/src/pipelines/stages/deleteManifest/DeleteManifestOptionsForm.tsx +87 -0
  231. package/src/pipelines/stages/deleteManifest/DeleteManifestStageConfig.tsx +62 -0
  232. package/src/pipelines/stages/deleteManifest/deleteManifestOptionsForm.less +9 -0
  233. package/src/pipelines/stages/deleteManifest/deleteManifestStage.ts +21 -0
  234. package/src/pipelines/stages/deployManifest/CopyFromTemplateButton.tsx +45 -0
  235. package/src/pipelines/stages/deployManifest/DeployManifestStageConfig.tsx +77 -0
  236. package/src/pipelines/stages/deployManifest/DeployManifestStageForm.tsx +265 -0
  237. package/src/pipelines/stages/deployManifest/ManifestBindArtifactsSelector.tsx +69 -0
  238. package/src/pipelines/stages/deployManifest/ManifestCopier.spec.ts +110 -0
  239. package/src/pipelines/stages/deployManifest/ManifestCopier.tsx +222 -0
  240. package/src/pipelines/stages/deployManifest/ManifestDeploymentOptions.spec.tsx +75 -0
  241. package/src/pipelines/stages/deployManifest/ManifestDeploymentOptions.tsx +203 -0
  242. package/src/pipelines/stages/deployManifest/NamespaceSelector.tsx +40 -0
  243. package/src/pipelines/stages/deployManifest/deployManifest.validator.ts +38 -0
  244. package/src/pipelines/stages/deployManifest/deployManifestStage.ts +28 -0
  245. package/src/pipelines/stages/deployManifest/manifestStatus/DeployStatus.less +11 -0
  246. package/src/pipelines/stages/deployManifest/manifestStatus/DeployStatus.tsx +120 -0
  247. package/src/pipelines/stages/deployManifest/manifestStatus/DeployStatusPills.tsx +47 -0
  248. package/src/pipelines/stages/deployManifest/manifestStatus/ManifestDetailsLink.tsx +92 -0
  249. package/src/pipelines/stages/deployManifest/manifestStatus/ManifestEvents.tsx +87 -0
  250. package/src/pipelines/stages/deployManifest/manifestStatus/ManifestStatus.less +24 -0
  251. package/src/pipelines/stages/deployManifest/manifestStatus/ManifestStatus.tsx +46 -0
  252. package/src/pipelines/stages/findArtifactsFromResource/FindArtifactsFromResourceConfig.tsx +35 -0
  253. package/src/pipelines/stages/findArtifactsFromResource/FindArtifactsFromResourceStageForm.tsx +37 -0
  254. package/src/pipelines/stages/findArtifactsFromResource/findArtifactsFromResourceStage.ts +21 -0
  255. package/src/pipelines/stages/index.ts +8 -0
  256. package/src/pipelines/stages/patchManifest/PatchManifestOptionsForm.tsx +35 -0
  257. package/src/pipelines/stages/patchManifest/PatchManifestStageConfig.tsx +57 -0
  258. package/src/pipelines/stages/patchManifest/PatchManifestStageForm.tsx +157 -0
  259. package/src/pipelines/stages/patchManifest/patchManifestStage.ts +30 -0
  260. package/src/pipelines/stages/rolloutRestartManifest/RolloutRestartManifestStageConfig.tsx +46 -0
  261. package/src/pipelines/stages/rolloutRestartManifest/rolloutRestartManifestStage.ts +20 -0
  262. package/src/pipelines/stages/runJob/KubernetesV2RunJobStageConfig.tsx +242 -0
  263. package/src/pipelines/stages/runJob/RunJobExecutionDetails.tsx +67 -0
  264. package/src/pipelines/stages/runJob/runJobStage.ts +39 -0
  265. package/src/pipelines/stages/scaleManifest/ScaleManifestConfig.tsx +38 -0
  266. package/src/pipelines/stages/scaleManifest/ScaleManifestStageForm.tsx +46 -0
  267. package/src/pipelines/stages/scaleManifest/scaleManifestStage.ts +24 -0
  268. package/src/pipelines/stages/traffic/ManifestTrafficStageConfig.tsx +44 -0
  269. package/src/pipelines/stages/traffic/disableManifest.stage.ts +26 -0
  270. package/src/pipelines/stages/traffic/enableManifest.stage.ts +26 -0
  271. package/src/pipelines/stages/undoRolloutManifest/UndoRolloutManifestConfig.tsx +37 -0
  272. package/src/pipelines/stages/undoRolloutManifest/UndoRolloutManifestStageForm.tsx +60 -0
  273. package/src/pipelines/stages/undoRolloutManifest/undoRolloutManifestStage.ts +21 -0
  274. package/src/pipelines/stages/validators/manifestSelectorValidators.ts +43 -0
  275. package/src/pipelines/validation/manifestSelector.validator.ts +36 -0
  276. package/src/rawResource/component/K8sResources.less +9 -0
  277. package/src/rawResource/component/K8sResources.tsx +112 -0
  278. package/src/rawResource/component/K8sResourcesFilters.tsx +112 -0
  279. package/src/rawResource/component/RawResourceUtils.ts +19 -0
  280. package/src/rawResource/component/group/RawResouceGroup.tsx +41 -0
  281. package/src/rawResource/component/group/RawResource.less +79 -0
  282. package/src/rawResource/component/group/RawResource.tsx +51 -0
  283. package/src/rawResource/component/group/RawResourceDetails.tsx +236 -0
  284. package/src/rawResource/component/group/RawResourceGroups.tsx +53 -0
  285. package/src/rawResource/controller/FiltersPubSub.ts +35 -0
  286. package/src/rawResource/index.ts +1 -0
  287. package/src/rawResource/model/resource.ts +18 -0
  288. package/src/rawResource/rawResource.dataSource.ts +39 -0
  289. package/src/rawResource/rawResource.module.ts +8 -0
  290. package/src/rawResource/rawResource.states.ts +64 -0
  291. package/src/reactShims/index.ts +1 -0
  292. package/src/reactShims/kubernetes.react.injector.ts +30 -0
  293. package/src/reactShims/kubernetes.react.module.ts +12 -0
  294. package/src/resources/ResourceDetails.tsx +121 -0
  295. package/src/resources/resources.state.ts +45 -0
  296. package/src/rolloutStrategy/bluegreen.strategy.ts +7 -0
  297. package/src/rolloutStrategy/highlander.strategy.ts +7 -0
  298. package/src/rolloutStrategy/index.ts +6 -0
  299. package/src/rolloutStrategy/none.strategy.ts +8 -0
  300. package/src/rolloutStrategy/redblack.strategy.ts +7 -0
  301. package/src/securityGroup/details/details.controller.ts +118 -0
  302. package/src/securityGroup/details/details.html +91 -0
  303. package/src/securityGroup/index.ts +1 -0
  304. package/src/securityGroup/securityGroup.reader.ts +11 -0
  305. package/src/securityGroup/transformer.ts +19 -0
  306. package/src/serverGroup/details/KubernetesServerGroupActions.tsx +138 -0
  307. package/src/serverGroup/details/kubernetesServerGroupDetailsGetter.ts +63 -0
  308. package/src/serverGroup/details/sections/IKubernetesServerGroupDetailsSectionProps.ts +6 -0
  309. package/src/serverGroup/details/sections/ServerGroupAnnotationCustomSection.tsx +11 -0
  310. package/src/serverGroup/details/sections/ServerGroupEventsSection.tsx +14 -0
  311. package/src/serverGroup/details/sections/ServerGroupHealthSection.tsx +19 -0
  312. package/src/serverGroup/details/sections/ServerGroupImagesSection.tsx +14 -0
  313. package/src/serverGroup/details/sections/ServerGroupInformationSection.tsx +46 -0
  314. package/src/serverGroup/details/sections/ServerGroupLabelsSection.tsx +14 -0
  315. package/src/serverGroup/details/sections/ServerGroupManifestStatusSection.tsx +9 -0
  316. package/src/serverGroup/details/sections/ServerGroupSizeSection.tsx +35 -0
  317. package/src/serverGroup/details/sections/index.ts +9 -0
  318. package/src/serverGroup/details/useManifest.ts +42 -0
  319. package/src/serverGroup/index.ts +3 -0
  320. package/src/serverGroup/serverGroupCommandBuilder.ts +9 -0
  321. package/src/serverGroup/serverGroupTransformer.spec.ts +67 -0
  322. package/src/serverGroup/serverGroupTransformer.ts +27 -0
  323. package/src/serverGroupManager/details/ServerGroupManagerActions.tsx +171 -0
  324. package/src/serverGroupManager/details/ServerGroupManagerDetails.tsx +72 -0
  325. package/src/serverGroupManager/details/sections/IKubernetesServerGroupManagerDetailsSectionProps.ts +7 -0
  326. package/src/serverGroupManager/details/sections/ServerGroupManagerAnnotationCustomSection.tsx +12 -0
  327. package/src/serverGroupManager/details/sections/ServerGroupManagerArtifactsSection.tsx +18 -0
  328. package/src/serverGroupManager/details/sections/ServerGroupManagerEventsSection.tsx +14 -0
  329. package/src/serverGroupManager/details/sections/ServerGroupManagerInformationSection.tsx +51 -0
  330. package/src/serverGroupManager/details/sections/ServerGroupManagerLabelsSection.tsx +14 -0
  331. package/src/serverGroupManager/details/sections/ServerGroupManagerManifestConditionSection.tsx +21 -0
  332. package/src/serverGroupManager/details/sections/ServerGroupManagerManifestStatusSection.tsx +10 -0
  333. package/src/serverGroupManager/details/sections/index.ts +8 -0
  334. package/src/serverGroupManager/details/useKubernetesServerGroupManagerDetails.tsx +53 -0
  335. package/src/serverGroupManager/index.ts +1 -0
  336. package/src/validation/applicationName.validator.spec.ts +19 -0
  337. package/src/validation/applicationName.validator.ts +44 -0
@@ -0,0 +1,52 @@
1
+ import type { IComponentOptions, IController } from 'angular';
2
+ import { module } from 'angular';
3
+
4
+ import type { IDeleteOptions } from './delete.controller';
5
+
6
+ class KubernetesDeleteManifestOptionsFormCtrl implements IController {
7
+ public options: IDeleteOptions;
8
+ }
9
+
10
+ const kubernetesDeletManifestOptionsFormComponent: IComponentOptions = {
11
+ bindings: { options: '=' },
12
+ controller: KubernetesDeleteManifestOptionsFormCtrl,
13
+ controllerAs: 'ctrl',
14
+ template: `
15
+ <div class="form-horizontal">
16
+ <div class="form-group form-inline">
17
+ <div class="col-md-3 sm-label-right">
18
+ Cascading
19
+ <help-field key="kubernetes.manifest.delete.cascading"></help-field>
20
+ </div>
21
+ <div class="col-md-3">
22
+ <div class="input-group">
23
+ <input type="checkbox"
24
+ ng-model="ctrl.options.cascading"/>
25
+ </div>
26
+ </div>
27
+ </div>
28
+ <div class="form-group form-inline">
29
+ <div class="col-md-3 sm-label-right">
30
+ Grace Period
31
+ <help-field key="kubernetes.manifest.delete.gracePeriod"></help-field>
32
+ </div>
33
+ <div class="col-md-4">
34
+ <div class="input-group">
35
+ <input type="number"
36
+ class="form-control input-sm highlight-pristine"
37
+ ng-model="ctrl.options.gracePeriodSeconds"
38
+ min="0"/>
39
+ <span class="input-group-addon">second<span ng-if="ctrl.options.gracePeriodSeconds !== 1">s</span></span>
40
+ </div>
41
+ </div>
42
+ </div>
43
+ </div>
44
+ `,
45
+ };
46
+
47
+ export const KUBERNETES_DELETE_MANIFEST_OPTIONS_FORM =
48
+ 'spinnaker.kubernetes.v2.kubernetes.manifest.delete.options.component';
49
+ module(KUBERNETES_DELETE_MANIFEST_OPTIONS_FORM, []).component(
50
+ 'kubernetesDeleteManifestOptionsForm',
51
+ kubernetesDeletManifestOptionsFormComponent,
52
+ );
@@ -0,0 +1,56 @@
1
+ import 'brace/mode/json';
2
+ import 'brace/theme/textmate';
3
+ import { $log } from 'ngimport';
4
+ import React from 'react';
5
+ import AceEditor from 'react-ace';
6
+
7
+ export interface IJsonEditorProps {
8
+ value: string;
9
+ onChange(raw: string, obj: any): void;
10
+ }
11
+
12
+ export const JSON_EDITOR_TAB_SIZE = 2;
13
+
14
+ export class JsonEditor extends React.Component<IJsonEditorProps> {
15
+ private handleChange = (raw: string) => {
16
+ try {
17
+ const obj = JSON.parse(raw);
18
+ this.props.onChange
19
+ ? this.props.onChange(raw, obj)
20
+ : $log.warn('No `onChange` handler provided for JSON editor.');
21
+ } catch (e) {
22
+ this.props.onChange
23
+ ? this.props.onChange(raw, null)
24
+ : $log.warn('No `onChange` handler provided for JSON editor.');
25
+ $log.warn(`Error loading JSON from string ${raw}: `, e);
26
+ }
27
+ };
28
+
29
+ public render = () => {
30
+ return (
31
+ <AceEditor
32
+ mode="json"
33
+ theme="textmate"
34
+ name="json-editor"
35
+ style={{ width: 'inherit' }}
36
+ onChange={this.handleChange}
37
+ fontSize={12}
38
+ showGutter={true}
39
+ cursorStart={0}
40
+ showPrintMargin={false}
41
+ minLines={50}
42
+ maxLines={100}
43
+ highlightActiveLine={true}
44
+ value={this.props.value || undefined}
45
+ setOptions={{
46
+ firstLineNumber: 1,
47
+ tabSize: JSON_EDITOR_TAB_SIZE,
48
+ showLineNumbers: false,
49
+ showFoldWidgets: false,
50
+ }}
51
+ editorProps={{ $blockScrolling: Infinity }}
52
+ className="ace-editor"
53
+ />
54
+ );
55
+ };
56
+ }
@@ -0,0 +1,12 @@
1
+ import { module } from 'angular';
2
+ import { react2angular } from 'react2angular';
3
+
4
+ import { withErrorBoundary } from '@spinnaker/core';
5
+
6
+ import { JsonEditor } from './JsonEditor';
7
+
8
+ export const JSON_EDITOR_COMPONENT = 'spinnaker.kubernetes.jsonEditor.component';
9
+ module(JSON_EDITOR_COMPONENT, []).component(
10
+ 'jsonEditor',
11
+ react2angular(withErrorBoundary(JsonEditor, 'jsonEditor'), ['onChange', 'value']),
12
+ );
@@ -0,0 +1,10 @@
1
+ export * from './manifest.service';
2
+ export * from './manifestCommandBuilder.service';
3
+ export * from './IManifestCoordinates';
4
+ export * from './artifact/ManifestArtifact';
5
+ export * from './delete/delete.controller';
6
+ export * from './rollout/pause.controller';
7
+ export * from './rollout/undo.controller';
8
+ export * from './scale/scale.controller';
9
+ export * from './status/condition.component';
10
+ export * from './status/status.component';
@@ -0,0 +1,90 @@
1
+ import type { Application, IManifest } from '@spinnaker/core';
2
+ import { ManifestReader } from '@spinnaker/core';
3
+
4
+ export interface IStageManifest {
5
+ kind: string;
6
+ apiVersion: string;
7
+ metadata: {
8
+ namespace: string;
9
+ name: string;
10
+ };
11
+ }
12
+
13
+ export interface IManifestParams {
14
+ account: string;
15
+ location: string;
16
+ name: string;
17
+ }
18
+
19
+ export type IManifestCallback = (manifest: IManifest) => void;
20
+
21
+ export class KubernetesManifestService {
22
+ public static subscribe(app: Application, params: IManifestParams, fn: IManifestCallback): () => void {
23
+ KubernetesManifestService.updateManifest(params, fn);
24
+ return app.onRefresh(null, () => KubernetesManifestService.updateManifest(params, fn));
25
+ }
26
+
27
+ private static updateManifest(params: IManifestParams, fn: IManifestCallback) {
28
+ ManifestReader.getManifest(params.account, params.location, params.name).then((manifest) => fn(manifest));
29
+ }
30
+
31
+ public static manifestIdentifier(manifest: IStageManifest) {
32
+ const kind = manifest.kind.toLowerCase();
33
+ // manifest.metadata.namespace doesn't exist if it's a namespace being deployed
34
+ const namespace = (manifest.metadata.namespace || '_').toLowerCase();
35
+ const name = manifest.metadata.name.toLowerCase();
36
+ const apiVersion = (manifest.apiVersion || '_').toLowerCase();
37
+ // assuming this identifier is opaque and not parsed anywhere. Including the
38
+ // apiVersion will prevent collisions with CRD kinds without having any visible
39
+ // effect elsewhere
40
+ return `${namespace} ${kind} ${apiVersion} ${name}`;
41
+ }
42
+
43
+ public static stageManifestToManifestParams(manifest: IStageManifest, account: string): IManifestParams {
44
+ return {
45
+ account,
46
+ name: KubernetesManifestService.scopedKind(manifest) + ' ' + manifest.metadata.name,
47
+ location: manifest.metadata.namespace == null ? '_' : manifest.metadata.namespace,
48
+ };
49
+ }
50
+
51
+ private static apiGroup(manifest: IStageManifest): string {
52
+ const parts = (manifest.apiVersion || '_').split('/');
53
+ if (parts.length < 2) {
54
+ return '';
55
+ }
56
+ return parts[0];
57
+ }
58
+
59
+ private static isCRDGroup(manifest: IStageManifest): boolean {
60
+ return !KubernetesManifestService.BUILT_IN_GROUPS.includes(KubernetesManifestService.apiGroup(manifest));
61
+ }
62
+
63
+ private static scopedKind(manifest: IStageManifest): string {
64
+ if (KubernetesManifestService.isCRDGroup(manifest)) {
65
+ return manifest.kind + '.' + KubernetesManifestService.apiGroup(manifest);
66
+ }
67
+
68
+ return manifest.kind;
69
+ }
70
+
71
+ // from https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/
72
+ private static readonly BUILT_IN_GROUPS = [
73
+ '',
74
+ 'core',
75
+ 'batch',
76
+ 'apps',
77
+ 'extensions',
78
+ 'storage.k8s.io',
79
+ 'apiextensions.k8s.io',
80
+ 'apiregistration.k8s.io',
81
+ 'policy',
82
+ 'scheduling.k8s.io',
83
+ 'settings.k8s.io',
84
+ 'authorization.k8s.io',
85
+ 'authentication.k8s.io',
86
+ 'rbac.authorization.k8s.io',
87
+ 'certifcates.k8s.io',
88
+ 'networking.k8s.io',
89
+ ];
90
+ }
@@ -0,0 +1,126 @@
1
+ import { load } from 'js-yaml';
2
+ import { cloneDeep, has } from 'lodash';
3
+ import { $q } from 'ngimport';
4
+
5
+ import type { Application, IAccountDetails, IArtifactAccount, IMoniker } from '@spinnaker/core';
6
+ import { AccountService } from '@spinnaker/core';
7
+
8
+ import { ManifestSource } from './ManifestSource';
9
+
10
+ const LAST_APPLIED_CONFIGURATION = 'kubectl.kubernetes.io/last-applied-configuration';
11
+
12
+ export interface IKubernetesManifestCommandData {
13
+ command: IKubernetesManifestCommand;
14
+ metadata: IKubernetesManifestCommandMetadata;
15
+ }
16
+
17
+ export interface IKubernetesManifestCommand {
18
+ account: string;
19
+ cloudProvider: string;
20
+ manifest: any; // deprecated
21
+ manifests: any[];
22
+ relationships: IKubernetesManifestSpinnakerRelationships;
23
+ moniker: IMoniker;
24
+ manifestArtifactId?: string;
25
+ manifestArtifactAccount?: string;
26
+ source: ManifestSource;
27
+ versioned?: boolean;
28
+ }
29
+
30
+ export interface IKubernetesManifestCommandMetadata {
31
+ backingData: any;
32
+ }
33
+
34
+ export interface IKubernetesManifestSpinnakerRelationships {
35
+ loadBalancers?: string[];
36
+ securityGroups?: string[];
37
+ }
38
+
39
+ export class KubernetesManifestCommandBuilder {
40
+ // TODO(lwander) add explanatory error messages
41
+ public static manifestCommandIsValid(command: IKubernetesManifestCommand): boolean {
42
+ if (!command.moniker) {
43
+ return false;
44
+ }
45
+
46
+ if (!command.moniker.app) {
47
+ return false;
48
+ }
49
+
50
+ return true;
51
+ }
52
+
53
+ public static copyAndCleanCommand(input: IKubernetesManifestCommand): IKubernetesManifestCommand {
54
+ const command = cloneDeep(input);
55
+ return command;
56
+ }
57
+
58
+ public static buildNewManifestCommand(
59
+ app: Application,
60
+ sourceManifest?: any,
61
+ sourceMoniker?: IMoniker,
62
+ sourceAccount?: string,
63
+ ): PromiseLike<IKubernetesManifestCommandData> {
64
+ if (sourceManifest != null && has(sourceManifest, ['metadata', 'annotations', LAST_APPLIED_CONFIGURATION])) {
65
+ sourceManifest = load(sourceManifest.metadata.annotations[LAST_APPLIED_CONFIGURATION]);
66
+ }
67
+
68
+ const dataToFetch = {
69
+ accounts: AccountService.getAllAccountDetailsForProvider('kubernetes'),
70
+ artifactAccounts: AccountService.getArtifactAccounts(),
71
+ };
72
+
73
+ // TODO(dpeach): if no callers of this method are Angular controllers,
74
+ // $q.all may be safely replaced with Promise.all.
75
+ return $q
76
+ .all(dataToFetch)
77
+ .then((backingData: { accounts: IAccountDetails[]; artifactAccounts: IArtifactAccount[] }) => {
78
+ const { accounts, artifactAccounts } = backingData;
79
+
80
+ const account = accounts.some((a) => a.name === sourceAccount)
81
+ ? accounts.find((a) => a.name === sourceAccount).name
82
+ : accounts.length
83
+ ? accounts[0].name
84
+ : null;
85
+
86
+ let manifestArtifactAccount: string = null;
87
+ const [artifactAccountData] = artifactAccounts;
88
+ if (artifactAccountData) {
89
+ manifestArtifactAccount = artifactAccountData.name;
90
+ }
91
+
92
+ const cloudProvider = 'kubernetes';
93
+ const moniker = sourceMoniker || {
94
+ app: app.name,
95
+ };
96
+
97
+ const relationships = {
98
+ loadBalancers: [] as string[],
99
+ securityGroups: [] as string[],
100
+ };
101
+
102
+ const versioned: any = null;
103
+
104
+ return {
105
+ command: {
106
+ cloudProvider,
107
+ manifest: null,
108
+ manifests: Array.isArray(sourceManifest)
109
+ ? sourceManifest
110
+ : sourceManifest != null
111
+ ? [sourceManifest]
112
+ : null,
113
+ relationships,
114
+ moniker,
115
+ account,
116
+ versioned,
117
+ manifestArtifactAccount,
118
+ source: ManifestSource.TEXT,
119
+ },
120
+ metadata: {
121
+ backingData,
122
+ },
123
+ } as IKubernetesManifestCommandData;
124
+ });
125
+ }
126
+ }
@@ -0,0 +1,12 @@
1
+ import { module } from 'angular';
2
+ import { react2angular } from 'react2angular';
3
+
4
+ import { withErrorBoundary } from '@spinnaker/core';
5
+
6
+ import { ManifestEvents } from '../pipelines/stages/deployManifest/manifestStatus/ManifestEvents';
7
+
8
+ export const KUBERNETES_MANIFEST_EVENTS = 'spinnaker.kubernetes.v2.manifest.events';
9
+ module(KUBERNETES_MANIFEST_EVENTS, []).component(
10
+ 'kubernetesManifestEvents',
11
+ react2angular(withErrorBoundary(ManifestEvents, 'kubernetesManifestEvents'), ['manifest']),
12
+ );
@@ -0,0 +1,12 @@
1
+ import { module } from 'angular';
2
+ import { react2angular } from 'react2angular';
3
+
4
+ import { withErrorBoundary } from '@spinnaker/core';
5
+
6
+ import { ManifestImageDetails } from './ManifestImageDetails';
7
+
8
+ export const KUBERNETES_MANIFEST_IMAGE_DETAILS = 'spinnaker.kubernetes.v2.manifestImageDetails.component';
9
+ module(KUBERNETES_MANIFEST_IMAGE_DETAILS, []).component(
10
+ 'kubernetesManifestImageDetails',
11
+ react2angular(withErrorBoundary(ManifestImageDetails, 'kubernetesManifestImageDetails'), ['manifest']),
12
+ );
@@ -0,0 +1,12 @@
1
+ import { module } from 'angular';
2
+ import { react2angular } from 'react2angular';
3
+
4
+ import { withErrorBoundary } from '@spinnaker/core';
5
+
6
+ import { ManifestLabels } from './ManifestLabels';
7
+
8
+ export const KUBERNETES_MANIFEST_LABELS = 'spinnaker.kubernetes.v2.manifest.labels';
9
+ module(KUBERNETES_MANIFEST_LABELS, []).component(
10
+ 'kubernetesManifestLabels',
11
+ react2angular(withErrorBoundary(ManifestLabels, 'kubernetesManifestLabels'), ['manifest']),
12
+ );
@@ -0,0 +1,3 @@
1
+ .manifest-label {
2
+ margin: 2px;
3
+ }
@@ -0,0 +1,12 @@
1
+ import { module } from 'angular';
2
+ import { react2angular } from 'react2angular';
3
+
4
+ import { withErrorBoundary } from '@spinnaker/core';
5
+
6
+ import { ManifestQos } from './ManifestQos';
7
+
8
+ export const KUBERNETES_MANIFEST_QOS = 'spinnaker.kubernetes.v2.manifest.qos';
9
+ module(KUBERNETES_MANIFEST_QOS, []).component(
10
+ 'kubernetesManifestQos',
11
+ react2angular(withErrorBoundary(ManifestQos, 'kubernetesManifestQos'), ['manifest']),
12
+ );
@@ -0,0 +1,12 @@
1
+ import { module } from 'angular';
2
+ import { react2angular } from 'react2angular';
3
+
4
+ import { withErrorBoundary } from '@spinnaker/core';
5
+
6
+ import { ManifestResources } from './ManifestResources';
7
+
8
+ export const KUBERNETES_MANIFEST_RESOURCES = 'spinnaker.kubernetes.v2.manifest.resources';
9
+ module(KUBERNETES_MANIFEST_RESOURCES, []).component(
10
+ 'kubernetesManifestResources',
11
+ react2angular(withErrorBoundary(ManifestResources, 'kubernetesManifestResources'), ['manifest', 'metrics']),
12
+ );
@@ -0,0 +1,46 @@
1
+ import React from 'react';
2
+
3
+ import type { Application } from '@spinnaker/core';
4
+ import { ConfirmationModalService, ManifestWriter } from '@spinnaker/core';
5
+
6
+ import type { IKubernetesServerGroupManager } from '../../interfaces';
7
+
8
+ interface IRollingRestartProps {
9
+ application: Application;
10
+ serverGroupManager: IKubernetesServerGroupManager;
11
+ }
12
+
13
+ interface IRollingRestartParameters {
14
+ account: string;
15
+ cloudProvider: string;
16
+ location: string;
17
+ manifestName: string;
18
+ }
19
+
20
+ export function RollingRestart({ application, serverGroupManager }: IRollingRestartProps) {
21
+ function rollingRestart() {
22
+ const rollingRestartParameters: IRollingRestartParameters = {
23
+ account: serverGroupManager.account,
24
+ cloudProvider: 'kubernetes',
25
+ location: serverGroupManager.namespace,
26
+ manifestName: serverGroupManager.name,
27
+ };
28
+ ConfirmationModalService.confirm({
29
+ account: serverGroupManager.account,
30
+ askForReason: true,
31
+ header: `Initiate rolling restart of ${serverGroupManager.name}`,
32
+ submitMethod: () => {
33
+ return ManifestWriter.rollingRestartManifest(rollingRestartParameters, application);
34
+ },
35
+ taskMonitorConfig: {
36
+ application,
37
+ title: `Rolling restart of ${serverGroupManager.name}`,
38
+ },
39
+ });
40
+ }
41
+ return (
42
+ <li>
43
+ <a onClick={rollingRestart}>Rolling Restart</a>
44
+ </li>
45
+ );
46
+ }
@@ -0,0 +1,66 @@
1
+ import type { IController } from 'angular';
2
+ import { copy, module } from 'angular';
3
+ import type { IModalServiceInstance } from 'angular-ui-bootstrap';
4
+
5
+ import type { Application } from '@spinnaker/core';
6
+ import { ManifestWriter, TaskMonitor } from '@spinnaker/core';
7
+ import type { IManifestCoordinates } from '../IManifestCoordinates';
8
+
9
+ interface IPauseRolloutCommand {
10
+ manifestName: string;
11
+ location: string;
12
+ account: string;
13
+ reason: string;
14
+ }
15
+
16
+ class KubernetesManifestPauseRolloutController implements IController {
17
+ public taskMonitor: TaskMonitor;
18
+ public command: IPauseRolloutCommand;
19
+ public verification = {
20
+ verified: false,
21
+ };
22
+
23
+ public static $inject = ['coordinates', '$uibModalInstance', 'application'];
24
+ constructor(
25
+ coordinates: IManifestCoordinates,
26
+ private $uibModalInstance: IModalServiceInstance,
27
+ private application: Application,
28
+ ) {
29
+ this.taskMonitor = new TaskMonitor({
30
+ title: `Pause rollout of ${coordinates.name} in ${coordinates.namespace}`,
31
+ application,
32
+ modalInstance: $uibModalInstance,
33
+ });
34
+
35
+ this.command = {
36
+ manifestName: coordinates.name,
37
+ location: coordinates.namespace,
38
+ account: coordinates.account,
39
+ reason: null,
40
+ };
41
+ }
42
+
43
+ public isValid(): boolean {
44
+ return this.verification.verified;
45
+ }
46
+
47
+ public cancel(): void {
48
+ this.$uibModalInstance.dismiss();
49
+ }
50
+
51
+ public pauseRollout(): void {
52
+ this.taskMonitor.submit(() => {
53
+ const payload = copy(this.command) as any;
54
+ payload.cloudProvider = 'kubernetes';
55
+
56
+ return ManifestWriter.pauseRolloutManifest(payload, this.application);
57
+ });
58
+ }
59
+ }
60
+
61
+ export const KUBERNETES_MANIFEST_PAUSE_ROLLOUT_CTRL = 'spinnaker.kubernetes.v2.manifest.pauseRollout.controller';
62
+
63
+ module(KUBERNETES_MANIFEST_PAUSE_ROLLOUT_CTRL, []).controller(
64
+ 'kubernetesV2ManifestPauseRolloutCtrl',
65
+ KubernetesManifestPauseRolloutController,
66
+ );
@@ -0,0 +1,28 @@
1
+ <div modal-page class="confirmation-modal">
2
+ <task-monitor monitor="ctrl.taskMonitor"></task-monitor>
3
+ <form role="form" name="pauseRolloutForm">
4
+ <modal-close dismiss="$dismiss()"></modal-close>
5
+ <div class="modal-header">
6
+ <h4 class="modal-title">
7
+ Pause rollout of {{ctrl.command.manifestName | robotToHuman}} in {{ctrl.command.location}}
8
+ </h4>
9
+ </div>
10
+ <div class="modal-body confirmation-modal">
11
+ <task-reason command="ctrl.command"></task-reason>
12
+ </div>
13
+ <div class="modal-footer">
14
+ <user-verification account="ctrl.command.account" verification="ctrl.verification"></user-verification>
15
+ <button type="submit" ng-click="ctrl.pauseRollout()" style="display: none"></button>
16
+ <!-- Allows form submission via enter keypress-->
17
+ <button class="btn btn-default" ng-click="ctrl.cancel()">Cancel</button>
18
+ <button
19
+ type="submit"
20
+ class="btn btn-primary"
21
+ ng-click="ctrl.pauseRollout()"
22
+ ng-disabled="!ctrl.isValid() || !pauseRolloutForm.$valid"
23
+ >
24
+ Submit
25
+ </button>
26
+ </div>
27
+ </form>
28
+ </div>
@@ -0,0 +1,66 @@
1
+ import type { IController } from 'angular';
2
+ import { copy, module } from 'angular';
3
+ import type { IModalServiceInstance } from 'angular-ui-bootstrap';
4
+
5
+ import type { Application } from '@spinnaker/core';
6
+ import { ManifestWriter, TaskMonitor } from '@spinnaker/core';
7
+ import type { IManifestCoordinates } from '../IManifestCoordinates';
8
+
9
+ interface IResumeRolloutCommand {
10
+ manifestName: string;
11
+ location: string;
12
+ account: string;
13
+ reason: string;
14
+ }
15
+
16
+ class KubernetesManifestResumeRolloutController implements IController {
17
+ public taskMonitor: TaskMonitor;
18
+ public command: IResumeRolloutCommand;
19
+ public verification = {
20
+ verified: false,
21
+ };
22
+
23
+ public static $inject = ['coordinates', '$uibModalInstance', 'application'];
24
+ constructor(
25
+ coordinates: IManifestCoordinates,
26
+ private $uibModalInstance: IModalServiceInstance,
27
+ private application: Application,
28
+ ) {
29
+ this.taskMonitor = new TaskMonitor({
30
+ title: `Resume rollout of ${coordinates.name} in ${coordinates.namespace}`,
31
+ application,
32
+ modalInstance: $uibModalInstance,
33
+ });
34
+
35
+ this.command = {
36
+ manifestName: coordinates.name,
37
+ location: coordinates.namespace,
38
+ account: coordinates.account,
39
+ reason: null,
40
+ };
41
+ }
42
+
43
+ public isValid(): boolean {
44
+ return this.verification.verified;
45
+ }
46
+
47
+ public cancel(): void {
48
+ this.$uibModalInstance.dismiss();
49
+ }
50
+
51
+ public resumeRollout(): void {
52
+ this.taskMonitor.submit(() => {
53
+ const payload = copy(this.command) as any;
54
+ payload.cloudProvider = 'kubernetes';
55
+
56
+ return ManifestWriter.resumeRolloutManifest(payload, this.application);
57
+ });
58
+ }
59
+ }
60
+
61
+ export const KUBERNETES_MANIFEST_RESUME_ROLLOUT_CTRL = 'spinnaker.kubernetes.v2.manifest.resumeRollout.controller';
62
+
63
+ module(KUBERNETES_MANIFEST_RESUME_ROLLOUT_CTRL, []).controller(
64
+ 'kubernetesV2ManifestResumeRolloutCtrl',
65
+ KubernetesManifestResumeRolloutController,
66
+ );
@@ -0,0 +1,28 @@
1
+ <div modal-page class="confirmation-modal">
2
+ <task-monitor monitor="ctrl.taskMonitor"></task-monitor>
3
+ <form role="form" name="resumeRolloutForm">
4
+ <modal-close dismiss="$dismiss()"></modal-close>
5
+ <div class="modal-header">
6
+ <h4 class="modal-title">
7
+ Resume rollout of {{ctrl.command.manifestName | robotToHuman}} in {{ctrl.command.location}}
8
+ </h4>
9
+ </div>
10
+ <div class="modal-body confirmation-modal">
11
+ <task-reason command="ctrl.command"></task-reason>
12
+ </div>
13
+ <div class="modal-footer">
14
+ <user-verification account="ctrl.command.account" verification="ctrl.verification"></user-verification>
15
+ <button type="submit" ng-click="ctrl.resumeRollout()" style="display: none"></button>
16
+ <!-- Allows form submission via enter keypress-->
17
+ <button class="btn btn-default" ng-click="ctrl.cancel()">Cancel</button>
18
+ <button
19
+ type="submit"
20
+ class="btn btn-primary"
21
+ ng-click="ctrl.resumeRollout()"
22
+ ng-disabled="!ctrl.isValid() || !resumeRolloutForm.$valid"
23
+ >
24
+ Submit
25
+ </button>
26
+ </div>
27
+ </form>
28
+ </div>