From 88cfa4396a5da8f3e0521ad89f2c745a8cd0a63f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charles-Edouard=20Br=C3=A9t=C3=A9ch=C3=A9?= Date: Wed, 28 Jun 2023 06:43:16 +0200 Subject: [PATCH] fix: factorise confimap informer code (#7667) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Charles-Edouard Brétéché Co-authored-by: shuting Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../generic/configmap/controller.go | 24 ++-------- pkg/informers/configmaps.go | 46 +++++++++++++++++++ 2 files changed, 51 insertions(+), 19 deletions(-) create mode 100644 pkg/informers/configmaps.go diff --git a/pkg/controllers/generic/configmap/controller.go b/pkg/controllers/generic/configmap/controller.go index c323ccf93f..ec4b66d74a 100644 --- a/pkg/controllers/generic/configmap/controller.go +++ b/pkg/controllers/generic/configmap/controller.go @@ -7,13 +7,11 @@ import ( "github.com/go-logr/logr" "github.com/kyverno/kyverno/pkg/controllers" + "github.com/kyverno/kyverno/pkg/informers" "github.com/kyverno/kyverno/pkg/logging" controllerutils "github.com/kyverno/kyverno/pkg/utils/controller" corev1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/fields" - corev1informers "k8s.io/client-go/informers/core/v1" "k8s.io/client-go/kubernetes" corev1listers "k8s.io/client-go/listers/core/v1" "k8s.io/client-go/tools/cache" @@ -21,8 +19,6 @@ import ( ) const ( - // Workers is the number of workers for this controller - Workers = 1 maxRetries = 10 ) @@ -57,27 +53,17 @@ func NewController( name string, callback callback, ) Controller { - indexers := cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc} - options := func(lo *metav1.ListOptions) { - lo.FieldSelector = fields.OneTermEqualSelector(metav1.ObjectNameField, name).String() - } - informer := corev1informers.NewFilteredConfigMapInformer( - client, - namespace, - resyncPeriod, - indexers, - options, - ) + informer := informers.NewConfigMapInformer(client, namespace, name, resyncPeriod) c := controller{ - informer: informer, - lister: corev1listers.NewConfigMapLister(informer.GetIndexer()).ConfigMaps(namespace), + informer: informer.Informer(), + lister: informer.Lister().ConfigMaps(namespace), controllerName: controllerName, queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), controllerName), logger: logging.ControllerLogger(controllerName), name: name, callback: callback, } - controllerutils.AddDefaultEventHandlers(c.logger, informer, c.queue) + controllerutils.AddDefaultEventHandlers(c.logger, informer.Informer(), c.queue) return &c } diff --git a/pkg/informers/configmaps.go b/pkg/informers/configmaps.go new file mode 100644 index 0000000000..b337ae3c3f --- /dev/null +++ b/pkg/informers/configmaps.go @@ -0,0 +1,46 @@ +package informers + +import ( + "time" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/fields" + corev1informers "k8s.io/client-go/informers/core/v1" + "k8s.io/client-go/kubernetes" + corev1listers "k8s.io/client-go/listers/core/v1" + "k8s.io/client-go/tools/cache" +) + +type configMapInformer struct { + informer cache.SharedIndexInformer + lister corev1listers.ConfigMapLister +} + +func NewConfigMapInformer( + client kubernetes.Interface, + namespace string, + name string, + resyncPeriod time.Duration, +) corev1informers.ConfigMapInformer { + indexers := cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc} + options := func(lo *metav1.ListOptions) { + lo.FieldSelector = fields.OneTermEqualSelector(metav1.ObjectNameField, name).String() + } + informer := corev1informers.NewFilteredConfigMapInformer( + client, + namespace, + resyncPeriod, + indexers, + options, + ) + lister := corev1listers.NewConfigMapLister(informer.GetIndexer()) + return &configMapInformer{informer, lister} +} + +func (i *configMapInformer) Informer() cache.SharedIndexInformer { + return i.informer +} + +func (i *configMapInformer) Lister() corev1listers.ConfigMapLister { + return i.lister +}