feat/netbox-sync #5

Merged
thystips merged 4 commits from feat/netbox-sync into main 2026-08-01 22:56:23 +02:00
Owner
No description provided.
NetBox est le dossier de ce qui existe, et il n'était d'accord avec rien : deux
VMs DN42 de l'ancienne infrastructure, aucune adresse du /27 ni du /48, et l'IPv4
d'un nœud actuel appartenant encore à une VM web en décommissionnement.

Les objets sont désormais dérivés de topology/, comme registry/ l'est déjà, et
`--check` dit si NetBox a divergé. Le mesh, les noms d'interfaces et la liste des
peers ne sont pas recalculés : ils viennent de `ansible-inventory --list`, qui les
dérive déjà et refuse de se construire sur une topologie incohérente.

Poussé : la VRF, l'ASN, 11 préfixes, 5 VLANs, les 4 nœuds avec leurs 29 interfaces
et 60 adresses, ghost et son interco, 13 tunnels WireGuard et 23 sessions BGP.

Ce script ne supprime jamais. Retirer un objet est une décision sur le dossier de
quelqu'un d'autre — le changelog, le nommage tenu par Nyx — et se prend à la main.

Deux limites, documentées plutôt que contournées : netbox-routing n'accepte que des
devices pour un routeur BGP, donc l'AS n'a qu'un routeur et le nœud se lit sur la
source de chaque session ; et une adresse anycast n'a pas de dns_name, NetBox
imposant un nom unique par adresse active, ce que l'anycast contredit.

mapping.yml n'est pas commité : topology/ nomme les sites par une étiquette courte,
NetBox par leur nom réel, et réunir les deux moitiés annulerait ce que l'étiquette
protège.
netbox-routing ne convient pas à une infrastructure virtualisée : un routeur BGP
n'y accepte que des devices, et son unicité porte sur (type, id, ASN) — nos quatre
nœuds seraient la même ligne. On y perdait le « quel nœud porte quel peering »,
réduit à une convention de nommage.

netbox-bgp identifie une session par (VM, adresse locale, AS local, adresse
distante, AS distant), soit exactement ce qui l'identifie sur le routeur. Les 23
sessions sont donc rattachées à leur nœud, et s'appuient sur les ipam.ASN et
ipam.IPAddress du cœur : rien n'est dupliqué pour le BGP.

Les deux plugins ne peuvent pas cohabiter — chacun déclare un CommunityType en
GraphQL et NetBox refuse alors de démarrer, derrière une boucle « Waiting on DB »
qui fait croire à tout autre chose. netbox_routing est désactivé côté hôte.

Le BFD, absent du plugin, part dans extra_attributes avec les communities DN42 du
lien et le port WireGuard : que tel peer réponde BFD est un fait mesuré, pas une
préférence qu'on recalcule.
Deux valeurs manquaient à `topology/` et le sync NetBox les contournait, chacune à
sa façon — la première en rouvrant `nodes.yml` derrière l'inventaire, la seconde en
codant un nom d'interface en dur. Les deux contournements sont supprimés.

`nodes.<n>.mgmt` existait mais n'était exposé à personne : le plugin d'inventaire
portait `mgmt_addressing` sans jamais porter l'adresse. Il expose `dn42_mgmt`.

`site_router.interco` (vlan + interface) est nouveau. Le VLAN 2042 et le nom
`vlan-interco42` ne vivaient que dans la prose de site-router.md, donc tout outil
qui en avait besoin les recopiait à la main — et un nom d'interface recopié est un
renommage away de ne plus désigner personne. Le plugin refuse désormais un
`interco` incomplet, garde vérifiée en la faisant échouer.

Effet visible dans NetBox : le VLAN d'interconnexion existe, et les trois interfaces
du segment (les deux `lan-svc` et le `vlan-interco42` de ghost) y sont rattachées.
`topology/` a maintenant cinq consommateurs et NetBox est le seul dont la mise à
jour ne se voit nulle part : `--check` n'est pas dans lint.sh — il demande le réseau
et un token — donc rien ne rattrape l'oubli. Un IPAM en retard répond aux questions
avec assurance et se trompe.

Dit aussi dans l'autre sens : ce qui porte le tag infra-dn42 ne se retouche pas à la
main là-bas, la synchronisation suivante l'écraserait sans prévenir.
thystips deleted branch feat/netbox-sync 2026-08-01 22:56:23 +02:00
thystips referenced this pull request from a commit 2026-08-01 22:56:24 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ThysTips_dn42/infra-dn42!5
No description provided.