cloud-init n est pas un logiciel d installation : c est une SOURCE DE VERITE EXTERNE. Il se reveille a chaque demarrage et relit le lecteur attache par l hyperviseur, qui peut redefinir comptes, cles SSH, mots de passe et reseau. Sur une machine que le plan possede, c est un second maitre — que le plan ne decrit pas, que make valider ne mesure pas, et qui parle en premier. Sa tache est finie a la premiere seconde : c est parce qu il a REUSSI a poser l adresse et les cles qu Ansible a pu entrer. TROIS MOITIES, ET ELLES SE DEFONT SEPAREMENT. - le GABARIT le garde : sans lui un clone n a ni adresse ni nom ; - le SOCLE ne l installe plus : le garder produisait un va-et-vient a chaque deploiement, deux changed par passage, idempotence perdue ; - le DURCISSEMENT le retire (roles/cloud_init_retrait, en dernier). P63 garde les trois, plus le CONTENU du role : une coquille vide passerait les trois premiers controles sans rien fermer. Quatre controles negatifs rejoues. CE QUI REND LE RETRAIT SUR EST MESURE, PAS SUPPOSE (obs-01, 2026-09-09) : /etc/network/interfaces.d/50-cloud-init n appartient a aucun paquet — dpkg -S ne le trouve pas — et le postrm ne le nomme jamais, meme en purge. L adresse survit. Le role le verifie quand meme, avant et apres, et n accuse que si le retrait l a emporte : une VM qui perd ce fichier ne se plaint pas, elle repart sans adresse et plus personne ne peut entrer. DEUX CHOIX DITS FRANCHEMENT. cloud-guest-utils reste (growpart : ni service, ni port, ni source de donnees). Les ~29 paquets orphelins ne sont pas retires par defaut : autoremove deciderait a partir des drapeaux dpkg, et un durcissement ne doit pas pouvoir surprendre. NON DEPLOYE : le code est ecrit, valide et prouve ; il n a pas ete applique a la flotte. Essai a blanc sur obs-01 : cloud-init a retirer, configuration reseau intacte. make prouver : CONFORME, 62 OK, 0 echec, 1 saute (63 preuves). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
33 lines
1.9 KiB
YAML
33 lines
1.9 KiB
YAML
---
|
|
# `cloud-guest-utils` n'est PAS retire par defaut. Il ne porte ni service, ni source de
|
|
# donnees, ni pouvoir d'ecrire sur la machine : c'est `growpart`, un utilitaire appele a
|
|
# la main quand on agrandit un disque. Le retirer ne fermerait aucune surface — et le
|
|
# jour ou l'on agrandit un disque, il faudrait le reinstaller.
|
|
cloud_init_retrait_paquets:
|
|
- cloud-init
|
|
|
|
# `purge` emporte `/etc/cloud`. C'est voulu : la configuration de cloud-init decrit QUI a
|
|
# le droit de reconfigurer la machine, et on ne garde pas une declaration de pouvoir pour
|
|
# un logiciel qu'on vient de retirer. Ce que le purge NE touche PAS est ce qui compte, et
|
|
# c'est mesure : `/etc/network/interfaces.d/50-cloud-init` n'appartient a aucun paquet
|
|
# (`dpkg -S` ne le trouve pas) et le `postrm` ne le nomme nulle part.
|
|
cloud_init_retrait_purge: true
|
|
|
|
# Le fichier que cloud-init a ecrit a la naissance et qui porte l'adresse de la machine.
|
|
# Nomme ici plutot qu'en dur : c'est LUI que le role verifie, et un chemin qu'on peut
|
|
# lire est un chemin qu'on peut corriger.
|
|
cloud_init_retrait_fichier_reseau: /etc/network/interfaces.d/50-cloud-init
|
|
|
|
# LES ORPHELINS, ET POURQUOI ON NE DECIDE PAS A LA PLACE DE L'OPERATEUR.
|
|
# Retirer cloud-init laisse ~29 paquets qui n'etaient la que pour lui (mesure du
|
|
# 2026-09-09 sur `obs-01` : python3-jsonschema, python3-jinja2, python3-oauthlib...).
|
|
# Ce sont des BIBLIOTHEQUES : aucun service, aucun port, aucune source de donnees. Elles
|
|
# pesent, elles n'ouvrent rien.
|
|
#
|
|
# `autoremove` calculerait exactement quoi retirer — mais il le calculerait a partir des
|
|
# drapeaux « installe manuellement » de dpkg, et une machine dont ces drapeaux ont derive
|
|
# y perdrait autre chose. Un durcissement ne doit pas pouvoir surprendre.
|
|
#
|
|
# Le defaut est donc `false` : on nomme ce qu'on retire. Passer a `true` est une decision
|
|
# d'exploitation, prise en connaissance de cause.
|
|
cloud_init_retrait_autoremove: false
|