From 43ddc8c31ec3e44f75794bb308f8a42695485e00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charles-Edouard=20Br=C3=A9t=C3=A9ch=C3=A9?= <charles.edouard@nirmata.com> Date: Fri, 7 Mar 2025 07:58:40 +0100 Subject: [PATCH] feat: support rest mapper in cli with cluster enabled (#12319) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> --- .../kubectl-kyverno/commands/apply/command.go | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/cmd/cli/kubectl-kyverno/commands/apply/command.go b/cmd/cli/kubectl-kyverno/commands/apply/command.go index 78580b0be3..4ede72c356 100644 --- a/cmd/cli/kubectl-kyverno/commands/apply/command.go +++ b/cmd/cli/kubectl-kyverno/commands/apply/command.go @@ -43,6 +43,7 @@ import ( admissionv1 "k8s.io/api/admission/v1" admissionregistrationv1 "k8s.io/api/admissionregistration/v1" corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" @@ -350,6 +351,7 @@ func (c *ApplyCommandConfig) applyValidatingPolicies( eng := engine.NewEngine(provider, namespaceProvider, matching.NewMatcher()) // TODO: mock when no cluster provided gctxStore := gctxstore.New() + var restMapper meta.RESTMapper var contextProvider celpolicy.Context if dclient != nil { contextProvider, err = celpolicy.NewContextProvider( @@ -360,12 +362,18 @@ func (c *ApplyCommandConfig) applyValidatingPolicies( if err != nil { return nil, err } + apiGroupResources, err := restmapper.GetAPIGroupResources(dclient.GetKubeClient().Discovery()) + if err != nil { + return nil, err + } + restMapper = restmapper.NewDiscoveryRESTMapper(apiGroupResources) + } else { + apiGroupResources, err := data.APIGroupResources() + if err != nil { + return nil, err + } + restMapper = restmapper.NewDiscoveryRESTMapper(apiGroupResources) } - apiGroupResources, err := data.APIGroupResources() - if err != nil { - return nil, err - } - restMapper := restmapper.NewDiscoveryRESTMapper(apiGroupResources) responses := make([]engineapi.EngineResponse, 0) responsesTemp := make([]engine.EngineResponse, 0) for _, resource := range resources { @@ -386,7 +394,7 @@ func (c *ApplyCommandConfig) applyValidatingPolicies( contextProvider, gvk, gvr, - // TODO + // TODO: how to manage subresource ? "", resource.GetName(), resource.GetNamespace(),