--- # Modèle Debian 13 cloud-init, créé une seule fois sur le nœud Proxmox. - name: Le modèle existe-t-il déjà ? ansible.builtin.command: qm status {{ pve_template_vmid }} register: tpl_status changed_when: false failed_when: false - name: Créer le pool {{ pve_pool }} (délégation au compte dédié) ansible.builtin.shell: | pveum pool list --output-format json | grep -q '"poolid":"{{ pve_pool }}"' && exit 0 pveum pool add {{ pve_pool }} --comment "PoC BunkerWeb" && echo created register: pool_add changed_when: "'created' in pool_add.stdout" - name: Créer le modèle when: tpl_status.rc != 0 block: - name: Télécharger l'image Debian genericcloud ansible.builtin.get_url: url: "{{ pve_image_url }}" dest: "{{ pve_image_path }}" mode: "0644" force: true # image vierge à chaque création du modèle - name: Installer libguestfs-tools (personnalisation de l'image) ansible.builtin.apt: name: libguestfs-tools state: present update_cache: true - name: Ajouter l'agent QEMU à l'image (indispensable pour lire l'IP DHCP) ansible.builtin.command: >- virt-customize -a {{ pve_image_path }} --install qemu-guest-agent --truncate /etc/machine-id changed_when: true - name: Créer la VM modèle ansible.builtin.command: >- qm create {{ pve_template_vmid }} --name {{ pve_template_name }} --ostype l26 --cpu host --cores 2 --memory 2048 --machine q35 --scsihw virtio-scsi-single --net0 virtio,bridge={{ pve_bridge }}{{ (',tag=' ~ pve_vlan_tag) if pve_vlan_tag | string | length > 0 else '' }} --serial0 socket --vga serial0 --agent enabled=1 changed_when: true - name: Importer le disque système ansible.builtin.command: >- qm set {{ pve_template_vmid }} --scsi0 {{ pve_storage }}:0,import-from={{ pve_image_path }},discard=on,iothread=1,ssd=1 changed_when: true - name: Ajouter le lecteur cloud-init et l'ordre de démarrage ansible.builtin.command: >- qm set {{ pve_template_vmid }} --ide2 {{ pve_storage }}:cloudinit --boot order=scsi0 changed_when: true - name: Convertir en modèle ansible.builtin.command: qm template {{ pve_template_vmid }} changed_when: true - name: Placer le modèle dans le pool (le compte dédié peut le cloner) ansible.builtin.shell: | pvesh get /pools/{{ pve_pool }} --output-format json | grep -q '"vmid":{{ pve_template_vmid }}[,}]' && exit 0 pveum pool modify {{ pve_pool }} --vms {{ pve_template_vmid }} && echo added register: pool_tpl changed_when: "'added' in pool_tpl.stdout"