devis switch : le roster d'hôtes se limite à la fabric configurée

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 <noreply@anthropic.com>
This commit is contained in:
Daniel Allaire 2026-08-01 20:41:49 -04:00
parent 31e5121d68
commit 42cd269d29
2 changed files with 11 additions and 1 deletions

View file

@ -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é.

View file

@ -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: