@@ -224,6 +224,14 @@ func (r *MetricStorageReconciler) Reconcile(ctx context.Context, req ctrl.Reques
224224 return r .reconcileDelete (ctx , instance , helper )
225225 }
226226
227+ // Handle service update
228+ ctrlResult , err := r .reconcileUpdate (ctx , instance , helper )
229+ if err != nil {
230+ return ctrlResult , err
231+ } else if (ctrlResult != ctrl.Result {}) {
232+ return ctrlResult , nil
233+ }
234+
227235 // Handle non-deleted clusters
228236 return r .reconcileNormal (ctx , instance , helper )
229237}
@@ -247,8 +255,6 @@ func (r *MetricStorageReconciler) reconcileDelete(
247255 return ctrl.Result {}, nil
248256}
249257
250- // TODO: call the function appropriately
251- //
252258//nolint:all
253259func (r * MetricStorageReconciler ) reconcileUpdate (
254260 ctx context.Context ,
@@ -262,6 +268,10 @@ func (r *MetricStorageReconciler) reconcileUpdate(
262268 if err != nil {
263269 return ctrl.Result {}, err
264270 }
271+ err = r .deleteRabbitMQScrapeConfig (ctx , instance )
272+ if err != nil {
273+ return ctrl.Result {}, err
274+ }
265275
266276 Log .Info (fmt .Sprintf ("Reconciled Service '%s' update successfully" , instance .Name ))
267277
@@ -295,6 +305,33 @@ func (r *MetricStorageReconciler) deleteOldServiceMonitors(
295305 return nil
296306}
297307
308+ // Delete RabbitMQ ScrapeConfig
309+ // A ScrapeConfig for RabbitMQ was last used at the beginning of FR4
310+ func (r * MetricStorageReconciler ) deleteRabbitMQScrapeConfig (
311+ ctx context.Context ,
312+ instance * telemetryv1.MetricStorage ,
313+ ) error {
314+ namespacedName := types.NamespacedName {
315+ Name : fmt .Sprintf ("%s-rabbitmq" , telemetry .ServiceName ),
316+ Namespace : instance .Namespace ,
317+ }
318+ scrapeConfig := & monv1alpha1.ScrapeConfig {}
319+ err := r .Get (ctx , namespacedName , scrapeConfig )
320+ if err != nil {
321+ if k8s_errors .IsNotFound (err ) {
322+ return nil
323+ }
324+ return err
325+ }
326+ if object .CheckOwnerRefExist (instance .UID , scrapeConfig .OwnerReferences ) {
327+ err = r .Delete (ctx , scrapeConfig )
328+ if err != nil {
329+ return err
330+ }
331+ }
332+ return nil
333+ }
334+
298335func (r * MetricStorageReconciler ) reconcileNormal (
299336 ctx context.Context ,
300337 instance * telemetryv1.MetricStorage ,
@@ -684,6 +721,31 @@ func (r *MetricStorageReconciler) prometheusEndpointSecret(
684721 return nil
685722}
686723
724+ func (r * MetricStorageReconciler ) createPodMonitor (
725+ ctx context.Context ,
726+ instance * telemetryv1.MetricStorage ,
727+ log logr.Logger ,
728+ desiredPodMonitor * monv1.PodMonitor ,
729+ ) error {
730+ podMonitor := & monv1.PodMonitor {
731+ ObjectMeta : metav1.ObjectMeta {
732+ Name : desiredPodMonitor .Name ,
733+ Namespace : instance .Namespace ,
734+ },
735+ }
736+ op , err := controllerutil .CreateOrPatch (ctx , r .Client , podMonitor , func () error {
737+ desiredPodMonitor .Spec .DeepCopyInto (& podMonitor .Spec )
738+ podMonitor .Labels = desiredPodMonitor .Labels
739+ err := controllerutil .SetControllerReference (instance , podMonitor , r .Scheme )
740+ return err
741+ })
742+
743+ if err == nil && op != controllerutil .OperationResultNone {
744+ log .Info (fmt .Sprintf ("PodMonitor %s successfully changed - operation: %s" , podMonitor .GetName (), string (op )))
745+ }
746+ return err
747+ }
748+
687749func (r * MetricStorageReconciler ) createServiceScrapeConfig (
688750 ctx context.Context ,
689751 instance * telemetryv1.MetricStorage ,
@@ -760,10 +822,9 @@ func (r *MetricStorageReconciler) createScrapeConfigs(
760822 return ctrl.Result {}, err
761823 }
762824
763- // ScrapeConfigs for RabbitMQ monitoring
825+ // PodMonitors for RabbitMQ monitoring
764826 // NOTE: We're watching Rabbits and reconciling with each of their change
765- // that should keep the targets inside the ScrapeConfig always
766- // up to date.
827+ // that should keep the PodMonitors always up to date.
767828 rabbitList := & rabbitmqv1.RabbitmqClusterList {}
768829 listOpts := []client.ListOption {
769830 client .InNamespace (instance .GetNamespace ()),
@@ -772,22 +833,17 @@ func (r *MetricStorageReconciler) createScrapeConfigs(
772833 if err != nil && ! k8s_errors .IsNotFound (err ) {
773834 return ctrl.Result {}, err
774835 }
775- rabbitTargets := []string {}
776836 for _ , rabbit := range rabbitList .Items {
777- rabbitServerName := fmt .Sprintf ("%s.%s.svc" , rabbit .Name , rabbit .Namespace )
778- rabbitTargets = append (rabbitTargets , net .JoinHostPort (rabbitServerName , strconv .Itoa (metricstorage .RabbitMQPrometheusPort )))
779- }
780- rabbitCfgName := fmt .Sprintf ("%s-rabbitmq" , telemetry .ServiceName )
781- desiredScrapeConfig = metricstorage .ScrapeConfig (
782- instance ,
783- serviceLabels ,
784- rabbitTargets ,
785- instance .Spec .PrometheusTLS .Enabled (),
786- )
787- err = r .createServiceScrapeConfig (ctx , instance , Log , "RabbitMQ" ,
788- rabbitCfgName , desiredScrapeConfig )
789- if err != nil {
790- return ctrl.Result {}, err
837+ desiredPodMonitor := metricstorage .RabbitMQPodMonitor (
838+ instance ,
839+ serviceLabels ,
840+ rabbit .Name ,
841+ instance .Spec .PrometheusTLS .Enabled (),
842+ )
843+ err = r .createPodMonitor (ctx , instance , Log , desiredPodMonitor )
844+ if err != nil {
845+ return ctrl.Result {}, err
846+ }
791847 }
792848
793849 // mysqld exporter
0 commit comments