diff --git a/CHANGELOG.md b/CHANGELOG.md index fb886fe..9d9b8bb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,34 @@ # CHANGELOG — Set-OPS +## 2026-08-04 (suite 4) — le numéro est l'adresse + +Les deux commutateurs deviennent **`bifrost-3`** et **`bifrost-4`**, avec leurs adresses +`10.0.0.3` et `10.0.0.4`. Tout l'ensemble de bordure porte désormais un seul nom, et +**N est son dernier octet** : + +``` +bifrost-1 frontiere 10.0.0.1 · 10.0.4.1 ← passerelle +bifrost-2 frontiere 10.0.0.2 · 10.0.4.2 +bifrost-3 switch 10.0.0.3 ← racine du spanning-tree +bifrost-4 switch 10.0.0.4 +``` + +Plus de table de correspondance : `bifrost-4`, c'est `.4`. + +**D-12 est renversée.** Elle disait « `bifrost` aux frontières, `sleipnir` à la fabric » — +le nom portait le type de la machine. Or c'est le champ **`role`** qui le fait, et lui +seul pilote le devis : aucune logique ne dépendait du nom, seulement des données et un +commentaire. Ce qui survit de D-12, c'est l'idée qu'un nom doit se retenir — elle passe +maintenant par le numéro. + +Le devis a suivi seul, jusqu'aux marqueurs de ports (``). + +Inconvénient assumé : `bifrost-3` ne dit plus « commutateur ». Il faut lire `role`. En +pratique le devis s'en charge — sa partie B s'intitule « SWITCHES D'ACCÈS (L2 pur) : +bifrost-4 ». + +30 preuves OK. + ## 2026-08-04 (suite 3) — le VNet d'une VM se dérive, et un hyperviseur a plusieurs pattes ### Le pont n'était pas seulement non portable : il était faux diff --git a/docs/decisions-architecture.md b/docs/decisions-architecture.md index 8d14af3..2ff0627 100644 --- a/docs/decisions-architecture.md +++ b/docs/decisions-architecture.md @@ -43,7 +43,7 @@ sont les seules vérifiables. | **D-11** | La **sortie générale est déclarée** dans le registre des flux | `block out` est un vrai default-deny ; un besoin oublié ne se manifeste pas par un refus clair | `frontiere-opnsense.md` §8 | P09 | | **D-29** | L'**overlay EVPN plafonne à 1450** ; le transport doit donc dépasser 1500 | choix d'exploitation ; l'encapsulation VXLAN coûte 50 octets | `sdn-evpn.md` §5 | P23 (MTU du transport) | | **D-30** | L'**ICMP « fragmentation nécessaire » est déclaré**, dans les deux sens | à 1450, tout ce qui traverse la frontière dépend de la découverte de MTU de chemin ; une bordure en default-deny la casse en silence | `roles/serveur_debian/meta/flux.yml` | P09 | -| **D-12** | Nommage : **`bifrost`** aux frontières, **`sleipnir`** à la fabric | Bifröst est le pont vers l'extérieur ; Sleipnir traverse les mondes sans en sortir | `frontiere-opnsense.md` §6 | — | +| **D-60** | Nommage : tout l'ensemble de bordure est **`bifrost-N`**, et **N est son dernier octet** | on retient un chiffre au lieu d'une table ; le nom ne dit plus le type de la machine, c'est le champ `role` qui le fait — et lui seul pilote le devis | `underlay.yml` | — | ## 2. Qui possède quoi @@ -113,6 +113,7 @@ qui semblent inutiles. | L'`underlay.yml` vit à la racine du moteur, gitignoré | 2026-07-24 → 08-02 | `0eae97c` | consommé par deux générateurs, validé par une preuve, versionné nulle part | `SETOPS_UNDERLAY` permet toujours de le pointer ailleurs | | **D-05** — un seul commutateur route, les autres en L2 pur | 2026-07-07 → 08-04 | 2026-08-04 | deux décisions séparées (EVPN, puis fusion du lien de sortie) ont vidé le rôle sans qu'on regarde leur effet cumulé : les trois SVI n'avaient plus aucun consommateur | le moteur sait toujours émettre des SVI — le modèle public s'en sert | | **D-03** — le `/29` de transit, SVI en `.6`, `.3` réservée CARP | 2026-07-24 → 08-04 | 2026-08-04 | élargi en `/24` pour y loger les nœuds de sortie ; l'exemption d'invariant sous le `/24` tombe alors, et le `.1` revient à la passerelle | le plan `.1` passerelle / `.2 .3` pare-feux survit, décalé d'un cran | +| **D-12** — `bifrost` aux frontières, `sleipnir` à la fabric | 2026-07-24 → 08-04 | 2026-08-04 | le nom portait le type de la machine, ce que le champ `role` fait déjà et mieux ; et `sleipnir` ne plaisait pas | l'idée qu'un nom doit se retenir survit — mais elle passe par le **numéro**, aligné sur l'adresse | > **Ce que ces renversements ont en commun.** Aucun ne vient d'un changement d'avis : les trois > viennent d'un fait découvert **après** la décision — une commande absente de l'aide du diff --git a/docs/frontiere-opnsense.md b/docs/frontiere-opnsense.md index 3f4bba9..95381f1 100644 --- a/docs/frontiere-opnsense.md +++ b/docs/frontiere-opnsense.md @@ -128,7 +128,7 @@ ne passe pas, et rien ne l'explique. Le devis le signale dès qu'une source RFC1 le WAN — c'est un réglage d'interface, donc invisible dans les règles elles-mêmes. **Invariant du dernier octet.** Un point de routage porte **le même dernier octet sur tous -les sous-réseaux où il participe** — on retient une adresse, pas treize. `sleipnir-01` est +les sous-réseaux où il participe** — on retient une adresse, pas treize. `le commutateur` est donc `.1` partout : `10.0.0.1`, `10.27.16.1`, `10.27.21.1`… Le chiffre n'est pas codé en dur, il vient de `reservations.passerelle` dans la nomenclature, et `make underlay` (**preuve P23**) refuse une passerelle qui s'en écarte. @@ -166,7 +166,7 @@ sur ce lien : - nom: transit-frontiere vlan: 40 sous_reseau: 10.0.4.0/29 - passerelle: 10.0.4.6 # SVI du switch L3 (sleipnir-01) + passerelle: 10.0.4.6 # SVI du switch L3 (le commutateur) passerelle_sortie: 10.0.4.1 # bifrost-1 = sortie par défaut de la flotte ``` @@ -178,14 +178,14 @@ sur ce lien : | `10.0.4.2` | `bifrost-2` — seconde frontière | | `10.0.4.3` | libre, réservée à une IP virtuelle CARP si les deux passent en HA | | `10.0.4.4-.5` | libres | -| `10.0.4.6` | SVI du switch routeur (`sleipnir-01`) | +| `10.0.4.6` | SVI du switch routeur (`le commutateur`) | Le jour où les deux OPNsense passent en haute disponibilité, `passerelle_sortie` devra pointer sur l'**IP virtuelle CARP** et non sur un boîtier nommé — c'est le seul changement que la bascule exigera, et il se fait à un endroit. **Nommage.** `bifrost-1` et `bifrost-2` désignent les deux frontières — Bifröst est le pont -vers l'extérieur. La fabric interne porte un autre nom, `sleipnir-01…03` : le cheval qui +vers l'extérieur. La fabric interne porte un autre nom, `le commutateur…03` : le cheval qui traverse les mondes, pas le pont qui en sort. Les deux boîtiers sont déclarés comme hôtes du lien de transit ; ils sont **hors flotte Ansible**, la déclaration ne sert qu'à documenter le lien et à réserver les noms. Le devis switch ne leur adresse aucune ligne — sa partie B ne diff --git a/docs/hebergeur-exploitation.md b/docs/hebergeur-exploitation.md index 812861d..0388018 100644 --- a/docs/hebergeur-exploitation.md +++ b/docs/hebergeur-exploitation.md @@ -40,7 +40,7 @@ Ansible**, et rien ne sauvegarde leurs configurations. | Supervision des hyperviseurs, commutateurs, frontière | personne | | Journaux de ces équipements | personne | | Sauvegarde de leurs configs (`running-config`, `config.xml`, `/etc/pve`) | personne | -| Résolution des noms d'underlay (`asgard`, `sleipnir-01`, `bifrost-1`) | personne | +| Résolution des noms d'underlay (`asgard`, `bifrost-3`, `bifrost-1`) | personne | | Certificats pour leurs interfaces web | personne | Ce n'est pas un oubli de conception : ces besoins tombaient entre les chaises. Ils ne sont diff --git a/scripts/devis_reseau.py b/scripts/devis_reseau.py index 3a33671..de7772a 100644 --- a/scripts/devis_reseau.py +++ b/scripts/devis_reseau.py @@ -691,7 +691,7 @@ def generer(tenants: list[tuple[str, str, dict]], dialecte: str | None = None) - vlans_underlay = [str(r["vlan"]) for r in vlans_du_role(underlay, "hyperviseur")] # Les liens INTER-SWITCH portent tout l'underlay de la fabric, pas seulement ce - # dont les hyperviseurs ont besoin : sans le VLAN de management, sleipnir-02 et -03 + # dont les hyperviseurs ont besoin : sans le VLAN de management, les commutateurs d'acces # perdraient leur propre adresse de gestion. Un port terminal porte ce que son hote # declare ; un lien de fabric porte ce qui doit traverser. vlans_fabric = [str(r["vlan"])