diff --git a/README.md b/README.md index ec5f658..a389da0 100644 --- a/README.md +++ b/README.md @@ -166,6 +166,8 @@ Role Variables - `autostart`: Whether to start the VM when the host starts up. Default is `true`. + - `boot_firmware`: Can be one of: `bios`, or `efi`. Defaults to `bios`. + - `xml_file`: Optionally supply a modified XML template. Base customisation off the default `vm.xml.j2` template so as to include the expected jinja expressions the role uses. @@ -226,7 +228,7 @@ Example Playbook - type: 'block' format: 'raw' dev: '/dev/sda' - + interfaces: - network: 'br-datacentre' diff --git a/defaults/main.yml b/defaults/main.yml index a94e53e..c121702 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -86,6 +86,9 @@ libvirt_vms: # XML template file to source domain definition xml_file: vm.xml.j2 + # May be one of: bios, or efi. + boot_firmware: bios + # Variables to add to the enviroment that is used to execute virsh commands libvirt_vm_virsh_default_env: "{{ { 'LIBVIRT_DEFAULT_URI': libvirt_vm_uri } if libvirt_vm_uri else {} }}" diff --git a/tasks/main.yml b/tasks/main.yml index 290b21f..35cf997 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -45,6 +45,7 @@ autostart: "{{ vm.autostart | default(true) }}" enable_vnc: "{{ vm.enable_vnc | default(false) }}" enable_spice: "{{ vm.enable_spice | default(false) }}" + boot_firmware: "{{ vm.boot_firmware | default('bios', true) | lower }}" with_items: "{{ libvirt_vms }}" loop_control: loop_var: vm diff --git a/templates/vm.xml.j2 b/templates/vm.xml.j2 index e5f55a9..2c3a84a 100644 --- a/templates/vm.xml.j2 +++ b/templates/vm.xml.j2 @@ -22,6 +22,12 @@ + {% if boot_firmware == "efi" %} + {# NOTE: pflash requires qemu 1.6 or newer. There are alternatives for older versions, but + they do not work with secure boot. See OVMF readme for an overview #} + {{ libvirt_vm_ovmf_efi_firmware_path }} + + {% endif %} diff --git a/vars/Archlinux.yml b/vars/Archlinux.yml index c4e07ba..7db5f39 100644 --- a/vars/Archlinux.yml +++ b/vars/Archlinux.yml @@ -10,3 +10,10 @@ libvirt_vm_script_env: >- # Archlinux qemu comes with kvm support compiled in libvirt_vm_emulator: /usr/bin/qemu-system-x86_64 + +# Path to template OVMF efi variable store. A copy will be created +# for each VM created. +libvirt_vm_ovmf_efi_variable_store_path: /usr/share/OVMF/OVMF_VARS.fd + +# Path to OVMF efi firmware +libvirt_vm_ovmf_efi_firmware_path: /usr/share/OVMF/OVMF_CODE.fd diff --git a/vars/Debian.yml b/vars/Debian.yml index df4d0fa..2101910 100644 --- a/vars/Debian.yml +++ b/vars/Debian.yml @@ -10,3 +10,10 @@ libvirt_vm_script_env_debian: libvirt_vm_script_env: >- {{ libvirt_vm_script_env_debian | combine(libvirt_vm_virsh_default_env) }} + +# Path to template OVMF efi variable store. A copy will be created +# for each VM created. +libvirt_vm_ovmf_efi_variable_store_path: /usr/share/OVMF/OVMF_VARS.fd + +# Path to OVMF efi firmware +libvirt_vm_ovmf_efi_firmware_path: /usr/share/OVMF/OVMF_CODE.fd diff --git a/vars/RedHat.yml b/vars/RedHat.yml index 86ca9e8..b402aa3 100644 --- a/vars/RedHat.yml +++ b/vars/RedHat.yml @@ -10,3 +10,10 @@ libvirt_vm_script_env_redhat: libvirt_vm_script_env: >- {{ libvirt_vm_script_env_redhat | combine(libvirt_vm_virsh_default_env) }} + +# Path to template OVMF efi variable store. A copy will be created +# for each VM created. +libvirt_vm_ovmf_efi_variable_store_path: /usr/share/edk2/ovmf/OVMF_VARS.fd + +# Path to OVMF efi firmware +libvirt_vm_ovmf_efi_firmware_path: /usr/share/edk2/ovmf/OVMF_CODE.cc.fd