diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/util/helpers.go b/staging/src/k8s.io/kubectl/pkg/cmd/util/helpers.go index 7b03deb29c0..1d86235402d 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/util/helpers.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/util/helpers.go @@ -23,6 +23,7 @@ import ( "io" "net/url" "os" + "strconv" "strings" "time" @@ -546,18 +547,30 @@ const ( func GetDryRunStrategy(cmd *cobra.Command) (DryRunStrategy, error) { var dryRunFlag = GetFlagString(cmd, "dry-run") - switch dryRunFlag { - case cmd.Flag("dry-run").NoOptDefVal: - return DryRunNone, errors.New(`--dry-run flag without a value was specified. A value must be set: "none", "server", or "client".`) - case "client": - return DryRunClient, nil - case "server": - return DryRunServer, nil - case "none": - return DryRunNone, nil - default: - return DryRunNone, fmt.Errorf(`Invalid dry-run value (%v). Must be "none", "server", or "client".`, dryRunFlag) + b, err := strconv.ParseBool(dryRunFlag) + // The flag is not a boolean + if err != nil { + switch dryRunFlag { + case cmd.Flag("dry-run").NoOptDefVal: + klog.Warning(`--dry-run is deprecated and can be replaced with --dry-run=client.`) + return DryRunClient, nil + case "client": + return DryRunClient, nil + case "server": + return DryRunServer, nil + case "none": + return DryRunNone, nil + default: + return DryRunNone, fmt.Errorf(`Invalid dry-run value (%v). Must be "none", "server", or "client".`, dryRunFlag) + } } + // The flag was a boolean + if b { + klog.Warningf(`--dry-run=%v is deprecated (boolean value) and can be replaced with --dry-run=%s.`, dryRunFlag, "client") + return DryRunClient, nil + } + klog.Warningf(`--dry-run=%v is deprecated (boolean value) and can be replaced with --dry-run=%s.`, dryRunFlag, "none") + return DryRunNone, nil } // PrintFlagsWithDryRunStrategy sets a success message at print time for the dry run strategy diff --git a/test/cmd/apply.sh b/test/cmd/apply.sh index 6d9e991db70..86636197911 100755 --- a/test/cmd/apply.sh +++ b/test/cmd/apply.sh @@ -101,6 +101,7 @@ run_kubectl_apply_tests() { kube::test::get_object_assert pods "{{range.items}}{{${id_field:?}}}:{{end}}" '' # apply dry-run + kubectl apply --dry-run=true -f hack/testdata/pod.yaml "${kube_flags[@]:?}" kubectl apply --dry-run=client -f hack/testdata/pod.yaml "${kube_flags[@]:?}" kubectl apply --dry-run=server -f hack/testdata/pod.yaml "${kube_flags[@]:?}" # No pod exists diff --git a/test/cmd/batch.sh b/test/cmd/batch.sh index 7cb063211a7..652497375a3 100755 --- a/test/cmd/batch.sh +++ b/test/cmd/batch.sh @@ -49,7 +49,7 @@ run_job_tests() { kube::test::describe_resource_chunk_size_assert cronjobs events "--namespace=test-jobs" ### Create a job in dry-run mode - output_message=$(kubectl create job test-job --from=cronjob/pi --dry-run=client --namespace=test-jobs -o name) + output_message=$(kubectl create job test-job --from=cronjob/pi --dry-run=true --namespace=test-jobs -o name) # Post-condition: The text 'job.batch/test-job' should be part of the output kube::test::if_has_string "${output_message}" 'job.batch/test-job' # Post-condition: The test-job wasn't created actually