--- # LE RUNNER DE SITE — celui qui MATÉRIALISE. # # Le travail d'un runner se divise en trois, et les deux premières portées appartiennent # au TENANT tandis que la troisième appartient à la FABRIC : # # calculer plan -> inventaire aucune voûte portée OPS (serveur_ops) # configurer rôles sur ses machines voûte du TENANT portée OPS (serveur_ops) # matérialiser créer/détruire des VM voûte du SITE portée SITE (ce rôle) # # POURQUOI LA SÉPARATION. Si chaque écosystème portait le pouvoir de matérialiser, la # voûte du SITE se retrouverait en N exemplaires — le secret le plus dangereux du système, # recopié autant de fois qu'il y a de locataires. C'est précisément ce que la séparation # des voûtes (2026-08-22) cherchait à éviter. # # Et l'inverse serait pire : un runner UNIQUE qui ferait tout devrait entrer en SSH chez # tous les tenants, donc traverser le default-deny inter-tenant — et rendrait toute # émancipation impossible, puisqu'un écosystème ne pourrait plus se rebâtir sans son hôte. # # Deux pouvoirs, deux rôles, aucun omnipotent : ce rôle crée des VM vides et n'entre # jamais chez un tenant ; `serveur_ops` habille des machines et ne touche jamais la fabric. # # QUI PEUT LE DÉCLARER : l'écosystème de l'HÉBERGEUR, celui qui exploite la fabric. Un # tenant ordinaire qui le déclarerait s'arrogerait un pouvoir sur ses voisins. serveur_ops_site_utilisateur: "setops" serveur_ops_site_racine: "/opt/setops" # Le dépôt du SITE, tel qu'il atterrit chez le runner. Il doit avoir été cloné par # `serveur_ops` (entrée `role: hebergeur` de `serveur_ops_depots`). serveur_ops_site_depot: "" # --- LA VOÛTE DU SITE -------------------------------------------------------- # # Déposée CHIFFRÉE, jamais en clair. Le mot de passe n'est pas stocké : le Makefile # ajoute `--ask-vault-pass` quand aucun fichier de mot de passe n'est défini, et # l'exploitant le tape au moment d'agir. # # `decrypt: no` EST OBLIGATOIRE sur la copie. Sans lui, Ansible DÉCHIFFRE la source quand # il détient le mot de passe — mesuré le 2026-08-24, 776 octets en clair au lieu de 3465 # chiffrés, sur une machine où ils n'avaient rien à faire. serveur_ops_site_voute_source: "" serveur_ops_site_voute_deposer: true # --- ARMER LE RUNNER : LA CLE DE SA VOUTE ------------------------------------ # # UN RUNNER MAITRE DE SA VOUTE (decision de l'exploitant, 2026-08-28). Deposer le chiffre # sans la cle laisse un runner qui calcule son inventaire et ne peut rien en faire : chaque # role reclamant un secret echoue sur son assertion, et l'echec ne dit pas qu'il manque un # FICHIER — seulement que les valeurs sont vides. # # `false` PAR DEFAUT, ET CE N'EST PAS DE LA PRUDENCE DECORATIVE. Armer est un ACTE, pas un # reglage : c'est le moment ou un humain remet la cle, et c'est le seul geste que la # reproduction exige de lui (cf. docs/filiation-emancipation.md). Un defaut a `true` # armerait des machines sans que personne ne l'ait decide. # # LA SOURCE EST UN POINTEUR, JAMAIS UNE VALEUR : le chemin du fichier de mot de passe sur # le poste de l'exploitant. Il ne vit dans aucun depot, et rien ici n'en lit le contenu. # # DESTINATION : `/.config/setops-vault-`, la meme convention # que `scripts/voutes.py` — le runner derive donc sa propre liste d'identites sans qu'on # ait a la lui ecrire. Hors de tout depot git, en 0600. serveur_ops_site_cle_deposer: false serveur_ops_site_cle_source: "" serveur_ops_site_cle_destination: >- {{ serveur_ops_site_racine }}/.config/setops-vault-{{ serveur_ops_site_depot | lower }}