diff --git a/pkg/cache/cache.go b/pkg/cache/cache.go index e5affce5c4..4ba74c08a9 100644 --- a/pkg/cache/cache.go +++ b/pkg/cache/cache.go @@ -256,7 +256,7 @@ func convertToDisableDeepCopyByGVK(disableDeepCopyByObject DisableDeepCopyByObje type TransformFuncByObject map[client.Object]toolscache.TransformFunc -func convertToTransformByKindAndGVK(t TransformFuncByObject, scheme *runtime.Scheme) (internal.TransformFuncByObject, error) { +func convertToTransformByKindAndGVK(t TransformFuncByObject, scheme *runtime.Scheme) (*internal.TransformFuncByObject, error) { result := internal.NewTransformFuncByObject() for obj, transformation := range t { if err := result.Set(obj, scheme, transformation); err != nil { diff --git a/pkg/cache/internal/deleg_map.go b/pkg/cache/internal/deleg_map.go index dbce7ad02a..4538b697a9 100644 --- a/pkg/cache/internal/deleg_map.go +++ b/pkg/cache/internal/deleg_map.go @@ -52,12 +52,12 @@ func NewInformersMap(config *rest.Config, namespace string, selectors SelectorsByGVK, disableDeepCopy DisableDeepCopyByGVK, - transformers TransformFuncByObject, + transformers *TransformFuncByObject, ) *InformersMap { return &InformersMap{ - structured: newStructuredInformersMap(config, scheme, mapper, resync, namespace, selectors, disableDeepCopy, transformers.Get(runtimeObjectKindStructured)), - unstructured: newUnstructuredInformersMap(config, scheme, mapper, resync, namespace, selectors, disableDeepCopy, transformers.Get(runtimeObjectKindUnstructured)), - metadata: newMetadataInformersMap(config, scheme, mapper, resync, namespace, selectors, disableDeepCopy, transformers.Get(runtimeObjectKindMetadata)), + structured: newStructuredInformersMap(config, scheme, mapper, resync, namespace, selectors, disableDeepCopy, transformers.structured), + unstructured: newUnstructuredInformersMap(config, scheme, mapper, resync, namespace, selectors, disableDeepCopy, transformers.unstructured), + metadata: newMetadataInformersMap(config, scheme, mapper, resync, namespace, selectors, disableDeepCopy, transformers.metadata), Scheme: scheme, } diff --git a/pkg/cache/internal/informers_map.go b/pkg/cache/internal/informers_map.go index 61e6f2f93c..bc43ae644a 100644 --- a/pkg/cache/internal/informers_map.go +++ b/pkg/cache/internal/informers_map.go @@ -70,6 +70,7 @@ func newSpecificInformersMap(config *rest.Config, namespace: namespace, selectors: selectors.forGVK, disableDeepCopy: disableDeepCopy, + transformers: transformers, } return ip } diff --git a/pkg/cache/internal/transformers.go b/pkg/cache/internal/transformers.go index 1f39e1d259..2b5bfa4d1b 100644 --- a/pkg/cache/internal/transformers.go +++ b/pkg/cache/internal/transformers.go @@ -9,57 +9,34 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client/apiutil" ) -type runtimeObjectKind int - -const ( - // prefixed names since there are packages with these names that conflict - runtimeObjectKindStructured runtimeObjectKind = iota - runtimeObjectKindUnstructured - runtimeObjectKindMetadata -) - -func runtimeObjectKindForObject(obj runtime.Object) runtimeObjectKind { - switch obj.(type) { - case *unstructured.Unstructured: - return runtimeObjectKindUnstructured - case *unstructured.UnstructuredList: - return runtimeObjectKindUnstructured - case *metav1.PartialObjectMetadata: - return runtimeObjectKindMetadata - case *metav1.PartialObjectMetadataList: - return runtimeObjectKindMetadata - default: - return runtimeObjectKindStructured - } +type TransformFuncByObject struct { + structured TransformFuncByGVK + unstructured TransformFuncByGVK + metadata TransformFuncByGVK } - -type TransformFuncByObject map[runtimeObjectKind]map[schema.GroupVersionKind]cache.TransformFunc type TransformFuncByGVK map[schema.GroupVersionKind]cache.TransformFunc -func NewTransformFuncByObject() TransformFuncByObject { - return TransformFuncByObject{} +func NewTransformFuncByObject() *TransformFuncByObject { + return &TransformFuncByObject{ + structured: TransformFuncByGVK{}, + unstructured: TransformFuncByGVK{}, + metadata: TransformFuncByGVK{}, + } } func (t TransformFuncByObject) Set(obj runtime.Object, scheme *runtime.Scheme, transformer cache.TransformFunc) error { - kind := runtimeObjectKindForObject(obj) - existing, ok := t[kind] - if !ok { - existing = TransformFuncByGVK{} - t[kind] = existing - } - - gvk, err := apiutil.GVKForObject(obj, nil) + gvk, err := apiutil.GVKForObject(obj, scheme) if err != nil { return err } - existing[gvk] = transformer - return nil -} - -func (t TransformFuncByObject) Get(kind runtimeObjectKind) TransformFuncByGVK { - if val, ok := t[kind]; ok { - return val + switch obj.(type) { + case *unstructured.Unstructured, *unstructured.UnstructuredList: + t.unstructured[gvk] = transformer + case *metav1.PartialObjectMetadata, *metav1.PartialObjectMetadataList: + t.metadata[gvk] = transformer + default: + t.structured[gvk] = transformer } return nil } diff --git a/pkg/controller/controllertest/util.go b/pkg/controller/controllertest/util.go index df6ae9a223..ce2f78ce95 100644 --- a/pkg/controller/controllertest/util.go +++ b/pkg/controller/controllertest/util.go @@ -111,3 +111,7 @@ func (f *FakeInformer) LastSyncResourceVersion() string { func (f *FakeInformer) SetWatchErrorHandler(cache.WatchErrorHandler) error { return nil } + +func (f *FakeInformer) SetTransform(t cache.TransformFunc) error { + return nil +}