La revision a commence par un balayage par motifs — chemins morts, cibles make absentes, comptes derives. Il a trouve une trentaine d ecarts et rate presque tout le reste : un motif ne voit que ce qui s exprime en motif. make hote-planifier en est l exemple. La cible EXISTE, donc le controle passait au vert. C est une cible depreciee qui refuse et sort en 2, recommandee par AGENTS.md, et qui contredit la REGLE D OR du meme fichier trois ecrans plus haut. Il fallait lire pour la voir. 74 documents lus un par un. 66 corriges, 8 exacts. CE QUI ETAIT FRANCHEMENT FAUX AGENTS.md, la source d autorite, annoncait la flotte pas encore executee contre des VM reelles. Elle a ete rasee et remontee depuis zero trois fois. ecosysteme-chezlepro.md, le document montre a un client, portait la meme phrase : il se sous-vendait gravement. courriel-conception.md s ouvrait sur aucun role n est encore ecrit, au-dessus de son propre paragraphe 1 qui les nomme. autorisation.md se terminait sur rien n est construit alors qu il rapporte des mesures datees du role en fonctionnement. hebergeur-exploitation.md disait rien n est fait d un depot qui existe. filiation-emancipation.md se contredisait a deux ecrans de distance. DES MODELES DECRITS D APRES UN MONDE ANTERIEUR Le resolveur : cinq documents decrivaient un Unbound par VM en opt-in, trois le donnaient en exemple d integration FACULTATIVE — il est universel depuis le 2026-08-24. L adressage de nomenclature-vm.md : reseau unique, VLAN 11-15, VMID a cinq chiffres. Le nommage SDN de sdn-evpn.md contre le code : c est le wiki qui avait raison. CE QUI CASSE AU PREMIER ESSAI Le nom du gabarit dore etait faux a quatre endroits, dont la procedure qui le FABRIQUE et le critere R2 de l epreuve d operateur independant. preparer-un-site-hebergeur.md avertissait qu une VM faite a la main serait detruite : raser derive du plan, il ne la detruira jamais — le risque est l inverse. Un mot de passe d essai en clair dans un depot public. DEUX PREUVES ETENDUES, ET UNE QUI SE TROMPAIT ELLE-MEME P57 couvre les groupes : elle a signale aussitot 29 groupes annonces au-dessus d un tableau qui en cite 40. P29 confronte le tableau de authentification.md aux declarations reelles : 12 annonces, 21 reels. Et P57 imposait un chiffre faux — 56 preuves alors que le depot en porte 57, la conditionnelle vivant hors de tout comptage. Un garde-fou qui fait respecter une erreur ajoute l assurance a l erreur. CE QUI RESTE, ET QU AUCUNE PREUVE NE TIENT Deux comptes trouves a la main. Et une lacune reelle : rien ne garde les meta/acces.yml — ni qu un service web-sso en porte un, ni que le groupe qu il nomme existe. P29 tient les positions d authentification, personne ne tient les habilitations. make prouver : CONFORME, 56 OK, 0 echec, 1 saute. 0 lien mort. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
5.4 KiB
Intégrations des VM
Pour qui : le mainteneur qui ajoute une intégration à toutes les VM.
Politique : le défaut est « oui », l'exception se justifie
Une intégration est de l'un des deux genres, et ils ne se déclarent pas au même endroit.
Universelle — métriques, journaux, PKI, résolution et source d'artefacts
(les cinq qui portent universelle: true). Il n'y a aucun choix de cible : un seul
Prometheus, un seul Loki, une seule AC, un seul résolveur, un seul cache. Elle est déclarée
une fois, par le rôle, dans roles/<role>/meta/integration.yml, et tout hôte la
reçoit :
integration:
universelle: true
raison: "Tout hôte est mesuré. Une machine hors supervision tombe sans que personne ne l'apprenne."
sauf_role: serveur_step_ca # facultatif — voir « exemptions »
Facultative — client_backup et client_smtp. Là il y a un vrai choix, et il se
déclare par serveur, dans plan/serveurs.yml : integrations.
client_resolveura changé de camp le 2026-08-24, et ce document l'annonçait encore facultatif. Il posait alors un Unbound sur chaque VM — un vrai coût, donc un vrai choix. Il n'installe plus rien : il écrit/etc/resolv.confpour désigner le résolveur du tenant. Son intégration est devenue universelle, sans aucune exemption — pas même l'hôte qui porte le résolveur : il se sert lui-même, et l'exempter reviendrait à dire que le résolveur ne se fait pas confiance. Une machine restée sur la résolution d'amorçage envoie chacune de ses questions dehors, sans que rien ne le signale.
Pourquoi cette inversion. Le plan portait 57 lignes d'intégration écrites à la main. 28 d'entre elles disaient oui à quelque chose de vrai pour tous les hôtes — elles n'existaient donc que pour être oubliées, et quatre l'avaient été : deux serveurs n'étaient ni supervisés, ni journalisés, ni certifiés. Personne ne l'aurait su, puisqu'une machine non supervisée ne proteste pas. Depuis, oublier est impossible : il faut exempter, et dire pourquoi.
Le plan refuse désormais une recopie (valider_serveurs). Deux sources finiraient par
diverger, et surtout : l'absence de client_metrique en face d'un serveur se lirait
« non supervisé » alors qu'il l'est.
Les exemptions se dérivent du service rendu
Une exemption ne nomme jamais un hôte. Elle nomme le rôle serveur dont la présence la
justifie : sauf_role: serveur_step_ca retire client_pki à l'hôte qui est l'AC — elle ne
s'enrôle pas auprès d'elle-même. Déplacez step-ca sur une autre machine et l'exemption suit,
sans qu'on y touche.
P26 garde les deux côtés : aucun hôte sans intégration universelle, aucune recopie dans le plan.
Ce que le panneau montre
Dans la fiche d'un serveur, les universelles apparaissent en ✓ non décochables, les exemptions barrées, avec leur raison en infobulle. Sans cet affichage, un plan devenu silencieux se lirait comme une flotte non supervisée — l'inverse exact de la vérité.
La vue Intégrations donne l'autre axe : une matrice serveurs × intégrations. Colonnes
✓ pour la politique, — barré pour les exemptions, cases à cocher pour les facultatives —
éditables sur place, puis Sauvegarder. La ligne couverture affiche n/N par colonne.
Elle ne juge pas : 7/14 sur client_backup peut être exactement juste. Elle rend le
motif visible, ce que quatorze fiches consultées une par une ne faisaient pas — c'est
précisément pour ça que le trou de Chezlepro est resté invisible jusqu'à ce qu'un devis de
pare-feu l'énumère.
Séparation
Template Debian 13 Proxmox : socle commun minimal
Cloud-init : identité initiale du clone
Set-OPS + Ansible : configuration réelle du serveur
Le template ne doit pas être modifié pour chaque nouveau serveur. Les intégrations sont appliquées après clonage selon les groupes d'inventaire et les playbooks dédiés.
Domaines prévus
DNS interne : PowerDNS, résolveurs, enregistrements applicatifs
PKI interne : step-ca, ACME, confiance CA locale
Identité : LDAP, SSSD, Keycloak/OIDC selon le besoin
Supervision : Icinga2 agent ou checks distants
Métriques : Prometheus node_exporter
Visualisation : Grafana côté plateforme centrale
Principes Ansible
- Un rôle d'intégration doit être inoffensif hors de son groupe : c'est l'appartenance au groupe qui l'active, jamais un drapeau recopié. (Ce principe disait autrefois « désactivé par défaut », à l'époque où les serveurs centraux n'existaient pas ; depuis, trois intégrations sont universelles — voir §Politique.)
- Chaque variable de rôle doit utiliser le préfixe du rôle.
- Les secrets ne doivent jamais être stockés en clair dans le dépôt.
- Un rôle ne doit pas échouer si son intégration est désactivée.
- Les playbooks applicatifs doivent être appliqués sur les clones, pas sur le template.
- Les opérations pouvant couper l'accès réseau ou SSH doivent exiger une confirmation explicite.
Ordre logique de construction
- DNS interne.
- PKI interne et confiance CA.
- Identité système et applicative.
- Supervision et métriques.
- Visualisation et alerting.
Cet ordre reste indicatif. Les rôles doivent rester découplés pour permettre une adoption progressive.