From 44b610de4fe76337b8935d120a1c322e8f53419b Mon Sep 17 00:00:00 2001 From: Drew Walters Date: Wed, 6 May 2020 20:32:27 +0000 Subject: [PATCH] Add get-management-config command This change adds a get-management-config command that allows the user to view defined management configurations on stdout. Change-Id: I9c49016bbedcc3a4609d1b17631ecc9e1f4be104 Signed-off-by: Drew Walters --- cmd/config/config.go | 2 + cmd/config/get_management_config.go | 70 +++++++++++++++++++ cmd/config/get_management_config_test.go | 68 ++++++++++++++++++ .../config-cmd-with-help.golden | 2 + .../get-management-config-all.golden | 7 ++ .../get-management-config-default.golden | 4 ++ .../get-management-config-not-found.golden | 19 +++++ .../get-management-config-with-help.golden | 19 +++++ 8 files changed, 191 insertions(+) create mode 100644 cmd/config/get_management_config.go create mode 100644 cmd/config/get_management_config_test.go create mode 100644 cmd/config/testdata/TestGetManagementConfigCmdGoldenOutput/get-management-config-all.golden create mode 100644 cmd/config/testdata/TestGetManagementConfigCmdGoldenOutput/get-management-config-default.golden create mode 100644 cmd/config/testdata/TestGetManagementConfigCmdGoldenOutput/get-management-config-not-found.golden create mode 100644 cmd/config/testdata/TestGetManagementConfigCmdGoldenOutput/get-management-config-with-help.golden diff --git a/cmd/config/config.go b/cmd/config/config.go index a8f82068f..f0aeae735 100644 --- a/cmd/config/config.go +++ b/cmd/config/config.go @@ -44,11 +44,13 @@ func NewConfigCommand(rootSettings *environment.AirshipCTLSettings) *cobra.Comma configRootCmd.AddCommand(NewGetContextCommand(rootSettings)) configRootCmd.AddCommand(NewSetContextCommand(rootSettings)) + configRootCmd.AddCommand(NewGetManagementConfigCommand(rootSettings)) configRootCmd.AddCommand(NewSetManagementConfigCommand(rootSettings)) configRootCmd.AddCommand(NewImportCommand(rootSettings)) configRootCmd.AddCommand(NewInitCommand(rootSettings)) configRootCmd.AddCommand(NewUseContextCommand(rootSettings)) + configRootCmd.AddCommand(NewImportCommand(rootSettings)) return configRootCmd } diff --git a/cmd/config/get_management_config.go b/cmd/config/get_management_config.go new file mode 100644 index 000000000..330ca4fc8 --- /dev/null +++ b/cmd/config/get_management_config.go @@ -0,0 +1,70 @@ +/* + 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 + + http://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 config + +import ( + "fmt" + + "github.com/spf13/cobra" + + "opendev.org/airship/airshipctl/pkg/environment" +) + +const getManagementConfigExample = ` +# View all defined management configurations +airshipctl config get-management-configs + +# View a specific management configuration named "default" +airshipctl config get-management-config default +` + +// NewGetManagementConfigCommand creates a command that enables printing a management configuration to stdout. +func NewGetManagementConfigCommand(rootSettings *environment.AirshipCTLSettings) *cobra.Command { + cmd := &cobra.Command{ + Use: "get-management-config [NAME]", + Short: "View a management config or all management configs defined in the airshipctl config", + Example: getManagementConfigExample, + Args: cobra.MaximumNArgs(1), + Aliases: []string{"get-management-configs"}, + RunE: func(cmd *cobra.Command, args []string) error { + if len(args) == 1 { + name := args[0] + + config, err := rootSettings.Config.GetManagementConfiguration(name) + if err != nil { + return err + } + + fmt.Fprintf(cmd.OutOrStdout(), "name: %s\n%s\n", name, config.String()) + + return nil + } + + if len(rootSettings.Config.ManagementConfiguration) == 0 { + fmt.Fprintln(cmd.OutOrStdout(), "No management configurations defined.") + + return nil + } + + for key, config := range rootSettings.Config.ManagementConfiguration { + fmt.Fprintf(cmd.OutOrStdout(), "name: %s\n%s\n", key, config.String()) + } + + return nil + }, + } + + return cmd +} diff --git a/cmd/config/get_management_config_test.go b/cmd/config/get_management_config_test.go new file mode 100644 index 000000000..d0aa09ff9 --- /dev/null +++ b/cmd/config/get_management_config_test.go @@ -0,0 +1,68 @@ +/* +Copyright 2014 The Kubernetes Authors. + +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 + + http://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 config_test + +import ( + "testing" + + cmd "opendev.org/airship/airshipctl/cmd/config" + "opendev.org/airship/airshipctl/pkg/config" + "opendev.org/airship/airshipctl/pkg/environment" + redfishdell "opendev.org/airship/airshipctl/pkg/remote/redfish/vendors/dell" + "opendev.org/airship/airshipctl/testutil" +) + +func TestGetManagementConfigCmd(t *testing.T) { + settings := &environment.AirshipCTLSettings{ + Config: &config.Config{ + ManagementConfiguration: map[string]*config.ManagementConfiguration{ + config.AirshipDefaultContext: testutil.DummyManagementConfiguration(), + "test": { + Type: redfishdell.ClientType, + }, + }, + }, + } + + cmdTests := []*testutil.CmdTest{ + { + Name: "get-management-config-with-help", + CmdLine: "--help", + Cmd: cmd.NewGetManagementConfigCommand(nil), + }, + { + Name: "get-management-config-not-found", + CmdLine: "foo", + Cmd: cmd.NewGetManagementConfigCommand(settings), + Error: config.ErrManagementConfigurationNotFound{Name: "foo"}, + }, + { + Name: "get-management-config-all", + CmdLine: "", + Cmd: cmd.NewGetManagementConfigCommand(settings), + }, + { + Name: "get-management-config-default", + CmdLine: config.AirshipDefaultContext, + Cmd: cmd.NewGetManagementConfigCommand(settings), + }, + } + + for _, tt := range cmdTests { + testutil.RunTest(t, tt) + } +} diff --git a/cmd/config/testdata/TestConfigGoldenOutput/config-cmd-with-help.golden b/cmd/config/testdata/TestConfigGoldenOutput/config-cmd-with-help.golden index cbe175fa9..77159c9b7 100644 --- a/cmd/config/testdata/TestConfigGoldenOutput/config-cmd-with-help.golden +++ b/cmd/config/testdata/TestConfigGoldenOutput/config-cmd-with-help.golden @@ -7,8 +7,10 @@ Available Commands: get-cluster Get cluster information from the airshipctl config get-context Get context information from the airshipctl config get-credential Get user credentials from the airshipctl config + get-management-config View a management config or all management configs defined in the airshipctl config help Help about any command import Merge information from a kubernetes config file + import Merge information from a kubernetes config file init Generate initial configuration files for airshipctl set-cluster Manage clusters set-context Manage contexts diff --git a/cmd/config/testdata/TestGetManagementConfigCmdGoldenOutput/get-management-config-all.golden b/cmd/config/testdata/TestGetManagementConfigCmdGoldenOutput/get-management-config-all.golden new file mode 100644 index 000000000..089d31acf --- /dev/null +++ b/cmd/config/testdata/TestGetManagementConfigCmdGoldenOutput/get-management-config-all.golden @@ -0,0 +1,7 @@ +name: default +insecure: true +type: redfish + +name: test +type: redfish-dell + diff --git a/cmd/config/testdata/TestGetManagementConfigCmdGoldenOutput/get-management-config-default.golden b/cmd/config/testdata/TestGetManagementConfigCmdGoldenOutput/get-management-config-default.golden new file mode 100644 index 000000000..68baddcc4 --- /dev/null +++ b/cmd/config/testdata/TestGetManagementConfigCmdGoldenOutput/get-management-config-default.golden @@ -0,0 +1,4 @@ +name: default +insecure: true +type: redfish + diff --git a/cmd/config/testdata/TestGetManagementConfigCmdGoldenOutput/get-management-config-not-found.golden b/cmd/config/testdata/TestGetManagementConfigCmdGoldenOutput/get-management-config-not-found.golden new file mode 100644 index 000000000..36844b15e --- /dev/null +++ b/cmd/config/testdata/TestGetManagementConfigCmdGoldenOutput/get-management-config-not-found.golden @@ -0,0 +1,19 @@ +Error: Unknown management configuration 'foo'. +Usage: + get-management-config [NAME] [flags] + +Aliases: + get-management-config, get-management-configs + +Examples: + +# View all defined management configurations +airshipctl config get-management-configs + +# View a specific management configuration named "default" +airshipctl config get-management-config default + + +Flags: + -h, --help help for get-management-config + diff --git a/cmd/config/testdata/TestGetManagementConfigCmdGoldenOutput/get-management-config-with-help.golden b/cmd/config/testdata/TestGetManagementConfigCmdGoldenOutput/get-management-config-with-help.golden new file mode 100644 index 000000000..555befa2a --- /dev/null +++ b/cmd/config/testdata/TestGetManagementConfigCmdGoldenOutput/get-management-config-with-help.golden @@ -0,0 +1,19 @@ +View a management config or all management configs defined in the airshipctl config + +Usage: + get-management-config [NAME] [flags] + +Aliases: + get-management-config, get-management-configs + +Examples: + +# View all defined management configurations +airshipctl config get-management-configs + +# View a specific management configuration named "default" +airshipctl config get-management-config default + + +Flags: + -h, --help help for get-management-config