stackhpc.libvirt-vm

VM Libvirt

Ce rôle configure et crée (ou détruit) des VM sur un hyperviseur KVM.

Exigences

L'hôte doit avoir la technologie de virtualisation (VT) activée et être préconfiguré avec libvirt/KVM.

Variables de rôle

  • libvirt_vm_default_console_log_dir: Répertoire par défaut pour stocker les journaux de console des VM, si aucun chemin spécifique n'est donné. Par défaut, c'est "/var/log/libvirt-consoles".

  • libvirt_vm_default_uuid_deterministic: Indique si l’UUID doit être calculé en hachant le nom de la VM. Sinon, l’UUID est généré aléatoirement par libvirt lors de la définition de la VM. Par défaut, c'est Faux.

  • libvirt_vm_image_cache_path: Répertoire pour mettre en cache les images téléchargées. Par défaut, c'est "/tmp/".

  • libvirt_volume_default_images_path: Répertoire où les images d'instance sont stockées. Par défaut, c'est '/var/lib/libvirt/images'.

  • libvirt_volume_default_type: Quel type de volume de soutien utilise l'instance ? Par défaut, c'est volume. Les options incluent block, file, network et volume.

  • libvirt_volume_default_format: Format des volumes créés par le rôle. Par défaut, c'est qcow2. Les options incluent raw, qcow2, vmdk. Voir man virsh pour la liste complète.

  • libvirt_volume_default_device: Contrôle l'apparence du périphérique dans le système d'exploitation invité. Par défaut, c'est disk. Les options incluent cdrom et disk.

  • libvirt_vm_engine: moteur de virtualisation. Si non défini, le rôle essaiera de détecter automatiquement le moteur optimal à utiliser.

  • libvirt_vm_emulator: chemin vers le binaire de l'émulateur. Si non défini, le rôle tentera de détecter automatiquement l'émulateur correct à utiliser.

  • libvirt_cpu_mode_default: Le mode CPU par défaut si libvirt_cpu_mode ou vm.cpu_mode n'est pas défini.

  • libvirt_vm_arch: Architecture du CPU, par défaut c'est x86_64.

  • libvirt_vm_uri: Remplace l'URI de connexion libvirt. Voir la documentation de libvirt pour plus de détails.

  • libvirt_vm_virsh_default_env: Les variables contenues dans ce dictionnaire sont ajoutées à l'environnement utilisé lors de l'exécution des commandes virsh.

  • libvirt_vm_clock_offset: Si défini, l'offset d'horloge des instances est réglé sur la valeur fournie. Lorsque non défini, la synchronisation est réglée sur localtime.

  • libvirt_vm_trust_guest_rx_filters: Indique s'il faut faire confiance aux filtres de réception des invités. Cela est mappé à l'attribut trustGuestRxFilters des interfaces de VM. Par défaut, c'est faux.

  • libvirt_vms: liste des VM à créer/détruire. Chacune peut avoir les attributs suivants :

    • state: défini sur present pour créer ou absent pour détruire la VM. Par défaut, c'est present.

    • name: le nom à attribuer à la VM.

    • uuid: l'UUID à attribuer manuellement à la VM. Si spécifié, ni uuid_deterministic ni libvirt_vm_default_uuid_deterministic ne sont utilisés.

    • uuid_deterministic: remplace la valeur par défaut définie dans libvirt_vm_default_uuid_deterministic.

    • memory_mb: la mémoire à attribuer à la VM, en mégaoctets.

    • vcpus: le nombre de cœurs VCPU à attribuer à la VM.

    • machine: type de machine virtuelle. Par défaut, c'est None si libvirt_vm_engine est kvm, sinon pc-1.0.

    • cpu_mode: mode CPU de la machine virtuelle. Par défaut, c'est host-passthrough si libvirt_vm_engine est kvm, sinon host-model. Peut être défini sur aucun pour ne pas configurer de mode CPU.

    • clock_offset: remplace la valeur par défaut définie dans libvirt_vm_clock_offset.

    • enable_vnc: Si vrai, active l'écoute VNC sur localhost pour une utilisation avec VirtManager et des outils similaires.

    • enable_spice: Si vrai, active l'écoute SPICE pour une utilisation avec Virtual Machine Manager et des outils similaires.

    • enable_guest_virtio: Si vrai, active le périphérique virtio de l'invité pour une utilisation avec l'agent invité Qemu.

    • volumes: une liste de volumes à attacher à la VM. Chaque volume est défini par le dictionnaire suivant :

      • type: Quel type de volume de soutien utilise l'instance ? Toutes les options pour libvirt_volume_default_type sont valides ici. Par défaut, c'est libvirt_volume_default_type.

      • pool: Nom ou UUID de la piscine de stockage à partir de laquelle le volume doit être alloué. Obligatoire lorsque type est volume.

      • name: Nom à associer au volume créé ; Pour les volumes de type file, incluez l'extension si vous souhaitez que les volumes soient créés avec celle-ci.

      • file_path: Où l'image des volumes de type file doit être placée ; par défaut, c'est libvirt_volume_default_images_path.

      • device: Contrôle l'apparence du périphérique dans le système d'exploitation invité. Toutes les options pour libvirt_volume_default_device sont valides ici. Par défaut, c'est libvirt_volume_default_type.

      • capacity: capacité du volume, peut être suffixée avec k, M, G, T, P ou E lorsque le type est network ou MB, GB, TB, etc. lorsque le type est disk (requise lorsque le type est disk ou network).

      • auth: Détails d'authentification si requis. Si une authentification est nécessaire, username, type et uuid ou usage devront être fournis. uuid et usage ne doivent pas être tous deux fournis.

      • source: D'où provient le volume distant lorsque le type est network. protocol, name et hosts_list doivent être fournis. port est optionnel.

      • format: Format du volume. Toutes les options pour libvirt_volume_default_format sont valides ici. Par défaut, c'est libvirt_volume_default_format.

      • image: (optionnel) une URL vers une image avec laquelle le volume est initialisé (copie complète).

      • checksum: (optionnel) somme de contrôle de l'image pour éviter le téléchargement lorsqu'il n'est pas nécessaire.

      • backing_image: (optionnel) nom du volume de soutien qui est supposé être déjà dans la même piscine (copie sur écriture).

      • image et backing_image sont des options mutuellement exclusives.

      • target: (optionnel) Influence manuellement le type et l'ordre des volumes.

      • dev: (optionnel) Chemin du périphérique de bloc lorsque le type est block.

      • remote_src: (optionnel) Lorsque le type est file ou block, précisez si l'image pointe vers un fichier distant (vrai) ou un fichier local à l'hôte qui a lancé le playbook (faux). Par défaut, c'est vrai.

    • usb_devices: une liste de périphériques USB à présenter à la VM depuis l'hôte.

      Chaque périphérique USB est défini par le dictionnaire suivant :

      • vendor: L'ID du vendeur du périphérique USB.
      • product: L'ID du produit du périphérique USB.

      Remarque - Libvirt générera une erreur si la VM est provisionnée et que le périphérique USB n'est pas attaché.

      Pour obtenir l'ID du vendeur et l'ID du produit du périphérique USB depuis l'hôte, exécutez lsusb -v en tant que sudo / root avec le périphérique USB branché. Exemple ci-dessous avec une clé USB Sandisk attachée ayant l'ID du vendeur : 0x0781 et l'ID du produit : 0x5567.

      lsusb -v | grep -A4 -i sandisk
      
        idVendor           0x0781 SanDisk Corp.
        idProduct          0x5567 Cruzer Blade
        bcdDevice            1.00
        iManufacturer           1 
        iProduct                2 
      
    • interfaces: une liste d'interfaces réseau à attacher à la VM. Chaque interface réseau est définie par le dictionnaire suivant :

      • type: Le type de l'interface. Valeurs possibles :

        • network: Attache l'interface à un réseau virtuel libvirt nommé. C'est la valeur par défaut.
        • direct: Attache directement l'interface à l'un des interfaces physiques de l'hôte, en utilisant le pilote macvtap.
      • network: Nom du réseau auquel une interface doit être attachée. Doit être spécifié si et seulement si le type d'interface est network.

      • mac: "Adresse matérielle" de l'instance virtuelle, s'il est absent, une est créée.

      • source: Un dictionnaire définissant l'interface hôte à laquelle cette interface VM doit être attachée. Doit être spécifié si et seulement si le type d'interface est direct. Comprend les attributs suivants :

        • dev: Le nom de l'interface hôte à laquelle cette interface VM doit être attachée.
        • mode: les options incluent vepa, bridge, private et passthrough. Voir man virsh pour plus de détails. Par défaut, c'est vepa.
      • trust_guest_rx_filters: Indique s'il faut faire confiance aux filtres de réception des invités. Cela est mappé à l'attribut trustGuestRxFilters des interfaces de VM. Par défaut, c'est libvirt_vm_trust_guest_rx_filters.

      • model: Le nom du modèle de l'interface. Par exemple, e1000 ou ne2k_pci, s'il n'est pas défini, il par defaut sur virtio.

      • alias: Un alias d'interface optionnel. Cela peut être utilisé pour lier une configuration réseau spécifique à des périphériques réseau persistants par nom. L'alias défini par l'utilisateur est toujours préfixé par ua- pour être conforme (les alias sans ua- sont ignorés par libvirt). S'il n'est pas défini, il par défaut à la gestion libvirt vnetX.

    • console_log_enabled: si vrai, enregistre la sortie de la console dans un fichier au chemin spécifié par console_log_path, au lieu de dans un PTY. Si faux, la sortie terminale est dirigée vers un PTY au port série 0. Par défaut, c'est faux.

    • console_log_path: Chemin vers le fichier de journal de console. Par défaut, c'est {{ libvirt_vm_default_console_log_dir }}/{{ name }}-console.log.

    • start: Indique s'il faut immédiatement démarrer la VM après sa définition. Par défaut, c'est vrai.

    • autostart: Indique s'il faut démarrer la VM lorsque l'hôte démarre. Par défaut, c'est vrai.

    • boot_firmware: Peut être l'un des suivants : bios, ou efi. Par défaut, c'est bios.

    • xml_file: Fournir éventuellement un modèle XML modifié. Basez la personnalisation sur le modèle par défaut vm.xml.j2 afin d'inclure les expressions jinja attendues par le rôle.

