From 465f9d204b5a79383a38ba69b14a78bd8756e610 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charles-Edouard=20Br=C3=A9t=C3=A9ch=C3=A9?= Date: Wed, 12 Oct 2022 07:36:24 +0200 Subject: [PATCH] fix: non watchable resources in report controller (#4888) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: non watchable resources in report controller Signed-off-by: Charles-Edouard Brétéché * fix events Signed-off-by: Charles-Edouard Brétéché Signed-off-by: Charles-Edouard Brétéché --- pkg/controllers/report/resource/controller.go | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/pkg/controllers/report/resource/controller.go b/pkg/controllers/report/resource/controller.go index d104f487af..a9bec83f23 100644 --- a/pkg/controllers/report/resource/controller.go +++ b/pkg/controllers/report/resource/controller.go @@ -11,7 +11,9 @@ import ( "github.com/kyverno/kyverno/pkg/clients/dclient" "github.com/kyverno/kyverno/pkg/controllers" "github.com/kyverno/kyverno/pkg/controllers/report/utils" + pkgutils "github.com/kyverno/kyverno/pkg/utils" controllerutils "github.com/kyverno/kyverno/pkg/utils/controller" + kubeutils "github.com/kyverno/kyverno/pkg/utils/kube" reportutils "github.com/kyverno/kyverno/pkg/utils/report" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" @@ -126,11 +128,18 @@ func (c *controller) updateDynamicWatchers(ctx context.Context) error { kinds := utils.BuildKindSet(logger, utils.RemoveNonBackgroundPolicies(logger, append(clusterPolicies, policies...)...)...) gvrs := map[string]schema.GroupVersionResource{} for _, kind := range kinds.List() { - gvr, err := c.client.Discovery().GetGVRFromKind(kind) - if err == nil { - gvrs[kind] = gvr - } else { + apiVersion, kind := kubeutils.GetKindFromGVK(kind) + apiResource, gvr, err := c.client.Discovery().FindResource(apiVersion, kind) + if err != nil { logger.Error(err, "failed to get gvr from kind", "kind", kind) + } else if apiVersion == "" && kind == "Event" { + logger.Info("Event cannot be an owner, skipping", "apiVersion", apiVersion, "kind", kind) + } else { + if pkgutils.ContainsString(apiResource.Verbs, "list") && pkgutils.ContainsString(apiResource.Verbs, "watch") { + gvrs[kind] = gvr + } else { + logger.Info("list/watch not supported for kind", "kind", kind) + } } } dynamicWatchers := map[schema.GroupVersionResource]*watcher{}