diff --git a/go.mod b/go.mod index 94dcc3739..3b9e9e409 100644 --- a/go.mod +++ b/go.mod @@ -32,7 +32,7 @@ require ( gopkg.in/yaml.v2 v2.4.0 k8s.io/api v0.0.0-20230308234233-a4afee70a903 k8s.io/apimachinery v0.0.0-20230303235435-f357b1fa74b7 - k8s.io/cli-runtime v0.0.0-20230307162015-1076364b1950 + k8s.io/cli-runtime v0.0.0-20230309081917-d1c048aeefc2 k8s.io/client-go v0.0.0-20230309033544-64e2c7ff167c k8s.io/component-base v0.0.0-20230308075123-cfc68dcaff73 k8s.io/component-helpers v0.0.0-20230304001010-94a6fd9a7905 @@ -93,7 +93,7 @@ require ( replace ( k8s.io/api => k8s.io/api v0.0.0-20230308234233-a4afee70a903 k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20230303235435-f357b1fa74b7 - k8s.io/cli-runtime => k8s.io/cli-runtime v0.0.0-20230307162015-1076364b1950 + k8s.io/cli-runtime => k8s.io/cli-runtime v0.0.0-20230309081917-d1c048aeefc2 k8s.io/client-go => k8s.io/client-go v0.0.0-20230309033544-64e2c7ff167c k8s.io/code-generator => k8s.io/code-generator v0.0.0-20230303235006-4400d5f574d7 k8s.io/component-base => k8s.io/component-base v0.0.0-20230308075123-cfc68dcaff73 diff --git a/go.sum b/go.sum index fc8c0df51..a5834452e 100644 --- a/go.sum +++ b/go.sum @@ -535,8 +535,8 @@ k8s.io/api v0.0.0-20230308234233-a4afee70a903 h1:TmxUf1tDcGUHE8qZKLRWmn2nr2Fypkw k8s.io/api v0.0.0-20230308234233-a4afee70a903/go.mod h1:esKbT+6XB9TZUHyxlJVQ3zUM0abhQZ81Ic68eirO+xM= k8s.io/apimachinery v0.0.0-20230303235435-f357b1fa74b7 h1:YN43Lvs3Pj9iQmuWGojeBiFdz1mkrxe0EZn7Ba3TMpQ= k8s.io/apimachinery v0.0.0-20230303235435-f357b1fa74b7/go.mod h1:jlJwObMa4oKAEOMnAeEaqeiM+Fwd/CbAwNyQ7OaEwS0= -k8s.io/cli-runtime v0.0.0-20230307162015-1076364b1950 h1:e8AHvyKm96kzxrktgL7dPMY65BA5C2S30X3CPKHKO+E= -k8s.io/cli-runtime v0.0.0-20230307162015-1076364b1950/go.mod h1:OBJKwPnOnWPdaZpa2ULBQaUf0b2p01bWWddPOpIxtyE= +k8s.io/cli-runtime v0.0.0-20230309081917-d1c048aeefc2 h1:6L54uDYqjaj7BCLxTQ9G6lfT7QeT9HAPxMuRQrS5hL8= +k8s.io/cli-runtime v0.0.0-20230309081917-d1c048aeefc2/go.mod h1:JwzILqj3+SE/zX+lpSifrOCsWnn/5poDTKlnPnY2jzk= k8s.io/client-go v0.0.0-20230309033544-64e2c7ff167c h1:1IXuG9QQvPMR3GbYgBhOKre47MAIq+U41cWOGoAHpd8= k8s.io/client-go v0.0.0-20230309033544-64e2c7ff167c/go.mod h1:hjEB5iFHr17qVb6wnh6w2LQvO5DfoP6rzLN8NAE8K6U= k8s.io/component-base v0.0.0-20230308075123-cfc68dcaff73 h1:MEKvhkstqrRFmA9+qQlnkA/jPbZUH/VnMKiEfBeLbf8= 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