From e21dbc77815ca9e92267ff44ff03c04fa24e89f0 Mon Sep 17 00:00:00 2001
From: Yohann D'ANELLO <ynerant@crans.org>
Date: Thu, 4 Aug 2022 11:30:32 +0200
Subject: [PATCH] [prometheus] Replace targets deployment by a service

Signed-off-by: Yohann D'ANELLO <ynerant@crans.org>
---
 group_vars/prometheus.yml        | 14 ++++++++++++++
 host_vars/fyre.adm.crans.org.yml | 30 ++++++------------------------
 plays/monitoring.yml             |  2 ++
 roles/prometheus/tasks/main.yml  |  1 +
 4 files changed, 23 insertions(+), 24 deletions(-)

diff --git a/group_vars/prometheus.yml b/group_vars/prometheus.yml
index 3e9381c7..4979349e 100644
--- a/group_vars/prometheus.yml
+++ b/group_vars/prometheus.yml
@@ -1,6 +1,20 @@
 ---
 glob_prometheus: {}
 
+glob_service_prometheus_target:
+  git:
+    remote: https://gitlab.adm.crans.org/nounous/prometheus-target.git
+    version: main
+  name: prometheus-target
+  install_dir: /var/local/services/prometheus-target
+  generated: false
+  cron:
+    frequency: "*/10 * * * *"
+    options: ""
+  config:
+    ldap:
+      server: "ldaps://{{ query('ldap', 'ip', 'tealc', 'adm') | ansible.utils.ipv4 | first }}"
+
 glob_ninjabot:
   config:
     nick: fyre
diff --git a/host_vars/fyre.adm.crans.org.yml b/host_vars/fyre.adm.crans.org.yml
index f1c2e642..63f5d00e 100644
--- a/host_vars/fyre.adm.crans.org.yml
+++ b/host_vars/fyre.adm.crans.org.yml
@@ -5,8 +5,6 @@ interfaces:
 
 loc_prometheus:
   node:
-    file: targets_node.json
-    targets: "{{ groups['server'] | select('match', '^.*\\.adm\\.crans\\.org$')  | list | sort }}"
     config:
       - job_name: servers
         file_sd_configs:
@@ -22,8 +20,6 @@ loc_prometheus:
             replacement: '$1:9100'
 
   nginx:
-    file: targets_nginx.json
-    targets: "{{ groups['nginx'] | select('match', '^.*\\.adm\\.crans\\.org$')  | list | sort }}"
     config:
       - job_name: nginx
         file_sd_configs:
@@ -77,11 +73,6 @@ loc_prometheus:
             replacement: 127.0.0.1:9115
 
   blackbox_icmp:
-    file: targets_icmp.json
-    targets:
-      - karst.adm.crans.org
-      - horst.adm.crans.org
-      - rodney.adm.crans.org
     config:
       - job_name: blackbox_icmp
         file_sd_configs:
@@ -99,8 +90,6 @@ loc_prometheus:
             replacement: 127.0.0.1:9115
 
   bird:
-    file: targets_bird.json
-    targets: "{{ groups['bird'] | select('match', '^.*\\.adm\\.crans\\.org$')  | list | sort }}"
     config:
       - job_name: bird
         file_sd_configs:
@@ -116,23 +105,21 @@ loc_prometheus:
             replacement: '$1:9324'
 
   mtail:
-    file: targets_mtail.json
-    targets:
-      - tealc.adm.crans.org
     config:
       - job_name: mtail
-        static_configs:
-          - targets: ["tealc.adm.crans.org"]
+        file_sd_configs:
+          - files:
+              - '/etc/prometheus/targets_mtail.json'
         relabel_configs:
           - source_labels: [__address__]
+            target_label: __param_target
+          - source_labels: [__param_target]
             target_label: instance
-          - source_labels: [instance]
+          - source_labels: [__param_target]
             target_label: __address__
             replacement: '$1:3903'
 
   ilo_snmp:
-    file: targets_ilo_snmp.json
-    targets: "{{ groups['ilo_snmp'] | select('match', '^.*\\.adm\\.crans\\.org$')  | list | sort }}"
     config:
       - job_name: ilo_snmp
         file_sd_configs:
@@ -151,9 +138,6 @@ loc_prometheus:
             target_label: __address__
 
   ups_snmp:
-    file: targets_ups_snmp.json
-    targets:
-      - excalibur.adm.crans.org
     config:
       - job_name: ups_snmp
         file_sd_configs:
@@ -174,8 +158,6 @@ loc_prometheus:
             target_label: __address__
 
   printer_snmp:
-    file: targets_printer.json
-    targets: ["printer.lp.crans.org"]
     config:
       - job_name: printer_snmp
         static_configs:
diff --git a/plays/monitoring.yml b/plays/monitoring.yml
index a09218ad..b2407344 100755
--- a/plays/monitoring.yml
+++ b/plays/monitoring.yml
@@ -4,8 +4,10 @@
 - hosts: prometheus
   vars:
     prometheus: "{{ glob_prometheus | default({}) | combine(loc_prometheus | default({})) }}"
+    service: "{{ glob_service_prometheus_target | default({}) | combine(loc_service_prometheus_target | default({})) }}"
   roles:
     - prometheus
+    - service
 
 - hosts: prometheus_alertmanager
   vars:
diff --git a/roles/prometheus/tasks/main.yml b/roles/prometheus/tasks/main.yml
index 3e62cf9f..0208135c 100644
--- a/roles/prometheus/tasks/main.yml
+++ b/roles/prometheus/tasks/main.yml
@@ -28,6 +28,7 @@
     dest: /etc/prometheus/{{ item.value.file }}
     mode: 0644
   loop: "{{ prometheus | dict2items }}"
+  when: "item.value.file is defined"
 
 - name: Activate prometheus service
   systemd: