Set-OPS-Public/roles/serveur_ops_site
Daniel Allaire aac74f6043 supervision : les huit derniers roles, et deux defauts que l epreuve a trouves
Les 33 roles serveur_* declarent maintenant une sonde. Les huit qui manquaient
sont ceux dont la verite ne ressemble pas a « ce service repond-il ».

Quatre marqueurs du site : ce que tasks/main.yml verifie UNE FOIS au deploiement
cesse d etre vrai sans que rien ne tombe. La racine du cache se retrouve chainee,
la forge du genome repond en n ayant plus rien dedans, un locataire n est plus
admis a resoudre, l isolation d un depot glisse.

serveur_ops_site ne sert rien : il detient un pouvoir. La sonde verifie que la
carte est la, que la voute du site est chiffree et que sa cle est en 0600 — sans
lire le contenu d aucun des trois.

serveur_icingaweb2 surveille la vitrine de la supervision elle-meme : si la
console meurt, tout reste vert et l exploitant est aveugle.

DEFAUT 1 — quatre gabarits qu Ansible aurait refuse de rendre. Jinja lit le
{# de ${#tableau[@]} comme un debut de commentaire. Le depot connaissait le
remede et l appliquait la ou quelqu un s etait fait prendre, nulle part ailleurs.
P76 rend desormais chaque gabarit de role, avec les delimiteurs qu Ansible en
tirerait — pas une recherche de motif.

DEFAUT 2 — la doctrine promettait 54 greffons et citait check_pgsql. La flotte a
monitoring-plugins-basic : 53, sans check_pgsql ni check_dns ni check_ldap. Le
paquet qui les porte traine samba et snmp sur chaque machine. Un greffon absent
sort en 127, qui n est pas un code Nagios.

21 controles negatifs sur les machines reelles du site. ansible-lint production
0/91, harnais 75 OK.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-14 15:43:52 -04:00
..
defaults runner : armer un runner est un acte declare, jamais un defaut 2026-08-28 14:46:29 -04:00
meta supervision : les huit derniers roles, et deux defauts que l epreuve a trouves 2026-09-14 15:43:52 -04:00
tasks supervision : les huit derniers roles, et deux defauts que l epreuve a trouves 2026-09-14 15:43:52 -04:00
templates supervision : les huit derniers roles, et deux defauts que l epreuve a trouves 2026-09-14 15:43:52 -04:00
README.md runner : separer le pouvoir de configurer de celui de materialiser 2026-08-24 15:30:03 -04:00

serveur_ops_site

Le runner de SITE : celui qui matérialise. Il crée des VM sur la fabric, et rien d'autre.

Pourquoi ce rôle existe séparément

Le travail d'un runner se divise en trois, et la ligne de partage est celle des voûtes :

voûte requise portée rôle
calculer — plan → inventaire aucune tenant serveur_ops
configurer — rôles sur ses machines tenant tenant serveur_ops
matérialiser — créer/détruire des VM SITE fabric ce rôle

Un runner par tenant qui matérialiserait mettrait la voûte du SITE en N exemplaires — le secret le plus dangereux du système, recopié autant de fois qu'il y a de locataires.

Un runner unique qui ferait tout devrait entrer en SSH chez tous les tenants, donc traverser le default-deny inter-tenant. Et il rendrait l'émancipation impossible : un écosystème dont le runner appartient à l'hébergeur ne peut pas se rebâtir sans lui.

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 a le droit de 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.

Ce qu'il dépose, et comment

La voûte du SITE, chiffrée, en 0600. Le mot de passe n'est jamais 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: false est obligatoire sur la copie. Sans lui, Ansible déchiffre la source quand il détient le mot de passe — constaté le 2026-08-24 : 776 octets en clair au lieu de 3465 chiffrés, sur une machine où ils n'avaient rien à faire. Le rôle relit l'en-tête après avoir écrit et refuse si le fichier n'est pas chiffré.

Colocalisation

Rien n'oblige à lui donner sa propre machine : chez l'hébergeur, les deux pouvoirs résident légitimement au même endroit, et une machine de plus dans un écosystème volontairement maigre se paie. Le déclarer séparément rend le pouvoir visible, ce qui est l'essentiel.

Chez un tenant qui n'est pas l'hébergeur, la question ne se pose pas : le rôle n'a pas à y être.

Variables

Variable Rôle
serveur_ops_site_depot dossier du dépôt SITE chez le runner (cloné par serveur_ops)
serveur_ops_site_voute_source chemin de underlay.vault.yml sur le contrôleur
serveur_ops_site_voute_deposer false pour un runner qui lit la carte sans détenir les clés

Ce que ce rôle ne fait pas

Il n'installe rien, n'ouvre aucun port, ne sauvegarde rien. Il ne fait qu'attribuer un pouvoir — et le rendre lisible dans le plan.