From 85932d948c6fc272efa36bf9fe73a9cce425aa62 Mon Sep 17 00:00:00 2001 From: Daniel Allaire Date: Thu, 1 Oct 2026 10:59:22 -0400 Subject: [PATCH] connectivite : la liste hors de /etc/setops, le chemin du site, la simulation Au site, l'inventaire est dynamique : le chemin de la liste pointait hors du depot (meme surcharge que le ruleset). /etc/setops a deja ses gardiens : la liste, qui n'a rien de secret, va dans /usr/local/lib/setops. L'activation du minuteur ne s'execute plus en --check. Co-Authored-By: Claude Opus 5.5 --- roles/client_sante/tasks/main.yml | 2 ++ roles/nftables_baseline/tasks/main.yml | 34 +++++++++---------- .../templates/sonde-connectivite.sh.j2 | 2 +- scripts/site_inventaire.py | 6 ++++ 4 files changed, 26 insertions(+), 18 deletions(-) diff --git a/roles/client_sante/tasks/main.yml b/roles/client_sante/tasks/main.yml index 4b315a7..f539bd6 100644 --- a/roles/client_sante/tasks/main.yml +++ b/roles/client_sante/tasks/main.yml @@ -251,6 +251,8 @@ enabled: true state: started daemon_reload: true + # En simulation, l'unite n'a pas ete posee : l'activer echouerait sans rien dire du reel. + when: not ansible_check_mode # PREMIER RAPPORT IMMEDIAT, et ce n'est pas une commodite : sans lui, le service # reste « en attente » jusqu'au premier declenchement, et un deploiement qui vient diff --git a/roles/nftables_baseline/tasks/main.yml b/roles/nftables_baseline/tasks/main.yml index f0bb1b4..9f46589 100644 --- a/roles/nftables_baseline/tasks/main.yml +++ b/roles/nftables_baseline/tasks/main.yml @@ -94,23 +94,6 @@ changed_when: false register: nftables_baseline_connectivite_stat -- name: Assurer le repertoire des secrets et listes Set-OPS - ansible.builtin.file: - path: /etc/setops - state: directory - owner: root - group: root - mode: "0700" - -- name: Deposer la liste des flux a tester - ansible.builtin.copy: - src: "{{ nftables_baseline_connectivite_genere }}" - dest: /etc/setops/connectivite.json - owner: root - group: root - mode: "0644" - when: nftables_baseline_connectivite_stat.stat.exists - - name: Assurer le repertoire des sondes a la minute ansible.builtin.file: path: /usr/local/lib/setops/sondes-minute @@ -119,6 +102,23 @@ group: root mode: "0755" +# PAS DANS /etc/setops : cette liste n'a rien de secret, et ce repertoire-la — celui des +# secrets — a deja ses gardiens (0700 chez les locataires, 0755 au site). Un troisieme avis +# sur ses droits le faisait basculer a chaque passage (vu en simulation au site). +- name: Deposer la liste des flux a tester + ansible.builtin.copy: + src: "{{ nftables_baseline_connectivite_genere }}" + dest: /usr/local/lib/setops/connectivite.json + owner: root + group: root + mode: "0644" + when: nftables_baseline_connectivite_stat.stat.exists + +- name: Retirer l'ancien emplacement de la liste (premier deploiement, 2026-09-30) + ansible.builtin.file: + path: /etc/setops/connectivite.json + state: absent + - name: Deposer la sonde « connectivite » ansible.builtin.template: src: sonde-connectivite.sh.j2 diff --git a/roles/nftables_baseline/templates/sonde-connectivite.sh.j2 b/roles/nftables_baseline/templates/sonde-connectivite.sh.j2 index 71c83fb..7c4964a 100644 --- a/roles/nftables_baseline/templates/sonde-connectivite.sh.j2 +++ b/roles/nftables_baseline/templates/sonde-connectivite.sh.j2 @@ -33,7 +33,7 @@ # # Contrat : une ligne, code 0/1/2 (docs/supervision-conception.md). # `CONNECTIVITE_JSON=` impose une autre liste : c'est le controle negatif. -exec python3 - "${CONNECTIVITE_JSON:-/etc/setops/connectivite.json}" <<'PY' +exec python3 - "${CONNECTIVITE_JSON:-/usr/local/lib/setops/connectivite.json}" <<'PY' import concurrent.futures, errno, ipaddress, json, socket, subprocess, sys try: diff --git a/scripts/site_inventaire.py b/scripts/site_inventaire.py index 5dd96ec..0bab6b5 100755 --- a/scripts/site_inventaire.py +++ b/scripts/site_inventaire.py @@ -687,6 +687,12 @@ def inventaire() -> dict: "nftables_baseline_ruleset_genere": str( (U.chemin().resolve().parent / "flux-genere" / f"{nom}.nft") if U.chemin() else ""), + # La liste que la sonde `connectivite` teste, ecrite a cote du ruleset et pour + # la meme raison (2026-09-30) : au site, le defaut pointait hors du depot, et la + # sonde aurait tourne sans liste. + "nftables_baseline_connectivite_genere": str( + (U.chemin().resolve().parent / "flux-genere" / f"{nom}.connectivite.json") + if U.chemin() else ""), # Ce que le marqueur verifiera : la liste ci-dessus les admet-elle vraiment ? "serveur_resolveur_site_supernets_tenants": _supernets_tenants, # Les zones que le serveur DNS public du site doit tirer, et de qui. Vide