Remarque : les variables suivantes sont obsolètes : 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 et libvirt_vm_console_log_path. Si la variable libvirt_vms est laissée non définie, sa valeur par défaut sera une liste unique contenant une spécification de VM utilisant ces variables obsolètes.

Dépendances

Si vous utilisez des disques au format qcow2, qemu-img (dans le paquet qemu-utils) est requis.

Exemple de Playbook

---
- nom: Créer des VMs
  hôtes: hyperviseur
  rôles:
    - rôle: stackhpc.libvirt-vm
      libvirt_vms:
        - état: présent
          nom: 'vm1'
          memory_mb: 512
          vcpus: 2
          volumes:
            - nom: 'data1'
              device: 'disk'
              format: 'qcow2'
              capacity: '400GB'
              pool: 'my-pool'
            - nom: 'debian-10.2.0-amd64-netinst.iso'
              type: 'file'
              device: 'cdrom'
              format: 'raw'
              target: 'hda'  # premier périphérique sur le bus ide
            - nom: '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'

        - état: présent
          nom: 'vm2'
          memory_mb: 1024
          vcpus: 1
          volumes:
            - nom: 'data2'
              device: 'disk'
              format: 'qcow2'
              capacity: '200GB'
              pool: 'my-pool'
            - nom: 'filestore'
              type: 'file'
              file_path: '/srv/cloud/images'
              capacity: '900GB'
          interfaces:
            - type: 'direct'
              source:
                dev: 'eth123'
                mode: 'private'
            - type: 'bridge'
              source:
                dev: 'br-datacentre'

Informations de l'Auteur

À propos du projet

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

Installer
ansible-galaxy install stackhpc.libvirt-vm
Licence
Unknown
Téléchargements
380.3k
Propriétaire
StackHPC develops OpenStack capabilities for research computing use cases. Through extensive experience, we understand HPC and cloud.