nommage : bifrost-N, où N est le dernier octet (D-60 ; D-12 renversée)
Les deux commutateurs deviennent bifrost-3 et bifrost-4, avec 10.0.0.3 et 10.0.0.4. Tout l'ensemble de bordure porte un seul nom, et son numéro est son adresse : bifrost-1 = .1, bifrost-4 = .4. Plus de table de correspondance. D-12 disait « bifrost aux frontières, sleipnir à la fabric » — le nom portait le type de la machine. 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. Le devis a suivi seul, jusqu'aux marqueurs de ports. Inconvénient assumé : bifrost-3 ne dit plus « commutateur », il faut lire `role`. La partie B du devis s'en charge à l'affichage. 30 preuves OK. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
89f33c5b43
commit
e6c259be4d
5 changed files with 37 additions and 7 deletions
29
CHANGELOG.md
29
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 (`<PORT-VERS-BIFROST-4>`).
|
||||
|
||||
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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"])
|
||||
|
|
|
|||
Loading…
Reference in a new issue