@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,171 @@
1
+ import { orderBy } from 'lodash';
2
+ import React from 'react';
3
+ import { Dropdown, MenuItem } from 'react-bootstrap';
4
+
5
+ import type { Application, IManifest } from '@spinnaker/core';
6
+ import {
7
+ AddEntityTagLinks,
8
+ ClusterTargetBuilder,
9
+ IfFeatureEnabled,
10
+ ModalInjector,
11
+ NameUtils,
12
+ robotToHuman,
13
+ SETTINGS,
14
+ } from '@spinnaker/core';
15
+
16
+ import type { IKubernetesServerGroupManager } from '../../interfaces';
17
+ import { KubernetesManifestCommandBuilder } from '../../manifest';
18
+ import { RollingRestart } from '../../manifest/rollout/RollingRestart';
19
+ import { ManifestWizard } from '../../manifest/wizard/ManifestWizard';
20
+
21
+ export interface IServerGroupManagerActionsProps {
22
+ application: Application;
23
+ serverGroupManager: IKubernetesServerGroupManager;
24
+ manifest: IManifest;
25
+ }
26
+
27
+ export function ServerGroupManagerActions({
28
+ application,
29
+ serverGroupManager,
30
+ manifest,
31
+ }: IServerGroupManagerActionsProps) {
32
+ const isEnabled = SETTINGS.kubernetesAdHocInfraWritesEnabled;
33
+ const entityTagTargets = ClusterTargetBuilder.buildManagerClusterTargets(serverGroupManager);
34
+
35
+ const pauseRolloutServerGroupManager = (): void => {
36
+ ModalInjector.modalService.open({
37
+ templateUrl: require('../../manifest/rollout/pause.html'),
38
+ controller: 'kubernetesV2ManifestPauseRolloutCtrl as ctrl',
39
+ resolve: {
40
+ coordinates: {
41
+ name: serverGroupManager.name,
42
+ namespace: serverGroupManager.namespace,
43
+ account: serverGroupManager.account,
44
+ },
45
+ application: application,
46
+ },
47
+ });
48
+ };
49
+
50
+ const resumeRolloutServerGroupManager = (): void => {
51
+ ModalInjector.modalService.open({
52
+ templateUrl: require('../../manifest/rollout/resume.html'),
53
+ controller: 'kubernetesV2ManifestResumeRolloutCtrl as ctrl',
54
+ resolve: {
55
+ coordinates: {
56
+ name: serverGroupManager.name,
57
+ namespace: serverGroupManager.namespace,
58
+ account: serverGroupManager.account,
59
+ },
60
+ application: application,
61
+ },
62
+ });
63
+ };
64
+
65
+ const canUndoRolloutServerGroupManager = (): boolean => {
66
+ return serverGroupManager && serverGroupManager.serverGroups && serverGroupManager.serverGroups.length > 0;
67
+ };
68
+
69
+ const undoRolloutServerGroupManager = (): void => {
70
+ ModalInjector.modalService.open({
71
+ templateUrl: require('../../manifest/rollout/undo.html'),
72
+ controller: 'kubernetesV2ManifestUndoRolloutCtrl as ctrl',
73
+ resolve: {
74
+ coordinates: {
75
+ name: serverGroupManager.name,
76
+ namespace: serverGroupManager.namespace,
77
+ account: serverGroupManager.account,
78
+ },
79
+ revisions: () => {
80
+ const [, ...rest] = orderBy(serverGroupManager.serverGroups, ['moniker.sequence'], ['desc']);
81
+ return rest.map((serverGroup, index) => ({
82
+ label: `${NameUtils.getSequence(serverGroup.moniker.sequence)}${index > 0 ? '' : ' - previous revision'}`,
83
+ revision: serverGroup.moniker.sequence,
84
+ }));
85
+ },
86
+ application: application,
87
+ },
88
+ });
89
+ };
90
+
91
+ const scaleServerGroupManager = () => {
92
+ ModalInjector.modalService.open({
93
+ templateUrl: require('../../manifest/scale/scale.html'),
94
+ controller: 'kubernetesV2ManifestScaleCtrl as ctrl',
95
+ resolve: {
96
+ coordinates: {
97
+ name: serverGroupManager.name,
98
+ namespace: serverGroupManager.namespace,
99
+ account: serverGroupManager.account,
100
+ },
101
+ currentReplicas: manifest.manifest.spec.replicas,
102
+ application: application,
103
+ },
104
+ });
105
+ };
106
+
107
+ const editServerGroupManager = (): void => {
108
+ KubernetesManifestCommandBuilder.buildNewManifestCommand(
109
+ application,
110
+ manifest.manifest,
111
+ serverGroupManager.moniker,
112
+ serverGroupManager.account,
113
+ ).then((builtCommand) => {
114
+ ManifestWizard.show({ title: 'Edit Manifest', application: application, command: builtCommand });
115
+ });
116
+ };
117
+
118
+ const deleteServerGroupManager = (): void => {
119
+ ModalInjector.modalService.open({
120
+ templateUrl: require('../../manifest/delete/delete.html'),
121
+ controller: 'kubernetesV2ManifestDeleteCtrl as ctrl',
122
+ resolve: {
123
+ coordinates: {
124
+ name: serverGroupManager.name,
125
+ namespace: serverGroupManager.namespace,
126
+ account: serverGroupManager.account,
127
+ },
128
+ application: application,
129
+ manifestController: (): string => null,
130
+ },
131
+ });
132
+ };
133
+
134
+ return (
135
+ <Dropdown className="dropdown" id="server-group-manager-actions-dropdown">
136
+ {isEnabled && (
137
+ <Dropdown.Toggle className="btn btn-sm btn-primary dropdown-toggle">
138
+ {robotToHuman(serverGroupManager.kind)} Actions
139
+ </Dropdown.Toggle>
140
+ )}
141
+ <Dropdown.Menu>
142
+ <MenuItem onClick={scaleServerGroupManager}>Scale</MenuItem>
143
+ {canUndoRolloutServerGroupManager() && (
144
+ <MenuItem onClick={undoRolloutServerGroupManager}>Undo Rollout</MenuItem>
145
+ )}
146
+ {manifest.status.paused.state && <MenuItem onClick={resumeRolloutServerGroupManager}>Resume Rollout</MenuItem>}
147
+ {!manifest.status.paused.state && !manifest.status.stable.state && (
148
+ <MenuItem onClick={pauseRolloutServerGroupManager}>Pause Rollout</MenuItem>
149
+ )}
150
+ {!manifest.status.paused.state && (
151
+ <RollingRestart application={application} serverGroupManager={serverGroupManager} />
152
+ )}
153
+ <MenuItem className="divider" />
154
+ <MenuItem onClick={editServerGroupManager}>Edit</MenuItem>
155
+ <MenuItem onClick={deleteServerGroupManager}>Delete</MenuItem>
156
+ <IfFeatureEnabled
157
+ feature="entityTags"
158
+ render={
159
+ <AddEntityTagLinks
160
+ component={serverGroupManager}
161
+ application={application}
162
+ entityType="serverGroupManager"
163
+ ownerOptions={entityTagTargets}
164
+ onUpdate={() => application.serverGroupManagers.refresh()}
165
+ />
166
+ }
167
+ />
168
+ </Dropdown.Menu>
169
+ </Dropdown>
170
+ );
171
+ }
@@ -0,0 +1,72 @@
1
+ import React from 'react';
2
+
3
+ import type { Application, IServerGroupManagerDetailsProps, IServerGroupManagerStateParams } from '@spinnaker/core';
4
+ import { CloudProviderLogo, Details, EntityNotifications, IfFeatureEnabled, ReactInjector } from '@spinnaker/core';
5
+
6
+ import { ServerGroupManagerActions } from './ServerGroupManagerActions';
7
+ import {
8
+ ServerGroupManagerAnnotationCustomSection,
9
+ ServerGroupManagerArtifactsSection,
10
+ ServerGroupManagerEventsSection,
11
+ ServerGroupManagerInformationSection,
12
+ ServerGroupManagerLabelsSection,
13
+ ServerGroupManagerManifestConditionSection,
14
+ ServerGroupManagerManifestStatusSection,
15
+ } from './sections';
16
+ import { useKubernetesServerGroupManagerDetails } from './useKubernetesServerGroupManagerDetails';
17
+
18
+ export interface IKubernetesServerGroupManagerDetailsProps extends IServerGroupManagerDetailsProps {
19
+ app: Application;
20
+ serverGroupManager: IServerGroupManagerStateParams;
21
+ }
22
+
23
+ export function ServerGroupManagerDetails(props: IKubernetesServerGroupManagerDetailsProps) {
24
+ const autoClose = () => {
25
+ ReactInjector.$state.params.allowModalToStayOpen = true;
26
+ ReactInjector.$state.go('^', null, { location: 'replace' });
27
+ };
28
+ const [serverGroupManager, manifest, loading] = useKubernetesServerGroupManagerDetails(props, autoClose);
29
+
30
+ if (loading) return <Details loading={loading} />;
31
+
32
+ return (
33
+ <Details loading={loading}>
34
+ <Details.Header
35
+ icon={<CloudProviderLogo provider={props.serverGroupManager.provider} height="36px" width="36px" />}
36
+ name={serverGroupManager.displayName}
37
+ notifications={
38
+ <IfFeatureEnabled
39
+ feature="entityTags"
40
+ render={
41
+ <EntityNotifications
42
+ entity={serverGroupManager}
43
+ application={props.app}
44
+ placement="bottom"
45
+ hOffsetPercent="90%"
46
+ entityType="serverGroupManager"
47
+ pageLocation="details"
48
+ onUpdate={() => props.app.serverGroupManagers.refresh()}
49
+ />
50
+ }
51
+ />
52
+ }
53
+ actions={
54
+ <ServerGroupManagerActions
55
+ application={props.app}
56
+ serverGroupManager={serverGroupManager}
57
+ manifest={manifest}
58
+ />
59
+ }
60
+ />
61
+ <Details.Content loading={loading}>
62
+ <ServerGroupManagerManifestStatusSection serverGroupManager={serverGroupManager} manifest={manifest} />
63
+ <ServerGroupManagerInformationSection serverGroupManager={serverGroupManager} manifest={manifest} />
64
+ <ServerGroupManagerManifestConditionSection serverGroupManager={serverGroupManager} manifest={manifest} />
65
+ <ServerGroupManagerAnnotationCustomSection serverGroupManager={serverGroupManager} manifest={manifest} />
66
+ <ServerGroupManagerEventsSection serverGroupManager={serverGroupManager} manifest={manifest} />
67
+ <ServerGroupManagerLabelsSection serverGroupManager={serverGroupManager} manifest={manifest} />
68
+ <ServerGroupManagerArtifactsSection serverGroupManager={serverGroupManager} manifest={manifest} />
69
+ </Details.Content>
70
+ </Details>
71
+ );
72
+ }
@@ -0,0 +1,7 @@
1
+ import type { IManifest, IServerGroupManagerDetailsProps } from '@spinnaker/core';
2
+ import type { IKubernetesServerGroupManager } from '../../../interfaces';
3
+
4
+ export interface IKubernetesServerGroupManagerDetailsSectionProps extends IServerGroupManagerDetailsProps {
5
+ serverGroupManager: IKubernetesServerGroupManager;
6
+ manifest: IManifest;
7
+ }
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+
3
+ import type { IKubernetesServerGroupManagerDetailsSectionProps } from './IKubernetesServerGroupManagerDetailsSectionProps';
4
+ import { KubernetesReactInjector } from '../../../reactShims';
5
+
6
+ export function ServerGroupManagerAnnotationCustomSection({
7
+ serverGroupManager,
8
+ manifest,
9
+ }: IKubernetesServerGroupManagerDetailsSectionProps) {
10
+ const { KubernetesAnnotationCustomSections } = KubernetesReactInjector;
11
+ return <KubernetesAnnotationCustomSections manifest={manifest.manifest} resource={serverGroupManager} />;
12
+ }
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+
3
+ import type { IArtifact } from '@spinnaker/core';
4
+ import { CollapsibleSection } from '@spinnaker/core';
5
+ import type { IKubernetesServerGroupManagerDetailsSectionProps } from './IKubernetesServerGroupManagerDetailsSectionProps';
6
+ import { ManifestArtifact } from '../../../manifest';
7
+
8
+ export function ServerGroupManagerArtifactsSection({ manifest }: IKubernetesServerGroupManagerDetailsSectionProps) {
9
+ return (
10
+ <CollapsibleSection heading="Artifacts" defaultExpanded={true}>
11
+ {manifest.artifacts.map((artifact: IArtifact) => (
12
+ <ul key={artifact.reference}>
13
+ <ManifestArtifact artifact={artifact} />
14
+ </ul>
15
+ ))}
16
+ </CollapsibleSection>
17
+ );
18
+ }
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+
3
+ import { CollapsibleSection } from '@spinnaker/core';
4
+
5
+ import type { IKubernetesServerGroupManagerDetailsSectionProps } from './IKubernetesServerGroupManagerDetailsSectionProps';
6
+ import { ManifestEvents } from '../../../pipelines/stages/deployManifest/manifestStatus/ManifestEvents';
7
+
8
+ export function ServerGroupManagerEventsSection({ manifest }: IKubernetesServerGroupManagerDetailsSectionProps) {
9
+ return (
10
+ <CollapsibleSection heading="Events" defaultExpanded={true}>
11
+ <ManifestEvents manifest={manifest} />
12
+ </CollapsibleSection>
13
+ );
14
+ }
@@ -0,0 +1,51 @@
1
+ import { UISref } from '@uirouter/react';
2
+ import { orderBy } from 'lodash';
3
+ import React from 'react';
4
+
5
+ import type { IServerGroupSummary } from '@spinnaker/core';
6
+ import { AccountTag, CollapsibleSection, robotToHuman, timestamp } from '@spinnaker/core';
7
+
8
+ import type { IKubernetesServerGroupManagerDetailsSectionProps } from './IKubernetesServerGroupManagerDetailsSectionProps';
9
+
10
+ export function ServerGroupManagerInformationSection({
11
+ serverGroupManager,
12
+ }: IKubernetesServerGroupManagerDetailsSectionProps) {
13
+ return (
14
+ <CollapsibleSection heading="Information" defaultExpanded={true}>
15
+ <dl className="dl-horizontal dl-narrow">
16
+ <dt>Created</dt>
17
+ <dd>{timestamp(serverGroupManager.createdTime)}</dd>
18
+ <dt>Account</dt>
19
+ <dd>
20
+ <AccountTag account={serverGroupManager.account} />
21
+ </dd>
22
+ <dt>Namespace</dt>
23
+ <dd>{serverGroupManager.namespace}</dd>
24
+ <dt>Kind</dt>
25
+ <dd>{serverGroupManager.kind}</dd>
26
+ {serverGroupManager.serverGroups.length > 0 && (
27
+ <>
28
+ <dt>Managing</dt>
29
+ <dd>
30
+ {orderBy(serverGroupManager.serverGroups, ['name'], ['asc']).map((serverGroup: IServerGroupSummary) => (
31
+ <ul key={serverGroup.name}>
32
+ <UISref
33
+ to="^.serverGroup"
34
+ params={{
35
+ region: serverGroup.region,
36
+ accountId: serverGroup.account,
37
+ serverGroup: serverGroup.name,
38
+ provider: 'kubernetes',
39
+ }}
40
+ >
41
+ <a>{robotToHuman(serverGroup.name)}</a>
42
+ </UISref>
43
+ </ul>
44
+ ))}
45
+ </dd>
46
+ </>
47
+ )}
48
+ </dl>
49
+ </CollapsibleSection>
50
+ );
51
+ }
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+
3
+ import { CollapsibleSection } from '@spinnaker/core';
4
+
5
+ import type { IKubernetesServerGroupManagerDetailsSectionProps } from './IKubernetesServerGroupManagerDetailsSectionProps';
6
+ import { ManifestLabels } from '../../../manifest/ManifestLabels';
7
+
8
+ export function ServerGroupManagerLabelsSection({ manifest }: IKubernetesServerGroupManagerDetailsSectionProps) {
9
+ return (
10
+ <CollapsibleSection heading="Labels" defaultExpanded={true}>
11
+ <ManifestLabels manifest={manifest.manifest} />
12
+ </CollapsibleSection>
13
+ );
14
+ }
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+
3
+ import { CollapsibleSection } from '@spinnaker/core';
4
+
5
+ import type { IKubernetesServerGroupManagerDetailsSectionProps } from './IKubernetesServerGroupManagerDetailsSectionProps';
6
+ import type { IKubernetesManifestCondition } from '../../../manifest/status/ManifestCondition';
7
+ import { ManifestCondition } from '../../../manifest/status/ManifestCondition';
8
+
9
+ export function ServerGroupManagerManifestConditionSection({
10
+ manifest,
11
+ }: IKubernetesServerGroupManagerDetailsSectionProps) {
12
+ return (
13
+ <CollapsibleSection heading="Status" defaultExpanded={true}>
14
+ {manifest.manifest.status.conditions.map((condition: IKubernetesManifestCondition) => (
15
+ <ul key={condition.lastTransitionTime}>
16
+ <ManifestCondition condition={condition} />
17
+ </ul>
18
+ ))}
19
+ </CollapsibleSection>
20
+ );
21
+ }
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+
3
+ import type { IKubernetesServerGroupManagerDetailsSectionProps } from './IKubernetesServerGroupManagerDetailsSectionProps';
4
+ import { ManifestStatus } from '../../../manifest/status/ManifestStatus';
5
+
6
+ export function ServerGroupManagerManifestStatusSection({
7
+ manifest,
8
+ }: IKubernetesServerGroupManagerDetailsSectionProps) {
9
+ return <ManifestStatus status={manifest.status} />;
10
+ }
@@ -0,0 +1,8 @@
1
+ export * from './IKubernetesServerGroupManagerDetailsSectionProps';
2
+ export * from './ServerGroupManagerAnnotationCustomSection';
3
+ export * from './ServerGroupManagerArtifactsSection';
4
+ export * from './ServerGroupManagerEventsSection';
5
+ export * from './ServerGroupManagerInformationSection';
6
+ export * from './ServerGroupManagerLabelsSection';
7
+ export * from './ServerGroupManagerManifestConditionSection';
8
+ export * from './ServerGroupManagerManifestStatusSection';
@@ -0,0 +1,53 @@
1
+ import { useEffect, useState } from 'react';
2
+
3
+ import type { IManifest, IServerGroupManager } from '@spinnaker/core';
4
+ import { ManifestReader } from '@spinnaker/core';
5
+
6
+ import type { IKubernetesServerGroupManagerDetailsProps } from './ServerGroupManagerDetails';
7
+ import type { IKubernetesServerGroupManager } from '../../interfaces';
8
+
9
+ export function useKubernetesServerGroupManagerDetails(
10
+ props: IKubernetesServerGroupManagerDetailsProps,
11
+ autoClose: () => void,
12
+ ): [IKubernetesServerGroupManager | undefined, IManifest | undefined, boolean] {
13
+ const [serverGroupManager, setServerGroupManager] = useState<IKubernetesServerGroupManager | undefined>();
14
+ const [manifest, setManifest] = useState<IManifest | undefined>();
15
+ const [loading, setLoading] = useState(true);
16
+
17
+ useEffect(() => {
18
+ if (serverGroupManager) {
19
+ return;
20
+ }
21
+
22
+ const { serverGroupManager: params, app } = props;
23
+ const { accountId, region, name } = params;
24
+
25
+ setLoading(true);
26
+
27
+ const serverGroupManagerDetails = app
28
+ .getDataSource('serverGroupManagers')
29
+ .data.find(
30
+ (manager: IServerGroupManager) =>
31
+ manager.name === name && manager.region === region && manager.account === accountId,
32
+ );
33
+
34
+ if (!serverGroupManagerDetails) {
35
+ autoClose();
36
+ return;
37
+ }
38
+
39
+ ManifestReader.getManifest(accountId, region, name)
40
+ .then((manifest: IManifest) => {
41
+ setManifest(manifest);
42
+ setServerGroupManager(serverGroupManagerDetails);
43
+ })
44
+ .catch((error) => {
45
+ console.error('Error fetching manifest:', error);
46
+ })
47
+ .finally(() => {
48
+ setLoading(false);
49
+ });
50
+ }, [autoClose, props, serverGroupManager]);
51
+
52
+ return [serverGroupManager, manifest, loading];
53
+ }
@@ -0,0 +1 @@
1
+ export * from './details/sections';
@@ -0,0 +1,19 @@
1
+ import { KubernetesApplicationNameValidator } from './applicationName.validator';
2
+
3
+ describe('ApplicationNameValidator', () => {
4
+ const validator = new KubernetesApplicationNameValidator();
5
+ describe('validateSpecialCharacters', () => {
6
+ it('Returns no warnings or errors for names that contain only alphanumeric characters', () => {
7
+ expect(validator.validate('myapp123').errors.length).toEqual(0);
8
+ expect(validator.validate('myapp123').warnings.length).toEqual(0);
9
+ });
10
+ it('Returns no warnings or errors for names that contain only alphanumeric characters and dashes', () => {
11
+ expect(validator.validate('my-app-123').errors.length).toEqual(0);
12
+ expect(validator.validate('my-app-123').warnings.length).toEqual(0);
13
+ });
14
+ it('Returns an error for names that contain other non-alphanumeric characters', () => {
15
+ expect(validator.validate('my-app-123$').errors.length).toEqual(1);
16
+ expect(validator.validate('my-app-123$').warnings.length).toEqual(0);
17
+ });
18
+ });
19
+ });
@@ -0,0 +1,44 @@
1
+ import { ApplicationNameValidator } from '@spinnaker/core';
2
+
3
+ export class KubernetesApplicationNameValidator {
4
+ // general k8s resource restriction: 253 characters - https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
5
+ // safe bet is 63 characters - (see also RFC 1035 or RFC 1123 - both setting DNS label maximum to 63 chars)
6
+ // for service names: - https://github.com/kubernetes/kubernetes/pull/29523 (until K8s 1.4.0 it was 24 characters https://github.com/kubernetes/kubernetes/issues/12463)
7
+ // or annotations: - https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/#syntax-and-character-set
8
+ private static MAX_RESOURCE_NAME_LENGTH = 63;
9
+
10
+ private static validateSpecialCharacters(name: string, errors: string[]): void {
11
+ const alphanumWithDashPattern = /^([a-zA-Z][a-zA-Z0-9-]*)?$/;
12
+ if (!alphanumWithDashPattern.test(name)) {
13
+ errors.push(
14
+ 'The application name must begin with a letter and must contain only letters, digits, or dashes. ' +
15
+ 'No special characters are allowed.',
16
+ );
17
+ }
18
+ }
19
+
20
+ private static validateLength(name: string, errors: string[]): void {
21
+ if (name.length > KubernetesApplicationNameValidator.MAX_RESOURCE_NAME_LENGTH) {
22
+ errors.push(
23
+ `The maximum length for an application in Kubernetes is ${KubernetesApplicationNameValidator.MAX_RESOURCE_NAME_LENGTH} characters.`,
24
+ );
25
+ }
26
+ }
27
+
28
+ public validate(name = '') {
29
+ const warnings: string[] = [];
30
+ const errors: string[] = [];
31
+
32
+ if (name && name.length) {
33
+ KubernetesApplicationNameValidator.validateSpecialCharacters(name, errors);
34
+ KubernetesApplicationNameValidator.validateLength(name, errors);
35
+ }
36
+
37
+ return {
38
+ warnings,
39
+ errors,
40
+ };
41
+ }
42
+ }
43
+
44
+ ApplicationNameValidator.registerValidator('kubernetes', new KubernetesApplicationNameValidator());