From deeccb76ab04e3252429cefa9c93b7bea918090e Mon Sep 17 00:00:00 2001 From: Vaishnavi Hire Date: Thu, 23 Nov 2023 12:31:28 +0530 Subject: [PATCH] [rhods-2.5] Add Predicate for Prometheus Configmap (#134) * Add Predicate for Prometheus Configmap (cherry picked from commit 35f4136fcd301ae141ba8cd6d7281e301b1931a9) * fix(linter) Signed-off-by: Wen Zhou --------- Signed-off-by: Wen Zhou Co-authored-by: Wen Zhou (cherry picked from commit 6ecf2b51cf2c84e9b6cd019c84f42fef656c7390) --- .../datasciencecluster_controller.go | 57 ++++++++++++------- 1 file changed, 37 insertions(+), 20 deletions(-) diff --git a/controllers/datasciencecluster/datasciencecluster_controller.go b/controllers/datasciencecluster/datasciencecluster_controller.go index 203ea0fddf0..584a3d81be9 100644 --- a/controllers/datasciencecluster/datasciencecluster_controller.go +++ b/controllers/datasciencecluster/datasciencecluster_controller.go @@ -43,8 +43,10 @@ import ( "k8s.io/client-go/util/retry" apiregistrationv1 "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1" ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/builder" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" + "sigs.k8s.io/controller-runtime/pkg/event" "sigs.k8s.io/controller-runtime/pkg/handler" "sigs.k8s.io/controller-runtime/pkg/predicate" "sigs.k8s.io/controller-runtime/pkg/reconcile" @@ -312,13 +314,23 @@ func (r *DataScienceClusterReconciler) reportError(err error, instance *dsc.Data return instance } +var configMapPredicates = predicate.Funcs{ + UpdateFunc: func(e event.UpdateEvent) bool { + // Do not reconcile on prometheus configmap update, since it is handled by DSCI + if e.ObjectNew.GetName() == "prometheus" && e.ObjectNew.GetNamespace() == "redhat-ods-monitoring" { + return false + } + return true + }, +} + // SetupWithManager sets up the controller with the Manager. func (r *DataScienceClusterReconciler) SetupWithManager(mgr ctrl.Manager) error { return ctrl.NewControllerManagedBy(mgr). For(&dsc.DataScienceCluster{}). Owns(&corev1.Namespace{}). Owns(&corev1.Secret{}). - Owns(&corev1.ConfigMap{}). + Owns(&corev1.ConfigMap{}, builder.WithPredicates(configMapPredicates)). Owns(&netv1.NetworkPolicy{}). Owns(&authv1.Role{}). Owns(&authv1.RoleBinding{}). @@ -341,7 +353,7 @@ func (r *DataScienceClusterReconciler) SetupWithManager(mgr ctrl.Manager) error Owns(&admv1.ValidatingWebhookConfiguration{}). Owns(&corev1.ServiceAccount{}). Watches(&source.Kind{Type: &dsci.DSCInitialization{}}, handler.EnqueueRequestsFromMapFunc(r.watchDataScienceClusterResources)). - Watches(&source.Kind{Type: &corev1.ConfigMap{}}, handler.EnqueueRequestsFromMapFunc(r.watchDataScienceClusterResources)). + Watches(&source.Kind{Type: &corev1.ConfigMap{}}, handler.EnqueueRequestsFromMapFunc(r.watchDataScienceClusterResources), builder.WithPredicates(configMapPredicates)). // this predicates prevents meaningless reconciliations from being triggered WithEventFilter(predicate.Or(predicate.GenerationChangedPredicate{}, predicate.LabelChangedPredicate{})). Complete(r) @@ -374,25 +386,30 @@ func (r *DataScienceClusterReconciler) watchDataScienceClusterResources(a client if err != nil { return nil } - if len(instanceList.Items) == 1 { - // Trigger reconcile function when uninstall configmap is created - if a.GetObjectKind().GroupVersionKind().Kind == "ConfigMap" { - labels := a.GetLabels() - if val, ok := labels[upgrade.DeleteConfigMapLabel]; ok && val == "true" { - return []reconcile.Request{{ - NamespacedName: types.NamespacedName{Name: instanceList.Items[0].Name}, - }} - } else { - return nil - } + var requestName string + switch { + case len(instanceList.Items) == 1: + requestName = instanceList.Items[0].Name + case len(instanceList.Items) == 0: + requestName = "default-dsc" + default: + return nil + } + + // Trigger reconcile function when uninstall configmap is created + operatorNs, err := upgrade.GetOperatorNamespace() + if err != nil { + return nil + } + if a.GetNamespace() == operatorNs { + labels := a.GetLabels() + if val, ok := labels[upgrade.DeleteConfigMapLabel]; ok && val == "true" { + return []reconcile.Request{{ + NamespacedName: types.NamespacedName{Name: requestName}, + }} + } else { + return nil } - return []reconcile.Request{{ - NamespacedName: types.NamespacedName{Name: instanceList.Items[0].Name}, - }} - } else if len(instanceList.Items) == 0 { - return []reconcile.Request{{ - NamespacedName: types.NamespacedName{Name: "default"}, - }} } return nil }