--- - name: Build disk definitions ansible.builtin.set_fact: virtualization_libvirt_disks: "{{ virtualization_libvirt_disks | default([]) + [virtualization_libvirt_disk_cfg] }}" vars: device_letter_map: "abcdefghijklmnopqrstuvwxyz" device_letter: "{{ device_letter_map[ansible_loop.index0] }}" virtualization_libvirt_disk_cfg: >- {{ { 'path': ( virtualization_libvirt_disk_path if ansible_loop.index0 == 0 else ([virtualization_libvirt_image_dir, hostname ~ '-disk' ~ ansible_loop.index0 ~ '.qcow2'] | ansible.builtin.path_join) ), 'target': 'vd' ~ device_letter, 'bus': 'virtio', 'format': 'qcow2', 'size': (item.size | float) } }} loop: "{{ system_cfg.disks }}" loop_control: label: "{{ item | to_json }}" extended: true - name: Create VM disks delegate_to: localhost ansible.builtin.command: argv: - qemu-img - create - -f - qcow2 - "{{ item.path }}" - "{{ item.size }}G" creates: "{{ item.path }}" loop: "{{ virtualization_libvirt_disks }}" loop_control: label: "{{ item.path }}" - name: Render cloud config templates delegate_to: localhost ansible.builtin.template: src: "{{ item.src }}" dest: /tmp/{{ item.dest_prefix }}-{{ hostname }}.yml mode: "0644" loop: - { src: cloud-user-data.yml.j2, dest_prefix: cloud-user-data } - { src: cloud-network-config.yml.j2, dest_prefix: cloud-network-config } - name: Create cloud-init disk delegate_to: localhost ansible.builtin.command: argv: - cloud-localds - "{{ virtualization_libvirt_cloudinit_path }}" - "/tmp/cloud-user-data-{{ hostname }}.yml" - -N - "/tmp/cloud-network-config-{{ hostname }}.yml" creates: "{{ virtualization_libvirt_cloudinit_path }}" # uri defaults to qemu:///system (local libvirtd) - name: Create VM using libvirt delegate_to: localhost community.libvirt.virt: command: define xml: "{{ lookup('template', 'vm.xml.j2') }}" - name: Start vm delegate_to: localhost community.libvirt.virt: name: "{{ hostname }}" state: running register: virtualization_libvirt_start_result - name: Set VM created fact ansible.builtin.set_fact: virtualization_vm_created_in_run: true when: virtualization_libvirt_start_result is defined and virtualization_libvirt_start_result.changed | bool