@@ -50,6 +50,7 @@ import (
50
50
"sigs.k8s.io/controller-runtime/pkg/builder"
51
51
"sigs.k8s.io/controller-runtime/pkg/client"
52
52
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
53
+ "sigs.k8s.io/controller-runtime/pkg/event"
53
54
"sigs.k8s.io/controller-runtime/pkg/handler"
54
55
"sigs.k8s.io/controller-runtime/pkg/log"
55
56
"sigs.k8s.io/controller-runtime/pkg/predicate"
@@ -151,6 +152,17 @@ func (c *OperatorConfigMapReconciler) SetupWithManager(mgr ctrl.Manager) error {
151
152
),
152
153
)
153
154
155
+ mirrorEnabledChangedPredicate := predicate.Funcs {
156
+ UpdateFunc : func (e event.UpdateEvent ) bool {
157
+ if e .ObjectOld == nil || e .ObjectNew == nil {
158
+ return false
159
+ }
160
+ oldObj := e .ObjectOld .(* v1alpha1.StorageClient )
161
+ newObj := e .ObjectNew .(* v1alpha1.StorageClient )
162
+ return oldObj .Status .MirrorEnabled != newObj .Status .MirrorEnabled
163
+ },
164
+ }
165
+
154
166
generationChangePredicate := predicate.GenerationChangedPredicate {}
155
167
bldr := ctrl .NewControllerManagedBy (mgr ).
156
168
For (& corev1.ConfigMap {}, configMapPredicates ).
@@ -174,7 +186,16 @@ func (c *OperatorConfigMapReconciler) SetupWithManager(mgr ctrl.Manager) error {
174
186
).
175
187
Watches (& opv1a1.Subscription {}, enqueueConfigMapRequest , subscriptionPredicates ).
176
188
Watches (& admrv1.ValidatingWebhookConfiguration {}, enqueueConfigMapRequest , webhookPredicates ).
177
- Watches (& v1alpha1.StorageClient {}, enqueueConfigMapRequest , builder .WithPredicates (predicate.AnnotationChangedPredicate {}))
189
+ Watches (
190
+ & v1alpha1.StorageClient {},
191
+ enqueueConfigMapRequest ,
192
+ builder .WithPredicates (
193
+ predicate .Or (
194
+ predicate.AnnotationChangedPredicate {},
195
+ mirrorEnabledChangedPredicate ,
196
+ ),
197
+ ),
198
+ )
178
199
179
200
return bldr .Complete (c )
180
201
}
@@ -356,6 +377,11 @@ func (c *OperatorConfigMapReconciler) reconcileDelegatedCSI() error {
356
377
return fmt .Errorf ("failed to reconcile csi operator config: %v" , err )
357
378
}
358
379
380
+ shouldGenerateOmapInfo , err := c .shouldGenerateOmapInfo ()
381
+ if err != nil {
382
+ return fmt .Errorf ("failed to retrieve information to generateOMapInfo: %v" , err )
383
+ }
384
+
359
385
// ceph rbd driver config
360
386
rbdDriver := & csiopv1a1.Driver {}
361
387
rbdDriver .Name = templates .RBDDriverName
@@ -365,7 +391,7 @@ func (c *OperatorConfigMapReconciler) reconcileDelegatedCSI() error {
365
391
if err := c .own (rbdDriver ); err != nil {
366
392
return fmt .Errorf ("failed to own csi rbd driver: %v" , err )
367
393
}
368
- rbdDriver .Spec .GenerateOMapInfo = ptr .To (c . shouldGenerateRBDOmapInfo () )
394
+ rbdDriver .Spec .GenerateOMapInfo = ptr .To (shouldGenerateOmapInfo )
369
395
return nil
370
396
}); err != nil {
371
397
return fmt .Errorf ("failed to reconcile rbd driver: %v" , err )
@@ -532,9 +558,20 @@ func (c *OperatorConfigMapReconciler) getNoobaaSubManagementConfig() bool {
532
558
return val
533
559
}
534
560
535
- func (c * OperatorConfigMapReconciler ) shouldGenerateRBDOmapInfo () bool {
536
- valAsString := strings .ToLower (c .operatorConfigMap .Data [generateRbdOMapInfoKey ])
537
- return valAsString == strconv .FormatBool (true )
561
+ func (c * OperatorConfigMapReconciler ) shouldGenerateOmapInfo () (bool , error ) {
562
+
563
+ storageClients := & v1alpha1.StorageClientList {}
564
+ if err := c .list (storageClients ); err != nil {
565
+ return false , err
566
+ }
567
+
568
+ for idx := range storageClients .Items {
569
+ if storageClients .Items [idx ].Status .MirrorEnabled {
570
+ return true , nil
571
+ }
572
+
573
+ }
574
+ return false , nil
538
575
}
539
576
540
577
func (c * OperatorConfigMapReconciler ) get (obj client.Object , opts ... client.GetOption ) error {
0 commit comments