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 00d6ac98fb1..16a679e3a2a 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/util/helpers.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/util/helpers.go @@ -407,6 +407,8 @@ func AddValidateFlags(cmd *cobra.Command) { "warn" will warn about unknown or duplicate fields without blocking the request if server-side field validation is enabled on the API server, and behave as "ignore" otherwise. "false" or "ignore" will not perform any schema validation, silently dropping any unknown or duplicate fields.`, ) + + cmd.Flags().Lookup("validate").NoOptDefVal = "strict" } func AddFilenameOptionFlags(cmd *cobra.Command, options *resource.FilenameOptions, usage string) { @@ -584,8 +586,6 @@ func GetValidationDirective(cmd *cobra.Command) (string, error) { b, err := strconv.ParseBool(validateFlag) if err != nil { switch validateFlag { - case cmd.Flag("validate").NoOptDefVal: - return metav1.FieldValidationStrict, nil case "strict": return metav1.FieldValidationStrict, nil case "warn": diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/util/helpers_test.go b/staging/src/k8s.io/kubectl/pkg/cmd/util/helpers_test.go index 790b3669978..6a695fd266f 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/util/helpers_test.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/util/helpers_test.go @@ -517,7 +517,9 @@ func TestGetValidationDirective(t *testing.T) { for _, tc := range tests { cmd := &cobra.Command{} AddValidateFlags(cmd) - cmd.Flags().Set("validate", tc.validateFlag) + if tc.validateFlag != "" { + cmd.Flags().Set("validate", tc.validateFlag) + } directive, err := GetValidationDirective(cmd) if directive != tc.expectedDirective { t.Errorf("validation directive, expected: %v, but got: %v", tc.expectedDirective, directive) diff --git a/test/cmd/create.sh b/test/cmd/create.sh index da2bce54044..010be68b2ed 100755 --- a/test/cmd/create.sh +++ b/test/cmd/create.sh @@ -170,6 +170,12 @@ run_kubectl_create_validate_tests() { create_and_use_new_namespace + ## test --validate no value expects default strict is used + kube::log::status "Testing kubectl create --validate" + # create and verify + output_message=$(! kubectl create -f hack/testdata/invalid-deployment-unknown-and-duplicate-fields.yaml --validate 2>&1) + has_one_of_error_message "${output_message}" 'strict decoding error' 'error validating data' + ## test --validate=true kube::log::status "Testing kubectl create --validate=true" # create and verify