--- - 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