Clonage par l'API (community.proxmox) avec bwpoc@pve limité au pool bwpoc ; modèle créé une fois en root avec l'agent QEMU, qui sert à lire les IP DHCP écrites dans inventory/host_vars/<vm>/dhcp.yml. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
74 lines
2.7 KiB
YAML
74 lines
2.7 KiB
YAML
---
|
|
# 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"
|