t2d.ansible_role_libvirt_vm
Máquina Virtual de Libvirt
Este rol configura y crea (o destruye) máquinas virtuales 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 donde se almacenan los registros de la consola de la VM, si no se proporciona una ruta de archivo de registro específica. Por defecto es "/var/log/libvirt/qemu/".libvirt_vm_image_cache_path
: El directorio donde se almacenan en caché las imágenes descargadas. Por defecto es "/tmp/".libvirt_volume_default_images_path
: Directorio donde se almacenan las imágenes de las instancias. Por defecto es '/var/lib/libvirt/images'.libvirt_volume_default_type
: ¿Qué tipo de volumen de respaldo utiliza la instancia? Por defecto esvolume
.libvirt_volume_default_format
: Formato para los volúmenes creados por el rol. Por defecto esqcow2
.libvirt_volume_default_device
: Controla cómo aparece el dispositivo en el sistema operativo invitado. Por defecto esdisk
.libvirt_vm_engine
: Motor de virtualización. Si no se establece, el rol intentará detectar automáticamente el motor óptimo a utilizar.libvirt_vm_emulator
: ruta al binario del emulador. Si no se establece, 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 CPU, por defecto esx86_64
.libvirt_vm_uri
: Sobrescribe 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, se establece el desfase horario de las instancias al valor proporcionado. Cuando no está definido, la sincronización se establece enlocaltime
.libvirt_vms
: lista de VMs a ser creadas o destruidas. Cada una puede tener los siguientes atributos:state
: se establece enpresent
para crear oabsent
para destruir la VM. Por defecto espresent
.name
: el nombre que se asignará a la VM.memory_mb
: la memoria para asignar a la VM, en megabytes.vcpus
: el número de núcleos VCPU a asignar a la VM.machine
: Tipo de máquina virtual. Por defecto esNone
silibvirt_vm_engine
eskvm
, de lo contrariopc-1.0
.cpu_mode
: Modo de CPU de la máquina virtual. Por defecto eshost-passthrough
silibvirt_vm_engine
eskvm
, de lo contrariohost-model
. Puede configurarse como ninguno para no configurar un modo de CPU.clock_offset
: Sobrescribe el valor predeterminado establecido enlibvirt_vm_clock_offset
.enable_vnc
: Si es verdadero, habilita VNC escuchando en localhost para usar con VirtManager y herramientas similares.volumes
: una lista de volúmenes para adjuntar a la VM. Cada volumen se define con el siguiente diccionario:pool
: Nombre o UUID del pool de almacenamiento del cual se debe asignar el volumen.name
: Nombre para asociar con el volumen que se está creando; para volúmenes de tipofile
, incluye la extensión si deseas que se cree con una.file_path
: Donde debe colocarse la imagen de los volúmenes de tipofile
; por defecto eslibvirt_volume_default_images_path
.device
:disk
ocdrom
.capacity
: capacidad del volumen (puede tener sufijos como M,G,T o MB,GB,TB, etc.) (requerido cuando el tipo esdisk
).format
: las opciones incluyenraw
,qcow2
,vmdk
. Consultaman virsh
para el rango completo. Por defecto esqcow2
.image
: (opcional) una URL a una imagen con la que se inicializa el volumen (copia completa).backing_image
: (opcional) nombre del volumen de respaldo que se supone ya está en el mismo pool (copia bajo demanda).image
ybacking_image
son opciones excluyentes.target
: (opcional) Influenciar manualmente el tipo y orden de los volúmenes.
interfaces
: una lista de interfaces de red para adjuntar a la VM. Cada interfaz de red se define con el siguiente diccionario:type
: El tipo de la interfaz. Posibles valores:network
: Adjunta la interfaz a una red virtual Libvirt nombrada. Este es el valor por defecto.direct
: Adjunta directamente la interfaz a uno de los interfaces físicos del host, utilizando el controladormacvtap
.
network
: Nombre de la red a la que debe estar adjunta 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 debe estar adjunta esta interfaz de VM. 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 adjunta esta interfaz de VM.mode
: las opciones incluyenvepa
,bridge
,private
ypassthrough
. Consultaman virsh
para más detalles. Por defecto esvepa
.
console_log_enabled
: si estrue
, registra la salida de la consola en un archivo en la ruta especificada porconsole_log_path
, en lugar de a un PTY. Si esfalse
, redirige la salida de terminal a un PTY en el puerto serie 0. Por defecto esfalse
.console_log_path
: Ruta al archivo de registro de la consola. Por defecto es{{ libvirt_vm_default_console_log_dir }}/{{ name }}-console.log
.start
: Si iniciar la VM inmediatamente después de definirla. Por defecto estrue
.autostart
: Si iniciar la VM cuando arranca el host. Por defecto estrue
.xml_file
: Ocasionalmente proporciona una plantilla XML modificada. Personaliza basándote en la plantilla predeterminadavm.xml.j2
para incluir las expresiones jinja que utiliza el rol.
Nota: las siguientes variables están obsoletas: 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 única que contiene una especificación de VM usando
estas variables obsoletas.
Dependencias
Si se utilizan discos en formato qcow2, se requiere qemu-img (en el paquete qemu-utils).
Ejemplo de Playbook
---
- name: Crear VMs
hosts: hipervisor
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
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'
- 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 t2d.ansible_role_libvirt_vm