mirror of
https://github.com/outbackdingo/cozystack.git
synced 2026-01-27 10:18:39 +00:00
[lineage] Use an auto-refreshing RESTMapper (#1497)
## What this PR does 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 ```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. ``` <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - Refactor - Streamlined webhook initialization by removing redundant discovery/cache components, reducing startup complexity and overhead. - Improved error handling during webhook setup for clearer diagnostics on manager startup. - Reduced runtime dependencies to improve reliability across diverse cluster environments. - Minor import and initialization cleanups to align with current controller-runtime practices. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user