From b786c116b66ad5f66b4424fe616f034dd79b28db Mon Sep 17 00:00:00 2001 From: Jeff Lowdermilk Date: Fri, 13 Feb 2015 16:28:39 -0800 Subject: [PATCH] Make kubectl stop take -f flag (for filename|url|directory) --- docs/kubectl.md | 14 +++++++++--- pkg/kubectl/cmd/stop.go | 50 ++++++++++++++++++++++++++++------------- 2 files changed, 46 insertions(+), 18 deletions(-) diff --git a/docs/kubectl.md b/docs/kubectl.md index aed7f84b542..ad5a919ae37 100644 --- a/docs/kubectl.md +++ b/docs/kubectl.md @@ -416,7 +416,7 @@ Additional help topics: kubectl rollingupdate Perform a rolling update of the given ReplicationController. kubectl resize Set a new size for a Replication Controller. kubectl run-container Run a particular image on the cluster. - kubectl stop Gracefully shut down a resource. + kubectl stop Gracefully shut down a resource by id or filename. kubectl expose Take a replicated application and expose it as Kubernetes Service kubectl label Update the labels on a resource @@ -986,7 +986,7 @@ Global Flags: ``` #### stop -Gracefully shut down a resource. +Gracefully shut down a resource by id or filename. Attempts to shut down and delete a resource that supports graceful termination. If the resource is resizable it will be resized to 0 before deletion. @@ -996,10 +996,18 @@ Examples: // Shut down foo. $ kubectl stop replicationcontroller foo + // Shut down the service defined in service.json + $ kubectl stop -f service.json + + // Shut down all resources in the path/to/resources directory + $ kubectl stop -f path/to/resources + Usage: ``` - kubectl stop [flags] + kubectl stop ( |-f filename) [flags] +Flags: + -f, --filename=[]: Filename, directory, or URL to file of resource(s) to be stopped Global Flags: --alsologtostderr=false: log to standard error as well as files diff --git a/pkg/kubectl/cmd/stop.go b/pkg/kubectl/cmd/stop.go index 7515aa839e9..ef3f78f2067 100644 --- a/pkg/kubectl/cmd/stop.go +++ b/pkg/kubectl/cmd/stop.go @@ -20,15 +20,19 @@ import ( "fmt" "io" - "github.com/GoogleCloudPlatform/kubernetes/pkg/kubectl/cmd/util" + "github.com/GoogleCloudPlatform/kubernetes/pkg/kubectl/resource" + "github.com/GoogleCloudPlatform/kubernetes/pkg/util" "github.com/spf13/cobra" ) func (f *Factory) NewCmdStop(out io.Writer) *cobra.Command { + flags := &struct { + Filenames util.StringList + }{} cmd := &cobra.Command{ - Use: "stop ", - Short: "Gracefully shut down a resource.", - Long: `Gracefully shut down a resource. + Use: "stop ( |-f filename)", + Short: "Gracefully shut down a resource by id or filename.", + Long: `Gracefully shut down a resource by id or filename. Attempts to shut down and delete a resource that supports graceful termination. If the resource is resizable it will be resized to 0 before deletion. @@ -36,22 +40,38 @@ If the resource is resizable it will be resized to 0 before deletion. Examples: // Shut down foo. - $ kubectl stop replicationcontroller foo`, + $ kubectl stop replicationcontroller foo + + // Shut down the service defined in service.json + $ kubectl stop -f service.json + + // Shut down all resources in the path/to/resources directory + $ kubectl stop -f path/to/resources`, Run: func(cmd *cobra.Command, args []string) { - if len(args) != 2 { - usageError(cmd, " ") - } cmdNamespace, err := f.DefaultNamespace(cmd) - mapper, _ := f.Object(cmd) - mapping, namespace, name := util.ResourceFromArgs(cmd, args, mapper, cmdNamespace) - - reaper, err := f.Reaper(cmd, mapping) checkErr(err) + mapper, typer := f.Object(cmd) + r := resource.NewBuilder(mapper, typer, f.ClientMapperForCommand(cmd)). + ContinueOnError(). + NamespaceParam(cmdNamespace).RequireNamespace(). + ResourceTypeOrNameArgs(false, args...). + FilenameParam(flags.Filenames...). + Flatten(). + Do() + checkErr(r.Err()) - s, err := reaper.Stop(namespace, name) - checkErr(err) - fmt.Fprintf(out, "%s\n", s) + r.Visit(func(info *resource.Info) error { + reaper, err := f.Reaper(cmd, info.Mapping) + checkErr(err) + s, err := reaper.Stop(info.Namespace, info.Name) + if err != nil { + return err + } + fmt.Fprintf(out, "%s\n", s) + return nil + }) }, } + cmd.Flags().VarP(&flags.Filenames, "filename", "f", "Filename, directory, or URL to file of resource(s) to be stopped") return cmd }