Aller au contenu

Plan — Modèle déclaratif unifié des topologies

État : Actif (depuis 2026-06-12) · Fonde : ADR 0056 (Accepted — modèle déclaratif unifié, un fichier topology.yaml décrit, Ansible converge) · Issues : #250 (palier P7, ha-3cp).

Cadre (ADR 0057) : ce plan met en œuvre une décision, il ne la remplace pas. Les pourquoi vivent dans l’ADR 0056 ; ce plan porte le déroulé évolutif et son suivi.

La vision de l’ADR 0056 §8 (13 exigences : décrire / éprouver / mesurer / optimiser / consigner) n’est pas le socle. Réalisation incrémentale, chaque palier prouvé par un run (ADR 0034/0052).

PalierContenuExigences 0056 §8
P0Modéliser sans générer : topologies/socle.example.yaml des topologies décrites — révèle les deltas (VIP/LB manquant…)1-5 (schéma)
P1Générateur read-only Lima → inventaire + NODES + profils, byte-identique (ADR 0056 §3)1-3
P2Profil + défauts/variantes + graphe de dépendances3, 13
P3Façade CLI/CI (generate/validate/status/diff)
P4Épreuves filtrées + historique lu + consignation (objectif + fail)6, 10-12
P5Boucle « que faire ensuite » CLI (diff → suggère → lance via ansible-runner) ; TUI différé (ADR 0063)(boucle)
P6Métriques exposées + smoke-test réversibilité7-8
P7Étendre aux topologies cibles (multi-node-4, ha-3cp + VIP/LB + kube-vip — #250)4
P8Optimiseur (propose des ajustements depuis les métriques)9
P9Démantèlement de run-phases.sh : moteur de chemin Python (voir plan-refonte-nestor-python.md, ADR 0096/0097)(boucle)

P0-P3 = socle (générateur de config) ; P4-P6 = plateforme d’épreuve/mesure ; P7 débloque la HA (#250) ; P8 (optimiseur) est le plus lointain. Aucun palier ne casse le précédent (invariant byte-identique, ADR 0056 §3).

État global : voir l’en-tête ## État (Actif). Démarré le 2026-06-13 : P0 à P6 faits — générateur byte-identique des deux inventaires (P1) + dérivation de profil pure et à parité avec le bash (P2) + façade CLI/CI scripts/topology.py (generate/validate/status/diff, P3) + filtrage des épreuves par la topologie et lecture de l’historique/fraîcheur (epreuves/runs, P4) + boucle next « que faire ensuite » qui suggère la prochaine phase et la lance via ansible-runner sur --apply (ADR 0063, P5) + exposition des métriques consignées (metrics) et smoke-test de réversibilité (smoke, P6), prouvés par test. La commande diff est câblée en CI (pnpm lint:topology-drift) : la moindre dérive de l’inventaire prod régénéré casse le lint.

PalierÉtatIssue(s)Run de preuve
P0✅ faittopologies/socle.example.yaml + paquet nestor/
P1✅ faitinventaires prod + banc byte-identiques (12 tests, vs hosts.example.yaml et write_inventory)
P2✅ faitdérivation de profil (inclusion cumulative ADR 0039 + faisceau -e à parité bash, nestor/profile.py, 12 tests)
P3✅ faitfaçade CLI/CI scripts/topology.py (generate/validate/status/diff, argparse stdlib) ; diff câblé en CI (lint:topology-drift), 16 tests
P4✅ faitépreuves filtrées + historique lu (nestor/epreuves.py miroir de la matrice + history.py à parité fraîcheur bash ; commandes epreuves/runs ; 40 tests)
P5✅ faitboucle next (suggère la prochaine phase ; --apply lance via ansible-runner, ADR 0063) : plan.py (séquence fidèle à run-phases.sh) + runner.py isolé ; 34 tests
P6✅ faitmétriques + smoke réversibilité : metrics.py (expose durées/cpu/ram consignés, ne mesure rien de neuf) + smoke.py (créer→vérifier→détruire→vérifier, couche kubernetes isolée/stubable) ; commandes metrics/smoke ; 27 tests
P7⬜ à faire#250 (banc Lima HA ha-3cp)
P8⬜ à faire
P9⬜ à faireDémantèlement run-phases.sh : moteur de chemin Python (plan-refonte-nestor-python.md, ADR 0096/0097)

Issues créées depuis ce plan : (aucune encore — à lier au fil de l’implémentation).

Runs de preuve : à consigner dans bench/lima/RESULTS.md ; un run fail est consigné au même titre qu’un succès (ADR 0056 §8, ADR 0052).