From 6de44736ff426ce0e04cbafb4400f751dbe068b1 Mon Sep 17 00:00:00 2001 From: Daniel Allaire Date: Mon, 3 Aug 2026 11:47:13 -0400 Subject: [PATCH] =?UTF-8?q?pare-feu=20Proxmox=20:=20l'affectation=20variai?= =?UTF-8?q?t=20selon=20l'=C3=A9tat=20du=20tenant?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Elle partait de `hotes_actifs` avec un repli sur « tous » quand il n'y en avait aucun. Technolibre listait donc ses 14 VM (zéro actif, repli déclenché) et Chezlepro une seule (un actif) — un opérateur aurait lu qu'une seule VM avait besoin de règles. Les IPSets et les groupes incluaient déjà les hôtes planifiés, délibérément : un pare-feu se prépare avant que la VM existe. L'affectation suit la même règle. 14 de chaque côté, toutes avec leur VMID. Preuves : 25 OK, 0 échec. Co-Authored-By: Claude Opus 5 --- CHANGELOG.md | 10 ++++++++++ scripts/devis_proxmox_fw.py | 6 ++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ec9baeb..446dc64 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,16 @@ Le préfixe porte maintenant l'**index** (`t17-`) plutôt que l'étiquette (`che rend la troncature bien plus rare, et une garde **échoue** sur toute collision plutôt que d'émettre un devis pareil. Exercée. +### Corrigé — l'affectation variait selon l'état du tenant +Elle partait de `hotes_actifs`, avec un repli sur « tous » quand il n'y en avait aucun. Deux +tenants donnaient donc deux comportements : Technolibre listait ses 14 VM (zéro actif → repli), +Chezlepro **une seule** (un actif). Un opérateur aurait lu qu'une seule VM avait besoin de +règles. + +Les IPSets et les groupes incluaient déjà les hôtes **planifiés**, délibérément — un pare-feu +se prépare avant que la VM existe. L'affectation suit désormais la même règle : 14 de chaque +côté, toutes avec leur VMID. + ### Conséquence à retenir Puisque **tout** ce qui entre dans un tenant passe par la frontière, le contrôleur Ansible aussi. **L'OPNsense devient un prérequis de déploiement**, pas une étape parmi d'autres : diff --git a/scripts/devis_proxmox_fw.py b/scripts/devis_proxmox_fw.py index 74b4cfb..6684877 100644 --- a/scripts/devis_proxmox_fw.py +++ b/scripts/devis_proxmox_fw.py @@ -151,8 +151,10 @@ def construire(tenants: list[tuple[str, str, dict]]) -> dict: # Affectation : quelle VM recoit quels groupes. affect: list[dict] = [] par_nom_groupe = {g["role"]: g["nom"] for g in groupes} - for hote in sorted(_hotes_du_groupe(data, "hotes_actifs") - or [h for h in ips]): + # TOUS les hotes du plan, actifs comme planifies — meme regle que les IPSets. + # Se limiter aux actifs donnait un devis different selon l'etat du tenant : un + # operateur aurait lu qu'une seule VM avait besoin de regles. + for hote in sorted(ips): vmid = None for g, membres in _enfants(data).items(): h = (membres.get("hosts") or {}).get(hote) or {}