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 <andrew.walters@att.com>
This commit is contained in:
Drew Walters 2020-05-06 20:32:27 +00:00 committed by Dmitry Ukov
parent ccb83371ec
commit 44b610de4f
8 changed files with 191 additions and 0 deletions

View File

@ -44,11 +44,13 @@ func NewConfigCommand(rootSettings *environment.AirshipCTLSettings) *cobra.Comma
configRootCmd.AddCommand(NewGetContextCommand(rootSettings)) configRootCmd.AddCommand(NewGetContextCommand(rootSettings))
configRootCmd.AddCommand(NewSetContextCommand(rootSettings)) configRootCmd.AddCommand(NewSetContextCommand(rootSettings))
configRootCmd.AddCommand(NewGetManagementConfigCommand(rootSettings))
configRootCmd.AddCommand(NewSetManagementConfigCommand(rootSettings)) configRootCmd.AddCommand(NewSetManagementConfigCommand(rootSettings))
configRootCmd.AddCommand(NewImportCommand(rootSettings)) configRootCmd.AddCommand(NewImportCommand(rootSettings))
configRootCmd.AddCommand(NewInitCommand(rootSettings)) configRootCmd.AddCommand(NewInitCommand(rootSettings))
configRootCmd.AddCommand(NewUseContextCommand(rootSettings)) configRootCmd.AddCommand(NewUseContextCommand(rootSettings))
configRootCmd.AddCommand(NewImportCommand(rootSettings))
return configRootCmd return configRootCmd
} }

View File

@ -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
}

View File

@ -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)
}
}

View File

@ -7,8 +7,10 @@ Available Commands:
get-cluster Get cluster information from the airshipctl config get-cluster Get cluster information from the airshipctl config
get-context Get context information from the airshipctl config get-context Get context information from the airshipctl config
get-credential Get user credentials 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 help Help about any command
import Merge information from a kubernetes config file import Merge information from a kubernetes config file
import Merge information from a kubernetes config file
init Generate initial configuration files for airshipctl init Generate initial configuration files for airshipctl
set-cluster Manage clusters set-cluster Manage clusters
set-context Manage contexts set-context Manage contexts

View File

@ -0,0 +1,7 @@
name: default
insecure: true
type: redfish
name: test
type: redfish-dell

View File

@ -0,0 +1,4 @@
name: default
insecure: true
type: redfish

View File

@ -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

View File

@ -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