Files
cedricandClaude Opus 5.5 de23e19910 lancelot : modèle 9100 avec agent QEMU, machine-id régénéré, pool et destroy par l'API
- modèle par défaut 9100 debian13-bwpoc (dérivé de 9001 + qemu-guest-agent),
  fabrication en SSH root seulement si pve_template_create: true
- régénération du machine-id par l'agent QEMU (sinon même IP DHCP pour tous les clones)
- pool bwpoc créé par l'API, 99-destroy par l'API
- correctif ansible-core 2.21 (copie de hostvars), clé SSH id_ed25519 ou id_rsa

Déploiement validé sur lancelot : 50-tests 26 OK, 0 KO.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-27 12:30:15 +01:00

100 lines
3.4 KiB
YAML

---
- name: "{{ vm_name }} : lecture des paramètres"
ansible.builtin.set_fact:
# Uniquement les champs utiles : copier tout hostvars[vm] échoue avec ansible-core 2.21
vm:
vm_id: "{{ hostvars[vm_name].vm_id }}"
vm_cores: "{{ hostvars[vm_name].vm_cores }}"
vm_memory: "{{ hostvars[vm_name].vm_memory }}"
vm_disk_gb: "{{ hostvars[vm_name].vm_disk_gb }}"
- name: "{{ vm_name }} : la VM existe-t-elle ?"
community.proxmox.proxmox_vm_info:
vmid: "{{ vm.vm_id }}"
node: "{{ pve_node }}"
config: none
register: vm_info
- name: "{{ vm_name }} : création"
when: vm_info.proxmox_vms | length == 0
block:
- name: "{{ vm_name }} : clonage du modèle {{ pve_template_vmid }}"
community.proxmox.proxmox_kvm:
node: "{{ pve_node }}"
vmid: "{{ pve_template_vmid }}"
clone: "{{ pve_template_name }}"
newid: "{{ vm.vm_id }}"
name: "{{ vm_name }}"
full: true
storage: "{{ pve_storage }}"
pool: "{{ pve_pool }}"
timeout: 600
- name: "{{ vm_name }} : agrandissement du disque à {{ vm.vm_disk_gb }} Go"
community.proxmox.proxmox_disk:
vmid: "{{ vm.vm_id }}"
disk: scsi0
state: resized
size: "{{ vm.vm_disk_gb }}G"
- name: "{{ vm_name }} : ressources et cloud-init"
community.proxmox.proxmox_kvm:
node: "{{ pve_node }}"
vmid: "{{ vm.vm_id }}"
update: true
cores: "{{ vm.vm_cores }}"
memory: "{{ vm.vm_memory }}"
onboot: true
tags: [bwpoc]
ciuser: "{{ poc_vm_user }}"
sshkeys: "{{ lookup('ansible.builtin.file', poc_ssh_pubkey_file) }}"
ipconfig:
ipconfig0: "ip=dhcp" # passerelle et DNS fournis par le DHCP du VLAN LAB
ciupgrade: false
- name: "{{ vm_name }} : démarrage"
community.proxmox.proxmox_kvm:
node: "{{ pve_node }}"
vmid: "{{ vm.vm_id }}"
state: started
timeout: 120
# Un clone hérite du machine-id du modèle : systemd-networkd en dérive son identifiant
# DHCP, et toutes les VM recevraient la même IP. On le régénère une fois (marqueur /etc/bwpoc-machine-id).
- name: "{{ vm_name }} : nouveau machine-id (identifiant DHCP propre)"
ansible.builtin.include_tasks: machine_id.yml
- name: "{{ vm_name }} : adresse DHCP remontée par l'agent QEMU"
community.proxmox.proxmox_vm_info:
node: "{{ pve_node }}"
vmid: "{{ vm.vm_id }}"
config: current
network: true
register: vm_net
until: >-
(vm_net.proxmox_vms[0].network | default([]) | rejectattr('name', 'equalto', 'lo')
| map(attribute='ip-addresses') | flatten | selectattr('ip-address-type', 'equalto', 'ipv4') | list | length) > 0
retries: 40
delay: 10
- name: "{{ vm_name }} : mémoriser l'IP"
ansible.builtin.set_fact:
vm_ip: >-
{{ vm_net.proxmox_vms[0].network | rejectattr('name', 'equalto', 'lo')
| map(attribute='ip-addresses') | flatten | selectattr('ip-address-type', 'equalto', 'ipv4')
| map(attribute='ip-address') | first }}
- name: "{{ vm_name }} : écrire l'IP dans inventory/host_vars (relu par les playbooks suivants)"
ansible.builtin.copy:
dest: "{{ inventory_dir }}/host_vars/{{ vm_name }}/dhcp.yml"
mode: "0644"
content: |
# Généré par 00-proxmox.yml : IP obtenue par DHCP (VMID {{ vm.vm_id }})
ansible_host: {{ vm_ip }}
- name: "{{ vm_name }} : attente du SSH sur {{ vm_ip }}"
ansible.builtin.wait_for:
host: "{{ vm_ip }}"
port: 22
timeout: 300