From c8bf1c3ca0bd7b3e7e5a261c7d70cbab57299a58 Mon Sep 17 00:00:00 2001 From: Marvin Beckers Date: Thu, 1 Feb 2024 15:39:52 +0100 Subject: [PATCH] Re-wire additional indexers into informers creation Signed-off-by: Marvin Beckers --- pkg/cache/cache.go | 1 + pkg/cache/internal/informers.go | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/pkg/cache/cache.go b/pkg/cache/cache.go index 055c62e451..385ba93807 100644 --- a/pkg/cache/cache.go +++ b/pkg/cache/cache.go @@ -361,6 +361,7 @@ func newCache(restConfig *rest.Config, opts Options) newCacheFunc { Transform: config.Transform, UnsafeDisableDeepCopy: pointer.BoolDeref(config.UnsafeDisableDeepCopy, false), NewInformer: opts.NewInformerFunc, + Indexers: opts.Indexers, }), readerFailOnMissingInformer: opts.ReaderFailOnMissingInformer, } diff --git a/pkg/cache/internal/informers.go b/pkg/cache/internal/informers.go index de403ac1be..40a11f94db 100644 --- a/pkg/cache/internal/informers.go +++ b/pkg/cache/internal/informers.go @@ -51,6 +51,7 @@ type InformersOpts struct { Selector Selector Transform cache.TransformFunc UnsafeDisableDeepCopy bool + Indexers cache.Indexers } // NewInformers creates a new InformersMap that can create informers under the hood. @@ -78,6 +79,7 @@ func NewInformers(config *rest.Config, options *InformersOpts) *Informers { transform: options.Transform, unsafeDisableDeepCopy: options.UnsafeDisableDeepCopy, newInformer: newInformer, + indexers: options.Indexers, } } @@ -155,6 +157,9 @@ type Informers struct { // default or empty string means all namespaces namespace string + // indexers is a list of additional indexers to use when creating a new informer + indexers cache.Indexers + selector Selector transform cache.TransformFunc unsafeDisableDeepCopy bool @@ -311,6 +316,16 @@ func (ip *Informers) addInformerToMap(gvk schema.GroupVersionKind, obj runtime.O if err != nil { return nil, false, err } + + indexers := cache.Indexers{ + cache.NamespaceIndex: cache.MetaNamespaceIndexFunc, + } + + // Append additional indexers that might be passed. + for key := range ip.indexers { + indexers[key] = ip.indexers[key] + } + sharedIndexInformer := ip.newInformer(&cache.ListWatch{ ListFunc: func(opts metav1.ListOptions) (runtime.Object, error) { ip.selector.ApplyToList(&opts) @@ -321,9 +336,7 @@ func (ip *Informers) addInformerToMap(gvk schema.GroupVersionKind, obj runtime.O opts.Watch = true // Watch needs to be set to true separately return listWatcher.WatchFunc(opts) }, - }, obj, calculateResyncPeriod(ip.resync), cache.Indexers{ - cache.NamespaceIndex: cache.MetaNamespaceIndexFunc, - }) + }, obj, calculateResyncPeriod(ip.resync), indexers) // Check to see if there is a transformer for this gvk if err := sharedIndexInformer.SetTransform(ip.transform); err != nil {