--- - name: create lvm-based disks for vm loop: "{{ install_cooked.disks.virtio | default({}) | combine(install_cooked.disks.scsi | default({})) | dict2items | selectattr('value.type', 'eq', 'lvm') | list }}" loop_control: label: "{{ item.value.vg }} / {{ item.value.lv }} ({{ item.value.size }})" delegate_to: "{{ vm_host_cooked.name }}" lvol: vg: "{{ item.value.vg }}" lv: "{{ item.value.lv }}" size: "{{ item.value.size }}" state: present - name: create zfs base datasets for vm loop: "{{ install_cooked.disks.virtio | default({}) | combine(install_cooked.disks.scsi | default({})) | dict2items | selectattr('value.type', 'eq', 'zfs') | map(attribute='value.backend') | map('default', 'default') | unique | list }}" delegate_to: "{{ vm_host_cooked.name }}" zfs: name: "{{ vm_host_cooked.zfs[item].pool }}/{{ vm_host_cooked.zfs[item].name }}/{{ inventory_hostname }}" state: present extra_zfs_properties: canmount: no mountpoint: none - name: create zfs-based disk volumes for vm loop: "{{ install_cooked.disks.virtio | default({}) | combine(install_cooked.disks.scsi | default({})) | dict2items | selectattr('value.type', 'eq', 'zfs') | list }}" loop_control: label: "{{ item.value.name }} on backend {{ item.value.backend | default('default') }} ({{ item.value.size }})" delegate_to: "{{ vm_host_cooked.name }}" zfs: name: "{{ vm_host_cooked.zfs[item.value.backend | default('default')].pool }}/{{ vm_host_cooked.zfs[item.value.backend | default('default')].name }}/{{ inventory_hostname }}/{{ item.value.name }}" state: present extra_zfs_properties: "{{ item.value.properties | default({}) | combine({'volsize': item.value.size}) | dehumanize_zfs_properties }}" - delegate_to: "{{ vm_host_cooked.name }}" block: - name: create a temporary workdir tempfile: path: "{{ hostvars[vm_host_cooked.name].installer_base_path }}/" prefix: ".{{ inventory_hostname }}." state: directory register: tmpdir - when: install_distro in ['debian', 'ubuntu'] import_tasks: installer-debian.yml - when: install_distro in ['openbsd'] import_tasks: installer-openbsd.yml - name: Make installer workdir readable by qemu acl: path: "{{ tmpdir.path }}" state: present entity: libvirt-qemu etype: user permissions: rx - name: define installer vm vars: vm_define_installer: yes installer_tmpdir: "{{ tmpdir.path }}" import_role: name: vm/guest/define - debug: msg: "you can check on the status of the installer running this command 'virsh console {{ inventory_hostname }}' on host {{ vm_host_cooked.name }}." - when: installer_manual_steps_msg is defined pause: prompt: | Mind that this installer needs manual steps to be performed: {{ installer_manual_steps_msg | indent(2) }} When done press ENTER to continue or CTRL-C then A to abort. - name: wait for installer to finish or crash wait_for_virt: name: "{{ inventory_hostname }}" states: shutdown,crashed timeout: 1800 register: installer_result failed_when: installer_result.failed or installer_result.state == "crashed" always: - name: cleanup temporary workdir file: path: "{{ tmpdir.path }}" state: absent - name: define vm vars: vm_define_installer: no delegate_to: "{{ vm_host_cooked.name }}" import_role: name: vm/guest/define