in pkg/operator/operator_config.go [111:176]
func setupOperatorConfigControllers(op *Operator) error {
// The singleton OperatorConfig is the request object we reconcile against.
objRequest := reconcile.Request{
NamespacedName: types.NamespacedName{
Namespace: op.opts.PublicNamespace,
Name: NameOperatorConfig,
},
}
// Default OperatorConfig filter.
objFilterOperatorConfig := namespacedNamePredicate{
namespace: op.opts.PublicNamespace,
name: NameOperatorConfig,
}
// Rule-evaluator deployment filter.
objFilterRuleEvaluator := namespacedNamePredicate{
namespace: op.opts.OperatorNamespace,
name: NameRuleEvaluator,
}
// Rule-evaluator secret filter.
objFilterRuleEvaluatorSecret := namespacedNamePredicate{
namespace: op.opts.OperatorNamespace,
name: RulesSecretName,
}
// Rule-evaluator secret filter.
objFilterAlertManagerSecret := namespacedNamePredicate{
namespace: op.opts.OperatorNamespace,
name: AlertmanagerSecretName,
}
// Reconcile operator-managed resources.
err := ctrl.NewControllerManagedBy(op.manager).
Named("operator-config").
// Filter events without changes for all watches.
WithEventFilter(predicate.ResourceVersionChangedPredicate{}).
For(
&monitoringv1.OperatorConfig{},
builder.WithPredicates(objFilterOperatorConfig),
).
Watches(
&appsv1.Deployment{},
enqueueConst(objRequest),
builder.WithPredicates(
objFilterRuleEvaluator,
predicate.GenerationChangedPredicate{},
)).
Watches(
&corev1.Secret{},
enqueueConst(objRequest),
builder.WithPredicates(predicate.NewPredicateFuncs(secretFilter(op.opts.PublicNamespace))),
).
// Detect and undo changes to the secret.
Watches(
&corev1.Secret{},
enqueueConst(objRequest),
builder.WithPredicates(objFilterRuleEvaluatorSecret)).
Watches(
&corev1.Secret{},
enqueueConst(objRequest),
builder.WithPredicates(objFilterAlertManagerSecret)).
Complete(newOperatorConfigReconciler(op.manager.GetClient(), op.opts))
if err != nil {
return fmt.Errorf("operator-config controller: %w", err)
}
return nil
}