Set-OPS-Public/roles/template_cleanup/tasks/main.yml
Daniel Allaire 3618dfc129 gabarit recapture : copie de travail preparee, nettoyee, convertie
modeleChezlepro (99999) clone en modeleChezlepro-travail (99998). L'original
n'a pas ete touche.

Deux defauts de mon propre outillage, trouves en l'utilisant :
- l'inventaire d'un seul hote ne porte aucun group_vars, donc aucun utilisateur
  de connexion : Ansible tentait le compte local. MODELE_HOTE passe desormais
  ansible_user.
- les playbooks ciblent hosts: modeles_vm, et un inventaire d'un seul hote
  place la machine dans all. La commande etait juste et la cible introuvable
  (« skipping: no hosts matched »). J'avais verifie l'affichage, pas l'effet.
  Les trois acceptent maintenant cible_modele.

Le nettoyage vide /etc/resolv.conf (il portait l'identite du reseau de
fabrication) et supprime les CLES D HOTE SSH — le gabarit transportait une cle
privee. Sur que parce que cloud-init les recree au premier demarrage, verifie
avant de l'ecrire.

Reste a faire, et ce n'est pas a moi : basculer proxmox_clone_* sur le nouveau
une fois qu'une VM en sera nee et aura fonctionne.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-09 11:29:51 -04:00

98 lines
3.4 KiB
YAML

---
- name: Refuser le nettoyage sans confirmation explicite
ansible.builtin.assert:
that:
- template_cleanup_confirm | bool
fail_msg: "Nettoyage refusé. Relancer avec -e template_cleanup_confirm=true"
- name: Nettoyer cloud-init
ansible.builtin.command: cloud-init clean --logs
changed_when: true
- name: Nettoyer le cache APT
ansible.builtin.apt:
clean: true
- name: Supprimer les paquets devenus inutiles
ansible.builtin.apt:
autoremove: true
- name: Rotation des journaux systemd
ansible.builtin.command: journalctl --rotate
changed_when: true
failed_when: false
- name: Vider les anciens journaux systemd
ansible.builtin.command: journalctl --vacuum-time=1s
changed_when: true
failed_when: false
- name: Vider /etc/machine-id
ansible.builtin.copy:
dest: /etc/machine-id
content: ""
owner: root
group: root
mode: "0444"
- name: Supprimer l'ancien machine-id D-Bus
ansible.builtin.file:
path: /var/lib/dbus/machine-id
state: absent
- name: Recréer le lien D-Bus vers /etc/machine-id
ansible.builtin.file:
src: /etc/machine-id
dest: /var/lib/dbus/machine-id
state: link
force: true
# Le gabarit ne doit transporter AUCUNE identite de reseau. Sans ce nettoyage, il emporte
# le `/etc/resolv.conf` du reseau ou il a ete fabrique : mesure du 2026-08-08 sur une VM
# neuve du tenant, `nameserver 192.168.12.254` — injoignable depuis son VLAN. La machine
# naissait donc sans resolution, cloud-init perdait son temps sur des `apt` qui
# echouaient, et la tache capable de reparer le fichier vit dans `serveur_debian`,
# c'est-a-dire APRES l'attente de premier demarrage.
#
# On le VIDE plutot que de le supprimer : un fichier absent se recree en silence avec
# n'importe quoi, un fichier qui s'explique dit ou regarder. Le resolveur reel est pose
# au deploiement depuis l'intrant `dns_amorcage`.
- name: Vider le resolveur herite du reseau de fabrication
ansible.builtin.copy:
dest: /etc/resolv.conf
owner: root
group: root
mode: "0644"
content: |
# Vide a la capture du gabarit (role template_cleanup).
# Le resolveur est pose au deploiement depuis l'intrant `dns_amorcage`
# (playbooks/groupes/serveur_debian.yml, avant le premier apt).
# Un gabarit ne transporte aucune identite de reseau.
# Un gabarit ne doit transporter AUCUNE cle privee. Sans ce nettoyage, l'image porte la
# cle d'hote SSH de la machine de fabrication : quiconque detient l'image detient de quoi
# se faire passer pour n'importe quelle VM qui n'aurait pas regenere la sienne.
#
# La regeneration est faite par cloud-init au premier demarrage (module `ssh`, qui
# recree les cles absentes) — verifie le 2026-08-09 : les hotes de la flotte portent des
# empreintes toutes differentes. C'est cette regeneration qui rend la suppression sure ;
# la desactiver rendrait les VM sans cle d'hote, donc sans sshd.
- name: Supprimer les cles d hote SSH (regenerees par cloud-init au premier demarrage)
ansible.builtin.shell:
cmd: rm -f /etc/ssh/ssh_host_*
removes: /etc/ssh/ssh_host_ed25519_key
- name: Supprimer les historiques shell
ansible.builtin.file:
path: "{{ item }}"
state: absent
loop:
- /root/.bash_history
- "/home/{{ template_cleanup_admin_user }}/.bash_history"
failed_when: false
- name: Message final
ansible.builtin.debug:
msg:
- "Nettoyage final terminé."
- "Éteindre la VM puis convertir en template Proxmox."