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>
61 lines
1.9 KiB
YAML
61 lines
1.9 KiB
YAML
---
|
|
- 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 "<ip>,"`)
|
|
# 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"
|
|
|
|
roles:
|
|
- common_packages
|
|
- qemu_guest_agent
|
|
- cloud_init
|
|
- sudo_ansible
|
|
- chrony
|
|
- ssh_baseline
|
|
- systemd_ssh_auto
|
|
- motd
|
|
- hardening_packages
|
|
- sysctl_hardening
|
|
- core_dumps
|
|
- unattended_upgrades
|
|
- apparmor
|
|
- auditd
|
|
- fail2ban_ssh
|
|
- journald
|
|
- ssh_hardening
|
|
- nftables_baseline
|
|
|
|
post_tasks:
|
|
- name: Afficher le statut cloud-init
|
|
ansible.builtin.command: cloud-init status --long
|
|
register: cloud_init_status
|
|
changed_when: false
|
|
failed_when: false
|
|
|
|
- name: Résultat cloud-init
|
|
ansible.builtin.debug:
|
|
var: cloud_init_status.stdout_lines
|
|
|
|
- name: Message final
|
|
ansible.builtin.debug:
|
|
msg:
|
|
- "Préparation terminée."
|
|
- "Redémarrer si GRUB a changé."
|
|
- "Ne pas convertir avant le playbook de nettoyage final."
|
|
- "nftables est installé mais désactivé par défaut."
|