Remove AirshipCTLSettings from root level cmd
AirshipCTLSettings will no longer be used by any command, so this patch removes it from root level. Change-Id: I2aa1d80ab0785b498af1ac2c86334f9b0d9ff047 Signed-off-by: Ruslan Aliev <raliev@mirantis.com> Relates-To: #327
This commit is contained in:
parent
2166062f2e
commit
fba618225a
@ -18,7 +18,6 @@ import (
|
||||
"github.com/spf13/cobra"
|
||||
|
||||
"opendev.org/airship/airshipctl/pkg/config"
|
||||
"opendev.org/airship/airshipctl/pkg/environment"
|
||||
"opendev.org/airship/airshipctl/pkg/remote"
|
||||
)
|
||||
|
||||
@ -36,14 +35,12 @@ const (
|
||||
)
|
||||
|
||||
// NewBaremetalCommand creates a new command for interacting with baremetal using airshipctl.
|
||||
func NewBaremetalCommand(rootSettings *environment.AirshipCTLSettings) *cobra.Command {
|
||||
func NewBaremetalCommand(cfgFactory config.Factory) *cobra.Command {
|
||||
baremetalRootCmd := &cobra.Command{
|
||||
Use: "baremetal",
|
||||
Short: "Perform actions on baremetal hosts",
|
||||
}
|
||||
|
||||
cfgFactory := config.CreateFactory(&rootSettings.AirshipConfigPath, &rootSettings.KubeConfigPath)
|
||||
|
||||
baremetalRootCmd.AddCommand(NewEjectMediaCommand(cfgFactory))
|
||||
baremetalRootCmd.AddCommand(NewPowerOffCommand(cfgFactory))
|
||||
baremetalRootCmd.AddCommand(NewPowerOnCommand(cfgFactory))
|
||||
|
@ -20,7 +20,6 @@ import (
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
||||
"opendev.org/airship/airshipctl/cmd/baremetal"
|
||||
"opendev.org/airship/airshipctl/pkg/environment"
|
||||
"opendev.org/airship/airshipctl/testutil"
|
||||
)
|
||||
|
||||
@ -29,7 +28,7 @@ func TestBaremetal(t *testing.T) {
|
||||
{
|
||||
Name: "baremetal-with-help",
|
||||
CmdLine: "-h",
|
||||
Cmd: baremetal.NewBaremetalCommand(&environment.AirshipCTLSettings{}),
|
||||
Cmd: baremetal.NewBaremetalCommand(nil),
|
||||
},
|
||||
{
|
||||
Name: "baremetal-ejectmedia-with-help",
|
||||
|
@ -18,7 +18,6 @@ import (
|
||||
"github.com/spf13/cobra"
|
||||
|
||||
"opendev.org/airship/airshipctl/pkg/config"
|
||||
"opendev.org/airship/airshipctl/pkg/environment"
|
||||
"opendev.org/airship/airshipctl/pkg/k8s/client"
|
||||
)
|
||||
|
||||
@ -31,15 +30,13 @@ such as getting status and deploying initial infrastructure.
|
||||
)
|
||||
|
||||
// NewClusterCommand creates a command for interacting with a Kubernetes cluster.
|
||||
func NewClusterCommand(rootSettings *environment.AirshipCTLSettings) *cobra.Command {
|
||||
func NewClusterCommand(cfgFactory config.Factory) *cobra.Command {
|
||||
clusterRootCmd := &cobra.Command{
|
||||
Use: "cluster",
|
||||
Short: "Manage Kubernetes clusters",
|
||||
Long: clusterLong[1:],
|
||||
}
|
||||
|
||||
cfgFactory := config.CreateFactory(&rootSettings.AirshipConfigPath, &rootSettings.KubeConfigPath)
|
||||
|
||||
clusterRootCmd.AddCommand(NewInitCommand(cfgFactory))
|
||||
clusterRootCmd.AddCommand(NewMoveCommand(cfgFactory))
|
||||
clusterRootCmd.AddCommand(NewStatusCommand(cfgFactory, client.DefaultClient))
|
||||
|
@ -18,22 +18,15 @@ import (
|
||||
"testing"
|
||||
|
||||
"opendev.org/airship/airshipctl/cmd/cluster"
|
||||
"opendev.org/airship/airshipctl/pkg/environment"
|
||||
"opendev.org/airship/airshipctl/testutil"
|
||||
)
|
||||
|
||||
func TestNewClusterCommand(t *testing.T) {
|
||||
fakeRootSettings := &environment.AirshipCTLSettings{
|
||||
AirshipConfigPath: "../../testdata/k8s/config.yaml",
|
||||
KubeConfigPath: "../../testdata/k8s/kubeconfig.yaml",
|
||||
}
|
||||
fakeRootSettings.InitConfig()
|
||||
|
||||
tests := []*testutil.CmdTest{
|
||||
{
|
||||
Name: "cluster-cmd-with-help",
|
||||
CmdLine: "--help",
|
||||
Cmd: cluster.NewClusterCommand(fakeRootSettings),
|
||||
Cmd: cluster.NewClusterCommand(nil),
|
||||
},
|
||||
}
|
||||
for _, testcase := range tests {
|
||||
|
@ -18,30 +18,16 @@ import (
|
||||
"github.com/spf13/cobra"
|
||||
|
||||
"opendev.org/airship/airshipctl/pkg/config"
|
||||
"opendev.org/airship/airshipctl/pkg/environment"
|
||||
)
|
||||
|
||||
// NewConfigCommand creates a command for interacting with the airshipctl configuration.
|
||||
func NewConfigCommand(rootSettings *environment.AirshipCTLSettings) *cobra.Command {
|
||||
func NewConfigCommand(cfgFactory config.Factory) *cobra.Command {
|
||||
configRootCmd := &cobra.Command{
|
||||
Use: "config",
|
||||
DisableFlagsInUseLine: true,
|
||||
Short: "Manage the airshipctl config file",
|
||||
PersistentPreRun: func(cmd *cobra.Command, args []string) {
|
||||
if parentPreRun := cmd.Root().PersistentPreRun; parentPreRun != nil {
|
||||
parentPreRun(cmd.Root(), args)
|
||||
}
|
||||
|
||||
if cmd.Use == "init" {
|
||||
rootSettings.Create = true
|
||||
}
|
||||
// Load or Initialize airship Config
|
||||
rootSettings.InitConfig()
|
||||
},
|
||||
}
|
||||
|
||||
cfgFactory := config.CreateFactory(&rootSettings.AirshipConfigPath, &rootSettings.KubeConfigPath)
|
||||
|
||||
configRootCmd.AddCommand(NewGetContextCommand(cfgFactory))
|
||||
configRootCmd.AddCommand(NewSetContextCommand(cfgFactory))
|
||||
|
||||
|
@ -20,7 +20,6 @@ import (
|
||||
"testing"
|
||||
|
||||
cmd "opendev.org/airship/airshipctl/cmd/config"
|
||||
"opendev.org/airship/airshipctl/pkg/environment"
|
||||
"opendev.org/airship/airshipctl/testutil"
|
||||
)
|
||||
|
||||
@ -29,7 +28,7 @@ func TestConfig(t *testing.T) {
|
||||
{
|
||||
Name: "config-cmd-with-help",
|
||||
CmdLine: "--help",
|
||||
Cmd: cmd.NewConfigCommand(&environment.AirshipCTLSettings{}),
|
||||
Cmd: cmd.NewConfigCommand(nil),
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -18,18 +18,15 @@ import (
|
||||
"github.com/spf13/cobra"
|
||||
|
||||
"opendev.org/airship/airshipctl/pkg/config"
|
||||
"opendev.org/airship/airshipctl/pkg/environment"
|
||||
)
|
||||
|
||||
// NewDocumentCommand creates a new command for managing airshipctl documents
|
||||
func NewDocumentCommand(rootSettings *environment.AirshipCTLSettings) *cobra.Command {
|
||||
func NewDocumentCommand(cfgFactory config.Factory) *cobra.Command {
|
||||
documentRootCmd := &cobra.Command{
|
||||
Use: "document",
|
||||
Short: "Manage deployment documents",
|
||||
}
|
||||
|
||||
cfgFactory := config.CreateFactory(&rootSettings.AirshipConfigPath, &rootSettings.KubeConfigPath)
|
||||
|
||||
documentRootCmd.AddCommand(NewPullCommand(cfgFactory))
|
||||
documentRootCmd.AddCommand(NewPluginCommand())
|
||||
|
||||
|
@ -18,17 +18,15 @@ import (
|
||||
"testing"
|
||||
|
||||
"opendev.org/airship/airshipctl/cmd/document"
|
||||
"opendev.org/airship/airshipctl/pkg/environment"
|
||||
"opendev.org/airship/airshipctl/testutil"
|
||||
)
|
||||
|
||||
func TestDocument(t *testing.T) {
|
||||
rootSettings := &environment.AirshipCTLSettings{}
|
||||
tests := []*testutil.CmdTest{
|
||||
{
|
||||
Name: "document-with-help",
|
||||
CmdLine: "-h",
|
||||
Cmd: document.NewDocumentCommand(rootSettings),
|
||||
Cmd: document.NewDocumentCommand(nil),
|
||||
},
|
||||
{
|
||||
Name: "document-plugin-with-help",
|
||||
|
@ -18,18 +18,15 @@ import (
|
||||
"github.com/spf13/cobra"
|
||||
|
||||
"opendev.org/airship/airshipctl/pkg/config"
|
||||
"opendev.org/airship/airshipctl/pkg/environment"
|
||||
)
|
||||
|
||||
// NewImageCommand creates a new command for managing ISO images using airshipctl.
|
||||
func NewImageCommand(rootSettings *environment.AirshipCTLSettings) *cobra.Command {
|
||||
func NewImageCommand(cfgFactory config.Factory) *cobra.Command {
|
||||
imageRootCmd := &cobra.Command{
|
||||
Use: "image",
|
||||
Short: "Manage ISO image creation",
|
||||
}
|
||||
|
||||
cfgFactory := config.CreateFactory(&rootSettings.AirshipConfigPath, &rootSettings.KubeConfigPath)
|
||||
|
||||
imageRootCmd.AddCommand(NewImageBuildCommand(cfgFactory))
|
||||
|
||||
return imageRootCmd
|
||||
|
@ -18,7 +18,6 @@ import (
|
||||
"testing"
|
||||
|
||||
"opendev.org/airship/airshipctl/cmd/image"
|
||||
"opendev.org/airship/airshipctl/pkg/environment"
|
||||
"opendev.org/airship/airshipctl/testutil"
|
||||
)
|
||||
|
||||
@ -27,7 +26,7 @@ func TestImage(t *testing.T) {
|
||||
{
|
||||
Name: "image-with-help",
|
||||
CmdLine: "-h",
|
||||
Cmd: image.NewImageCommand(&environment.AirshipCTLSettings{}),
|
||||
Cmd: image.NewImageCommand(nil),
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -18,7 +18,6 @@ import (
|
||||
"github.com/spf13/cobra"
|
||||
|
||||
"opendev.org/airship/airshipctl/pkg/config"
|
||||
"opendev.org/airship/airshipctl/pkg/environment"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -29,15 +28,13 @@ such as getting list and applying specific one.
|
||||
)
|
||||
|
||||
// NewPhaseCommand creates a command for interacting with phases
|
||||
func NewPhaseCommand(rootSettings *environment.AirshipCTLSettings) *cobra.Command {
|
||||
func NewPhaseCommand(cfgFactory config.Factory) *cobra.Command {
|
||||
phaseRootCmd := &cobra.Command{
|
||||
Use: "phase",
|
||||
Short: "Manage phases",
|
||||
Long: clusterLong[1:],
|
||||
}
|
||||
|
||||
cfgFactory := config.CreateFactory(&rootSettings.AirshipConfigPath, &rootSettings.KubeConfigPath)
|
||||
|
||||
phaseRootCmd.AddCommand(NewApplyCommand(cfgFactory))
|
||||
phaseRootCmd.AddCommand(NewRenderCommand(cfgFactory))
|
||||
phaseRootCmd.AddCommand(NewPlanCommand(cfgFactory))
|
||||
|
@ -18,22 +18,15 @@ import (
|
||||
"testing"
|
||||
|
||||
"opendev.org/airship/airshipctl/cmd/phase"
|
||||
"opendev.org/airship/airshipctl/pkg/environment"
|
||||
"opendev.org/airship/airshipctl/testutil"
|
||||
)
|
||||
|
||||
func TestNewPhaseCommand(t *testing.T) {
|
||||
fakeRootSettings := &environment.AirshipCTLSettings{
|
||||
AirshipConfigPath: "../../testdata/k8s/config.yaml",
|
||||
KubeConfigPath: "../../testdata/k8s/kubeconfig.yaml",
|
||||
}
|
||||
fakeRootSettings.InitConfig()
|
||||
|
||||
tests := []*testutil.CmdTest{
|
||||
{
|
||||
Name: "phase-cmd-with-help",
|
||||
CmdLine: "--help",
|
||||
Cmd: phase.NewPhaseCommand(fakeRootSettings),
|
||||
Cmd: phase.NewPhaseCommand(nil),
|
||||
},
|
||||
}
|
||||
for _, testcase := range tests {
|
||||
|
62
cmd/root.go
62
cmd/root.go
@ -16,8 +16,10 @@ package cmd
|
||||
|
||||
import (
|
||||
"io"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
"k8s.io/client-go/tools/clientcmd"
|
||||
|
||||
// Import to initialize client auth plugins.
|
||||
_ "k8s.io/client-go/plugin/pkg/client/auth"
|
||||
@ -30,54 +32,76 @@ import (
|
||||
"opendev.org/airship/airshipctl/cmd/image"
|
||||
"opendev.org/airship/airshipctl/cmd/phase"
|
||||
"opendev.org/airship/airshipctl/cmd/secret"
|
||||
"opendev.org/airship/airshipctl/pkg/environment"
|
||||
cfg "opendev.org/airship/airshipctl/pkg/config"
|
||||
"opendev.org/airship/airshipctl/pkg/log"
|
||||
)
|
||||
|
||||
// RootOptions stores global flags values
|
||||
type RootOptions struct {
|
||||
Debug bool
|
||||
AirshipConfigPath string
|
||||
KubeConfigPath string
|
||||
}
|
||||
|
||||
// NewAirshipCTLCommand creates a root `airshipctl` command with the default commands attached
|
||||
func NewAirshipCTLCommand(out io.Writer) *cobra.Command {
|
||||
rootCmd, settings := NewRootCommand(out)
|
||||
return AddDefaultAirshipCTLCommands(rootCmd, settings)
|
||||
return AddDefaultAirshipCTLCommands(rootCmd,
|
||||
cfg.CreateFactory(&settings.AirshipConfigPath, &settings.KubeConfigPath))
|
||||
}
|
||||
|
||||
// NewRootCommand creates the root `airshipctl` command. All other commands are
|
||||
// subcommands branching from this one
|
||||
func NewRootCommand(out io.Writer) (*cobra.Command, *environment.AirshipCTLSettings) {
|
||||
var debug bool
|
||||
func NewRootCommand(out io.Writer) (*cobra.Command, *RootOptions) {
|
||||
options := &RootOptions{}
|
||||
rootCmd := &cobra.Command{
|
||||
Use: "airshipctl",
|
||||
Short: "A unified entrypoint to various airship components",
|
||||
SilenceErrors: true,
|
||||
SilenceUsage: true,
|
||||
PersistentPreRun: func(cmd *cobra.Command, args []string) {
|
||||
log.Init(debug, cmd.OutOrStdout())
|
||||
log.Init(options.Debug, cmd.OutOrStdout())
|
||||
},
|
||||
}
|
||||
rootCmd.SetOut(out)
|
||||
rootCmd.PersistentFlags().BoolVar(&debug, "debug", false, "enable verbose output")
|
||||
initFlags(options, rootCmd)
|
||||
|
||||
return rootCmd, makeRootSettings(rootCmd)
|
||||
return rootCmd, options
|
||||
}
|
||||
|
||||
// AddDefaultAirshipCTLCommands is a convenience function for adding all of the
|
||||
// default commands to airshipctl
|
||||
func AddDefaultAirshipCTLCommands(cmd *cobra.Command, settings *environment.AirshipCTLSettings) *cobra.Command {
|
||||
cmd.AddCommand(baremetal.NewBaremetalCommand(settings))
|
||||
cmd.AddCommand(cluster.NewClusterCommand(settings))
|
||||
func AddDefaultAirshipCTLCommands(cmd *cobra.Command, factory cfg.Factory) *cobra.Command {
|
||||
cmd.AddCommand(baremetal.NewBaremetalCommand(factory))
|
||||
cmd.AddCommand(cluster.NewClusterCommand(factory))
|
||||
cmd.AddCommand(completion.NewCompletionCommand())
|
||||
cmd.AddCommand(document.NewDocumentCommand(settings))
|
||||
cmd.AddCommand(config.NewConfigCommand(settings))
|
||||
cmd.AddCommand(image.NewImageCommand(settings))
|
||||
cmd.AddCommand(document.NewDocumentCommand(factory))
|
||||
cmd.AddCommand(config.NewConfigCommand(factory))
|
||||
cmd.AddCommand(image.NewImageCommand(factory))
|
||||
cmd.AddCommand(secret.NewSecretCommand())
|
||||
cmd.AddCommand(phase.NewPhaseCommand(settings))
|
||||
cmd.AddCommand(phase.NewPhaseCommand(factory))
|
||||
cmd.AddCommand(NewVersionCommand())
|
||||
|
||||
return cmd
|
||||
}
|
||||
|
||||
// makeRootSettings holds all actions about environment.AirshipCTLSettings
|
||||
func makeRootSettings(cmd *cobra.Command) *environment.AirshipCTLSettings {
|
||||
settings := &environment.AirshipCTLSettings{}
|
||||
settings.InitFlags(cmd)
|
||||
return settings
|
||||
func initFlags(options *RootOptions, cmd *cobra.Command) {
|
||||
flags := cmd.PersistentFlags()
|
||||
flags.BoolVar(&options.Debug, "debug", false, "enable verbose output")
|
||||
|
||||
defaultAirshipConfigDir := filepath.Join(cfg.HomeEnvVar, cfg.AirshipConfigDir)
|
||||
|
||||
defaultAirshipConfigPath := filepath.Join(defaultAirshipConfigDir, cfg.AirshipConfig)
|
||||
flags.StringVar(
|
||||
&options.AirshipConfigPath,
|
||||
"airshipconf",
|
||||
"",
|
||||
`Path to file for airshipctl configuration. (default "`+defaultAirshipConfigPath+`")`)
|
||||
|
||||
defaultKubeConfigPath := filepath.Join(defaultAirshipConfigDir, cfg.AirshipKubeConfig)
|
||||
flags.StringVar(
|
||||
&options.KubeConfigPath,
|
||||
clientcmd.RecommendedConfigPathFlag,
|
||||
"",
|
||||
`Path to kubeconfig associated with airshipctl configuration. (default "`+defaultKubeConfigPath+`")`)
|
||||
}
|
||||
|
@ -24,7 +24,6 @@ import (
|
||||
|
||||
"opendev.org/airship/airshipctl/cmd"
|
||||
"opendev.org/airship/airshipctl/cmd/baremetal"
|
||||
"opendev.org/airship/airshipctl/pkg/environment"
|
||||
"opendev.org/airship/airshipctl/testutil"
|
||||
)
|
||||
|
||||
@ -101,6 +100,6 @@ func getDefaultRootCommand(t *testing.T) *cobra.Command {
|
||||
func getSpecializedRootCommand(t *testing.T) *cobra.Command {
|
||||
t.Helper()
|
||||
rootCmd := getVanillaRootCommand(t)
|
||||
rootCmd.AddCommand(baremetal.NewBaremetalCommand(&environment.AirshipCTLSettings{}))
|
||||
rootCmd.AddCommand(baremetal.NewBaremetalCommand(nil))
|
||||
return rootCmd
|
||||
}
|
||||
|
@ -57,6 +57,9 @@ const (
|
||||
|
||||
// Modules
|
||||
AirshipDefaultManagementType = redfish.ClientType
|
||||
|
||||
//HomeEnvVar holds value of HOME directory from env
|
||||
HomeEnvVar = "$HOME"
|
||||
)
|
||||
|
||||
// Default values for remote operations
|
||||
|
Loading…
Reference in New Issue
Block a user