You've already forked deploy-vm
82 lines
3.2 KiB
YAML
82 lines
3.2 KiB
YAML
---
|
|
- 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) |