This role configures and creates (or destroys) VMs on a KVM hypervisor.
The host should have Virtualization Technology (VT) enabled and should be preconfigured with libvirt/KVM.
-
libvirt_vm_default_console_log_dir: The default directory in which to store VM console logs, if a VM-specific log file path is not given. Default is "/var/log/libvirt/qemu/". -
libvirt_vm_image_cache_path: The directory in which to cache downloaded images. Default is "/tmp/". -
libvirt_vm_engine: virtualisation engine. If not set, the role will attempt to auto-detect the optimal engine to use. -
libvirt_vm_emulator: path to emulator binary. If not set, the role will attempt to auto-detect the correct emulator to use. -
libvirt_vm_arch: CPU architecture, default isx86_64. -
libvirt_vm_uri: Override the libvirt connection URI. See the libvirt docs docs for more details. -
libvirt_vm_virsh_default_env: Variables contained within this dictionary are added to the environment used when executing virsh commands. -
libvirt_vms: list of VMs to be created/destroyed. Each one may have the following attributes:-
state: set topresentto create orabsentto destroy the VM. Defaults topresent. -
name: the name to assign to the VM. -
memory_mb: the memory to assign to the VM, in megabytes. -
vcpus: the number of VCPU cores to assign to the VM. -
machine: Virtual machine type. Default isNoneiflibvirt_vm_engineiskvm, otherwisepc-1.0. -
cpu_mode: Virtual machine CPU mode. Default ishost-passthroughiflibvirt_vm_engineiskvm, otherwisehost-model. -
volumes: a list of volumes to attach to the VM. Each volume is defined with the following dict:pool: Name or UUID of the storage pool from which the volume should be allocated.name: Name to associate with the volume being created.capacity: volume capacity (can be suffixed with M,G,T or MB,GB,TB, etc)device:diskformat: options includeraw,qcow2,vmdk. Seeman virshfor the full range. Default isqcow2image: (optional) a URL to an image with which the volume is initalised (full copy).backing_image: (optional) name of the backing volume which is assumed to already be the same pool (copy-on-write).imageandbacking_imageare mutually exclusive options.
-
interfaces: a list of network interfaces to attach to the VM. Each network interface is defined with the following dict:-
type: The type of the interface. Possible values:network: Attaches the interface to a named Libvirt virtual network. This is the default value.direct: Directly attaches the interface to one of the host's physical interfaces, using themacvtapdriver.
-
network: Name of the network to which an interface should be attached. Must be specified if and only if the interfacetypeisnetwork. -
source: A dict defining the host interface to which this VM interface should be attached. Must be specified if and only if the interfacetypeisdirect. Includes the following attributes:dev: The name of the host interface to which this VM interface should be attached.mode: options includevepa,bridge,privateandpassthrough. Seeman virshfor more details. Default isvepa.
-
-
console_log_enabled: iftrue, log console output to a file at the path specified byconsole_log_path, instead of to a PTY. Iffalse, direct terminal output to a PTY at serial port 0. Default isfalse. -
console_log_path: Path to console log file. Default is{{ libvirt_vm_default_console_log_dir }}/{{ name }}-console.log. -
start: Whether to immediately start the VM after defining it. Default istrue. -
autostart: Whether to start the VM when the host starts up. Default istrue. -
xml_template: Optionally supply a modified XML template. Base customisation off the defaultvm.xml.j2template so as to include the expected jinja expressions the role uses.
-
N.B. the following variables are deprecated: libvirt_vm_state,
libvirt_vm_name, libvirt_vm_memory_mb, libvirt_vm_vcpus,
libvirt_vm_engine, libvirt_vm_machine, libvirt_vm_cpu_mode,
libvirt_vm_volumes, libvirt_vm_interfaces and
libvirt_vm_console_log_path. If the variable libvirt_vms is left unset, its
default value will be a singleton list containing a VM specification using
these deprecated variables.
None
---
- name: Create VMs
hosts: hypervisor
roles:
- role: stackhpc.libvirt-vm
libvirt_vms:
- state: present
name: 'vm1'
memory_mb: 512
vcpus: 2
volumes:
- name: 'data1'
device: 'disk'
format: 'qcow2'
capacity: '400GB'
pool: 'my-pool'
interfaces:
- network: 'br-datacentre'
- state: present
name: 'vm2'
memory_mb: 1024
vcpus: 1
volumes:
- name: 'data2'
device: 'disk'
format: 'qcow2'
capacity: '200GB'
pool: 'my-pool'
interfaces:
- network: 'br-datacentre'
- Mark Goddard ([email protected])