From 42cd269d2967471e002490b52832a32c8e6e7f5e Mon Sep 17 00:00:00 2001 From: Daniel Allaire Date: Sat, 1 Aug 2026 20:41:49 -0400 Subject: [PATCH] =?UTF-8?q?devis=20switch=20:=20le=20roster=20d'h=C3=B4tes?= =?UTF-8?q?=20se=20limite=20=C3=A0=20la=20fabric=20configur=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Les VLAN et les trunks étaient déjà filtrés par fabric ; le roster de la section 0, non. Un équipement d'une autre fabric — les switches de stockage, le jour où ils seront déclarés — serait apparu en commentaire dans un devis qui ne le concerne pas. Un devis est une configuration qu'on applique, pas un inventaire. Vérifié en déclarant un hôte de la fabric stockage : il reste absent, et la sortie du jour est inchangée. Preuves : 24 OK, 0 échec. Co-Authored-By: Claude Opus 5 --- CHANGELOG.md | 5 +++++ scripts/devis_reseau.py | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b1e7795..7c24253 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,11 @@ taire : Conséquence directe : la question du spanning-tree ne se pose que sur la fabric principale — trois switches — et pas sur le stockage, dont les deux switches forment un domaine séparé. +Le roster d'hôtes de la section 0 est filtré de la même façon : un équipement d'une autre +fabric n'apparaît pas, même en commentaire. Un devis est une configuration qu'on applique, +pas un inventaire. Vérifié en déclarant un hôte de la fabric stockage — il reste absent, et +la sortie du jour est inchangée. + Les `deny` de l'ACL couvrent en revanche **toutes** les fabrics, y compris celles hors périmètre : la règle porte sur l'adresse de destination, pas sur le câblage. Si un chemin s'ouvre un jour vers le stockage, il est déjà fermé. diff --git a/scripts/devis_reseau.py b/scripts/devis_reseau.py index 9b7122a..88f2cd6 100644 --- a/scripts/devis_reseau.py +++ b/scripts/devis_reseau.py @@ -82,8 +82,13 @@ def section_underlay(underlay: dict | None) -> list[str]: out.append(f" description underlay {r['nom']}") out.append(f" ip address {r['passerelle']} {net.netmask}") out.append(" no shutdown") + # Roster : seuls les hotes de CETTE fabric. Un equipement d'une autre fabric + # (switches de stockage, par exemple) n'a rien a faire dans ce devis, meme en + # commentaire — c'est une configuration qu'on applique, pas un inventaire. + noms_reseaux = {r["nom"] for r in reseaux} for h in underlay_mod.hotes(underlay): - out.append(f"! {h.get('nom','?')} = {h.get('ip','?')} ({h.get('reseau','?')})") + if h.get("reseau") in noms_reseaux: + out.append(f"! {h.get('nom','?')} = {h.get('ip','?')} ({h.get('reseau','?')})") # Ce que ce devis NE couvre PAS : les fabrics portees par d'autres switches. for autre in underlay_mod.fabriques(underlay): if autre == fabric: