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,networkyvolume.libvirt_volume_default_format: Formato para los volúmenes creados por el rol. El valor predeterminado esqcow2. Las opciones incluyenraw,qcow2,vmdk. Consultaman virshpara 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 incluyencdromydisk.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_modeovm.cpu_modeno 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 atributotrustGuestRxFiltersde 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 enpresentpara crear oabsentpara 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_deterministicnilibvirt_vm_default_uuid_deterministicse 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 esNonesilibvirt_vm_engineeskvm, de lo contrariopc-1.0.cpu_mode: modo de CPU de la máquina virtual. El valor predeterminado eshost-passthroughsilibvirt_vm_engineeskvm, 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_typeson 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 eltypeesvolume.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_deviceson 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 esnetworko MB, GB, TB, etc., cuando el tipo esdisk(requerido cuando el tipo esdiskonetwork).auth: Detalles de autenticación si son necesarios. Si se requiere autenticación, se deben proporcionarusername,typeyuuidousage.uuidyusageno deben ser suministrados ambos.source: De dónde proviene el volumen remoto cuando el tipo esnetwork. Se deben proporcionarprotocol,nameyhosts_list.portes opcional.format: Formato del volumen. Todas las opciones paralibvirt_volume_default_formatson 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 laimagepara 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).imageybacking_imageson 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 esfileoblock, especificar siimageapunta 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:0x0781y ID del producto:0x5567.lsusb -v | grep -A4 -i sandisk idVendor 0x0781 SanDisk Corp. idProduct 0x5567 Cruzer Blade bcdDevice 1.00 iManufacturer 1 iProduct 2interfaces: 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 eltypede 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 eltypede 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,privateypassthrough. Consultaman virshpara 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 atributotrustGuestRxFiltersde las interfaces de VM. El valor predeterminado eslibvirt_vm_trust_guest_rx_filters.model: El nombre del modelo de la interfaz. Ejemplo:e1000one2k_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 envnetXgestionado 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.j2para 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