Skip to content

Commit 29e5a51

Browse files
committed
refactor(newSecretBasedPromClientController): inline setupPrometheusProvider into newSecretBasedPromClientController
1 parent a91a02c commit 29e5a51

2 files changed

Lines changed: 17 additions & 38 deletions

File tree

pkg/descheduler/descheduler.go

Lines changed: 13 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -130,21 +130,29 @@ 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
}
137137
authTokenSecret := prometheusConfig.AuthToken.SecretReference
138138
if authTokenSecret.Name == "" || authTokenSecret.Namespace == "" {
139139
return nil, fmt.Errorf("prometheus metrics source configuration is missing authentication token secret")
140140
}
141+
142+
if namespacedSharedInformerFactory == nil {
143+
return nil, fmt.Errorf("namespacedSharedInformerFactory not configured")
144+
}
145+
141146
ctrl := &secretBasedPromClientController{
142147
promClient: prometheusClient,
143148
queue: workqueue.NewRateLimitingQueueWithConfig(workqueue.DefaultControllerRateLimiter(), workqueue.RateLimitingQueueConfig{Name: "descheduler"}),
144149
prometheusConfig: prometheusConfig,
145150
createPrometheusClient: client.CreatePrometheusClient,
146151
}
147152

153+
namespacedSharedInformerFactory.Core().V1().Secrets().Informer().AddEventHandler(ctrl.eventHandler())
154+
ctrl.namespacedSecretsLister = namespacedSharedInformerFactory.Core().V1().Secrets().Lister().Secrets(authTokenSecret.Namespace)
155+
148156
return ctrl, nil
149157
}
150158

@@ -185,20 +193,6 @@ func metricsProviderListToMap(providersList []api.MetricsProvider) map[api.Metri
185193
return providersMap
186194
}
187195

188-
// setupPrometheusProvider sets up the prometheus provider on the descheduler if configured
189-
func setupPrometheusProvider(ctrl *secretBasedPromClientController, namespacedSharedInformerFactory informers.SharedInformerFactory) error {
190-
if ctrl == nil {
191-
return nil
192-
}
193-
if namespacedSharedInformerFactory == nil {
194-
return fmt.Errorf("namespacedSharedInformerFactory not configured")
195-
}
196-
authTokenSecret := ctrl.prometheusConfig.AuthToken.SecretReference
197-
namespacedSharedInformerFactory.Core().V1().Secrets().Informer().AddEventHandler(ctrl.eventHandler())
198-
ctrl.namespacedSecretsLister = namespacedSharedInformerFactory.Core().V1().Secrets().Lister().Secrets(authTokenSecret.Namespace)
199-
return nil
200-
}
201-
202196
func getPrometheusConfig(providersList []api.MetricsProvider) *api.Prometheus {
203197
prometheusProvider := metricsProviderListToMap(providersList)[api.PrometheusMetrics]
204198
if prometheusProvider == nil {
@@ -211,7 +205,7 @@ func configureSecretPromClientReconciler(prometheusConfig *api.Prometheus) bool
211205
return prometheusConfig.URL != "" && prometheusConfig.AuthToken != nil
212206
}
213207

214-
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) {
208+
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) {
215209
podInformer := sharedInformerFactory.Core().V1().Pods().Informer()
216210
// Temporarily register the PVC because it is used by the DefaultEvictor plugin during
217211
// the descheduling cycle, where informer registration is ignored.
@@ -257,7 +251,7 @@ func newDescheduler(ctx context.Context, rs *options.DeschedulerServer, deschedu
257251
if prometheusConfig != nil && prometheusConfig.URL != "" {
258252
if configureSecretPromClientReconciler(prometheusConfig) {
259253
// Secret-based mode
260-
ctrl, err := newSecretBasedPromClientController(rs.PrometheusClient, prometheusConfig)
254+
ctrl, err := newSecretBasedPromClientController(rs.PrometheusClient, prometheusConfig, namespacedSharedInformerFactory)
261255
if err != nil {
262256
return nil, err
263257
}
@@ -619,16 +613,11 @@ func bootstrapDescheduler(
619613
eventRecorder events.EventRecorder,
620614
) (*descheduler, runFncType, error) {
621615
// Always create descheduler with real client/factory first to register all informers
622-
descheduler, err := newDescheduler(ctx, rs, deschedulerPolicy, evictionPolicyGroupVersion, eventRecorder, rs.Client, sharedInformerFactory, nil)
616+
descheduler, err := newDescheduler(ctx, rs, deschedulerPolicy, evictionPolicyGroupVersion, eventRecorder, rs.Client, sharedInformerFactory, namespacedSharedInformerFactory, nil)
623617
if err != nil {
624618
return nil, nil, fmt.Errorf("failed to create new descheduler: %v", err)
625619
}
626620

627-
// Setup Prometheus provider
628-
if err := setupPrometheusProvider(descheduler.secretBasedPromClientCtrl, namespacedSharedInformerFactory); err != nil {
629-
return nil, nil, fmt.Errorf("failed to setup Prometheus provider: %v", err)
630-
}
631-
632621
// If in dry run mode, replace the descheduler with one using fake client/factory
633622
if rs.DryRun {
634623
// Create sandbox with resources to mirror from real client
@@ -642,15 +631,10 @@ func bootstrapDescheduler(
642631
// TODO(ingvagabund): drop the previous queue
643632
// TODO(ingvagabund): stop the previous pod evictor
644633
// Replace descheduler with one using fake client/factory
645-
descheduler, err = newDescheduler(ctx, rs, deschedulerPolicy, evictionPolicyGroupVersion, eventRecorder, kubeClientSandbox.fakeClient(), kubeClientSandbox.fakeSharedInformerFactory(), kubeClientSandbox)
634+
descheduler, err = newDescheduler(ctx, rs, deschedulerPolicy, evictionPolicyGroupVersion, eventRecorder, kubeClientSandbox.fakeClient(), kubeClientSandbox.fakeSharedInformerFactory(), namespacedSharedInformerFactory, kubeClientSandbox)
646635
if err != nil {
647636
return nil, nil, fmt.Errorf("failed to create dry run descheduler: %v", err)
648637
}
649-
650-
// Setup Prometheus provider (with the real shared informer factory as the secret is only read)
651-
if err := setupPrometheusProvider(descheduler.secretBasedPromClientCtrl, namespacedSharedInformerFactory); err != nil {
652-
return nil, nil, fmt.Errorf("failed to setup Prometheus provider for the dry run descheduler: %v", err)
653-
}
654638
}
655639

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

pkg/descheduler/descheduler_test.go

Lines changed: 4 additions & 9 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())
@@ -1938,7 +1933,7 @@ func TestPromClientControllerSync_InvalidConfig(t *testing.T) {
19381933
URL: prometheusURL,
19391934
AuthToken: &api.AuthToken{
19401935
SecretReference: &api.SecretReference{
1941-
Name: "prom-token",
1936+
Name: "prom-token",
19421937
},
19431938
},
19441939
},

0 commit comments

Comments
 (0)