@@ -97,6 +97,11 @@ type Operator struct {
97
97
serviceAccountQuerier * scoped.UserDefinedServiceAccountQuerier
98
98
clientFactory clients.Factory
99
99
plugins []plugins.OperatorPlugin
100
+ informersByNamespace map [string ]* plugins.Informers
101
+ }
102
+
103
+ func (a * Operator ) Informers () map [string ]* plugins.Informers {
104
+ return a .informersByNamespace
100
105
}
101
106
102
107
func NewOperator (ctx context.Context , options ... OperatorOption ) (* Operator , error ) {
@@ -159,9 +164,11 @@ func newOperatorWithConfig(ctx context.Context, config *operatorConfig) (*Operat
159
164
protectedCopiedCSVNamespaces : config .protectedCopiedCSVNamespaces ,
160
165
}
161
166
167
+ informersByNamespace := map [string ]* plugins.Informers {}
162
168
// Set up syncing for namespace-scoped resources
163
169
k8sSyncer := queueinformer .LegacySyncHandler (op .syncObject ).ToSyncerWithDelete (op .handleDeletion )
164
170
for _ , namespace := range config .watchedNamespaces {
171
+ informersByNamespace [namespace ] = & plugins.Informers {}
165
172
// Wire CSVs
166
173
csvInformer := externalversions .NewSharedInformerFactoryWithOptions (
167
174
op .client ,
@@ -171,6 +178,7 @@ func newOperatorWithConfig(ctx context.Context, config *operatorConfig) (*Operat
171
178
options .LabelSelector = fmt .Sprintf ("!%s" , v1alpha1 .CopiedLabelKey )
172
179
}),
173
180
).Operators ().V1alpha1 ().ClusterServiceVersions ()
181
+ informersByNamespace [namespace ].CSVInformer = csvInformer
174
182
op .lister .OperatorsV1alpha1 ().RegisterClusterServiceVersionLister (namespace , csvInformer .Lister ())
175
183
csvQueue := workqueue .NewNamedRateLimitingQueue (workqueue .DefaultControllerRateLimiter (), fmt .Sprintf ("%s/csv" , namespace ))
176
184
op .csvQueueSet .Set (namespace , csvQueue )
@@ -225,6 +233,8 @@ func newOperatorWithConfig(ctx context.Context, config *operatorConfig) (*Operat
225
233
},
226
234
).Informer ()
227
235
op .copiedCSVLister = metadatalister .New (copiedCSVInformer .GetIndexer (), gvr )
236
+ informersByNamespace [namespace ].CopiedCSVInformer = copiedCSVInformer
237
+ informersByNamespace [namespace ].CopiedCSVLister = op .copiedCSVLister
228
238
229
239
// Register separate queue for gcing copied csvs
230
240
copiedCSVGCQueue := workqueue .NewNamedRateLimitingQueue (workqueue .DefaultControllerRateLimiter (), fmt .Sprintf ("%s/csv-gc" , namespace ))
@@ -247,6 +257,7 @@ func newOperatorWithConfig(ctx context.Context, config *operatorConfig) (*Operat
247
257
// Wire OperatorGroup reconciliation
248
258
extInformerFactory := externalversions .NewSharedInformerFactoryWithOptions (op .client , config .resyncPeriod (), externalversions .WithNamespace (namespace ))
249
259
operatorGroupInformer := extInformerFactory .Operators ().V1 ().OperatorGroups ()
260
+ informersByNamespace [namespace ].OperatorGroupInformer = operatorGroupInformer
250
261
op .lister .OperatorsV1 ().RegisterOperatorGroupLister (namespace , operatorGroupInformer .Lister ())
251
262
ogQueue := workqueue .NewNamedRateLimitingQueue (workqueue .DefaultControllerRateLimiter (), fmt .Sprintf ("%s/og" , namespace ))
252
263
op .ogQueueSet .Set (namespace , ogQueue )
@@ -266,6 +277,7 @@ func newOperatorWithConfig(ctx context.Context, config *operatorConfig) (*Operat
266
277
267
278
// Register OperatorCondition QueueInformer
268
279
opConditionInformer := extInformerFactory .Operators ().V2 ().OperatorConditions ()
280
+ informersByNamespace [namespace ].OperatorConditionInformer = opConditionInformer
269
281
op .lister .OperatorsV2 ().RegisterOperatorConditionLister (namespace , opConditionInformer .Lister ())
270
282
opConditionQueueInformer , err := queueinformer .NewQueueInformer (
271
283
ctx ,
@@ -281,6 +293,7 @@ func newOperatorWithConfig(ctx context.Context, config *operatorConfig) (*Operat
281
293
}
282
294
283
295
subInformer := extInformerFactory .Operators ().V1alpha1 ().Subscriptions ()
296
+ informersByNamespace [namespace ].SubscriptionInformer = subInformer
284
297
op .lister .OperatorsV1alpha1 ().RegisterSubscriptionLister (namespace , subInformer .Lister ())
285
298
subQueueInformer , err := queueinformer .NewQueueInformer (
286
299
ctx ,
@@ -298,6 +311,7 @@ func newOperatorWithConfig(ctx context.Context, config *operatorConfig) (*Operat
298
311
// Wire Deployments
299
312
k8sInformerFactory := informers .NewSharedInformerFactoryWithOptions (op .opClient .KubernetesInterface (), config .resyncPeriod (), informers .WithNamespace (namespace ))
300
313
depInformer := k8sInformerFactory .Apps ().V1 ().Deployments ()
314
+ informersByNamespace [namespace ].DeploymentInformer = depInformer
301
315
op .lister .AppsV1 ().RegisterDeploymentLister (namespace , depInformer .Lister ())
302
316
depQueueInformer , err := queueinformer .NewQueueInformer (
303
317
ctx ,
@@ -314,6 +328,7 @@ func newOperatorWithConfig(ctx context.Context, config *operatorConfig) (*Operat
314
328
315
329
// Set up RBAC informers
316
330
roleInformer := k8sInformerFactory .Rbac ().V1 ().Roles ()
331
+ informersByNamespace [namespace ].RoleInformer = roleInformer
317
332
op .lister .RbacV1 ().RegisterRoleLister (namespace , roleInformer .Lister ())
318
333
roleQueueInformer , err := queueinformer .NewQueueInformer (
319
334
ctx ,
@@ -329,6 +344,7 @@ func newOperatorWithConfig(ctx context.Context, config *operatorConfig) (*Operat
329
344
}
330
345
331
346
roleBindingInformer := k8sInformerFactory .Rbac ().V1 ().RoleBindings ()
347
+ informersByNamespace [namespace ].RoleBindingInformer = roleBindingInformer
332
348
op .lister .RbacV1 ().RegisterRoleBindingLister (namespace , roleBindingInformer .Lister ())
333
349
roleBindingQueueInformer , err := queueinformer .NewQueueInformer (
334
350
ctx ,
@@ -347,6 +363,7 @@ func newOperatorWithConfig(ctx context.Context, config *operatorConfig) (*Operat
347
363
secretInformer := informers .NewSharedInformerFactoryWithOptions (op .opClient .KubernetesInterface (), config .resyncPeriod (), informers .WithNamespace (namespace ), informers .WithTweakListOptions (func (options * metav1.ListOptions ) {
348
364
options .LabelSelector = labels .SelectorFromValidatedSet (map [string ]string {install .OLMManagedLabelKey : install .OLMManagedLabelValue }).String ()
349
365
})).Core ().V1 ().Secrets ()
366
+ informersByNamespace [namespace ].SecretInformer = secretInformer
350
367
op .lister .CoreV1 ().RegisterSecretLister (namespace , secretInformer .Lister ())
351
368
secretQueueInformer , err := queueinformer .NewQueueInformer (
352
369
ctx ,
@@ -363,6 +380,7 @@ func newOperatorWithConfig(ctx context.Context, config *operatorConfig) (*Operat
363
380
364
381
// Register Service QueueInformer
365
382
serviceInformer := k8sInformerFactory .Core ().V1 ().Services ()
383
+ informersByNamespace [namespace ].ServiceInformer = serviceInformer
366
384
op .lister .CoreV1 ().RegisterServiceLister (namespace , serviceInformer .Lister ())
367
385
serviceQueueInformer , err := queueinformer .NewQueueInformer (
368
386
ctx ,
@@ -379,6 +397,7 @@ func newOperatorWithConfig(ctx context.Context, config *operatorConfig) (*Operat
379
397
380
398
// Register ServiceAccount QueueInformer
381
399
serviceAccountInformer := k8sInformerFactory .Core ().V1 ().ServiceAccounts ()
400
+ informersByNamespace [namespace ].ServiceAccountInformer = serviceAccountInformer
382
401
op .lister .CoreV1 ().RegisterServiceAccountLister (metav1 .NamespaceAll , serviceAccountInformer .Lister ())
383
402
serviceAccountQueueInformer , err := queueinformer .NewQueueInformer (
384
403
ctx ,
@@ -429,13 +448,14 @@ func newOperatorWithConfig(ctx context.Context, config *operatorConfig) (*Operat
429
448
olmConfigInformer := externalversions .NewSharedInformerFactoryWithOptions (
430
449
op .client ,
431
450
config .resyncPeriod (),
432
- ).Operators ().V1 ().OLMConfigs ().Informer ()
451
+ ).Operators ().V1 ().OLMConfigs ()
452
+ informersByNamespace [metav1 .NamespaceAll ].OLMConfigInformer = olmConfigInformer
433
453
olmConfigQueueInformer , err := queueinformer .NewQueueInformer (
434
454
ctx ,
435
- queueinformer .WithInformer (olmConfigInformer ),
455
+ queueinformer .WithInformer (olmConfigInformer . Informer () ),
436
456
queueinformer .WithLogger (op .logger ),
437
457
queueinformer .WithQueue (op .olmConfigQueue ),
438
- queueinformer .WithIndexer (olmConfigInformer .GetIndexer ()),
458
+ queueinformer .WithIndexer (olmConfigInformer .Informer (). GetIndexer ()),
439
459
queueinformer .WithSyncer (queueinformer .LegacySyncHandler (op .syncOLMConfig ).ToSyncer ()),
440
460
)
441
461
if err != nil {
@@ -447,6 +467,7 @@ func newOperatorWithConfig(ctx context.Context, config *operatorConfig) (*Operat
447
467
448
468
k8sInformerFactory := informers .NewSharedInformerFactory (op .opClient .KubernetesInterface (), config .resyncPeriod ())
449
469
clusterRoleInformer := k8sInformerFactory .Rbac ().V1 ().ClusterRoles ()
470
+ informersByNamespace [metav1 .NamespaceAll ].ClusterRoleInformer = clusterRoleInformer
450
471
op .lister .RbacV1 ().RegisterClusterRoleLister (clusterRoleInformer .Lister ())
451
472
clusterRoleQueueInformer , err := queueinformer .NewQueueInformer (
452
473
ctx ,
@@ -462,6 +483,7 @@ func newOperatorWithConfig(ctx context.Context, config *operatorConfig) (*Operat
462
483
}
463
484
464
485
clusterRoleBindingInformer := k8sInformerFactory .Rbac ().V1 ().ClusterRoleBindings ()
486
+ informersByNamespace [metav1 .NamespaceAll ].ClusterRoleBindingInformer = clusterRoleBindingInformer
465
487
op .lister .RbacV1 ().RegisterClusterRoleBindingLister (clusterRoleBindingInformer .Lister ())
466
488
clusterRoleBindingQueueInformer , err := queueinformer .NewQueueInformer (
467
489
ctx ,
@@ -478,6 +500,7 @@ func newOperatorWithConfig(ctx context.Context, config *operatorConfig) (*Operat
478
500
479
501
// register namespace queueinformer
480
502
namespaceInformer := k8sInformerFactory .Core ().V1 ().Namespaces ()
503
+ informersByNamespace [metav1 .NamespaceAll ].NamespaceInformer = namespaceInformer
481
504
op .lister .CoreV1 ().RegisterNamespaceLister (namespaceInformer .Lister ())
482
505
op .nsQueueSet = workqueue .NewNamedRateLimitingQueue (workqueue .DefaultControllerRateLimiter (), "resolver" )
483
506
namespaceInformer .Informer ().AddEventHandler (
@@ -502,6 +525,7 @@ func newOperatorWithConfig(ctx context.Context, config *operatorConfig) (*Operat
502
525
503
526
// Register APIService QueueInformer
504
527
apiServiceInformer := kagg .NewSharedInformerFactory (op .opClient .ApiregistrationV1Interface (), config .resyncPeriod ()).Apiregistration ().V1 ().APIServices ()
528
+ informersByNamespace [metav1 .NamespaceAll ].APIServiceInformer = apiServiceInformer
505
529
op .lister .APIRegistrationV1 ().RegisterAPIServiceLister (apiServiceInformer .Lister ())
506
530
apiServiceQueueInformer , err := queueinformer .NewQueueInformer (
507
531
ctx ,
@@ -519,6 +543,7 @@ func newOperatorWithConfig(ctx context.Context, config *operatorConfig) (*Operat
519
543
520
544
// Register CustomResourceDefinition QueueInformer
521
545
crdInformer := extinf .NewSharedInformerFactory (op .opClient .ApiextensionsInterface (), config .resyncPeriod ()).Apiextensions ().V1 ().CustomResourceDefinitions ()
546
+ informersByNamespace [metav1 .NamespaceAll ].CRDInformer = crdInformer
522
547
op .lister .APIExtensionsV1 ().RegisterCustomResourceDefinitionLister (crdInformer .Lister ())
523
548
crdQueueInformer , err := queueinformer .NewQueueInformer (
524
549
ctx ,
@@ -572,6 +597,7 @@ func newOperatorWithConfig(ctx context.Context, config *operatorConfig) (*Operat
572
597
op .resolver = & install.StrategyResolver {
573
598
OverridesBuilderFunc : overridesBuilderFunc .GetDeploymentInitializer ,
574
599
}
600
+ op .informersByNamespace = informersByNamespace
575
601
576
602
// initialize plugins
577
603
for _ , makePlugIn := range operatorPlugInFactoryFuncs {
0 commit comments