@@ -13,15 +13,14 @@ import (
1313 "time"
1414
1515 "github.com/google/uuid"
16- configlistersv1 "github.com/openshift/client-go/config/listers/config/v1"
1716 v1 "k8s.io/api/core/v1"
1817 apierrors "k8s.io/apimachinery/pkg/api/errors"
1918 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2019 "k8s.io/apimachinery/pkg/fields"
2120 utilruntime "k8s.io/apimachinery/pkg/util/runtime"
2221 "k8s.io/apimachinery/pkg/util/sets"
2322 "k8s.io/apimachinery/pkg/util/wait"
24- "k8s.io/client-go/informers"
23+ coreinformers "k8s.io/client-go/informers"
2524 "k8s.io/client-go/kubernetes"
2625 "k8s.io/client-go/kubernetes/scheme"
2726 coreclientsetv1 "k8s.io/client-go/kubernetes/typed/core/v1"
@@ -35,9 +34,10 @@ import (
3534
3635 configv1 "github.com/openshift/api/config/v1"
3736 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"
3939 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"
4141 "github.com/openshift/library-go/pkg/config/clusterstatus"
4242 libgoleaderelection "github.com/openshift/library-go/pkg/config/leaderelection"
4343
@@ -208,14 +208,16 @@ func (o *Options) Run(ctx context.Context) error {
208208 case err != nil :
209209 klog .Warningf ("Failed to read release metadata to determine OCP version for this CVO (will use placeholder version %q): %v" , cvoOcpVersion , err )
210210 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 )
212212 default :
213213 cvoOcpVersion = releaseMetadata .Version
214214 klog .Infof ("Determined OCP version for this CVO: %q" , cvoOcpVersion )
215215 }
216216
217+ clusterVersionConfigInformerFactory , configInformerFactory := o .prepareConfigInformerFactories (cb )
218+
217219 // initialize the controllers and attempt to load the payload information
218- controllerCtx , err := o .NewControllerContext (cb )
220+ controllerCtx , err := o .NewControllerContext (cb , clusterVersionConfigInformerFactory , configInformerFactory )
219221 if err != nil {
220222 return err
221223 }
@@ -224,6 +226,17 @@ func (o *Options) Run(ctx context.Context) error {
224226 return nil
225227}
226228
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+
227240// run launches a number of goroutines to handle manifest application,
228241// metrics serving, etc. It continues operating until ctx.Done(),
229242// 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
255268
256269 informersDone := postMainContext .Done ()
257270 // FIXME: would be nice if there was a way to collect these.
258- controllerCtx .CVInformerFactory .Start (informersDone )
271+ controllerCtx .ClusterVersionInformerFactory .Start (informersDone )
259272 controllerCtx .OpenshiftConfigInformerFactory .Start (informersDone )
260273 controllerCtx .OpenshiftConfigManagedInformerFactory .Start (informersDone )
261- controllerCtx .InformerFactory .Start (informersDone )
274+ controllerCtx .ConfigInformerFactory .Start (informersDone )
262275 controllerCtx .OperatorInformerFactory .Start (informersDone )
263276
264- allSynced := controllerCtx .CVInformerFactory .WaitForCacheSync (informersDone )
277+ allSynced := controllerCtx .ClusterVersionInformerFactory .WaitForCacheSync (informersDone )
265278 for _ , synced := range allSynced {
266279 if ! synced {
267280 klog .Fatalf ("Caches never synchronized: %v" , postMainContext .Err ())
@@ -489,34 +502,39 @@ type Context struct {
489502 AutoUpdate * autoupdate.Controller
490503 StopOnFeatureGateChange * featuregates.ChangeStopper
491504
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
497520
498521 fgLister configlistersv1.FeatureGateLister
499522}
500523
501524// NewControllerContext initializes the default Context for the current Options. It does
502525// 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 ) {
505527 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 ))
507530
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 ))
518536
519- coInformer := sharedInformers .Config ().V1 ().ClusterOperators ()
537+ coInformer := configInformerFactory .Config ().V1 ().ClusterOperators ()
520538
521539 cvoKubeClient := cb .KubeClientOrDie (o .Namespace , useProtobuf )
522540 o .PromQLTarget .KubeClient = cvoKubeClient
@@ -527,11 +545,11 @@ func (o *Options) NewControllerContext(cb *ClientBuilder) (*Context, error) {
527545 o .ReleaseImage ,
528546 o .PayloadOverride ,
529547 resyncPeriod (o .ResyncInterval ),
530- cvInformer .Config ().V1 ().ClusterVersions (),
548+ clusterVersionConfigInformerFactory .Config ().V1 ().ClusterVersions (),
531549 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 (),
535553 operatorInformerFactory ,
536554 cb .ClientOrDie (o .Namespace ),
537555 cvoKubeClient ,
@@ -548,28 +566,28 @@ func (o *Options) NewControllerContext(cb *ClientBuilder) (*Context, error) {
548566 return nil , err
549567 }
550568
551- featureChangeStopper , err := featuregates .NewChangeStopper (sharedInformers .Config ().V1 ().FeatureGates ())
569+ featureChangeStopper , err := featuregates .NewChangeStopper (configInformerFactory .Config ().V1 ().FeatureGates ())
552570 if err != nil {
553571 return nil , err
554572 }
555573
556574 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 ,
561579 OperatorInformerFactory : operatorInformerFactory ,
562580 CVO : cvo ,
563581 StopOnFeatureGateChange : featureChangeStopper ,
564582
565- fgLister : sharedInformers .Config ().V1 ().FeatureGates ().Lister (),
583+ fgLister : configInformerFactory .Config ().V1 ().FeatureGates ().Lister (),
566584 }
567585
568586 if o .EnableAutoUpdate {
569587 ctx .AutoUpdate , err = autoupdate .New (
570588 o .Namespace , o .Name ,
571- cvInformer .Config ().V1 ().ClusterVersions (),
572- sharedInformers .Config ().V1 ().ClusterOperators (),
589+ clusterVersionConfigInformerFactory .Config ().V1 ().ClusterVersions (),
590+ configInformerFactory .Config ().V1 ().ClusterOperators (),
573591 cb .ClientOrDie (o .Namespace ),
574592 cb .KubeClientOrDie (o .Namespace ),
575593 )
0 commit comments