From 9de64328a58d6abb16fb56167dbded3c08c5abac Mon Sep 17 00:00:00 2001 From: Eric Paris Date: Sat, 28 Mar 2015 23:39:19 -0400 Subject: [PATCH] Bash completion annotations for rollingupdates --- contrib/completions/bash/kubectl | 7 +++++++ docs/man/man1/kubectl-rolling-update.1 | 2 +- .../kubectl/kubectl_rolling-update.md | 4 ++-- pkg/kubectl/cmd/rollingupdate.go | 18 ++++++++++++++---- 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/contrib/completions/bash/kubectl b/contrib/completions/bash/kubectl index b29dec888fd..54a27aea2f0 100644 --- a/contrib/completions/bash/kubectl +++ b/contrib/completions/bash/kubectl @@ -469,7 +469,11 @@ _kubectl_rolling-update() flags+=("--deployment-label-key=") flags+=("--dry-run") flags+=("--filename=") + flags_with_completion+=("--filename") + flags_completion+=("__handle_filename_extension_flag json|yaml|yml") two_word_flags+=("-f") + flags_with_completion+=("-f") + flags_completion+=("__handle_filename_extension_flag json|yaml|yml") flags+=("--help") flags+=("-h") flags+=("--image=") @@ -485,6 +489,9 @@ _kubectl_rolling-update() flags+=("--update-period=") must_have_one_flag=() + must_have_one_flag+=("--filename=") + must_have_one_flag+=("-f") + must_have_one_flag+=("--image=") must_have_one_noun=() } diff --git a/docs/man/man1/kubectl-rolling-update.1 b/docs/man/man1/kubectl-rolling-update.1 index 021d3d444a9..b073cc67af7 100644 --- a/docs/man/man1/kubectl-rolling-update.1 +++ b/docs/man/man1/kubectl-rolling-update.1 @@ -31,7 +31,7 @@ existing replication controller and overwrite at least one (common) label in its If true, print out the changes that would be made, but don't actually make them. .PP -\fB\-f\fP, \fB\-\-filename\fP="" +\fB\-f\fP, \fB\-\-filename\fP=[] Filename or URL to file to use to create the new replication controller. .PP diff --git a/docs/user-guide/kubectl/kubectl_rolling-update.md b/docs/user-guide/kubectl/kubectl_rolling-update.md index 6d481e42745..c3a5178fc04 100644 --- a/docs/user-guide/kubectl/kubectl_rolling-update.md +++ b/docs/user-guide/kubectl/kubectl_rolling-update.md @@ -71,7 +71,7 @@ $ kubectl rolling-update frontend --image=image:v2 ``` --deployment-label-key="deployment": The key to use to differentiate between two different controllers, default 'deployment'. Only relevant when --image is specified, ignored otherwise --dry-run[=false]: If true, print out the changes that would be made, but don't actually make them. - -f, --filename="": Filename or URL to file to use to create the new replication controller. + -f, --filename=[]: Filename or URL to file to use to create the new replication controller. -h, --help[=false]: help for rolling-update --image="": Image to use for upgrading the replication controller. Can not be used with --filename/-f --no-headers[=false]: When using the default output, don't print headers. @@ -117,7 +117,7 @@ $ kubectl rolling-update frontend --image=image:v2 * [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager -###### Auto generated by spf13/cobra at 2015-08-07 19:25:01.999165947 +0000 UTC +###### Auto generated by spf13/cobra at 2015-08-10 14:26:04.707001372 +0000 UTC [![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/kubectl/kubectl_rolling-update.md?pixel)]() diff --git a/pkg/kubectl/cmd/rollingupdate.go b/pkg/kubectl/cmd/rollingupdate.go index 506ddb180d5..e80e4b17d6d 100644 --- a/pkg/kubectl/cmd/rollingupdate.go +++ b/pkg/kubectl/cmd/rollingupdate.go @@ -77,8 +77,11 @@ func NewCmdRollingUpdate(f *cmdutil.Factory, out io.Writer) *cobra.Command { cmd.Flags().Duration("update-period", updatePeriod, `Time to wait between updating pods. Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".`) cmd.Flags().Duration("poll-interval", pollInterval, `Time delay between polling for replication controller status after the update. Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".`) cmd.Flags().Duration("timeout", timeout, `Max time to wait for a replication controller to update before giving up. Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".`) - cmd.Flags().StringP("filename", "f", "", "Filename or URL to file to use to create the new replication controller.") + usage := "Filename or URL to file to use to create the new replication controller." + kubectl.AddJsonFilenameFlag(cmd, usage) + cmd.MarkFlagRequired("filename") cmd.Flags().String("image", "", "Image to use for upgrading the replication controller. Can not be used with --filename/-f") + cmd.MarkFlagRequired("image") cmd.Flags().String("deployment-label-key", "deployment", "The key to use to differentiate between two different controllers, default 'deployment'. Only relevant when --image is specified, ignored otherwise") cmd.Flags().Bool("dry-run", false, "If true, print out the changes that would be made, but don't actually make them.") cmd.Flags().Bool("rollback", false, "If true, this is a request to abort an existing rollout that is partially rolled out. It effectively reverses current and next and runs a rollout") @@ -88,16 +91,23 @@ func NewCmdRollingUpdate(f *cmdutil.Factory, out io.Writer) *cobra.Command { func validateArguments(cmd *cobra.Command, args []string) (deploymentKey, filename, image, oldName string, err error) { deploymentKey = cmdutil.GetFlagString(cmd, "deployment-label-key") - filename = cmdutil.GetFlagString(cmd, "filename") image = cmdutil.GetFlagString(cmd, "image") + filenames := cmdutil.GetFlagStringSlice(cmd, "filename") + filename = "" if len(deploymentKey) == 0 { return "", "", "", "", cmdutil.UsageError(cmd, "--deployment-label-key can not be empty") } - if len(filename) == 0 && len(image) == 0 { + if len(filenames) > 1 { + return "", "", "", "", cmdutil.UsageError(cmd, "May only specificy a single filename for new controller") + } + if len(filenames) > 0 { + filename = filenames[0] + } + if len(filenames) == 0 && len(image) == 0 { return "", "", "", "", cmdutil.UsageError(cmd, "Must specify --filename or --image for new controller") } - if len(filename) != 0 && len(image) != 0 { + if len(filenames) != 0 && len(image) != 0 { return "", "", "", "", cmdutil.UsageError(cmd, "--filename and --image can not both be specified") } if len(args) < 1 {