From 46e7f5684c07aecf13071a3d6c34a0e95734f6bb Mon Sep 17 00:00:00 2001 From: hurf Date: Mon, 31 Aug 2015 20:52:04 +0800 Subject: [PATCH] Add --dry-run option for label command With --dry-run option, label command will print the object locally without update it on server side. --- contrib/completions/bash/kubectl | 1 + docs/man/man1/kubectl-label.1 | 4 ++++ docs/user-guide/kubectl/kubectl_label.md | 3 ++- pkg/kubectl/cmd/label.go | 27 +++++++++++++++++------- 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/contrib/completions/bash/kubectl b/contrib/completions/bash/kubectl index c096937e22c..ca101d64a29 100644 --- a/contrib/completions/bash/kubectl +++ b/contrib/completions/bash/kubectl @@ -820,6 +820,7 @@ _kubectl_label() flags_completion=() flags+=("--all") + flags+=("--dry-run") flags+=("--filename=") flags_with_completion+=("--filename") flags_completion+=("__handle_filename_extension_flag json|yaml|yml") diff --git a/docs/man/man1/kubectl-label.1 b/docs/man/man1/kubectl-label.1 index e4c953edd14..22eb98fce49 100644 --- a/docs/man/man1/kubectl-label.1 +++ b/docs/man/man1/kubectl-label.1 @@ -26,6 +26,10 @@ If \-\-resource\-version is specified, then updates will use this resource versi \fB\-\-all\fP=false select all resources in the namespace of the specified resource types +.PP +\fB\-\-dry\-run\fP=false + If true, only print the object that would be sent, without sending it. + .PP \fB\-f\fP, \fB\-\-filename\fP=[] Filename, directory, or URL to a file identifying the resource to update the labels diff --git a/docs/user-guide/kubectl/kubectl_label.md b/docs/user-guide/kubectl/kubectl_label.md index 16c9dc29888..3e90c683358 100644 --- a/docs/user-guide/kubectl/kubectl_label.md +++ b/docs/user-guide/kubectl/kubectl_label.md @@ -75,6 +75,7 @@ $ kubectl label pods foo bar- ``` --all[=false]: select all resources in the namespace of the specified resource types + --dry-run[=false]: If true, only print the object that would be sent, without sending it. -f, --filename=[]: Filename, directory, or URL to a file identifying the resource to update the labels -h, --help[=false]: help for label --no-headers[=false]: When using the default output, don't print headers. @@ -120,7 +121,7 @@ $ kubectl label pods foo bar- * [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager -###### Auto generated by spf13/cobra at 2015-08-26 09:03:39.977006328 +0000 UTC +###### Auto generated by spf13/cobra at 2015-08-31 12:51:55.222410248 +0000 UTC [![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/kubectl/kubectl_label.md?pixel)]() diff --git a/pkg/kubectl/cmd/label.go b/pkg/kubectl/cmd/label.go index 333416db8ca..b5618ba25fe 100644 --- a/pkg/kubectl/cmd/label.go +++ b/pkg/kubectl/cmd/label.go @@ -90,6 +90,8 @@ func NewCmdLabel(f *cmdutil.Factory, out io.Writer) *cobra.Command { cmd.Flags().String("resource-version", "", "If non-empty, the labels update will only succeed if this is the current resource-version for the object. Only valid when specifying a single resource.") usage := "Filename, directory, or URL to a file identifying the resource to update the labels" kubectl.AddJsonFilenameFlag(cmd, &options.Filenames, usage) + cmd.Flags().Bool("dry-run", false, "If true, only print the object that would be sent, without sending it.") + return cmd } @@ -219,22 +221,31 @@ func RunLabel(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []stri if err != nil { return err } - obj, err := cmdutil.UpdateObject(info, func(obj runtime.Object) error { - err := labelFunc(obj, overwrite, resourceVersion, lbls, remove) + + var outputObj runtime.Object + if cmdutil.GetFlagBool(cmd, "dry-run") { + err = labelFunc(info.Object, overwrite, resourceVersion, lbls, remove) + if err != nil { + return err + } + outputObj = info.Object + } else { + outputObj, err = cmdutil.UpdateObject(info, func(obj runtime.Object) error { + err := labelFunc(obj, overwrite, resourceVersion, lbls, remove) + if err != nil { + return err + } + return nil + }) if err != nil { return err } - return nil - }) - if err != nil { - return err } - outputFormat := cmdutil.GetFlagString(cmd, "output") if outputFormat == "" { cmdutil.PrintSuccess(mapper, false, out, info.Mapping.Resource, info.Name, "labeled") } else { - f.PrintObject(cmd, obj, out) + return f.PrintObject(cmd, outputObj, out) } return nil })