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 es volume. Las opciones incluyen block, file, network y volume.

  • libvirt_volume_default_format: Formato para los volúmenes creados por el rol. El valor predeterminado es qcow2. Las opciones incluyen raw, qcow2, vmdk. Consulta man virsh para la lista completa.

  • libvirt_volume_default_device: Controla cómo aparece el dispositivo en el sistema operativo huésped. El valor predeterminado es disk. Las opciones incluyen cdrom y disk.

  • 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 si libvirt_cpu_mode o vm.cpu_mode no están definidos.

  • libvirt_vm_arch: Arquitectura de la CPU, el valor predeterminado es x86_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 en localtime.

  • libvirt_vm_trust_guest_rx_filters: Si se deben confiar los filtros de recepción del huésped. Esto se asigna al atributo trustGuestRxFilters de las interfaces de VM. El valor predeterminado es false.

  • libvirt_vms: lista de máquinas virtuales a crear o destruir. Cada una puede tener los siguientes atributos:

    • state: establece en present para crear o absent para destruir la VM. El valor predeterminado es present.

    • name: el nombre que se asignará a la VM.

    • uuid: el UUID que se asignará manualmente a la VM. Si se especifica, ni uuid_deterministic ni libvirt_vm_default_uuid_deterministic se utilizan.

    • uuid_deterministic: sobreescribe el valor predeterminado en libvirt_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 es None si libvirt_vm_engine es kvm, de lo contrario pc-1.0.

    • cpu_mode: modo de CPU de la máquina virtual. El valor predeterminado es host-passthrough si libvirt_vm_engine es kvm, de lo contrario host-model. Se puede establecer en ninguno para no configurar un modo de CPU.

    • clock_offset: sobrescribe el valor predeterminado establecido en libvirt_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 para libvirt_volume_default_type son válidas aquí. El valor predeterminado es libvirt_volume_default_type.
      • pool: Nombre o UUID del grupo de almacenamiento del cual se debe asignar el volumen. Requerido cuando el type es volume.
      • name: Nombre asociado con el volumen que se está creando; Para volúmenes de tipo file, 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 tipo file; por defecto es libvirt_volume_default_images_path.
      • device: Controla cómo aparece el dispositivo en el sistema operativo huésped. Todas las opciones para libvirt_volume_default_device son válidas aquí. El valor predeterminado es libvirt_volume_default_type.
      • capacity: capacidad del volumen, puede ser seguido por k, M, G, T, P o E cuando el tipo es network o MB, GB, TB, etc., cuando el tipo es disk (requerido cuando el tipo es disk o network).
      • auth: Detalles de autenticación si son necesarios. Si se requiere autenticación, se deben proporcionar username, type y uuid o usage. uuid y usage no deben ser suministrados ambos.
      • source: De dónde proviene el volumen remoto cuando el tipo es network. Se deben proporcionar protocol, name y hosts_list. port es opcional.
      • format: Formato del volumen. Todas las opciones para libvirt_volume_default_format son válidas aquí. El valor predeterminado es libvirt_volume_default_format.
      • image: (opcional) una URL a una imagen con la que se inicializa el volumen (copia completa).
      • checksum: (opcional) checksum de la image 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 y backing_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 es block.
      • remote_src: (opcional) Cuando el tipo es file o block, especificar si image 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 controlador macvtap.
      • network: Nombre de la red a la que se debe adjuntar una interfaz. Debe especificarse si y solo si el type de la interfaz es network.

      • 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 el type de la interfaz es direct. Incluye los siguientes atributos:

        • dev: El nombre de la interfaz del host a la que debe estar conectada esta interfaz de VM.
        • mode: opciones incluyen vepa, bridge, private y passthrough. Consulta man virsh para más detalles. El valor predeterminado es vepa.
      • trust_guest_rx_filters: Si se deben confiar los filtros de recepción del huésped. Esto se asigna al atributo trustGuestRxFilters de las interfaces de VM. El valor predeterminado es libvirt_vm_trust_guest_rx_filters.

      • model: El nombre del modelo de la interfaz. Ejemplo: e1000 o ne2k_pci, si no se define, se establece en virtio.

      • 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 con ua- para cumplir con la normativa (los alias sin ua- son ignorados por libvirt). Si no se define, se establece en vnetX gestionado por libvirt.

    • console_log_enabled: si true, registra la salida de la consola en un archivo en la ruta especificada por console_log_path, en lugar de en un PTY. Si false, la salida del terminal se dirige a un PTY en el puerto serie 0. El valor predeterminado es false.

    • 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 es true.

    • autostart: Si se debe iniciar la VM cuando el host arranca. El valor predeterminado es true.

    • boot_firmware: Puede ser uno de: bios, o efi. El valor predeterminado es bios.

    • xml_file: Opcionalmente, proporciona una plantilla XML modificada. Personaliza a partir de la plantilla predeterminada vm.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

Acerca del proyecto

Role to configure and create VMs on a Libvirt/KVM hypervisor

Instalar
ansible-galaxy install stackhpc.libvirt-vm
Licencia
Unknown
Descargas
380.3k
Propietario
StackHPC develops OpenStack capabilities for research computing use cases. Through extensive experience, we understand HPC and cloud.