From e2b4cd8bd0ef7e8145d435851d0dd8e79979cca7 Mon Sep 17 00:00:00 2001 From: Timofei Larkin Date: Thu, 9 Oct 2025 12:58:22 +0300 Subject: [PATCH] [lineage] Use an auto-refreshing RESTMapper Since the Cozystack extension API can now change dynamically while there are live clients (the lineage webhook) querying this API, the REST mapper of the client should "expect" that things may change and refresh their discovery information when they get a cache miss to see if new kinds have been registered. ```release-note [lineage] Use an auto-refreshing RESTMapper in the webhook's API client that tries to update its API discovery info when it fails to GET a resource kind that was previously not registered in its schema. ``` Signed-off-by: Timofei Larkin --- internal/lineagecontrollerwebhook/webhook.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/lineagecontrollerwebhook/webhook.go b/internal/lineagecontrollerwebhook/webhook.go index b368ea1a..1e7739b7 100644 --- a/internal/lineagecontrollerwebhook/webhook.go +++ b/internal/lineagecontrollerwebhook/webhook.go @@ -10,12 +10,10 @@ import ( "github.com/cozystack/cozystack/pkg/lineage" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/client-go/discovery" - "k8s.io/client-go/discovery/cached/memory" "k8s.io/client-go/dynamic" "k8s.io/client-go/rest" - "k8s.io/client-go/restmapper" ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/client/apiutil" "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/webhook/admission" @@ -52,13 +50,15 @@ func (h *LineageControllerWebhook) SetupWithManagerAsWebhook(mgr ctrl.Manager) e return err } - discoClient, err := discovery.NewDiscoveryClientForConfig(cfg) + httpClient, err := rest.HTTPClientFor(cfg) if err != nil { return err } - cachedDisco := memory.NewMemCacheClient(discoClient) - h.mapper = restmapper.NewDeferredDiscoveryRESTMapper(cachedDisco) + h.mapper, err = apiutil.NewDynamicRESTMapper(cfg, httpClient) + if err != nil { + return err + } h.initConfig() // Register HTTP path -> handler.