serverbee.virt_guest_manage
Rol de gestión de invitados virtuales
Este rol utiliza el módulo virt oficial de Ansible para gestionar máquinas virtuales basadas en RHEL utilizando KVM como hipervisor. Por defecto, utiliza el fork de AlmaLinux de RHEL. Puedes controlar todas tus VMs directamente a través de configuraciones en group_vars
o host_vars
. La principal característica de este rol es la instalación en paralelo de todas las máquinas virtuales que se establecen en virt_guest_list
.
Para comenzar
Versiones de distribuciones soportadas a nivel de máquina virtual
- CentOS el6 (no probado con las últimas versiones del rol)
- CentOS el7
- AlmaLinux el8
- AlmaLinux el9
Actualiza los valores predeterminados según tus necesidades
Primero, tienes que actualizar virt_guest_init_passwd
configurando una contraseña personalizada. La segunda cosa es encontrar y establecer el espejo más cercano para descargar todos los componentes del instalador basado en RHEL.
Fuera del alcance de este rol
Este rol puede manejar discos virtuales basados en LVM para las VMs, pero debes crear Volumen Físico (PVS) y Grupo de Volumen (VGS) antes de usarlo. También hay dos opciones diferentes para las interfaces de red virtuales de las VMs. La primera es usar un puente de Linux existente y ya configurado, y la segunda es usar redes de libvirt. De todos modos, la última opción puede ser gestionada con virt_network_list
directamente desde este rol.
Variables
Generales
virt_guest_dependency_qemu_kvm_role
: [opcional, predeterminadotrue
]: Si habilitar un rol de dependencia para qemu-kvmvirt_guest_mirror
: [predeterminado:http://repo.almalinux.org
]: Espejo de Almalinux que se utilizará para instalar el sistema operativovirt_guest_os_location
: [predeterminado:{{ virt_guest_mirror }}/almalinux/9/BaseOS/x86_64/os
]: Ruta de ubicación donde se almacenan los componentes de Almalinuxvirt_guest_kickstart_config_dir
: [predeterminado:/tmp/kickstart
]: Ruta donde se crearán los archivos de kickstartvirt_guest_kickstart_config_port
: [predeterminado:8000
]: Puerto para descargar la configuración de kickstart durante la instalaciónvirt_guest_kickstart_config_url
: [predeterminado:ip de un hipervisor
]: URL para descargar la configuración de kickstart durante la instalaciónvirt_guest_kickstart_config_serve_timeout
: [predeterminado:90
]: Tiempo en segundos para servir los archivos de kickstartvirt_guest_kickstart_installation_timeout
: [predeterminado:480
]: Tiempo en segundos para finalizar una instalación de kickstartvirt_guest_init_passwd
: [requerido]: Contraseña del usuario root que usarás para el primer iniciovirt_guest_init_hostname
: [predeterminado:fresh-installed.local
]: El primer nombre de host a nivel del sistema operativo de la máquina virtual
Lista de redes virtuales y sus configuraciones
virt_network_list
: [requerido, predeterminado:{}
]: Declaraciones de redes virtualesvirt_network_list.key
: [requerido]: El nombre de la red virtual (por ejemplo,br-nat0:
)virt_network_list.key.router
: [requerido]: La dirección IP del router virtual (por ejemplo,192.168.2.1
)virt_network_list.key.netmask
: [requerido]: La máscara de red de la red virtual (por ejemplo,255.255.255.0
)virt_network_list.key.start
: [requerido]: La primera IP del rango de la red virtual (por ejemplo,192.168.2.1
)virt_network_list.key.end
: [requerido]: La última IP del rango de la red virtual (por ejemplo,192.168.2.254
)
Lista de invitados virtuales y sus configuraciones
virt_guest_list
: [requerido, predeterminado:{}
]: Declaraciones de invitados virtualesvirt_guest_list.key
: [requerido]: El nombre de la máquina virtual (por ejemplo,example-vm:
)virt_guest_list.key.autostart
: [opcional, predeterminadotrue
]: Si habilitar el inicio automático para la máquina virtualvirt_guest_list.key.uuid
: [requerido]: Identificador único universal de la máquina virtual (por ejemplo,ad852ffe-07d9-43ec-9f5a-ced644f9a7a5
)virt_guest_list.key.cpu
: [opcional, predeterminado1
]: Establecer límites de núcleos de CPUvirt_guest_list.key.ram
: [opcional, predeterminado2
]: Establecer límites de RAM. Este valor se establece en GiBvirt_guest_list.key.disk
: [requerido]: Declaraciones de disco(s) del invitado virtualvirt_guest_list.key.disk.[s|v]d[a-z]
: [requerido]: El nombre del disco virtual en la máquina virtual (por ejemplo,sda
,sdb
,sdc
, etc. ovda
,vdb
,vdc
, etc.)virt_guest_list.key.disk.[s|v]d[a-z].type
: [opcional, predeterminadoblock
]: El tipo de disco virtual (por ejemplo,block
,file
)virt_guest_list.key.disk.[s|v]d[a-z].name
: [requerido solo para.type: file
]: El nombre del archivo de disco virtual qemuvirt_guest_list.key.disk.[s|v]d[a-z].format
: [opcional, predeterminadoraw
]: El tipo de formato de disco qemu (por ejemplo,raw
,qcow2
)virt_guest_list.key.disk.[s|v]d[a-z].format_options
: [opcional, predeterminadopreallocation=off
]: Las opciones de formato de disco qemu (por ejemplo,preallocation=metadata
)virt_guest_list.key.disk.[s|v]d[a-z].vg
: [requerido solo para.type: block
]: El nombre del Grupo de Volumen LVMvirt_guest_list.key.disk.[s|v]d[a-z].lv
: [requerido solo para.type: block
]: El nombre del Volumen Lógico LVMvirt_guest_list.key.disk.[s|v]d[a-z].size
: [requerido, excepto al usar discos físicos]: Tamaño del disco virtual (por ejemplo,2048M
,10G
,1T
, también se pueden usar20%VG
u otros equivalentes para discos basados en LVM)virt_guest_list.key.disk.[s|v]d[a-z].device
: [requerido solo para discos físicos]: La ruta completa al disco físico en un hipervisor (por ejemplo,/dev/sdb
,/dev/nvme0n1
, etc.)virt_guest_list.key.disk.[s|v]da.fstype
: [opcional, predeterminadoxfs
]: Tipo de sistema de archivos para todas las particiones dentro de un disco virtual (por ejemplo,ext4
,ext3
, etc.)virt_guest_list.key.network
: [requerido]: Declaraciones de red(s) del invitado virtualvirt_guest_list.key.network.eth[0-9]
: [requerido]: El nombre de la interfaz de red en la máquina virtual (por ejemplo,eth0
,eth1
, etc.)virt_guest_list.key.network.eth[0-9].mac
: [requerido]: Dirección MAC de la interfaz de red virtual (por ejemplo,52:54:00:16:01:bc
, etc.)virt_guest_list.key.network.eth[0-9].bridge
: [requerido]: El nombre de la interfaz de puente en la que se incluirá la interfaz vnet (por ejemplo,br0
,bridge1
, etc.)virt_guest_list.key.network.eth[0-9].model
: [opcional, predeterminadovirtio
]: El modelo qemu de la interfaz de red virtual (por ejemplo,virtio
,e1000
,rtl8139
, etc.)virt_guest_list.key.network.eth0.ip
: [opcional]: Dirección IP estática para la interfaz de red principalvirt_guest_list.key.network.eth0.netmask
: [opcional]: Máscara de red para la interfaz de red principalvirt_guest_list.key.network.eth0.gateway
: [opcional]: Dirección IP de puerta de enlace para la interfaz de red principalvirt_guest_list.key.network.eth0.dns
: [opcional]: Servidor DNS primario. Esta opción solo admite un servidor DNS.virt_guest_list.key.vnc_enable
: [opcional, predeterminadofalse
]: Habilitar el servidor VNC en el lado de qemu-kvm para acceder a una máquina virtual
Dependencias
Rol serverbee.qemu_kvm
Ejemplo(s)
Ejemplo simple
---
- hosts: localhost
roles:
- serverbee.virt_guest_manage
vars:
virt_guest_list:
example-vm:
uuid: 7eb09567-83b8-4aab-916e-24924d6a0f89
disk:
sda:
vg: vg_local
lv: lv_vm_example
size: 10G
network:
eth0:
mac: 52:54:00:16:01:bc
bridge: br0
Ejemplo con todas las opciones
---
- hosts: localhost
roles:
- serverbee.virt_guest_manage
vars:
virt_network_list:
br-nat0:
router: 192.168.2.1
netmask: 255.255.255.0
start: 192.168.2.2
end: 192.168.2.254
virt_guest_list:
example-vm:
autostart: false
uuid: 7eb09567-83b8-4aab-916e-24924d6a0f89
cpu: 2 # Núcleos
ram: 4 # GiB
disk:
sda:
type: block
format: raw
vg: vg_local
lv: lv_vm_example-first
size: 20%VG
fstype: ext4
vdb:
type: file
format: qcow2
format_options: preallocation=metadata
name: example-second-drive
size: 5G
sdc:
device: /dev/nvme0n1
network:
eth0:
mac: 52:54:00:16:01:bc
bridge: br0
model: virtio
ip: 172.16.2.2
netmask: 255.255.255.248
gateway: 172.16.2.1
dns: 172.16.2.1
eth1:
mac: 52:54:00:16:02:ba
network: br-nat0
model: e1000
vnc_enable: true
¿Qué más?
Comprobando el progreso de la instalación de la VM
Primero, puedes verificar si tu VM responde a las solicitudes de ping. Si no responde, puedes usar la herramienta de línea de comando virsh
para ver la lista de todas tus VMs y comprobar el progreso de cada instalación. El comando Virsh se instala automáticamente como una dependencia de este rol. Puedes observar usando la opción console
:
$ virsh list --all
$ virsh console example-vm
Tiempo de espera para finalizar la instalación
Hay una variable llamada virt_guest_kickstart_installation_timeout
que, por defecto, se establece en 480 segundos. Si tienes problemas para apagar tu VM antes de finalizar la instalación, debes aumentar el tiempo de espera. También es mejor establecer el espejo más cercano, al menos en el mismo país que tu proveedor de hosting, para aumentar la velocidad de descarga. Puedes hacer esto cambiando las variables virt_guest_mirror
y virt_guest_os_location
.
Variables extras para gestionar solo una VM
Esta opción puede ser muy útil si tienes muchas máquinas virtuales pero deseas gestionar solo una de ellas. Esto hará que el playbook de Ansible se ejecute más rápido y sin aplicar algunos cambios a otras máquinas virtuales. Para hacerlo, debes establecer una variable extra llamada vm
cuando apliques tu playbook:
$ ansible-playbook virt-guest-manage.yml --extra-vars vm=example-vm
Solo admite pasar un nombre de máquina virtual a la vez.
Reejecutar una instalación de VM
Si has estado jugando con algo antes y deseas reejecutar una instalación, primero debes eliminar todas las partes existentes manualmente:
$ virsh list --all
$ virsh destroy example-vm
$ virsh undefine example-vm
$ lvremove vg_local/lv_vm_example
Este rol no admite reinstalar VMs automáticamente para evitar eliminar datos existentes y necesarios.
Licencia
Licencia GPLv3
Información del autor
Vitaly Yakovenko
ansible-galaxy install serverbee.virt_guest_manage