From 1e10a7cc5920cca4eb63eced65e7405cbb5f413e Mon Sep 17 00:00:00 2001 From: feihujiang Date: Tue, 11 Aug 2015 17:05:28 +0800 Subject: [PATCH] Kubectl scale command accepts a filename param --- contrib/completions/bash/kubectl | 6 ++++++ docs/man/man1/kubectl-scale.1 | 7 +++++++ docs/user-guide/kubectl/kubectl_scale.md | 8 ++++++-- hack/test-cmd.sh | 12 ++++++++++-- pkg/kubectl/cmd/scale.go | 18 +++++++++++------- 5 files changed, 40 insertions(+), 11 deletions(-) diff --git a/contrib/completions/bash/kubectl b/contrib/completions/bash/kubectl index 33c0c4d911e..a71988c7882 100644 --- a/contrib/completions/bash/kubectl +++ b/contrib/completions/bash/kubectl @@ -508,6 +508,12 @@ _kubectl_scale() flags_completion=() flags+=("--current-replicas=") + 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+=("--output=") diff --git a/docs/man/man1/kubectl-scale.1 b/docs/man/man1/kubectl-scale.1 index 072e14f5a55..c1defb1c0e8 100644 --- a/docs/man/man1/kubectl-scale.1 +++ b/docs/man/man1/kubectl-scale.1 @@ -27,6 +27,10 @@ scale is sent to the server. \fB\-\-current\-replicas\fP=\-1 Precondition for current size. Requires that the current size of the replication controller match this value in order to scale. +.PP +\fB\-f\fP, \fB\-\-filename\fP=[] + Filename, directory, or URL to a file identifying the replication controller to set a new size + .PP \fB\-h\fP, \fB\-\-help\fP=false help for scale @@ -154,6 +158,9 @@ scale is sent to the server. # Scale replication controller named 'foo' to 3. $ kubectl scale \-\-replicas=3 replicationcontrollers foo +# Scale a replication controller identified by type and name specified in "foo\-controller.yaml" to 3. +$ kubectl scale \-\-replicas=3 \-f foo\-controller.yaml + # If the replication controller named foo's current size is 2, scale foo to 3. $ kubectl scale \-\-current\-replicas=2 \-\-replicas=3 replicationcontrollers foo diff --git a/docs/user-guide/kubectl/kubectl_scale.md b/docs/user-guide/kubectl/kubectl_scale.md index be2c3c29eb7..0d049577a17 100644 --- a/docs/user-guide/kubectl/kubectl_scale.md +++ b/docs/user-guide/kubectl/kubectl_scale.md @@ -46,7 +46,7 @@ scale is attempted, and it is guaranteed that the precondition holds true when t scale is sent to the server. ``` -kubectl scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT TYPE NAME +kubectl scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME) ``` ### Examples @@ -55,6 +55,9 @@ kubectl scale [--resource-version=version] [--current-replicas=count] --replicas # Scale replication controller named 'foo' to 3. $ kubectl scale --replicas=3 replicationcontrollers foo +# Scale a replication controller identified by type and name specified in "foo-controller.yaml" to 3. +$ kubectl scale --replicas=3 -f foo-controller.yaml + # If the replication controller named foo's current size is 2, scale foo to 3. $ kubectl scale --current-replicas=2 --replicas=3 replicationcontrollers foo @@ -66,6 +69,7 @@ $ kubectl scale --replicas=5 rc/foo rc/bar ``` --current-replicas=-1: Precondition for current size. Requires that the current size of the replication controller match this value in order to scale. + -f, --filename=[]: Filename, directory, or URL to a file identifying the replication controller to set a new size -h, --help[=false]: help for scale -o, --output="": Output mode. Use "-o name" for shorter output (resource/name). --replicas=-1: The new desired number of replicas. Required. @@ -106,7 +110,7 @@ $ kubectl scale --replicas=5 rc/foo rc/bar * [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager -###### Auto generated by spf13/cobra at 2015-08-12 16:38:35.551986915 +0000 UTC +###### Auto generated by spf13/cobra at 2015-08-13 06:25:21.82766402 +0000 UTC [![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/kubectl/kubectl_scale.md?pixel)]() diff --git a/hack/test-cmd.sh b/hack/test-cmd.sh index 46e467596cf..7c5e74764d5 100755 --- a/hack/test-cmd.sh +++ b/hack/test-cmd.sh @@ -623,6 +623,14 @@ __EOF__ # Post-condition: 3 replicas kube::test::get_object_assert 'rc frontend' "{{$rc_replicas_field}}" '3' + ### Scale replication controller from JSON with replicas only + # Pre-condition: 3 replicas + kube::test::get_object_assert 'rc frontend' "{{$rc_replicas_field}}" '3' + # Command + kubectl scale --replicas=2 -f examples/guestbook/frontend-controller.yaml "${kube_flags[@]}" + # Post-condition: 2 replicas + kube::test::get_object_assert 'rc frontend' "{{$rc_replicas_field}}" '2' + ### Scale multiple replication controllers kubectl create -f examples/guestbook/redis-master-controller.yaml "${kube_flags[@]}" kubectl create -f examples/guestbook/redis-slave-controller.yaml "${kube_flags[@]}" @@ -635,8 +643,8 @@ __EOF__ kubectl delete rc redis-{master,slave} "${kube_flags[@]}" ### Expose replication controller as service - # Pre-condition: 3 replicas - kube::test::get_object_assert 'rc frontend' "{{$rc_replicas_field}}" '3' + # Pre-condition: 2 replicas + kube::test::get_object_assert 'rc frontend' "{{$rc_replicas_field}}" '2' # Command kubectl expose rc frontend --port=80 "${kube_flags[@]}" # Post-condition: service exists and the port is unnamed diff --git a/pkg/kubectl/cmd/scale.go b/pkg/kubectl/cmd/scale.go index 7fe0f5a6349..2cb235a469e 100644 --- a/pkg/kubectl/cmd/scale.go +++ b/pkg/kubectl/cmd/scale.go @@ -39,6 +39,9 @@ scale is sent to the server.` scale_example = `# Scale replication controller named 'foo' to 3. $ kubectl scale --replicas=3 replicationcontrollers foo +# Scale a replication controller identified by type and name specified in "foo-controller.yaml" to 3. +$ kubectl scale --replicas=3 -f foo-controller.yaml + # If the replication controller named foo's current size is 2, scale foo to 3. $ kubectl scale --current-replicas=2 --replicas=3 replicationcontrollers foo @@ -49,7 +52,7 @@ $ kubectl scale --replicas=5 rc/foo rc/bar` // NewCmdScale returns a cobra command with the appropriate configuration and flags to run scale func NewCmdScale(f *cmdutil.Factory, out io.Writer) *cobra.Command { cmd := &cobra.Command{ - Use: "scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT TYPE NAME", + Use: "scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME)", // resize is deprecated Aliases: []string{"resize"}, Short: "Set a new size for a Replication Controller.", @@ -68,6 +71,9 @@ func NewCmdScale(f *cmdutil.Factory, out io.Writer) *cobra.Command { cmd.Flags().Duration("timeout", 0, "The length of time to wait before giving up on a scale operation, zero means don't wait.") cmd.MarkFlagRequired("replicas") cmdutil.AddOutputFlagsForMutation(cmd) + + usage := "Filename, directory, or URL to a file identifying the replication controller to set a new size" + kubectl.AddJsonFilenameFlag(cmd, usage) return cmd } @@ -82,7 +88,7 @@ func RunScale(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []stri return cmdutil.UsageError(cmd, "--replicas=COUNT TYPE NAME") } - cmdNamespace, _, err := f.DefaultNamespace() + cmdNamespace, enforceNamespace, err := f.DefaultNamespace() if err != nil { return err } @@ -91,6 +97,7 @@ func RunScale(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []stri r := resource.NewBuilder(mapper, typer, f.ClientMapperForCommand()). ContinueOnError(). NamespaceParam(cmdNamespace).DefaultNamespace(). + FilenameParam(enforceNamespace, cmdutil.GetFlagStringSlice(cmd, "filename")...). ResourceTypeOrNameArgs(false, args...). Flatten(). Do() @@ -98,16 +105,13 @@ func RunScale(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []stri if err != nil { return err } - mapping, err := r.ResourceMapping() - if err != nil { - return err - } infos, err := r.Infos() if err != nil { return err } - + info := infos[0] + mapping := info.ResourceMapping() scaler, err := f.Scaler(mapping) if err != nil { return err