diff --git a/provider/pkg/openapi/openapi.go b/provider/pkg/openapi/openapi.go index 1dec71e24d..eaad858247 100644 --- a/provider/pkg/openapi/openapi.go +++ b/provider/pkg/openapi/openapi.go @@ -48,7 +48,7 @@ import ( // ValidateAgainstSchema validates a document against the given schema. func ValidateAgainstSchema( - resources openapi.Resources, obj *unstructured.Unstructured, + resourcesGetter openapi.OpenAPIResourcesGetter, resources openapi.Resources, obj *unstructured.Unstructured, ) error { bytes, err := obj.MarshalJSON() if err != nil { @@ -66,7 +66,7 @@ func ValidateAgainstSchema( // validation errors when there are multiple errors for usability purposes. // Validate resource against schema. - specValidator := validation.NewSchemaValidation(resources) + specValidator := validation.NewSchemaValidation(resourcesGetter) return specValidator.ValidateBytes(bytes) } diff --git a/provider/pkg/provider/kubeconfig.go b/provider/pkg/provider/kubeconfig.go index d9bb137f24..afbc9e91b3 100644 --- a/provider/pkg/provider/kubeconfig.go +++ b/provider/pkg/provider/kubeconfig.go @@ -42,7 +42,7 @@ func (k *KubeConfig) ToRESTMapper() (meta.RESTMapper, error) { } mapper := restmapper.NewDeferredDiscoveryRESTMapper(discoveryClient) - expander := restmapper.NewShortcutExpander(mapper, discoveryClient) + expander := restmapper.NewShortcutExpander(mapper, discoveryClient, nil) return expander, nil } diff --git a/provider/pkg/provider/provider.go b/provider/pkg/provider/provider.go index 59ad947b80..f8096a3bcf 100644 --- a/provider/pkg/provider/provider.go +++ b/provider/pkg/provider/provider.go @@ -195,6 +195,18 @@ func (k *kubeProvider) getResources() (k8sopenapi.Resources, error) { return k.resources, nil } +type openAPIResourcesGetter struct { + k *kubeProvider +} + +func (o *openAPIResourcesGetter) OpenAPISchema() (k8sopenapi.Resources, error) { + return o.k.getResources() +} + +func (k *kubeProvider) getResourcesLazy() k8sopenapi.OpenAPIResourcesGetter { + return &openAPIResourcesGetter{k} +} + func (k *kubeProvider) invalidateResources() { k.resourcesMutex.Lock() defer k.resourcesMutex.Unlock() @@ -1430,7 +1442,7 @@ func (k *kubeProvider) Check(ctx context.Context, req *pulumirpc.CheckRequest) ( } // Validate the object according to the OpenAPI schema for its GVK. - err = openapi.ValidateAgainstSchema(resources, newInputs) + err = openapi.ValidateAgainstSchema(k.getResourcesLazy(), resources, newInputs) if err != nil { resourceNotFound := apierrors.IsNotFound(err) || strings.Contains(err.Error(), "is not supported by the server")