81 lines
2.4 KiB
YAML
81 lines
2.4 KiB
YAML
---
|
|
- 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
|
|
changed_when: false
|
|
|
|
- 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 }}"
|
|
|
|
- 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
|