--- - name: Préparer le template Debian 13 Proxmox # Le gabarit n'est pas un hote du tenant : son adresse vit sur le reseau de # fabrication, donc il ne peut pas venir du plan et le groupe `modeles_vm` reste vide. # `MODELE_HOTE` passe alors `cible_modele`, et l'inventaire d'un seul hote (`-i ","`) # place la machine dans `all` — PAS dans `modeles_vm`. Sans cette indirection, la # commande etait juste et la cible introuvable : « skipping: no hosts matched ». hosts: "{{ cible_modele | default('modeles_vm') }}" become: true gather_facts: true pre_tasks: - name: Vérifier que la cible est Debian ansible.builtin.assert: that: - ansible_facts.distribution == "Debian" fail_msg: "Ce playbook est prévu pour Debian." - name: Avertir si la version Debian n'est pas 13 ansible.builtin.debug: msg: "Attention : Debian {{ ansible_facts.distribution_version }} détecté. Le modèle cible est Debian 13." when: ansible_facts.distribution_major_version != "13" # ─── LE GABARIT EST MINIMAL, ET C'EST UNE DECISION (2026-09-01) ────────────── # # Il portait DIX-SEPT roles : exactement ceux du socle et du durcissement, que le # deploiement rejoue ensuite a l'identique. Le gabarit etait donc un CACHE du socle — # et comme tout cache, il perimait sans le dire. # # Mesure du 2026-09-01 : derniere recapture le 2026-08-09, et SIX de ses roles avaient # change depuis (common_packages, cloud_init, ssh_baseline, ssh_hardening, auditd, # nftables_baseline). Rien ne le signalait — le deploiement masquait la derive en # reappliquant tout, donc personne ne pouvait la voir. # # CE QUI RESTE ICI N'EST PAS UN CHOIX D'EFFICACITE, C'EST UNE CONDITION D'EXISTENCE : # chacun doit etre en place AVANT qu'Ansible puisse agir. Tout le reste appartient au # socle, qui l'applique de toute facon — et P56 refuse qu'un role retire ne soit repris # par personne. # # `qemu_guest_agent` l'agent invite repond AVANT SSH. C'est par lui que `creer-vm` # confirme la materialisation sans entrer chez le tenant (P52). # `cloud_init` le seul chemin vers la premiere seconde — adresse, nom d'hote, # cles de naissance. Sans lui, personne ne peut joindre la VM. # `sudo_ansible` le compte technique et son sudo : la porte par ou tout entre. # `ssh_baseline` le serveur SSH. Meme raison, un cran plus bas. # # CE QUE LA REDUCTION COUTE, ET QUI EST COUVERT : une VM neuve n'est plus durcie a la # naissance. Elle nait cependant DERRIERE LE PARE-FEU DE L'HYPERVISEUR, # `policy_in=REJECT` arme au clonage (verifie le 2026-09-01 sur `obs-01`) : seuls les # flux declares l'atteignent, avant meme son premier paquet. La fenetre d'exposition est # fermee par la fabric, pas par le gabarit. # # CE QU'ELLE RAPPORTE : un gabarit qui ne contient presque rien ne peut presque pas # perimer. roles: - qemu_guest_agent - cloud_init - sudo_ansible - ssh_baseline