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:
Ruslan Aliev 2020-08-29 18:38:46 -05:00
parent 2166062f2e
commit fba618225a
15 changed files with 59 additions and 81 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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+`")`)
}

View File

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

View File

@ -57,6 +57,9 @@ const (
// Modules
AirshipDefaultManagementType = redfish.ClientType
//HomeEnvVar holds value of HOME directory from env
HomeEnvVar = "$HOME"
)
// Default values for remote operations