airshipctl/cmd/root.go
Ian Howell 51b1e86ad9 Fix flag loading order
Prior to this change, flags associated with the Config object were being
read too early (that is, before cobra had parsed them). They are now
read just in time for command execution.

Change-Id: I0affca9429867eb25db40f8323403e0f6976b47b
2020-01-15 13:04:16 -06:00

69 lines
2.3 KiB
Go

package cmd
import (
"io"
//argo "github.com/argoproj/argo/cmd/argo/commands"
"github.com/spf13/cobra"
//kubeadm "k8s.io/kubernetes/cmd/kubeadm/app/cmd"
kubectl "k8s.io/kubernetes/pkg/kubectl/cmd"
// Import to initialize client auth plugins.
_ "k8s.io/client-go/plugin/pkg/client/auth"
"opendev.org/airship/airshipctl/cmd/bootstrap"
"opendev.org/airship/airshipctl/cmd/cluster"
"opendev.org/airship/airshipctl/cmd/completion"
"opendev.org/airship/airshipctl/cmd/config"
"opendev.org/airship/airshipctl/cmd/document"
"opendev.org/airship/airshipctl/pkg/environment"
"opendev.org/airship/airshipctl/pkg/log"
)
// NewAirshipCTLCommand creates a root `airshipctl` command with the default commands attached
func NewAirshipCTLCommand(out io.Writer) (*cobra.Command, *environment.AirshipCTLSettings, error) {
rootCmd, settings, err := NewRootCmd(out)
return AddDefaultAirshipCTLCommands(rootCmd, settings), settings, err
}
// NewRootCmd creates the root `airshipctl` command. All other commands are
// subcommands branching from this one
func NewRootCmd(out io.Writer) (*cobra.Command, *environment.AirshipCTLSettings, error) {
settings := &environment.AirshipCTLSettings{}
rootCmd := &cobra.Command{
Use: "airshipctl",
Short: "airshipctl is a unified entrypoint to various airship components",
SilenceErrors: true,
SilenceUsage: true,
PersistentPreRun: func(cmd *cobra.Command, args []string) {
log.Init(settings.Debug, cmd.OutOrStderr())
// Load or Initialize airship Config
settings.InitConfig()
},
}
rootCmd.SetOutput(out)
rootCmd.AddCommand(NewVersionCommand())
settings.InitFlags(rootCmd)
return rootCmd, settings, nil
}
// 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(bootstrap.NewBootstrapCommand(settings))
cmd.AddCommand(cluster.NewClusterCommand(settings))
cmd.AddCommand(completion.NewCompletionCommand())
cmd.AddCommand(document.NewDocumentCommand(settings))
cmd.AddCommand(config.NewConfigCommand(settings))
cmd.AddCommand(kubectl.NewDefaultKubectlCommand())
// Should we use cmd.OutOrStdout?
//cmd.AddCommand(kubeadm.NewKubeadmCommand(os.Stdin, os.Stdout, os.Stderr))
return cmd
}