in pkg/operator/collection.go [49:126]
func setupCollectionControllers(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,
}
// Collector ConfigMap and Daemonset filter.
objFilterCollector := namespacedNamePredicate{
namespace: op.opts.OperatorNamespace,
name: NameCollector,
}
// Collector secret.
objFilterSecret := namespacedNamePredicate{
namespace: op.opts.OperatorNamespace,
name: CollectionSecretName,
}
// Reconcile the generated Prometheus configuration that is used by all collectors.
err := ctrl.NewControllerManagedBy(op.manager).
Named("collector-config").
// Filter events without changes for all watches.
WithEventFilter(predicate.ResourceVersionChangedPredicate{}).
// OperatorConfig is our root resource that ensures we reconcile
// at least once initially.
For(
&monitoringv1.OperatorConfig{},
builder.WithPredicates(objFilterOperatorConfig),
).
// Any update to a PodMonitoring requires regenerating the config.
Watches(
&monitoringv1.PodMonitoring{},
enqueueConst(objRequest),
builder.WithPredicates(predicate.GenerationChangedPredicate{}),
).
// Any update to a ClusterPodMonitoring requires regenerating the config.
Watches(
&monitoringv1.ClusterPodMonitoring{},
enqueueConst(objRequest),
builder.WithPredicates(predicate.GenerationChangedPredicate{}),
).
// Any update to a ClusterNodeMonitoring requires regenerating the config.
Watches(
&monitoringv1.ClusterNodeMonitoring{},
enqueueConst(objRequest),
builder.WithPredicates(predicate.GenerationChangedPredicate{}),
).
// The configuration we generate for the collectors.
Watches(
&corev1.ConfigMap{},
enqueueConst(objRequest),
builder.WithPredicates(objFilterCollector),
).
// Detect and undo changes to the daemon set.
Watches(
&appsv1.DaemonSet{},
enqueueConst(objRequest),
builder.WithPredicates(
objFilterCollector,
predicate.GenerationChangedPredicate{},
)).
// Detect and undo changes to the secret.
Watches(
&corev1.Secret{},
enqueueConst(objRequest),
builder.WithPredicates(objFilterSecret)).
Complete(newCollectionReconciler(op.manager.GetClient(), op.opts))
if err != nil {
return fmt.Errorf("create collector config controller: %w", err)
}
return nil
}