@@ -13,15 +13,14 @@ import (
13
13
"time"
14
14
15
15
"github.com/google/uuid"
16
- configlistersv1 "github.com/openshift/client-go/config/listers/config/v1"
17
16
v1 "k8s.io/api/core/v1"
18
17
apierrors "k8s.io/apimachinery/pkg/api/errors"
19
18
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
20
19
"k8s.io/apimachinery/pkg/fields"
21
20
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
22
21
"k8s.io/apimachinery/pkg/util/sets"
23
22
"k8s.io/apimachinery/pkg/util/wait"
24
- "k8s.io/client-go/informers"
23
+ coreinformers "k8s.io/client-go/informers"
25
24
"k8s.io/client-go/kubernetes"
26
25
"k8s.io/client-go/kubernetes/scheme"
27
26
coreclientsetv1 "k8s.io/client-go/kubernetes/typed/core/v1"
@@ -35,9 +34,10 @@ import (
35
34
36
35
configv1 "github.com/openshift/api/config/v1"
37
36
clientset "github.com/openshift/client-go/config/clientset/versioned"
38
- "github.com/openshift/client-go/config/informers/externalversions"
37
+ configinformers "github.com/openshift/client-go/config/informers/externalversions"
38
+ configlistersv1 "github.com/openshift/client-go/config/listers/config/v1"
39
39
operatorclientset "github.com/openshift/client-go/operator/clientset/versioned"
40
- operatorexternalversions "github.com/openshift/client-go/operator/informers/externalversions"
40
+ operatorinformers "github.com/openshift/client-go/operator/informers/externalversions"
41
41
"github.com/openshift/library-go/pkg/config/clusterstatus"
42
42
libgoleaderelection "github.com/openshift/library-go/pkg/config/leaderelection"
43
43
@@ -208,14 +208,16 @@ func (o *Options) Run(ctx context.Context) error {
208
208
case err != nil :
209
209
klog .Warningf ("Failed to read release metadata to determine OCP version for this CVO (will use placeholder version %q): %v" , cvoOcpVersion , err )
210
210
case releaseMetadata .Version == "" :
211
- klog .Warningf ("Version missing from release metadata, cannot determine OCP version for this CVO (will use placeholder version %q): %v " , cvoOcpVersion , err )
211
+ klog .Warningf ("Version missing from release metadata, cannot determine OCP version for this CVO (will use placeholder version %q)" , cvoOcpVersion )
212
212
default :
213
213
cvoOcpVersion = releaseMetadata .Version
214
214
klog .Infof ("Determined OCP version for this CVO: %q" , cvoOcpVersion )
215
215
}
216
216
217
+ clusterVersionConfigInformerFactory , configInformerFactory := o .prepareConfigInformerFactories (cb )
218
+
217
219
// initialize the controllers and attempt to load the payload information
218
- controllerCtx , err := o .NewControllerContext (cb )
220
+ controllerCtx , err := o .NewControllerContext (cb , clusterVersionConfigInformerFactory , configInformerFactory )
219
221
if err != nil {
220
222
return err
221
223
}
@@ -224,6 +226,17 @@ func (o *Options) Run(ctx context.Context) error {
224
226
return nil
225
227
}
226
228
229
+ func (o * Options ) prepareConfigInformerFactories (cb * ClientBuilder ) (configinformers.SharedInformerFactory , configinformers.SharedInformerFactory ) {
230
+ client := cb .ClientOrDie ("shared-informer" )
231
+ filterByName := func (opts * metav1.ListOptions ) {
232
+ opts .FieldSelector = fields .OneTermEqualSelector ("metadata.name" , o .Name ).String ()
233
+ }
234
+ clusterVersionConfigInformerFactory := configinformers .NewSharedInformerFactoryWithOptions (client , resyncPeriod (o .ResyncInterval ), configinformers .WithTweakListOptions (filterByName ))
235
+ configInformerFactory := configinformers .NewSharedInformerFactory (client , resyncPeriod (o .ResyncInterval ))
236
+
237
+ return clusterVersionConfigInformerFactory , configInformerFactory
238
+ }
239
+
227
240
// run launches a number of goroutines to handle manifest application,
228
241
// metrics serving, etc. It continues operating until ctx.Done(),
229
242
// and then attempts a clean shutdown limited by an internal context
@@ -255,13 +268,13 @@ func (o *Options) run(ctx context.Context, controllerCtx *Context, lock resource
255
268
256
269
informersDone := postMainContext .Done ()
257
270
// FIXME: would be nice if there was a way to collect these.
258
- controllerCtx .CVInformerFactory .Start (informersDone )
271
+ controllerCtx .ClusterVersionInformerFactory .Start (informersDone )
259
272
controllerCtx .OpenshiftConfigInformerFactory .Start (informersDone )
260
273
controllerCtx .OpenshiftConfigManagedInformerFactory .Start (informersDone )
261
- controllerCtx .InformerFactory .Start (informersDone )
274
+ controllerCtx .ConfigInformerFactory .Start (informersDone )
262
275
controllerCtx .OperatorInformerFactory .Start (informersDone )
263
276
264
- allSynced := controllerCtx .CVInformerFactory .WaitForCacheSync (informersDone )
277
+ allSynced := controllerCtx .ClusterVersionInformerFactory .WaitForCacheSync (informersDone )
265
278
for _ , synced := range allSynced {
266
279
if ! synced {
267
280
klog .Fatalf ("Caches never synchronized: %v" , postMainContext .Err ())
@@ -489,34 +502,39 @@ type Context struct {
489
502
AutoUpdate * autoupdate.Controller
490
503
StopOnFeatureGateChange * featuregates.ChangeStopper
491
504
492
- CVInformerFactory externalversions.SharedInformerFactory
493
- OpenshiftConfigInformerFactory informers.SharedInformerFactory
494
- OpenshiftConfigManagedInformerFactory informers.SharedInformerFactory
495
- InformerFactory externalversions.SharedInformerFactory
496
- OperatorInformerFactory operatorexternalversions.SharedInformerFactory
505
+ // ClusterVersionInformerFactory should be used to get informers / listers for code that works with ClusterVersion resource
506
+ // singleton in the cluster.
507
+ ClusterVersionInformerFactory configinformers.SharedInformerFactory
508
+ // ConfigInformerFactory should be used to get informers / listers for code that works with resources from the
509
+ // config.openshift.io group, _except_ the ClusterVersion resource singleton.
510
+ ConfigInformerFactory configinformers.SharedInformerFactory
511
+ // OpenshiftConfigManagedInformerFactory should be used to get informers / listers for code that works with core k8s
512
+ // resources in the openshift-config namespace.
513
+ OpenshiftConfigInformerFactory coreinformers.SharedInformerFactory
514
+ // OpenshiftConfigManagedInformerFactory should be used to get informers / listers for code that works with core k8s
515
+ // resources in the openshift-config-managed namespace.
516
+ OpenshiftConfigManagedInformerFactory coreinformers.SharedInformerFactory
517
+ // OperatorInformerFactory should be used to get informers / listers for code that works with resources from the
518
+ // operator.openshift.io group
519
+ OperatorInformerFactory operatorinformers.SharedInformerFactory
497
520
498
521
fgLister configlistersv1.FeatureGateLister
499
522
}
500
523
501
524
// NewControllerContext initializes the default Context for the current Options. It does
502
525
// not start any background processes.
503
- func (o * Options ) NewControllerContext (cb * ClientBuilder ) (* Context , error ) {
504
- client := cb .ClientOrDie ("shared-informer" )
526
+ func (o * Options ) NewControllerContext (cb * ClientBuilder , clusterVersionConfigInformerFactory , configInformerFactory configinformers.SharedInformerFactory ) (* Context , error ) {
505
527
kubeClient := cb .KubeClientOrDie (internal .ConfigNamespace , useProtobuf )
506
- operatorClient := cb .OperatorClientOrDie ("operator-client" )
528
+ openshiftConfigInformerFactory := coreinformers .NewSharedInformerFactoryWithOptions (kubeClient , resyncPeriod (o .ResyncInterval ), coreinformers .WithNamespace (internal .ConfigNamespace ))
529
+ openshiftConfigManagedInformerFactory := coreinformers .NewSharedInformerFactoryWithOptions (kubeClient , resyncPeriod (o .ResyncInterval ), coreinformers .WithNamespace (internal .ConfigManagedNamespace ))
507
530
508
- cvInformer := externalversions .NewFilteredSharedInformerFactory (client , resyncPeriod (o .ResyncInterval ), "" , func (opts * metav1.ListOptions ) {
509
- opts .FieldSelector = fmt .Sprintf ("metadata.name=%s" , o .Name )
510
- })
511
- openshiftConfigInformer := informers .NewSharedInformerFactoryWithOptions (kubeClient , resyncPeriod (o .ResyncInterval ), informers .WithNamespace (internal .ConfigNamespace ))
512
- openshiftConfigManagedInformer := informers .NewSharedInformerFactoryWithOptions (kubeClient , resyncPeriod (o .ResyncInterval ), informers .WithNamespace (internal .ConfigManagedNamespace ))
513
- sharedInformers := externalversions .NewSharedInformerFactory (client , resyncPeriod (o .ResyncInterval ))
514
- operatorInformerFactory := operatorexternalversions .NewSharedInformerFactoryWithOptions (operatorClient , o .ResyncInterval ,
515
- operatorexternalversions .WithTweakListOptions (func (opts * metav1.ListOptions ) {
516
- opts .FieldSelector = fields .OneTermEqualSelector ("metadata.name" , configuration .ClusterVersionOperatorConfigurationName ).String ()
517
- }))
531
+ operatorClient := cb .OperatorClientOrDie ("operator-client" )
532
+ filterByName := func (opts * metav1.ListOptions ) {
533
+ opts .FieldSelector = fields .OneTermEqualSelector ("metadata.name" , configuration .ClusterVersionOperatorConfigurationName ).String ()
534
+ }
535
+ operatorInformerFactory := operatorinformers .NewSharedInformerFactoryWithOptions (operatorClient , o .ResyncInterval , operatorinformers .WithTweakListOptions (filterByName ))
518
536
519
- coInformer := sharedInformers .Config ().V1 ().ClusterOperators ()
537
+ coInformer := configInformerFactory .Config ().V1 ().ClusterOperators ()
520
538
521
539
cvoKubeClient := cb .KubeClientOrDie (o .Namespace , useProtobuf )
522
540
o .PromQLTarget .KubeClient = cvoKubeClient
@@ -527,11 +545,11 @@ func (o *Options) NewControllerContext(cb *ClientBuilder) (*Context, error) {
527
545
o .ReleaseImage ,
528
546
o .PayloadOverride ,
529
547
resyncPeriod (o .ResyncInterval ),
530
- cvInformer .Config ().V1 ().ClusterVersions (),
548
+ clusterVersionConfigInformerFactory .Config ().V1 ().ClusterVersions (),
531
549
coInformer ,
532
- openshiftConfigInformer .Core ().V1 ().ConfigMaps (),
533
- openshiftConfigManagedInformer .Core ().V1 ().ConfigMaps (),
534
- sharedInformers .Config ().V1 ().Proxies (),
550
+ openshiftConfigInformerFactory .Core ().V1 ().ConfigMaps (),
551
+ openshiftConfigManagedInformerFactory .Core ().V1 ().ConfigMaps (),
552
+ configInformerFactory .Config ().V1 ().Proxies (),
535
553
operatorInformerFactory ,
536
554
cb .ClientOrDie (o .Namespace ),
537
555
cvoKubeClient ,
@@ -548,28 +566,28 @@ func (o *Options) NewControllerContext(cb *ClientBuilder) (*Context, error) {
548
566
return nil , err
549
567
}
550
568
551
- featureChangeStopper , err := featuregates .NewChangeStopper (sharedInformers .Config ().V1 ().FeatureGates ())
569
+ featureChangeStopper , err := featuregates .NewChangeStopper (configInformerFactory .Config ().V1 ().FeatureGates ())
552
570
if err != nil {
553
571
return nil , err
554
572
}
555
573
556
574
ctx := & Context {
557
- CVInformerFactory : cvInformer ,
558
- OpenshiftConfigInformerFactory : openshiftConfigInformer ,
559
- OpenshiftConfigManagedInformerFactory : openshiftConfigManagedInformer ,
560
- InformerFactory : sharedInformers ,
575
+ ClusterVersionInformerFactory : clusterVersionConfigInformerFactory ,
576
+ ConfigInformerFactory : configInformerFactory ,
577
+ OpenshiftConfigInformerFactory : openshiftConfigInformerFactory ,
578
+ OpenshiftConfigManagedInformerFactory : openshiftConfigManagedInformerFactory ,
561
579
OperatorInformerFactory : operatorInformerFactory ,
562
580
CVO : cvo ,
563
581
StopOnFeatureGateChange : featureChangeStopper ,
564
582
565
- fgLister : sharedInformers .Config ().V1 ().FeatureGates ().Lister (),
583
+ fgLister : configInformerFactory .Config ().V1 ().FeatureGates ().Lister (),
566
584
}
567
585
568
586
if o .EnableAutoUpdate {
569
587
ctx .AutoUpdate , err = autoupdate .New (
570
588
o .Namespace , o .Name ,
571
- cvInformer .Config ().V1 ().ClusterVersions (),
572
- sharedInformers .Config ().V1 ().ClusterOperators (),
589
+ clusterVersionConfigInformerFactory .Config ().V1 ().ClusterVersions (),
590
+ configInformerFactory .Config ().V1 ().ClusterOperators (),
573
591
cb .ClientOrDie (o .Namespace ),
574
592
cb .KubeClientOrDie (o .Namespace ),
575
593
)
0 commit comments