--- # make valider — RECETTE D'ACCEPTATION : les services FONCTIONNENT (pas juste déployés). # Lecture seule / faible impact. Complète les *-verifier (statiques, sur le plan) # et verifier-hote (niveau hôte) par une vérif FONCTIONNELLE de bout en bout. # # v1 : cibles Prometheus UP + endpoints HTTPS exposés répondent. # À venir : courriel bout-en-bout (envoi→IMAP), restauration de sauvegarde. - name: "Recette — Prometheus : toutes les cibles de supervision UP" hosts: serveur_prometheus gather_facts: false become: false tasks: - name: Interroger l'API des cibles actives ansible.builtin.uri: url: "http://localhost:9090/api/v1/targets?state=active" return_content: true register: prom_targets - name: Analyser up / down vars: cibles: "{{ (prom_targets.content | from_json).data.activeTargets }}" en_panne: "{{ cibles | rejectattr('health', 'equalto', 'up') | list }}" ansible.builtin.set_fact: recette_prom_total: "{{ cibles | length }}" recette_prom_down: "{{ en_panne | map(attribute='labels.instance') | list }}" - name: "✔ Prometheus" ansible.builtin.assert: that: "recette_prom_down | length == 0" success_msg: "OK — {{ recette_prom_total }} cibles, toutes UP." fail_msg: "ÉCHEC — cibles DOWN : {{ recette_prom_down }}" - name: "Recette — Edge : les vhosts HTTPS exposés répondent" hosts: serveur_nginx gather_facts: false become: true tasks: - name: Lister les valeurs de la directive server_name (première colonne exacte) ansible.builtin.shell: cmd: >- nginx -T 2>/dev/null | awk '$1=="server_name"{for(i=2;i<=NF;i++){gsub(/;/,"",$i); print $i}}' | sort -u register: recette_server_names changed_when: false - name: Retenir les vhosts du domaine interne (exclut défauts/placeholders) ansible.builtin.set_fact: recette_fqdns: >- {{ recette_server_names.stdout_lines | select('search', '\.' ~ (domaine_interne | regex_escape) ~ '$') | list }} - name: Interroger chaque vhost exposé en HTTPS (via l'edge) ansible.builtin.uri: url: "https://{{ item }}/" validate_certs: false status_code: [200, 301, 302, 401, 403] follow_redirects: none timeout: 10 loop: "{{ recette_fqdns }}" register: recette_http failed_when: false - name: "✔ Endpoints HTTPS" vars: echecs: "{{ recette_http.results | rejectattr('status', 'in', [200, 301, 302, 401, 403]) | list }}" ansible.builtin.assert: that: "echecs | length == 0" success_msg: "OK — {{ recette_http.results | length }} vhosts répondent : {{ recette_fqdns }}" fail_msg: "ÉCHEC — vhosts KO : {{ echecs | map(attribute='item') | list }} (statuts {{ echecs | map(attribute='status') | list }})"