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, predeterminado true]: Si habilitar un rol de dependencia para qemu-kvm
  • virt_guest_mirror: [predeterminado: http://repo.almalinux.org]: Espejo de Almalinux que se utilizará para instalar el sistema operativo
  • virt_guest_os_location: [predeterminado: {{ virt_guest_mirror }}/almalinux/9/BaseOS/x86_64/os]: Ruta de ubicación donde se almacenan los componentes de Almalinux
  • virt_guest_kickstart_config_dir: [predeterminado: /tmp/kickstart]: Ruta donde se crearán los archivos de kickstart
  • virt_guest_kickstart_config_port: [predeterminado: 8000]: Puerto para descargar la configuración de kickstart durante la instalación
  • virt_guest_kickstart_config_url: [predeterminado: ip de un hipervisor]: URL para descargar la configuración de kickstart durante la instalación
  • virt_guest_kickstart_config_serve_timeout: [predeterminado: 90]: Tiempo en segundos para servir los archivos de kickstart
  • virt_guest_kickstart_installation_timeout: [predeterminado: 480]: Tiempo en segundos para finalizar una instalación de kickstart
  • virt_guest_init_passwd: [requerido]: Contraseña del usuario root que usarás para el primer inicio
  • virt_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 virtuales
  • virt_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 virtuales
  • virt_guest_list.key: [requerido]: El nombre de la máquina virtual (por ejemplo, example-vm:)
  • virt_guest_list.key.autostart: [opcional, predeterminado true]: Si habilitar el inicio automático para la máquina virtual
  • virt_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, predeterminado 1]: Establecer límites de núcleos de CPU
  • virt_guest_list.key.ram: [opcional, predeterminado 2]: Establecer límites de RAM. Este valor se establece en GiB
  • virt_guest_list.key.disk: [requerido]: Declaraciones de disco(s) del invitado virtual
  • virt_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. o vda, vdb, vdc, etc.)
  • virt_guest_list.key.disk.[s|v]d[a-z].type: [opcional, predeterminado block]: 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 qemu
  • virt_guest_list.key.disk.[s|v]d[a-z].format: [opcional, predeterminado raw]: El tipo de formato de disco qemu (por ejemplo, raw, qcow2)
  • virt_guest_list.key.disk.[s|v]d[a-z].format_options: [opcional, predeterminado preallocation=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 LVM
  • virt_guest_list.key.disk.[s|v]d[a-z].lv: [requerido solo para .type: block]: El nombre del Volumen Lógico LVM
  • virt_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 usar 20%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, predeterminado xfs]: 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 virtual
  • virt_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, predeterminado virtio]: 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 principal
  • virt_guest_list.key.network.eth0.netmask: [opcional]: Máscara de red para la interfaz de red principal
  • virt_guest_list.key.network.eth0.gateway: [opcional]: Dirección IP de puerta de enlace para la interfaz de red principal
  • virt_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, predeterminado false]: 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

Acerca del proyecto

Role to install and manage KVM VMs.

Instalar
ansible-galaxy install serverbee.virt_guest_manage
Licencia
Unknown
Descargas
76
Propietario