From ea96fe7c156fa5abb88b03f6b8a94ad224093d2a Mon Sep 17 00:00:00 2001 From: Sean Sullivan Date: Tue, 7 Mar 2023 21:50:25 +0000 Subject: [PATCH] Fallback query param verifier Kubernetes-commit: f5865043edb807f8c5efff286fe0097a382fcaf0 --- pkg/cmd/util/factory_client_access.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/pkg/cmd/util/factory_client_access.go b/pkg/cmd/util/factory_client_access.go index 4340c03ee..cf9084029 100644 --- a/pkg/cmd/util/factory_client_access.go +++ b/pkg/cmd/util/factory_client_access.go @@ -30,6 +30,7 @@ import ( "k8s.io/client-go/discovery" "k8s.io/client-go/dynamic" "k8s.io/client-go/kubernetes" + "k8s.io/client-go/openapi/cached" restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" "k8s.io/kubectl/pkg/util/openapi" @@ -167,8 +168,18 @@ func (f *factoryImpl) Validator(validationDirective string) (validation.Schema, return nil, err } // Create the FieldValidationVerifier for use in the ParamVerifyingSchema. - verifier := resource.NewQueryParamVerifier(dynamicClient, f.openAPIGetter(), resource.QueryParamFieldValidation) - return validation.NewParamVerifyingSchema(schema, verifier, string(validationDirective)), nil + discoveryClient, err := f.ToDiscoveryClient() + if err != nil { + return nil, err + } + // Memory-cache the OpenAPI V3 responses. The disk cache behavior is determined by + // the discovery client. + oapiV3Client := cached.NewClient(discoveryClient.OpenAPIV3()) + queryParam := resource.QueryParamFieldValidation + primary := resource.NewQueryParamVerifierV3(dynamicClient, oapiV3Client, queryParam) + secondary := resource.NewQueryParamVerifier(dynamicClient, f.openAPIGetter(), queryParam) + fallback := resource.NewFallbackQueryParamVerifier(primary, secondary) + return validation.NewParamVerifyingSchema(schema, fallback, string(validationDirective)), nil } // OpenAPISchema returns metadata and structural information about