Skip to content

Commit

Permalink
[rhods-2.5] Add Predicate for Prometheus Configmap (red-hat-data-serv…
Browse files Browse the repository at this point in the history
…ices#134)

* Add Predicate for Prometheus Configmap

(cherry picked from commit 35f4136)

* fix(linter)

Signed-off-by: Wen Zhou <[email protected]>

---------

Signed-off-by: Wen Zhou <[email protected]>
Co-authored-by: Wen Zhou <[email protected]>
(cherry picked from commit 6ecf2b5)
  • Loading branch information
VaishnaviHire committed Nov 29, 2023
1 parent 0062ba3 commit deeccb7
Showing 1 changed file with 37 additions and 20 deletions.
57 changes: 37 additions & 20 deletions controllers/datasciencecluster/datasciencecluster_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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{}).
Expand All @@ -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)
Expand Down Expand Up @@ -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
}
Expand Down

0 comments on commit deeccb7

Please sign in to comment.