@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.
- package/CHANGELOG.md +1663 -0
- package/LICENSE.txt +203 -0
- package/dist/help/kubernetes.help.d.ts +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +6561 -0
- package/dist/index.js.map +1 -0
- package/dist/instance/details/details.controller.d.ts +1 -0
- package/dist/instance/index.d.ts +1 -0
- package/dist/interfaces/index.d.ts +1 -0
- package/dist/interfaces/infrastructure.types.d.ts +27 -0
- package/dist/kubernetes.module.d.ts +6 -0
- package/dist/loadBalancer/details/details.controller.d.ts +1 -0
- package/dist/loadBalancer/index.d.ts +1 -0
- package/dist/loadBalancer/transformer.d.ts +1 -0
- package/dist/manifest/AnnotationCustomSections.d.ts +5 -0
- package/dist/manifest/IManifestCoordinates.d.ts +5 -0
- package/dist/manifest/ManifestImageDetails.d.ts +18 -0
- package/dist/manifest/ManifestKindSearch.d.ts +13 -0
- package/dist/manifest/ManifestLabels.d.ts +15 -0
- package/dist/manifest/ManifestQos.d.ts +15 -0
- package/dist/manifest/ManifestResources.d.ts +35 -0
- package/dist/manifest/ManifestSource.d.ts +4 -0
- package/dist/manifest/annotationCustomSections.component.d.ts +3 -0
- package/dist/manifest/artifact/ManifestArtifact.d.ts +6 -0
- package/dist/manifest/delete/delete.controller.d.ts +12 -0
- package/dist/manifest/delete/deleteOptionsForm.component.d.ts +1 -0
- package/dist/manifest/editor/json/JsonEditor.d.ts +12 -0
- package/dist/manifest/editor/json/jsonEditor.component.d.ts +1 -0
- package/dist/manifest/index.d.ts +10 -0
- package/dist/manifest/manifest.service.d.ts +25 -0
- package/dist/manifest/manifestCommandBuilder.service.d.ts +30 -0
- package/dist/manifest/manifestEvents.component.d.ts +1 -0
- package/dist/manifest/manifestImageDetails.component.d.ts +1 -0
- package/dist/manifest/manifestLabels.component.d.ts +1 -0
- package/dist/manifest/manifestQos.component.d.ts +1 -0
- package/dist/manifest/manifestResources.component.d.ts +1 -0
- package/dist/manifest/rollout/RollingRestart.d.ts +9 -0
- package/dist/manifest/rollout/pause.controller.d.ts +1 -0
- package/dist/manifest/rollout/resume.controller.d.ts +1 -0
- package/dist/manifest/rollout/undo.controller.d.ts +1 -0
- package/dist/manifest/scale/ScaleSettingsForm.d.ts +10 -0
- package/dist/manifest/scale/scale.controller.d.ts +8 -0
- package/dist/manifest/scale/scaleSettingsForm.component.d.ts +1 -0
- package/dist/manifest/selector/IManifestLabelSelector.d.ts +9 -0
- package/dist/manifest/selector/IManifestSelector.d.ts +30 -0
- package/dist/manifest/selector/ManifestSelector.d.ts +46 -0
- package/dist/manifest/selector/labelEditor/LabelEditor.d.ts +15 -0
- package/dist/manifest/selector/selector.component.d.ts +1 -0
- package/dist/manifest/status/ManifestCondition.d.ts +13 -0
- package/dist/manifest/status/ManifestStatus.d.ts +8 -0
- package/dist/manifest/status/condition.component.d.ts +1 -0
- package/dist/manifest/status/status.component.d.ts +1 -0
- package/dist/manifest/traffic/ManifestTrafficService.d.ts +12 -0
- package/dist/manifest/wizard/BasicSettings.d.ts +17 -0
- package/dist/manifest/wizard/ManifestEntry.d.ts +16 -0
- package/dist/manifest/wizard/ManifestWizard.d.ts +22 -0
- package/dist/pipelines/stages/ManifestCoordinates.d.ts +31 -0
- package/dist/pipelines/stages/ManifestExecutionDetails.d.ts +69 -0
- package/dist/pipelines/stages/deleteManifest/DeleteManifestOptionsForm.d.ts +18 -0
- package/dist/pipelines/stages/deleteManifest/DeleteManifestStageConfig.d.ts +14 -0
- package/dist/pipelines/stages/deleteManifest/deleteManifestStage.d.ts +1 -0
- package/dist/pipelines/stages/deployManifest/CopyFromTemplateButton.d.ts +15 -0
- package/dist/pipelines/stages/deployManifest/DeployManifestStageConfig.d.ts +15 -0
- package/dist/pipelines/stages/deployManifest/DeployManifestStageForm.d.ts +31 -0
- package/dist/pipelines/stages/deployManifest/ManifestBindArtifactsSelector.d.ts +17 -0
- package/dist/pipelines/stages/deployManifest/ManifestCopier.d.ts +36 -0
- package/dist/pipelines/stages/deployManifest/ManifestDeploymentOptions.d.ts +34 -0
- package/dist/pipelines/stages/deployManifest/NamespaceSelector.d.ts +16 -0
- package/dist/pipelines/stages/deployManifest/deployManifest.validator.d.ts +2 -0
- package/dist/pipelines/stages/deployManifest/deployManifestStage.d.ts +1 -0
- package/dist/pipelines/stages/deployManifest/manifestStatus/DeployStatus.d.ts +23 -0
- package/dist/pipelines/stages/deployManifest/manifestStatus/DeployStatusPills.d.ts +8 -0
- package/dist/pipelines/stages/deployManifest/manifestStatus/ManifestDetailsLink.d.ts +20 -0
- package/dist/pipelines/stages/deployManifest/manifestStatus/ManifestEvents.d.ts +9 -0
- package/dist/pipelines/stages/deployManifest/manifestStatus/ManifestStatus.d.ts +8 -0
- package/dist/pipelines/stages/findArtifactsFromResource/FindArtifactsFromResourceConfig.d.ts +3 -0
- package/dist/pipelines/stages/findArtifactsFromResource/FindArtifactsFromResourceStageForm.d.ts +7 -0
- package/dist/pipelines/stages/findArtifactsFromResource/findArtifactsFromResourceStage.d.ts +1 -0
- package/dist/pipelines/stages/index.d.ts +8 -0
- package/dist/pipelines/stages/patchManifest/PatchManifestOptionsForm.d.ts +8 -0
- package/dist/pipelines/stages/patchManifest/PatchManifestStageConfig.d.ts +7 -0
- package/dist/pipelines/stages/patchManifest/PatchManifestStageForm.d.ts +21 -0
- package/dist/pipelines/stages/patchManifest/patchManifestStage.d.ts +4 -0
- package/dist/pipelines/stages/rolloutRestartManifest/RolloutRestartManifestStageConfig.d.ts +13 -0
- package/dist/pipelines/stages/rolloutRestartManifest/rolloutRestartManifestStage.d.ts +4 -0
- package/dist/pipelines/stages/runJob/KubernetesV2RunJobStageConfig.d.ts +31 -0
- package/dist/pipelines/stages/runJob/RunJobExecutionDetails.d.ts +7 -0
- package/dist/pipelines/stages/runJob/runJobStage.d.ts +1 -0
- package/dist/pipelines/stages/scaleManifest/ScaleManifestConfig.d.ts +3 -0
- package/dist/pipelines/stages/scaleManifest/ScaleManifestStageForm.d.ts +7 -0
- package/dist/pipelines/stages/scaleManifest/scaleManifestStage.d.ts +1 -0
- package/dist/pipelines/stages/traffic/ManifestTrafficStageConfig.d.ts +11 -0
- package/dist/pipelines/stages/traffic/disableManifest.stage.d.ts +1 -0
- package/dist/pipelines/stages/traffic/enableManifest.stage.d.ts +1 -0
- package/dist/pipelines/stages/undoRolloutManifest/UndoRolloutManifestConfig.d.ts +3 -0
- package/dist/pipelines/stages/undoRolloutManifest/UndoRolloutManifestStageForm.d.ts +7 -0
- package/dist/pipelines/stages/undoRolloutManifest/undoRolloutManifestStage.d.ts +1 -0
- package/dist/pipelines/stages/validators/manifestSelectorValidators.d.ts +2 -0
- package/dist/pipelines/validation/manifestSelector.validator.d.ts +8 -0
- package/dist/rawResource/component/K8sResources.d.ts +25 -0
- package/dist/rawResource/component/K8sResourcesFilters.d.ts +20 -0
- package/dist/rawResource/component/RawResourceUtils.d.ts +5 -0
- package/dist/rawResource/component/group/RawResouceGroup.d.ts +15 -0
- package/dist/rawResource/component/group/RawResource.d.ts +12 -0
- package/dist/rawResource/component/group/RawResourceDetails.d.ts +32 -0
- package/dist/rawResource/component/group/RawResourceGroups.d.ts +14 -0
- package/dist/rawResource/controller/FiltersPubSub.d.ts +12 -0
- package/dist/rawResource/index.d.ts +1 -0
- package/dist/rawResource/model/resource.d.ts +17 -0
- package/dist/rawResource/rawResource.dataSource.d.ts +2 -0
- package/dist/rawResource/rawResource.module.d.ts +1 -0
- package/dist/rawResource/rawResource.states.d.ts +6 -0
- package/dist/reactShims/index.d.ts +1 -0
- package/dist/reactShims/kubernetes.react.injector.d.ts +11 -0
- package/dist/reactShims/kubernetes.react.module.d.ts +1 -0
- package/dist/resources/ResourceDetails.d.ts +17 -0
- package/dist/resources/resources.state.d.ts +7 -0
- package/dist/rolloutStrategy/bluegreen.strategy.d.ts +2 -0
- package/dist/rolloutStrategy/highlander.strategy.d.ts +2 -0
- package/dist/rolloutStrategy/index.d.ts +1 -0
- package/dist/rolloutStrategy/none.strategy.d.ts +2 -0
- package/dist/rolloutStrategy/redblack.strategy.d.ts +2 -0
- package/dist/securityGroup/details/details.controller.d.ts +1 -0
- package/dist/securityGroup/index.d.ts +1 -0
- package/dist/securityGroup/securityGroup.reader.d.ts +4 -0
- package/dist/securityGroup/transformer.d.ts +1 -0
- package/dist/serverGroup/details/KubernetesServerGroupActions.d.ts +7 -0
- package/dist/serverGroup/details/kubernetesServerGroupDetailsGetter.d.ts +4 -0
- package/dist/serverGroup/details/sections/IKubernetesServerGroupDetailsSectionProps.d.ts +5 -0
- package/dist/serverGroup/details/sections/ServerGroupAnnotationCustomSection.d.ts +3 -0
- package/dist/serverGroup/details/sections/ServerGroupEventsSection.d.ts +3 -0
- package/dist/serverGroup/details/sections/ServerGroupHealthSection.d.ts +3 -0
- package/dist/serverGroup/details/sections/ServerGroupImagesSection.d.ts +3 -0
- package/dist/serverGroup/details/sections/ServerGroupInformationSection.d.ts +3 -0
- package/dist/serverGroup/details/sections/ServerGroupLabelsSection.d.ts +3 -0
- package/dist/serverGroup/details/sections/ServerGroupManifestStatusSection.d.ts +3 -0
- package/dist/serverGroup/details/sections/ServerGroupSizeSection.d.ts +3 -0
- package/dist/serverGroup/details/sections/index.d.ts +9 -0
- package/dist/serverGroup/details/useManifest.d.ts +8 -0
- package/dist/serverGroup/index.d.ts +3 -0
- package/dist/serverGroup/serverGroupCommandBuilder.d.ts +5 -0
- package/dist/serverGroup/serverGroupTransformer.d.ts +5 -0
- package/dist/serverGroupManager/details/ServerGroupManagerActions.d.ts +9 -0
- package/dist/serverGroupManager/details/ServerGroupManagerDetails.d.ts +7 -0
- package/dist/serverGroupManager/details/sections/IKubernetesServerGroupManagerDetailsSectionProps.d.ts +6 -0
- package/dist/serverGroupManager/details/sections/ServerGroupManagerAnnotationCustomSection.d.ts +3 -0
- package/dist/serverGroupManager/details/sections/ServerGroupManagerArtifactsSection.d.ts +3 -0
- package/dist/serverGroupManager/details/sections/ServerGroupManagerEventsSection.d.ts +3 -0
- package/dist/serverGroupManager/details/sections/ServerGroupManagerInformationSection.d.ts +3 -0
- package/dist/serverGroupManager/details/sections/ServerGroupManagerLabelsSection.d.ts +3 -0
- package/dist/serverGroupManager/details/sections/ServerGroupManagerManifestConditionSection.d.ts +3 -0
- package/dist/serverGroupManager/details/sections/ServerGroupManagerManifestStatusSection.d.ts +3 -0
- package/dist/serverGroupManager/details/sections/index.d.ts +8 -0
- package/dist/serverGroupManager/details/useKubernetesServerGroupManagerDetails.d.ts +4 -0
- package/dist/serverGroupManager/index.d.ts +1 -0
- package/dist/validation/applicationName.validator.d.ts +9 -0
- package/package.json +58 -0
- package/src/help/kubernetes.help.ts +236 -0
- package/src/index.ts +8 -0
- package/src/instance/details/details.controller.ts +186 -0
- package/src/instance/details/details.html +80 -0
- package/src/instance/index.ts +1 -0
- package/src/interfaces/index.ts +1 -0
- package/src/interfaces/infrastructure.types.ts +40 -0
- package/src/kubernetes.module.ts +155 -0
- package/src/loadBalancer/details/details.controller.ts +101 -0
- package/src/loadBalancer/details/details.html +187 -0
- package/src/loadBalancer/index.ts +1 -0
- package/src/loadBalancer/transformer.ts +60 -0
- package/src/logo/kubernetes.icon.svg +102 -0
- package/src/logo/kubernetes.logo.less +6 -0
- package/src/logo/kubernetes.logo.svg +1 -0
- package/src/manifest/AnnotationCustomSections.tsx +6 -0
- package/src/manifest/IManifestCoordinates.ts +5 -0
- package/src/manifest/ManifestImageDetails.spec.tsx +76 -0
- package/src/manifest/ManifestImageDetails.tsx +64 -0
- package/src/manifest/ManifestKindSearch.tsx +31 -0
- package/src/manifest/ManifestLabels.tsx +31 -0
- package/src/manifest/ManifestQos.tsx +68 -0
- package/src/manifest/ManifestResources.tsx +69 -0
- package/src/manifest/ManifestSource.ts +4 -0
- package/src/manifest/annotationCustomSections.component.ts +114 -0
- package/src/manifest/artifact/ManifestArtifact.tsx +16 -0
- package/src/manifest/delete/delete.controller.ts +80 -0
- package/src/manifest/delete/delete.html +42 -0
- package/src/manifest/delete/deleteOptionsForm.component.ts +52 -0
- package/src/manifest/editor/json/JsonEditor.tsx +56 -0
- package/src/manifest/editor/json/jsonEditor.component.ts +12 -0
- package/src/manifest/index.ts +10 -0
- package/src/manifest/manifest.service.ts +90 -0
- package/src/manifest/manifestCommandBuilder.service.ts +126 -0
- package/src/manifest/manifestEvents.component.ts +12 -0
- package/src/manifest/manifestImageDetails.component.ts +12 -0
- package/src/manifest/manifestLabels.component.ts +12 -0
- package/src/manifest/manifestLabels.less +3 -0
- package/src/manifest/manifestQos.component.ts +12 -0
- package/src/manifest/manifestResources.component.ts +12 -0
- package/src/manifest/rollout/RollingRestart.tsx +46 -0
- package/src/manifest/rollout/pause.controller.ts +66 -0
- package/src/manifest/rollout/pause.html +28 -0
- package/src/manifest/rollout/resume.controller.ts +66 -0
- package/src/manifest/rollout/resume.html +28 -0
- package/src/manifest/rollout/undo.controller.ts +74 -0
- package/src/manifest/rollout/undo.html +44 -0
- package/src/manifest/scale/ScaleSettingsForm.tsx +43 -0
- package/src/manifest/scale/scale.controller.ts +75 -0
- package/src/manifest/scale/scale.html +32 -0
- package/src/manifest/scale/scaleSettingsForm.component.ts +11 -0
- package/src/manifest/selector/IManifestLabelSelector.ts +19 -0
- package/src/manifest/selector/IManifestSelector.ts +64 -0
- package/src/manifest/selector/ManifestSelector.spec.tsx +414 -0
- package/src/manifest/selector/ManifestSelector.tsx +424 -0
- package/src/manifest/selector/labelEditor/LabelEditor.spec.tsx +81 -0
- package/src/manifest/selector/labelEditor/LabelEditor.tsx +126 -0
- package/src/manifest/selector/labelEditor/labelEditor.less +3 -0
- package/src/manifest/selector/selector.component.ts +17 -0
- package/src/manifest/status/ManifestCondition.tsx +32 -0
- package/src/manifest/status/ManifestStatus.tsx +39 -0
- package/src/manifest/status/condition.component.ts +12 -0
- package/src/manifest/status/status.component.ts +11 -0
- package/src/manifest/traffic/ManifestTrafficService.spec.ts +30 -0
- package/src/manifest/traffic/ManifestTrafficService.ts +67 -0
- package/src/manifest/wizard/BasicSettings.tsx +57 -0
- package/src/manifest/wizard/ManifestEntry.tsx +46 -0
- package/src/manifest/wizard/ManifestWizard.tsx +94 -0
- package/src/pipelines/stages/ManifestCoordinates.spec.tsx +90 -0
- package/src/pipelines/stages/ManifestCoordinates.tsx +128 -0
- package/src/pipelines/stages/ManifestExecutionDetails.tsx +58 -0
- package/src/pipelines/stages/deleteManifest/DeleteManifestOptionsForm.spec.tsx +85 -0
- package/src/pipelines/stages/deleteManifest/DeleteManifestOptionsForm.tsx +87 -0
- package/src/pipelines/stages/deleteManifest/DeleteManifestStageConfig.tsx +62 -0
- package/src/pipelines/stages/deleteManifest/deleteManifestOptionsForm.less +9 -0
- package/src/pipelines/stages/deleteManifest/deleteManifestStage.ts +21 -0
- package/src/pipelines/stages/deployManifest/CopyFromTemplateButton.tsx +45 -0
- package/src/pipelines/stages/deployManifest/DeployManifestStageConfig.tsx +77 -0
- package/src/pipelines/stages/deployManifest/DeployManifestStageForm.tsx +265 -0
- package/src/pipelines/stages/deployManifest/ManifestBindArtifactsSelector.tsx +69 -0
- package/src/pipelines/stages/deployManifest/ManifestCopier.spec.ts +110 -0
- package/src/pipelines/stages/deployManifest/ManifestCopier.tsx +222 -0
- package/src/pipelines/stages/deployManifest/ManifestDeploymentOptions.spec.tsx +75 -0
- package/src/pipelines/stages/deployManifest/ManifestDeploymentOptions.tsx +203 -0
- package/src/pipelines/stages/deployManifest/NamespaceSelector.tsx +40 -0
- package/src/pipelines/stages/deployManifest/deployManifest.validator.ts +38 -0
- package/src/pipelines/stages/deployManifest/deployManifestStage.ts +28 -0
- package/src/pipelines/stages/deployManifest/manifestStatus/DeployStatus.less +11 -0
- package/src/pipelines/stages/deployManifest/manifestStatus/DeployStatus.tsx +120 -0
- package/src/pipelines/stages/deployManifest/manifestStatus/DeployStatusPills.tsx +47 -0
- package/src/pipelines/stages/deployManifest/manifestStatus/ManifestDetailsLink.tsx +92 -0
- package/src/pipelines/stages/deployManifest/manifestStatus/ManifestEvents.tsx +87 -0
- package/src/pipelines/stages/deployManifest/manifestStatus/ManifestStatus.less +24 -0
- package/src/pipelines/stages/deployManifest/manifestStatus/ManifestStatus.tsx +46 -0
- package/src/pipelines/stages/findArtifactsFromResource/FindArtifactsFromResourceConfig.tsx +35 -0
- package/src/pipelines/stages/findArtifactsFromResource/FindArtifactsFromResourceStageForm.tsx +37 -0
- package/src/pipelines/stages/findArtifactsFromResource/findArtifactsFromResourceStage.ts +21 -0
- package/src/pipelines/stages/index.ts +8 -0
- package/src/pipelines/stages/patchManifest/PatchManifestOptionsForm.tsx +35 -0
- package/src/pipelines/stages/patchManifest/PatchManifestStageConfig.tsx +57 -0
- package/src/pipelines/stages/patchManifest/PatchManifestStageForm.tsx +157 -0
- package/src/pipelines/stages/patchManifest/patchManifestStage.ts +30 -0
- package/src/pipelines/stages/rolloutRestartManifest/RolloutRestartManifestStageConfig.tsx +46 -0
- package/src/pipelines/stages/rolloutRestartManifest/rolloutRestartManifestStage.ts +20 -0
- package/src/pipelines/stages/runJob/KubernetesV2RunJobStageConfig.tsx +242 -0
- package/src/pipelines/stages/runJob/RunJobExecutionDetails.tsx +67 -0
- package/src/pipelines/stages/runJob/runJobStage.ts +39 -0
- package/src/pipelines/stages/scaleManifest/ScaleManifestConfig.tsx +38 -0
- package/src/pipelines/stages/scaleManifest/ScaleManifestStageForm.tsx +46 -0
- package/src/pipelines/stages/scaleManifest/scaleManifestStage.ts +24 -0
- package/src/pipelines/stages/traffic/ManifestTrafficStageConfig.tsx +44 -0
- package/src/pipelines/stages/traffic/disableManifest.stage.ts +26 -0
- package/src/pipelines/stages/traffic/enableManifest.stage.ts +26 -0
- package/src/pipelines/stages/undoRolloutManifest/UndoRolloutManifestConfig.tsx +37 -0
- package/src/pipelines/stages/undoRolloutManifest/UndoRolloutManifestStageForm.tsx +60 -0
- package/src/pipelines/stages/undoRolloutManifest/undoRolloutManifestStage.ts +21 -0
- package/src/pipelines/stages/validators/manifestSelectorValidators.ts +43 -0
- package/src/pipelines/validation/manifestSelector.validator.ts +36 -0
- package/src/rawResource/component/K8sResources.less +9 -0
- package/src/rawResource/component/K8sResources.tsx +112 -0
- package/src/rawResource/component/K8sResourcesFilters.tsx +112 -0
- package/src/rawResource/component/RawResourceUtils.ts +19 -0
- package/src/rawResource/component/group/RawResouceGroup.tsx +41 -0
- package/src/rawResource/component/group/RawResource.less +79 -0
- package/src/rawResource/component/group/RawResource.tsx +51 -0
- package/src/rawResource/component/group/RawResourceDetails.tsx +236 -0
- package/src/rawResource/component/group/RawResourceGroups.tsx +53 -0
- package/src/rawResource/controller/FiltersPubSub.ts +35 -0
- package/src/rawResource/index.ts +1 -0
- package/src/rawResource/model/resource.ts +18 -0
- package/src/rawResource/rawResource.dataSource.ts +39 -0
- package/src/rawResource/rawResource.module.ts +8 -0
- package/src/rawResource/rawResource.states.ts +64 -0
- package/src/reactShims/index.ts +1 -0
- package/src/reactShims/kubernetes.react.injector.ts +30 -0
- package/src/reactShims/kubernetes.react.module.ts +12 -0
- package/src/resources/ResourceDetails.tsx +121 -0
- package/src/resources/resources.state.ts +45 -0
- package/src/rolloutStrategy/bluegreen.strategy.ts +7 -0
- package/src/rolloutStrategy/highlander.strategy.ts +7 -0
- package/src/rolloutStrategy/index.ts +6 -0
- package/src/rolloutStrategy/none.strategy.ts +8 -0
- package/src/rolloutStrategy/redblack.strategy.ts +7 -0
- package/src/securityGroup/details/details.controller.ts +118 -0
- package/src/securityGroup/details/details.html +91 -0
- package/src/securityGroup/index.ts +1 -0
- package/src/securityGroup/securityGroup.reader.ts +11 -0
- package/src/securityGroup/transformer.ts +19 -0
- package/src/serverGroup/details/KubernetesServerGroupActions.tsx +138 -0
- package/src/serverGroup/details/kubernetesServerGroupDetailsGetter.ts +63 -0
- package/src/serverGroup/details/sections/IKubernetesServerGroupDetailsSectionProps.ts +6 -0
- package/src/serverGroup/details/sections/ServerGroupAnnotationCustomSection.tsx +11 -0
- package/src/serverGroup/details/sections/ServerGroupEventsSection.tsx +14 -0
- package/src/serverGroup/details/sections/ServerGroupHealthSection.tsx +19 -0
- package/src/serverGroup/details/sections/ServerGroupImagesSection.tsx +14 -0
- package/src/serverGroup/details/sections/ServerGroupInformationSection.tsx +46 -0
- package/src/serverGroup/details/sections/ServerGroupLabelsSection.tsx +14 -0
- package/src/serverGroup/details/sections/ServerGroupManifestStatusSection.tsx +9 -0
- package/src/serverGroup/details/sections/ServerGroupSizeSection.tsx +35 -0
- package/src/serverGroup/details/sections/index.ts +9 -0
- package/src/serverGroup/details/useManifest.ts +42 -0
- package/src/serverGroup/index.ts +3 -0
- package/src/serverGroup/serverGroupCommandBuilder.ts +9 -0
- package/src/serverGroup/serverGroupTransformer.spec.ts +67 -0
- package/src/serverGroup/serverGroupTransformer.ts +27 -0
- package/src/serverGroupManager/details/ServerGroupManagerActions.tsx +171 -0
- package/src/serverGroupManager/details/ServerGroupManagerDetails.tsx +72 -0
- package/src/serverGroupManager/details/sections/IKubernetesServerGroupManagerDetailsSectionProps.ts +7 -0
- package/src/serverGroupManager/details/sections/ServerGroupManagerAnnotationCustomSection.tsx +12 -0
- package/src/serverGroupManager/details/sections/ServerGroupManagerArtifactsSection.tsx +18 -0
- package/src/serverGroupManager/details/sections/ServerGroupManagerEventsSection.tsx +14 -0
- package/src/serverGroupManager/details/sections/ServerGroupManagerInformationSection.tsx +51 -0
- package/src/serverGroupManager/details/sections/ServerGroupManagerLabelsSection.tsx +14 -0
- package/src/serverGroupManager/details/sections/ServerGroupManagerManifestConditionSection.tsx +21 -0
- package/src/serverGroupManager/details/sections/ServerGroupManagerManifestStatusSection.tsx +10 -0
- package/src/serverGroupManager/details/sections/index.ts +8 -0
- package/src/serverGroupManager/details/useKubernetesServerGroupManagerDetails.tsx +53 -0
- package/src/serverGroupManager/index.ts +1 -0
- package/src/validation/applicationName.validator.spec.ts +19 -0
- 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,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>
|