stackhpc.libvirt-vm
Máquina Virtual Libvirt
Este rol configura y crea (o destruye) máquinas virtuales (VM) en un hipervisor KVM.
Requisitos
El host debe tener habilitada la Tecnología de Virtualización (VT) y debe estar preconfigurado con libvirt/KVM.
Variables del Rol
libvirt_vm_default_console_log_dir
: El directorio predeterminado en el que almacenar los registros de la consola de la VM, si no se da una ruta específica para el archivo de registro. El valor predeterminado es "/var/log/libvirt-consoles".libvirt_vm_default_uuid_deterministic
: Indica si el UUID debe calcularse mediante un hash del nombre de la VM. Si no, el UUID se genera aleatoriamente por libvirt cuando se define la VM. El valor predeterminado es Falso.libvirt_vm_image_cache_path
: El directorio en el que se almacenan las imágenes descargadas. El valor predeterminado es "/tmp/".libvirt_volume_default_images_path
: Directorio en el que se almacenan las imágenes de la instancia. El valor predeterminado es '/var/lib/libvirt/images'.libvirt_volume_default_type
: ¿Qué tipo de volumen de respaldo utiliza la instancia? El valor predeterminado esvolume
. Las opciones incluyenblock
,file
,network
yvolume
.libvirt_volume_default_format
: Formato para los volúmenes creados por el rol. El valor predeterminado esqcow2
. Las opciones incluyenraw
,qcow2
,vmdk
. Consultaman virsh
para la lista completa.libvirt_volume_default_device
: Controla cómo aparece el dispositivo en el sistema operativo huésped. El valor predeterminado esdisk
. Las opciones incluyencdrom
ydisk
.libvirt_vm_engine
: motor de virtualización. Si no está configurado, el rol intentará detectar automáticamente el motor óptimo a usar.libvirt_vm_emulator
: ruta al binario del emulador. Si no está configurado, el rol intentará detectar automáticamente el emulador correcto a usar.libvirt_cpu_mode_default
: El modo de CPU predeterminado silibvirt_cpu_mode
ovm.cpu_mode
no están definidos.libvirt_vm_arch
: Arquitectura de la CPU, el valor predeterminado esx86_64
.libvirt_vm_uri
: Sobrescribir la URI de conexión de libvirt. Consulta la documentación de libvirt para más detalles.libvirt_vm_virsh_default_env
: Las variables contenidas en este diccionario se agregan al entorno utilizado al ejecutar comandos virsh.libvirt_vm_clock_offset
: si está definido, el desplazamiento del reloj de las instancias se establece en el valor proporcionado. Cuando no está definido, la sincronización se establece enlocaltime
.libvirt_vm_trust_guest_rx_filters
: Si se deben confiar los filtros de recepción del huésped. Esto se asigna al atributotrustGuestRxFilters
de las interfaces de VM. El valor predeterminado esfalse
.libvirt_vms
: lista de máquinas virtuales a crear o destruir. Cada una puede tener los siguientes atributos:state
: establece enpresent
para crear oabsent
para destruir la VM. El valor predeterminado espresent
.name
: el nombre que se asignará a la VM.uuid
: el UUID que se asignará manualmente a la VM. Si se especifica, niuuid_deterministic
nilibvirt_vm_default_uuid_deterministic
se utilizan.uuid_deterministic
: sobreescribe el valor predeterminado enlibvirt_vm_default_uuid_deterministic
.memory_mb
: la memoria que se asignará a la VM, en megabytes.vcpus
: el número de núcleos VCPU que se asignarán a la VM.machine
: tipo de máquina virtual. El valor predeterminado esNone
silibvirt_vm_engine
eskvm
, de lo contrariopc-1.0
.cpu_mode
: modo de CPU de la máquina virtual. El valor predeterminado eshost-passthrough
silibvirt_vm_engine
eskvm
, de lo contrariohost-model
. Se puede establecer en ninguno para no configurar un modo de CPU.clock_offset
: sobrescribe el valor predeterminado establecido enlibvirt_vm_clock_offset
.enable_vnc
: Si es verdadero, activa la escucha VNC en localhost para su uso con VirtManager y herramientas similares.enable_spice
: Si es verdadero, activa la escucha SPICE para su uso con Virtual Machine Manager y herramientas similares.enable_guest_virtio
: Si es verdadero, habilita el dispositivo virtio del huésped para su uso con el agente huésped Qemu.volumes
: una lista de volúmenes para adjuntar a la VM. Cada volumen se define con el siguiente diccionario:type
: ¿Qué tipo de volumen de respaldo utiliza la instancia? Todas las opciones paralibvirt_volume_default_type
son válidas aquí. El valor predeterminado eslibvirt_volume_default_type
.pool
: Nombre o UUID del grupo de almacenamiento del cual se debe asignar el volumen. Requerido cuando eltype
esvolume
.name
: Nombre asociado con el volumen que se está creando; Para volúmenes de tipofile
, incluye la extensión si deseas que se creen con una.file_path
: Dónde se debe colocar la imagen de los volúmenes de tipofile
; por defecto eslibvirt_volume_default_images_path
.device
: Controla cómo aparece el dispositivo en el sistema operativo huésped. Todas las opciones paralibvirt_volume_default_device
son válidas aquí. El valor predeterminado eslibvirt_volume_default_type
.capacity
: capacidad del volumen, puede ser seguido por k, M, G, T, P o E cuando el tipo esnetwork
o MB, GB, TB, etc., cuando el tipo esdisk
(requerido cuando el tipo esdisk
onetwork
).auth
: Detalles de autenticación si son necesarios. Si se requiere autenticación, se deben proporcionarusername
,type
yuuid
ousage
.uuid
yusage
no deben ser suministrados ambos.source
: De dónde proviene el volumen remoto cuando el tipo esnetwork
. Se deben proporcionarprotocol
,name
yhosts_list
.port
es opcional.format
: Formato del volumen. Todas las opciones paralibvirt_volume_default_format
son válidas aquí. El valor predeterminado eslibvirt_volume_default_format
.image
: (opcional) una URL a una imagen con la que se inicializa el volumen (copia completa).checksum
: (opcional) checksum de laimage
para evitar la descarga cuando no es necesario.backing_image
: (opcional) nombre del volumen de respaldo que se supone ya está en el mismo grupo (copy-on-write).image
ybacking_image
son opciones mutuamente excluyentes.target
: (opcional) Influir manualmente en el tipo y orden de los volúmenes.dev
: (opcional) Ruta del dispositivo de bloque cuando el tipo esblock
.remote_src
: (opcional) Cuando el tipo esfile
oblock
, especificar siimage
apunta a un archivo remoto (true) o a un archivo local al host que lanzó el playbook (false). El valor por defecto es verdadero.
usb_devices
: una lista de dispositivos USB que se presentarán a la VM desde el host.Cada dispositivo USB se define con el siguiente diccionario:
vendor
: El ID del vendedor del dispositivo USB.product
: El ID del producto del dispositivo USB.
Nota - Libvirt generará un error si la VM se proporciona y el dispositivo USB no está conectado.
Para obtener el ID del vendedor y el ID del producto del dispositivo USB desde el host, ejecutando como sudo / root con el dispositivo USB conectado, ejecuta
lsusb -v
. Ejemplo a continuación con un Sandisk USB Memory Stick conectado con ID del vendedor:0x0781
y ID del producto:0x5567
.lsusb -v | grep -A4 -i sandisk idVendor 0x0781 SanDisk Corp. idProduct 0x5567 Cruzer Blade bcdDevice 1.00 iManufacturer 1 iProduct 2
interfaces
: una lista de interfaces de red que se adjuntarán a la VM. Cada interfaz de red se define con el siguiente diccionario:type
: El tipo de la interfaz. Valores posibles:network
: Conecta la interfaz a una red virtual nombrada de Libvirt. Este es el valor predeterminado.direct
: Conecta directamente la interfaz a uno de los interfaces físicas del host, utilizando el controladormacvtap
.
network
: Nombre de la red a la que se debe adjuntar una interfaz. Debe especificarse si y solo si eltype
de la interfaz esnetwork
.mac
: dirección "hardware" de la instancia virtual, si está ausente, se crea una.source
: Un diccionario que define la interfaz del host a la que esta interfaz de VM debe estar conectada. Debe especificarse si y solo si eltype
de la interfaz esdirect
. Incluye los siguientes atributos:dev
: El nombre de la interfaz del host a la que debe estar conectada esta interfaz de VM.mode
: opciones incluyenvepa
,bridge
,private
ypassthrough
. Consultaman virsh
para más detalles. El valor predeterminado esvepa
.
trust_guest_rx_filters
: Si se deben confiar los filtros de recepción del huésped. Esto se asigna al atributotrustGuestRxFilters
de las interfaces de VM. El valor predeterminado eslibvirt_vm_trust_guest_rx_filters
.model
: El nombre del modelo de la interfaz. Ejemplo:e1000
one2k_pci
, si no se define, se establece envirtio
.alias
: Un alias de interfaz opcional. Esto se puede usar para vincular configuraciones de red específicas a dispositivos de red persistentes a través del nombre. El alias definido por el usuario siempre se precede conua-
para cumplir con la normativa (los alias sinua-
son ignorados por libvirt). Si no se define, se establece envnetX
gestionado por libvirt.
console_log_enabled
: sitrue
, registra la salida de la consola en un archivo en la ruta especificada porconsole_log_path
, en lugar de en un PTY. Sifalse
, la salida del terminal se dirige a un PTY en el puerto serie 0. El valor predeterminado esfalse
.console_log_path
: Ruta al archivo de registro de la consola. El valor predeterminado es{{ libvirt_vm_default_console_log_dir }}/{{ name }}-console.log
.start
: Si iniciar la VM inmediatamente después de definirla. El valor predeterminado estrue
.autostart
: Si se debe iniciar la VM cuando el host arranca. El valor predeterminado estrue
.boot_firmware
: Puede ser uno de:bios
, oefi
. El valor predeterminado esbios
.xml_file
: Opcionalmente, proporciona una plantilla XML modificada. Personaliza a partir de la plantilla predeterminadavm.xml.j2
para incluir las expresiones jinja esperadas que utiliza el rol.
Nota: las siguientes variables están en desuso: 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
y libvirt_vm_console_log_path
. Si la variable libvirt_vms
se deja sin establecer, su valor predeterminado será una lista singleton que contiene una especificación de VM usando estas variables en desuso.
Dependencias
Si se utilizan discos en formato qcow2, se requiere qemu-img (en el paquete qemu-utils).
Ejemplo de Playbook
---
- name: Crear 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'
- name: 'debian-10.2.0-amd64-netinst.iso'
type: 'file'
device: 'cdrom'
format: 'raw'
target: 'hda' # primer dispositivo en el bus ide
- name: 'networkfs'
type: 'network'
format: 'raw'
capacity: '50G'
auth:
username: 'admin'
type: 'ceph'
usage: 'rbd-pool'
source:
protocol: 'rbd'
name: 'rbd/volume'
hosts_list:
- 'mon1.example.org'
- 'mon2.example.org'
- 'mon3.example.org'
- type: 'block'
format: 'raw'
dev: '/dev/sda'
interfaces:
- network: 'br-datacentre'
usb_devices:
- vendor: '0x0781'
product: '0x5567'
- state: present
name: 'vm2'
memory_mb: 1024
vcpus: 1
volumes:
- name: 'data2'
device: 'disk'
format: 'qcow2'
capacity: '200GB'
pool: 'my-pool'
- name: 'filestore'
type: 'file'
file_path: '/srv/cloud/images'
capacity: '900GB'
interfaces:
- type: 'direct'
source:
dev: 'eth123'
mode: 'private'
- type: 'bridge'
source:
dev: 'br-datacentre'
Información del Autor
- Mark Goddard (mark@stackhpc.com)
Role to configure and create VMs on a Libvirt/KVM hypervisor
ansible-galaxy install stackhpc.libvirt-vm