diff --git a/cmd/phase/phase.go b/cmd/phase/phase.go index e06668444..8ee75db2d 100644 --- a/cmd/phase/phase.go +++ b/cmd/phase/phase.go @@ -38,6 +38,7 @@ func NewPhaseCommand(cfgFactory config.Factory) *cobra.Command { phaseRootCmd.AddCommand(NewRenderCommand(cfgFactory)) phaseRootCmd.AddCommand(NewPlanCommand(cfgFactory)) phaseRootCmd.AddCommand(NewRunCommand(cfgFactory)) + phaseRootCmd.AddCommand(NewTreeCommand(cfgFactory)) return phaseRootCmd } diff --git a/cmd/phase/testdata/TestNewPhaseCommandGoldenOutput/phase-cmd-with-help.golden b/cmd/phase/testdata/TestNewPhaseCommandGoldenOutput/phase-cmd-with-help.golden index 3e52eec10..9ae36f95c 100644 --- a/cmd/phase/testdata/TestNewPhaseCommandGoldenOutput/phase-cmd-with-help.golden +++ b/cmd/phase/testdata/TestNewPhaseCommandGoldenOutput/phase-cmd-with-help.golden @@ -9,6 +9,7 @@ Available Commands: plan List phases render Render phase documents from model run Run phase + tree Tree view of kustomize entrypoints of phase Flags: -h, --help help for phase diff --git a/cmd/phase/testdata/TestNewTreeCommandGoldenOutput/tree-cmd-with-help.golden b/cmd/phase/testdata/TestNewTreeCommandGoldenOutput/tree-cmd-with-help.golden new file mode 100644 index 000000000..0a00801b5 --- /dev/null +++ b/cmd/phase/testdata/TestNewTreeCommandGoldenOutput/tree-cmd-with-help.golden @@ -0,0 +1,16 @@ +Summarized tree view of the kustomize entrypoints of a specific phase + +Usage: + tree PHASE_NAME [flags] + +Examples: + +# yaml explorer of a phase with relative path +airshipctl phase tree /manifests/site/test-site/ephemeral/initinfra + +#yaml explorer of a phase with phase name +airshipctl phase tree initinfra-ephemeral + + +Flags: + -h, --help help for tree diff --git a/cmd/phase/tree.go b/cmd/phase/tree.go new file mode 100644 index 000000000..9210f0f9b --- /dev/null +++ b/cmd/phase/tree.go @@ -0,0 +1,58 @@ +/* + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package phase + +import ( + "github.com/spf13/cobra" + + "opendev.org/airship/airshipctl/pkg/config" + "opendev.org/airship/airshipctl/pkg/phase" + "opendev.org/airship/airshipctl/pkg/phase/ifc" +) + +const ( + treeLong = ` +Summarized tree view of the kustomize entrypoints of a specific phase` + + treeExample = ` +# yaml explorer of a phase with relative path +airshipctl phase tree /manifests/site/test-site/ephemeral/initinfra + +#yaml explorer of a phase with phase name +airshipctl phase tree initinfra-ephemeral +` +) + +// NewTreeCommand creates a command to get summarized tree view of the kustomize entrypoints of a phase +func NewTreeCommand(cfgFactory config.Factory) *cobra.Command { + treeCmd := &cobra.Command{ + Use: "tree PHASE_NAME", + Short: "Tree view of kustomize entrypoints of phase", + Long: treeLong[1:], + Args: cobra.ExactArgs(1), + Example: treeExample, + RunE: func(cmd *cobra.Command, args []string) error { + writer := cmd.OutOrStdout() + p := &phase.TreeCommand{ + Factory: cfgFactory, + PhaseID: ifc.ID{}, + Writer: writer, + } + p.Argument = args[0] + return p.RunE() + }, + } + return treeCmd +} diff --git a/cmd/phase/tree_test.go b/cmd/phase/tree_test.go new file mode 100644 index 000000000..f802d9689 --- /dev/null +++ b/cmd/phase/tree_test.go @@ -0,0 +1,35 @@ +/* + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package phase_test + +import ( + "testing" + + "opendev.org/airship/airshipctl/cmd/phase" + "opendev.org/airship/airshipctl/testutil" +) + +func TestNewTreeCommand(t *testing.T) { + tests := []*testutil.CmdTest{ + { + Name: "tree-cmd-with-help", + CmdLine: "--help", + Cmd: phase.NewTreeCommand(nil), + }, + } + for _, testcase := range tests { + testutil.RunTest(t, testcase) + } +} diff --git a/docs/source/cli/airshipctl_phase.md b/docs/source/cli/airshipctl_phase.md index c11803496..d81499bb8 100644 --- a/docs/source/cli/airshipctl_phase.md +++ b/docs/source/cli/airshipctl_phase.md @@ -27,4 +27,5 @@ such as getting list and applying specific one. * [airshipctl phase plan](airshipctl_phase_plan.md) - List phases * [airshipctl phase render](airshipctl_phase_render.md) - Render phase documents from model * [airshipctl phase run](airshipctl_phase_run.md) - Run phase +* [airshipctl phase tree](airshipctl_phase_tree.md) - Tree view of kustomize entrypoints of phase diff --git a/docs/source/cli/airshipctl_phase_tree.md b/docs/source/cli/airshipctl_phase_tree.md new file mode 100644 index 000000000..34940664a --- /dev/null +++ b/docs/source/cli/airshipctl_phase_tree.md @@ -0,0 +1,41 @@ +## airshipctl phase tree + +Tree view of kustomize entrypoints of phase + +### Synopsis + +Summarized tree view of the kustomize entrypoints of a specific phase + +``` +airshipctl phase tree PHASE_NAME [flags] +``` + +### Examples + +``` + +# yaml explorer of a phase with relative path +airshipctl phase tree /manifests/site/test-site/ephemeral/initinfra + +#yaml explorer of a phase with phase name +airshipctl phase tree initinfra-ephemeral + +``` + +### Options + +``` + -h, --help help for tree +``` + +### Options inherited from parent commands + +``` + --airshipconf string Path to file for airshipctl configuration. (default "$HOME/.airship/config") + --debug enable verbose output +``` + +### SEE ALSO + +* [airshipctl phase](airshipctl_phase.md) - Manage phases + diff --git a/manifests/site/test-site/ephemeral/catalogues/kustomization.yaml b/manifests/site/test-site/ephemeral/catalogues/kustomization.yaml index 96d54ad4f..5f99dd8a4 100644 --- a/manifests/site/test-site/ephemeral/catalogues/kustomization.yaml +++ b/manifests/site/test-site/ephemeral/catalogues/kustomization.yaml @@ -2,5 +2,5 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - ../../target/catalogues -patches: +patchesStrategicMerge: - networking.yaml diff --git a/manifests/site/test-site/target/catalogues/kustomization.yaml b/manifests/site/test-site/target/catalogues/kustomization.yaml index 80f427553..b88ec1846 100644 --- a/manifests/site/test-site/target/catalogues/kustomization.yaml +++ b/manifests/site/test-site/target/catalogues/kustomization.yaml @@ -5,6 +5,6 @@ resources: - ../../../../type/gating/shared/catalogues - hosts.yaml -patches: +patchesStrategicMerge: - versions-airshipctl.yaml - networking.yaml diff --git a/manifests/type/gating/shared/catalogues/kustomization.yaml b/manifests/type/gating/shared/catalogues/kustomization.yaml index b908d4155..78ba82c4f 100644 --- a/manifests/type/gating/shared/catalogues/kustomization.yaml +++ b/manifests/type/gating/shared/catalogues/kustomization.yaml @@ -2,6 +2,6 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - ../../../../function/airshipctl-base-catalogues -patches: +patchesStrategicMerge: - networking.yaml