From 2c8b46c48d25f1d68755389e8416bb6616eaad6a Mon Sep 17 00:00:00 2001 From: Elena Gershkovich Date: Wed, 20 Dec 2023 17:06:18 +0200 Subject: [PATCH] Add watching on Secrets in drcluster_controller Signed-off-by: Elena Gershkovich (cherry picked from commit bfe93e7979e6afecfa7816f14bd9be7c5381acea) --- controllers/drcluster_controller.go | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/controllers/drcluster_controller.go b/controllers/drcluster_controller.go index a08a456e9..98e9aa7f3 100644 --- a/controllers/drcluster_controller.go +++ b/controllers/drcluster_controller.go @@ -116,10 +116,13 @@ func (r *DRClusterReconciler) SetupWithManager(mgr ctrl.Manager) error { return ctrl.NewControllerManagedBy(mgr). For(&ramen.DRCluster{}). - Watches(&source.Kind{Type: &corev1.ConfigMap{}}, handler.EnqueueRequestsFromMapFunc(r.drClusterConfigMapMapFunc)). Watches(&source.Kind{Type: &ramen.DRPlacementControl{}}, drpcMapFun, builder.WithPredicates(drpcPred())). Watches(&source.Kind{Type: &ocmworkv1.ManifestWork{}}, mwMapFun, builder.WithPredicates(mwPred)). Watches(&source.Kind{Type: &viewv1beta1.ManagedClusterView{}}, mcvMapFun, builder.WithPredicates(mcvPred)). + Watches(&source.Kind{Type: &corev1.ConfigMap{}}, handler.EnqueueRequestsFromMapFunc(r.drClusterConfigMapMapFunc)). + Watches(&source.Kind{Type: &corev1.Secret{}}, handler.EnqueueRequestsFromMapFunc(r.drClusterSecretMapFunc), + builder.WithPredicates(util.CreateOrDeleteOrResourceVersionUpdatePredicate{}), + ). Complete(r) } @@ -141,6 +144,24 @@ func (r *DRClusterReconciler) drClusterConfigMapMapFunc(configMap client.Object) return requests } +func (r *DRClusterReconciler) drClusterSecretMapFunc(secret client.Object) []reconcile.Request { + if secret.GetNamespace() != NamespaceName() { + return []reconcile.Request{} + } + + drcusters := &ramen.DRClusterList{} + if err := r.Client.List(context.TODO(), drcusters); err != nil { + return []reconcile.Request{} + } + + requests := make([]reconcile.Request, len(drcusters.Items)) + for i := range drcusters.Items { + requests[i].Name = drcusters.Items[i].GetName() + } + + return requests +} + // drpcPred watches for updates to the DRPC resource and checks if it requires an appropriate DRCluster reconcile func drpcPred() predicate.Funcs { drpcPredicate := predicate.Funcs{ @@ -263,6 +284,7 @@ func filterDRClusterMCV(mcv *viewv1beta1.ManagedClusterView) []ctrl.Request { // +kubebuilder:rbac:groups=apps.open-cluster-management.io,resources=placementrules,verbs=get;list;watch // +kubebuilder:rbac:groups=cluster.open-cluster-management.io,resources=placements,verbs=get;list;watch // +kubebuilder:rbac:groups=argoproj.io,resources=applicationsets,verbs=get;list;watch +// +kubebuilder:rbac:groups="",resources=secrets,verbs=list;watch // +kubebuilder:rbac:groups="",resources=configmaps,verbs=list;watch func (r *DRClusterReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {