Modèle PSOT — Source de vérité stateless¶
PSOT = Primary Source of Truth. Les fichiers domains/*.yml sont
la source de vérité primaire. Incus est la source de vérité secondaire
(état réel).
Principe¶
graph LR
YAML["domains/*.yml<br/>(état désiré)"] -->|anklume apply| R[Réconciliateur]
Incus["Incus<br/>(état réel)"] -->|interrogation| R
R -->|diff| Plan[Plan d'actions]
Plan -->|exécution| Incus
style YAML fill:#6366f1,color:#fff
style R fill:#3b82f6,color:#fff
style Incus fill:#10b981,color:#fff
- Pas de state file — le système est stateless par design
- Idempotent — relancer
applyproduit le même résultat - Git-friendly — les fichiers domaine sont commités dans git
Pipeline anklume apply¶
flowchart TD
A[Lire anklume.yml + domains/*.yml] --> B[Vérifier schema_version]
B --> C[Valider noms, IPs, contraintes]
C --> D[Calculer adressage automatique]
D --> E[Interroger Incus — état réel]
E --> F[Réconcilier — calculer le diff]
F --> G{--dry-run ?}
G -->|oui| H[Afficher le plan]
G -->|non| I[Snapshots pré-apply]
I --> J[Exécuter le plan]
J --> K[Snapshots post-apply]
K --> L{--no-provision ?}
L -->|non| M[Provisioning Ansible]
L -->|oui| N[Rapport final]
M --> N
style A fill:#6366f1,color:#fff
style F fill:#3b82f6,color:#fff
style J fill:#10b981,color:#fff
style M fill:#8b5cf6,color:#fff
Réconciliation¶
Le réconciliateur compare l'état désiré avec l'état réel et produit un plan d'actions ordonnées :
- Créer les projets Incus manquants
- Créer les réseaux (bridges) manquants
- Créer les instances manquantes
- Démarrer les instances arrêtées
Actions¶
| Verbe | Ressource | Quand |
|---|---|---|
create |
projet, réseau, instance | Manquant dans Incus |
start |
instance | Existe mais arrêtée |
skip |
tout | Déjà dans l'état voulu |
Best-effort¶
En cas d'échec partiel (domaine 3/5 échoue) :
- Les domaines indépendants continuent
- Le rapport final indique les succès et échecs
- Un
applysuivant reprend depuis l'état réel (idempotent)
Dry-run¶
Affiche le plan sans l'exécuter :