diff --git a/cmd/kops/delete_cluster.go b/cmd/kops/delete_cluster.go index 450f6ab9a2..6f1de2f190 100644 --- a/cmd/kops/delete_cluster.go +++ b/cmd/kops/delete_cluster.go @@ -23,11 +23,11 @@ var deleteCluster DeleteClusterCmd func init() { cmd := &cobra.Command{ - Use: "cluster", + Use: "cluster CLUSTERNAME [--yes]", Short: "Delete cluster", Long: `Deletes a k8s cluster.`, Run: func(cmd *cobra.Command, args []string) { - err := deleteCluster.Run() + err := deleteCluster.Run(args) if err != nil { glog.Exitf("%v", err) } @@ -45,9 +45,13 @@ func init() { type getter func(o interface{}) interface{} -func (c *DeleteClusterCmd) Run() error { +func (c *DeleteClusterCmd) Run(args []string) error { var clusterRegistry *api.ClusterRegistry - var err error + + err := rootCommand.ProcessArgs(args) + if err != nil { + return err + } var cloud fi.Cloud clusterName := "" @@ -55,7 +59,7 @@ func (c *DeleteClusterCmd) Run() error { if c.External { region = c.Region if region == "" { - return fmt.Errorf("--region is required") + return fmt.Errorf("--region is required (when --external)") } clusterName = rootCommand.clusterName if clusterName == "" { diff --git a/cmd/kops/root.go b/cmd/kops/root.go index daec807f10..525ce110c8 100644 --- a/cmd/kops/root.go +++ b/cmd/kops/root.go @@ -79,6 +79,26 @@ func (c *RootCmd) AddCommand(cmd *cobra.Command) { c.cobraCommand.AddCommand(cmd) } +// ProcessArgs will parse the positional args. It assumes one of these formats: +// * +// * (and --name not specified) +// Everything else is an error. +func (c *RootCmd) ProcessArgs(args []string) error { + if len(args) == 0 { + return nil + } + if len(args) == 1 { + // Assume + if c.clusterName != "" { + return fmt.Errorf("Cannot specify cluster via --name and positional argument") + } + c.clusterName = args[0] + return nil + } + + return fmt.Errorf("expected a single to be passed as an argument") +} + func (c *RootCmd) ClusterName() string { if c.clusterName != "" { return c.clusterName