From 76ee3788ccbac9003e3f24de9000ebd91c27611f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arda=20G=C3=BC=C3=A7l=C3=BC?= Date: Fri, 2 Dec 2022 16:27:18 +0300 Subject: [PATCH] kubectl scale: Add dry-run prefix to indicate result is not applied Currently, if user executes `kubectl scale --dry-run`, output has no indicator showing that this is not applied in reality. This PR adds dry run suffix to the output as well as more integration tests to verify it. --- .../src/k8s.io/kubectl/pkg/cmd/scale/scale.go | 15 ++++++++---- test/cmd/core.sh | 24 +++++++++++++++++++ 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/scale/scale.go b/staging/src/k8s.io/kubectl/pkg/cmd/scale/scale.go index 2aaa99191a9..1f1f0a53148 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/scale/scale.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/scale/scale.go @@ -144,16 +144,18 @@ func (o *ScaleOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []st if err != nil { return err } + + o.dryRunStrategy, err = cmdutil.GetDryRunStrategy(cmd) + if err != nil { + return err + } + cmdutil.PrintFlagsWithDryRunStrategy(o.PrintFlags, o.dryRunStrategy) printer, err := o.PrintFlags.ToPrinter() if err != nil { return err } o.PrintObj = printer.PrintObj - o.dryRunStrategy, err = cmdutil.GetDryRunStrategy(cmd) - if err != nil { - return err - } dynamicClient, err := f.DynamicClient() if err != nil { return err @@ -238,7 +240,10 @@ func (o *ScaleOptions) RunScale() error { for _, info := range infos { mapping := info.ResourceMapping() if o.dryRunStrategy == cmdutil.DryRunClient { - return o.PrintObj(info.Object, o.Out) + if err := o.PrintObj(info.Object, o.Out); err != nil { + return err + } + continue } if err := o.scaler.Scale(info.Namespace, info.Name, uint(o.Replicas), precondition, retry, waitForReplicas, mapping.Resource, o.dryRunStrategy == cmdutil.DryRunServer); err != nil { diff --git a/test/cmd/core.sh b/test/cmd/core.sh index 4733c9212fe..ac2bb1c6404 100755 --- a/test/cmd/core.sh +++ b/test/cmd/core.sh @@ -1272,6 +1272,20 @@ run_rc_tests() { ### Scale multiple replication controllers kubectl create -f test/e2e/testing-manifests/guestbook/legacy/redis-master-controller.yaml "${kube_flags[@]}" kubectl create -f test/e2e/testing-manifests/guestbook/legacy/redis-slave-controller.yaml "${kube_flags[@]}" + # Command dry-run client + output_message=$(kubectl scale rc/redis-master rc/redis-slave --replicas=4 --dry-run=client "${kube_flags[@]}") + # Post-condition dry-run client: 1 replicas each + kube::test::if_has_string "${output_message}" 'replicationcontroller/redis-master scaled (dry run)' + kube::test::if_has_string "${output_message}" 'replicationcontroller/redis-slave scaled (dry run)' + kube::test::get_object_assert 'rc redis-master' "{{$rc_replicas_field}}" '1' + kube::test::get_object_assert 'rc redis-slave' "{{$rc_replicas_field}}" '2' + # Command dry-run server + output_message=$(kubectl scale rc/redis-master rc/redis-slave --replicas=4 --dry-run=server "${kube_flags[@]}") + # Post-condition dry-run server: 1 replicas each + kube::test::if_has_string "${output_message}" 'replicationcontroller/redis-master scaled (server dry run)' + kube::test::if_has_string "${output_message}" 'replicationcontroller/redis-slave scaled (server dry run)' + kube::test::get_object_assert 'rc redis-master' "{{$rc_replicas_field}}" '1' + kube::test::get_object_assert 'rc redis-slave' "{{$rc_replicas_field}}" '2' # Command kubectl scale rc/redis-master rc/redis-slave --replicas=4 "${kube_flags[@]}" # Post-condition: 4 replicas each @@ -1282,6 +1296,16 @@ run_rc_tests() { ### Scale a deployment kubectl create -f test/fixtures/doc-yaml/user-guide/deployment.yaml "${kube_flags[@]}" + # Command dry-run client + output_message=$(kubectl scale --current-replicas=3 --replicas=1 deployment/nginx-deployment --dry-run=client) + # Post-condition: 3 replica for nginx-deployment dry-run client + kube::test::if_has_string "${output_message}" 'nginx-deployment scaled (dry run)' + kube::test::get_object_assert 'deployment nginx-deployment' "{{${deployment_replicas:?}}}" '3' + # Command dry-run server + output_message=$(kubectl scale --current-replicas=3 --replicas=1 deployment/nginx-deployment --dry-run=server) + # Post-condition: 3 replica for nginx-deployment dry-run server + kube::test::if_has_string "${output_message}" 'nginx-deployment scaled (server dry run)' + kube::test::get_object_assert 'deployment nginx-deployment' "{{${deployment_replicas:?}}}" '3' # Command kubectl scale --current-replicas=3 --replicas=1 deployment/nginx-deployment # Post-condition: 1 replica for nginx-deployment