From 0245e74590a658ea911f1e5cacd270960883af2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arda=20G=C3=BC=C3=A7l=C3=BC?= Date: Fri, 6 May 2022 10:25:40 +0300 Subject: [PATCH 1/2] Define NoOptDefVal for validate flag validate flag does not have default value defined when there is no parameter passed, therefore it tries to use next irrelevant flag. This PR defines NoOptDefVal for validate flag which is set "strict". --- staging/src/k8s.io/kubectl/pkg/cmd/util/helpers.go | 4 ++++ test/cmd/create.sh | 6 ++++++ 2 files changed, 10 insertions(+) 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..2e009894f8d 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,6 +586,8 @@ func GetValidationDirective(cmd *cobra.Command) (string, error) { b, err := strconv.ParseBool(validateFlag) if err != nil { switch validateFlag { + case "": + return metav1.FieldValidationStrict, nil case cmd.Flag("validate").NoOptDefVal: return metav1.FieldValidationStrict, nil case "strict": diff --git a/test/cmd/create.sh b/test/cmd/create.sh index 77cfe25fea9..16ae3412f3a 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 From 5b274249400157028f1d9107b6bbd0686be2c076 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arda=20G=C3=BC=C3=A7l=C3=BC?= Date: Mon, 13 Jun 2022 10:06:51 +0300 Subject: [PATCH 2/2] Remove redundant validateFlag checks --- staging/src/k8s.io/kubectl/pkg/cmd/util/helpers.go | 4 ---- staging/src/k8s.io/kubectl/pkg/cmd/util/helpers_test.go | 4 +++- 2 files changed, 3 insertions(+), 5 deletions(-) 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 2e009894f8d..16a679e3a2a 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/util/helpers.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/util/helpers.go @@ -586,10 +586,6 @@ func GetValidationDirective(cmd *cobra.Command) (string, error) { b, err := strconv.ParseBool(validateFlag) if err != nil { switch validateFlag { - case "": - return metav1.FieldValidationStrict, nil - 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)