summaryrefslogtreecommitdiff
path: root/roles/vm/guest/define/templates/libvirt-domain.xml.j2
blob: 0430229b42ed026e5804bec7d20e17b49567a51b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<domain type='kvm'>
  <name>{{ inventory_hostname }}</name>
  <memory>{{ ((install.vm.memory | human_to_bytes) / 1024) | int }}</memory>
  <currentMemory>{{ ((install.vm.memory | human_to_bytes) / 1024) | int }}</currentMemory>
  <vcpu>{{ install.vm.numcpus }}</vcpu>
  <os>
    <type arch='x86_64' machine='q35'>hvm</type>
{% if vm_define_installer %}
{%   if install_distro == 'debian' or install_distro == 'ubuntu' %}
    <kernel>{{ installer_tmpdir }}/linux</kernel>
    <initrd>{{ installer_tmpdir }}/initrd.gz</initrd>
    <cmdline>console=ttyS0,115200n8 auto</cmdline>
    <boot dev='hd'/>
{%   elif install_distro == 'openbsd' %}
    <boot dev='cdrom'/>
{%   endif %}
{% else %}
    <boot dev='hd'/>
{% endif %}
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
{% if vm_define_installer %}
  <on_reboot>destroy</on_reboot>
  <on_crash>destroy</on_crash>
{% else %}
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
{% endif %}
  <devices>
    <emulator>/usr/bin/kvm</emulator>
    <!-- Provide a virtualized RNG to the guest -->
    <rng model='virtio'>
      <!-- Allow consuming up to 10kb/s, measured over 2s -->
      <rate period="2000" bytes="20480"/>
      <backend model='random'>/dev/random</backend>
    </rng>

{% if vm_define_installer and install_distro == 'openbsd' %}
    <disk type='file' device='cdrom'>
      <driver name='qemu'/>
      <source file='{{ installer_tmpdir }}/{{ inventory_hostname }}.iso'/>
      <target dev='sdz' bus='sata'/>
      <readonly/>
    </disk>

{% endif %}
{% if install.disks %}
{%   if 'scsi' in install.disks %}
    <controller type='scsi' index='0' model='virtio-scsi'/>
{%   endif %}
{%   for bus in ['virtio', 'scsi'] %}
{%     for device, src in (install.disks[bus] | default({})).items() %}
    <disk type='block' device='disk'>
      <driver name='qemu' type='raw' cache='none' discard='unmap'/>
{%       if src.type == 'lvm' %}
      <source dev='/dev/mapper/{{ src.vg | replace('-', '--') }}-{{ src.lv | replace('-', '--') }}'/>
{%       elif src.type == 'zfs' %}
      <source dev='/dev/zvol/{{ vm_host.zfs[src.backend | default('default')].pool }}/{{ vm_host.zfs[src.backend | default('default')].name }}/{{ inventory_hostname }}/{{ src.name }}'/>
{%       elif src.type == 'blockdev' %}
      <source dev='{{ src.path }}'/>
{%       endif %}
      <target dev='{{ device }}' bus='{{ bus }}'/>
    </disk>
{%     endfor %}
{%   endfor %}

{% endif %}
{% if install.interfaces %}
{%   for if in install.interfaces %}
    <interface type='bridge'>
{%     if 'mac' in if %}
      <mac address='{{ if.mac }}'/>
{%     endif %}
      <source bridge='{{ if.bridge }}'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x{{ "%02x" | format(loop.index0 + 16) }}' slot='0x00' function='0x0'/>
    </interface>
{%   endfor %}

{% endif %}
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
  </devices>
</domain>