<domain type='kvm'>
  <uuid>{{ vm | ansible.builtin.to_uuid }}</uuid>
  <name>cifmw-{{ vm }}</name>
  <memory unit='GB'>{{ vm_data.memory | default(2) }}</memory>
  <vcpu placement='static'>{{ vm_data.cpus | default(2) }}</vcpu>
{% if vm_data.uefi | default(false) | bool %}
  <os firmware="efi">
    <type arch="x86_64" machine="q35">hvm</type>
    <firmware>
      <feature enabled="no" name="secure-boot"/>
    </firmware>
{% else %}
  <os>
    <type arch='x86_64' machine='q35'>hvm</type>
{% endif %}
    <boot dev='hd'/>
    <bootmenu enable='{{ vm_data.bootmenu_enable | default('no') }}'/>
  </os>
  <cpu mode='host-passthrough' check='none'>
{% if vm_data.numa is defined and vm_data.numa|int > 1 %}
    <numa>
      {% set cores_per_node = (vm_data.cpus|int // vm_data.numa|int) %}
      {% set mem_per_node = (vm_data.memory|int // vm_data.numa|int) %}
      {% set cpu_ns = namespace(cpu_start=0) %}
        {% for i in range(vm_data.numa|int) %}
          {% set cpu_end = cpu_ns.cpu_start + cores_per_node - 1 %}
          <cell id='{{ i }}' cpus='{{ cpu_ns.cpu_start }}-{{ cpu_end }}' memory='{{ mem_per_node }}' unit='GB'/>
          {% set cpu_ns.cpu_start = cpu_end + 1 %}
        {% endfor %}
    </numa>
{% endif %}
  </cpu>
  <clock offset='utc'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
  </clock>
  <features>
    <acpi/>
    <apic/>
  </features>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='{{ _chdir }}/{{ vm }}.qcow2'/>
      {% set disk_bus = vm_data.disk_bus | default('scsi') %}
      {% if disk_bus == 'scsi' %}
      <target dev='sda' bus='scsi'/>
      {% else %}
      <target dev='vda' bus='virtio'/>
      {% endif %}
    </disk>
    {% set extra_disks_bus = vm_data.extra_disks_bus | default('virtio') %}
    {% if disk_bus == 'scsi' or extra_disks_bus == 'scsi' %}
    <controller type='scsi' index='0' model='virtio-scsi'>
      <alias name='scsi0' />
      <address type='pci' domain='0x0000' bus='0x00' function='0x0' />
    </controller>
    {% endif %}
    <controller type='usb' index='0' model='ich9-ehci1'>
      <alias name='usb'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <alias name='usb'/>
      <master startport='0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0' multifunction='on'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci2'>
      <alias name='usb'/>
      <master startport='2'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x1'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci3'>
      <alias name='usb'/>
      <master startport='4'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pcie-root'>
      <alias name='pci.0'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <alias name='virtio-serial0'/>
      <address type='pci'/>
    </controller>
    <serial type='pty'>
      <source path='/dev/pts/1'/>
      <log file="/var/log/libvirt/qemu/{{ vm }}-serial.log" append="off"/>
      <target type='isa-serial' port='0'>
        <model name='isa-serial'/>
      </target>
      <alias name='serial0'/>
    </serial>
    <console type='pty' tty='/dev/pts/1'>
      <log file="/var/log/libvirt/qemu/{{ vm }}-console.log" append="off"/>
      <source path='/dev/pts/1'/>
      <target type='serial' port='0'/>
      <alias name='serial0'/>
    </console>
    <input type='tablet' bus='usb'>
      <alias name='input0'/>
      <address type='usb' bus='0' port='1'/>
    </input>
    <input type='mouse' bus='ps2'>
      <alias name='input1'/>
    </input>
    <input type='keyboard' bus='ps2'>
      <alias name='input2'/>
    </input>
    <video>
      <model type='virtio' vram='16384' heads='1' primary='yes'/>
      <alias name='video0'/>
      <address type='pci'/>
    </video>
    <memballoon model='virtio'>
      <alias name='balloon0'/>
      <address type='pci'/>
    </memballoon>
    <rng model='virtio'>
      <backend model='random'>/dev/urandom</backend>
      <rate bytes="1024" period="100"/>
      <alias name='rng0'/>
      <address type='pci'/>
    </rng>
    {%- if vm_data.add_iommu_device | default(false) | bool %}
    <iommu model='intel'/>
    {% endif %}
  </devices>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <pm>
    <suspend-to-mem enabled='no'/>
    <suspend-to-disk enabled='no'/>
  </pm>
</domain>
