--- # Localise le template dans le cluster (sans contrainte de nœud → recherche globale) - name: deploy-vm | find template '{{ template_name }}' in cluster community.general.proxmox_vm_info: api_host: "{{ proxmox_host }}" api_user: "{{ proxmox_api_user }}" api_password: "{{ proxmox_api_password }}" name: "{{ template_name }}" type: qemu register: template_info - name: deploy-vm | assert template '{{ template_name }}' exists ansible.builtin.assert: that: template_info.proxmox_vms | length > 0 fail_msg: "Template '{{ template_name }}' introuvable dans le cluster Proxmox." # node = nœud du template (requis par l'API Proxmox pour localiser la source du clone) - name: deploy-vm | clone template '{{ template_name }}' → '{{ vm_name }}' community.general.proxmox_kvm: api_host: "{{ proxmox_host }}" api_user: "{{ proxmox_api_user }}" api_password: "{{ proxmox_api_password }}" node: "{{ template_info.proxmox_vms[0].node }}" clone: "{{ template_name }}" newid: "{{ vm_id | default(omit, true) }}" name: "{{ vm_name }}" full: "{{ vm_full_clone }}" storage: "{{ proxmox_storage }}" timeout: "{{ vm_wait_timeout }}" state: present register: clone_result when: existing_vm_info.proxmox_vms | length == 0 # resolved_node = nœud réel de la VM (existante ou fraîchement clonée) - name: deploy-vm | resolve VM ID and node ansible.builtin.set_fact: resolved_vm_id: >- {{ existing_vm_info.proxmox_vms[0].vmid if existing_vm_info.proxmox_vms | length > 0 else clone_result.vmid }} resolved_node: >- {{ existing_vm_info.proxmox_vms[0].node if existing_vm_info.proxmox_vms | length > 0 else template_info.proxmox_vms[0].node }}