--- - name: deploy-vm | check mandatory variables ansible.builtin.assert: that: - proxmox_host is defined - proxmox_host | length > 0 - proxmox_node is defined - proxmox_node | length > 0 - proxmox_storage is defined - proxmox_storage | length > 0 - proxmox_api_user is defined - proxmox_api_user | length > 0 - proxmox_api_password is defined - proxmox_api_password | length > 0 - template_name is defined - template_name | length > 0 - vm_name is defined - vm_name | length > 0 - vm_ip is defined - vm_ip | length > 0 - vm_ip is match('^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/[0-9]+$') - vm_disk_size is defined - vm_disk_size | length >= 0 fail_msg: >- Variables obligatoires manquantes ou invalides. vm_name (chaîne non vide) et vm_ip (format CIDR, ex: 192.168.1.100/24) sont requis. success_msg: "Pré-vérifications OK — VM: {{ vm_name }} | IP: {{ vm_ip }}" - name: deploy-vm | assert vm_disk_size format is valid ansible.builtin.assert: that: vm_disk_size is match('^\+?[0-9]+[KMGT]$') fail_msg: >- vm_disk_size='{{ vm_disk_size }}' est invalide. Format attendu : nombre suivi d'une unité (ex: "50G", "500M", "+10G"). Sans unité, Proxmox interprète la valeur en kB et refusera de "réduire" le disque. when: vm_disk_size | length > 0 - name: deploy-vm | assert extra disks format ansible.builtin.assert: that: - _disk.disk is defined - _disk.disk | length > 0 - _disk.size is defined - _disk.size | string is match('^[0-9]+[GT]?$') fail_msg: >- Disque supplémentaire invalide : {{ _disk }}. 'disk' (ex: scsi1) et 'size' (ex: '100G' ou 100) sont obligatoires. Formats acceptés : entier en GB (ex: 20) ou chaîne avec unité G/T (ex: '20G', '2T'). loop: "{{ vm_extra_disks }}" loop_control: loop_var: _disk label: "{{ _disk.disk | default('?') }}" when: vm_extra_disks | length > 0 # Vérifie l'existence de la VM cible dans le cluster (résultat réutilisé dans clone.yml) - name: deploy-vm | check if VM '{{ vm_name }}' already exists community.general.proxmox_vm_info: api_host: "{{ proxmox_host }}" api_user: "{{ proxmox_api_user }}" api_password: "{{ proxmox_api_password }}" name: "{{ vm_name }}" type: qemu register: existing_vm_info - name: deploy-vm | fail — VM exists, vm_force_update required to reconfigure ansible.builtin.fail: msg: | La VM '{{ vm_name }}' existe déjà. VMID : {{ existing_vm_info.proxmox_vms[0].vmid }} Nœud : {{ existing_vm_info.proxmox_vms[0].node }} Statut : {{ existing_vm_info.proxmox_vms[0].status }} Modifications demandées : Cœurs : {{ existing_vm_info.proxmox_vms[0].maxcpu | default('?') }} → {{ vm_cores }} RAM : {{ (existing_vm_info.proxmox_vms[0].maxmem | default(0) | int // 1048576) }} Mo → {{ vm_memory }} Mo IP : {{ vm_ip }} Pour appliquer ces modifications, relancez avec : -e vm_force_update=true when: - existing_vm_info.proxmox_vms | length > 0 - not (vm_force_update | default(false) | bool)