Skip to content

Commit f80d35f

Browse files
committed
refactor(newSecretBasedPromClientController): inline setupPrometheusProvider into newSecretBasedPromClientController
1 parent 6ea4cf0 commit f80d35f

File tree

2 files changed

+17
-37
lines changed

2 files changed

+17
-37
lines changed

pkg/descheduler/descheduler.go

Lines changed: 14 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -130,17 +130,26 @@ func newInClusterPromClientController(prometheusClient promapi.Client, prometheu
130130
}
131131
}
132132

133-
func newSecretBasedPromClientController(prometheusClient promapi.Client, prometheusConfig *api.Prometheus) (*secretBasedPromClientController, error) {
133+
func newSecretBasedPromClientController(prometheusClient promapi.Client, prometheusConfig *api.Prometheus, namespacedSharedInformerFactory informers.SharedInformerFactory) (*secretBasedPromClientController, error) {
134134
if prometheusConfig == nil || prometheusConfig.AuthToken == nil || prometheusConfig.AuthToken.SecretReference == nil {
135135
return nil, fmt.Errorf("prometheus metrics source configuration is missing authentication token secret")
136136
}
137+
138+
if namespacedSharedInformerFactory == nil {
139+
return nil, fmt.Errorf("namespacedSharedInformerFactory not configured")
140+
}
141+
137142
ctrl := &secretBasedPromClientController{
138143
promClient: prometheusClient,
139144
queue: workqueue.NewRateLimitingQueueWithConfig(workqueue.DefaultControllerRateLimiter(), workqueue.RateLimitingQueueConfig{Name: "descheduler"}),
140145
prometheusConfig: prometheusConfig,
141146
createPrometheusClient: client.CreatePrometheusClient,
142147
}
143148

149+
authTokenSecret := ctrl.prometheusConfig.AuthToken.SecretReference
150+
namespacedSharedInformerFactory.Core().V1().Secrets().Informer().AddEventHandler(ctrl.eventHandler())
151+
ctrl.namespacedSecretsLister = namespacedSharedInformerFactory.Core().V1().Secrets().Lister().Secrets(authTokenSecret.Namespace)
152+
144153
return ctrl, nil
145154
}
146155

@@ -181,20 +190,6 @@ func metricsProviderListToMap(providersList []api.MetricsProvider) map[api.Metri
181190
return providersMap
182191
}
183192

184-
// setupPrometheusProvider sets up the prometheus provider on the descheduler if configured
185-
func setupPrometheusProvider(ctrl *secretBasedPromClientController, namespacedSharedInformerFactory informers.SharedInformerFactory) error {
186-
if ctrl == nil {
187-
return nil
188-
}
189-
if namespacedSharedInformerFactory == nil {
190-
return fmt.Errorf("namespacedSharedInformerFactory not configured")
191-
}
192-
authTokenSecret := ctrl.prometheusConfig.AuthToken.SecretReference
193-
namespacedSharedInformerFactory.Core().V1().Secrets().Informer().AddEventHandler(ctrl.eventHandler())
194-
ctrl.namespacedSecretsLister = namespacedSharedInformerFactory.Core().V1().Secrets().Lister().Secrets(authTokenSecret.Namespace)
195-
return nil
196-
}
197-
198193
func getPrometheusConfig(providersList []api.MetricsProvider) *api.Prometheus {
199194
prometheusProvider := metricsProviderListToMap(providersList)[api.PrometheusMetrics]
200195
if prometheusProvider == nil {
@@ -207,7 +202,7 @@ func configureSecretPromClientReconciler(prometheusConfig *api.Prometheus) bool
207202
return prometheusConfig.URL != "" && prometheusConfig.AuthToken != nil
208203
}
209204

210-
func newDescheduler(ctx context.Context, rs *options.DeschedulerServer, deschedulerPolicy *api.DeschedulerPolicy, evictionPolicyGroupVersion string, eventRecorder events.EventRecorder, client clientset.Interface, sharedInformerFactory informers.SharedInformerFactory, kubeClientSandbox *kubeClientSandbox) (*descheduler, error) {
205+
func newDescheduler(ctx context.Context, rs *options.DeschedulerServer, deschedulerPolicy *api.DeschedulerPolicy, evictionPolicyGroupVersion string, eventRecorder events.EventRecorder, client clientset.Interface, sharedInformerFactory, namespacedSharedInformerFactory informers.SharedInformerFactory, kubeClientSandbox *kubeClientSandbox) (*descheduler, error) {
211206
podInformer := sharedInformerFactory.Core().V1().Pods().Informer()
212207
// Temporarily register the PVC because it is used by the DefaultEvictor plugin during
213208
// the descheduling cycle, where informer registration is ignored.
@@ -253,7 +248,7 @@ func newDescheduler(ctx context.Context, rs *options.DeschedulerServer, deschedu
253248
if prometheusConfig != nil {
254249
if configureSecretPromClientReconciler(prometheusConfig) {
255250
// Secret-based mode
256-
ctrl, err := newSecretBasedPromClientController(rs.PrometheusClient, prometheusConfig)
251+
ctrl, err := newSecretBasedPromClientController(rs.PrometheusClient, prometheusConfig, namespacedSharedInformerFactory)
257252
if err != nil {
258253
return nil, err
259254
}
@@ -615,16 +610,11 @@ func bootstrapDescheduler(
615610
eventRecorder events.EventRecorder,
616611
) (*descheduler, runFncType, error) {
617612
// Always create descheduler with real client/factory first to register all informers
618-
descheduler, err := newDescheduler(ctx, rs, deschedulerPolicy, evictionPolicyGroupVersion, eventRecorder, rs.Client, sharedInformerFactory, nil)
613+
descheduler, err := newDescheduler(ctx, rs, deschedulerPolicy, evictionPolicyGroupVersion, eventRecorder, rs.Client, sharedInformerFactory, namespacedSharedInformerFactory, nil)
619614
if err != nil {
620615
return nil, nil, fmt.Errorf("failed to create new descheduler: %v", err)
621616
}
622617

623-
// Setup Prometheus provider
624-
if err := setupPrometheusProvider(descheduler.secretBasedPromClientCtrl, namespacedSharedInformerFactory); err != nil {
625-
return nil, nil, fmt.Errorf("failed to setup Prometheus provider: %v", err)
626-
}
627-
628618
// If in dry run mode, replace the descheduler with one using fake client/factory
629619
if rs.DryRun {
630620
// Create sandbox with resources to mirror from real client
@@ -638,15 +628,10 @@ func bootstrapDescheduler(
638628
// TODO(ingvagabund): drop the previous queue
639629
// TODO(ingvagabund): stop the previous pod evictor
640630
// Replace descheduler with one using fake client/factory
641-
descheduler, err = newDescheduler(ctx, rs, deschedulerPolicy, evictionPolicyGroupVersion, eventRecorder, kubeClientSandbox.fakeClient(), kubeClientSandbox.fakeSharedInformerFactory(), kubeClientSandbox)
631+
descheduler, err = newDescheduler(ctx, rs, deschedulerPolicy, evictionPolicyGroupVersion, eventRecorder, kubeClientSandbox.fakeClient(), kubeClientSandbox.fakeSharedInformerFactory(), namespacedSharedInformerFactory, kubeClientSandbox)
642632
if err != nil {
643633
return nil, nil, fmt.Errorf("failed to create dry run descheduler: %v", err)
644634
}
645-
646-
// Setup Prometheus provider (with the real shared informer factory as the secret is only read)
647-
if err := setupPrometheusProvider(descheduler.secretBasedPromClientCtrl, namespacedSharedInformerFactory); err != nil {
648-
return nil, nil, fmt.Errorf("failed to setup Prometheus provider for the dry run descheduler: %v", err)
649-
}
650635
}
651636

652637
// init is responsible for starting all informer factories, metrics providers

pkg/descheduler/descheduler_test.go

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1347,7 +1347,7 @@ func TestEvictedPodRestorationInDryRun(t *testing.T) {
13471347
defer eventBroadcaster.Shutdown()
13481348

13491349
// Always create descheduler with real client/factory first to register all informers
1350-
descheduler, err := newDescheduler(ctxCancel, rs, internalDeschedulerPolicy, "v1", eventRecorder, rs.Client, sharedInformerFactory, nil)
1350+
descheduler, err := newDescheduler(ctxCancel, rs, internalDeschedulerPolicy, "v1", eventRecorder, rs.Client, sharedInformerFactory, nil, nil)
13511351
if err != nil {
13521352
t.Fatalf("Unable to create descheduler instance: %v", err)
13531353
}
@@ -1362,7 +1362,7 @@ func TestEvictedPodRestorationInDryRun(t *testing.T) {
13621362
}
13631363

13641364
// Replace descheduler with one using fake client/factory
1365-
descheduler, err = newDescheduler(ctxCancel, rs, internalDeschedulerPolicy, "v1", eventRecorder, kubeClientSandbox.fakeClient(), kubeClientSandbox.fakeSharedInformerFactory(), kubeClientSandbox)
1365+
descheduler, err = newDescheduler(ctxCancel, rs, internalDeschedulerPolicy, "v1", eventRecorder, kubeClientSandbox.fakeClient(), kubeClientSandbox.fakeSharedInformerFactory(), nil, kubeClientSandbox)
13661366
if err != nil {
13671367
t.Fatalf("Unable to create dry run descheduler instance: %v", err)
13681368
}
@@ -1839,15 +1839,10 @@ func setupPromClientControllerTest(ctx context.Context, t *testing.T, objects []
18391839
Prometheus: prometheusConfig,
18401840
}})
18411841

1842-
ctrl, err := newSecretBasedPromClientController(nil, prometheusConfig)
1842+
ctrl, err := newSecretBasedPromClientController(nil, prometheusConfig, namespacedInformerFactory)
18431843
if err != nil {
18441844
return nil, err
18451845
}
1846-
if setNamespacedSharedInformerFactory {
1847-
if err := setupPrometheusProvider(ctrl, namespacedInformerFactory); err != nil {
1848-
t.Fatal(err)
1849-
}
1850-
}
18511846

18521847
namespacedInformerFactory.Start(ctx.Done())
18531848
namespacedInformerFactory.WaitForCacheSync(ctx.Done())

0 commit comments

Comments
 (0)