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'estvolume
. Les options incluentblock
,file
,network
etvolume
.libvirt_volume_default_format
: Format des volumes créés par le rôle. Par défaut, c'estqcow2
. Les options incluentraw
,qcow2
,vmdk
. Voirman 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'estdisk
. Les options incluentcdrom
etdisk
.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 silibvirt_cpu_mode
ouvm.cpu_mode
n'est pas défini.libvirt_vm_arch
: Architecture du CPU, par défaut c'estx86_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 surlocaltime
.libvirt_vm_trust_guest_rx_filters
: Indique s'il faut faire confiance aux filtres de réception des invités. Cela est mappé à l'attributtrustGuestRxFilters
des interfaces de VM. Par défaut, c'estfaux
.libvirt_vms
: liste des VM à créer/détruire. Chacune peut avoir les attributs suivants :state
: défini surpresent
pour créer ouabsent
pour détruire la VM. Par défaut, c'estpresent
.name
: le nom à attribuer à la VM.uuid
: l'UUID à attribuer manuellement à la VM. Si spécifié, niuuid_deterministic
nilibvirt_vm_default_uuid_deterministic
ne sont utilisés.uuid_deterministic
: remplace la valeur par défaut définie danslibvirt_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'estNone
silibvirt_vm_engine
estkvm
, sinonpc-1.0
.cpu_mode
: mode CPU de la machine virtuelle. Par défaut, c'esthost-passthrough
silibvirt_vm_engine
estkvm
, sinonhost-model
. Peut être défini sur aucun pour ne pas configurer de mode CPU.clock_offset
: remplace la valeur par défaut définie danslibvirt_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 pourlibvirt_volume_default_type
sont valides ici. Par défaut, c'estlibvirt_volume_default_type
.pool
: Nom ou UUID de la piscine de stockage à partir de laquelle le volume doit être alloué. Obligatoire lorsquetype
estvolume
.name
: Nom à associer au volume créé ; Pour les volumes de typefile
, incluez l'extension si vous souhaitez que les volumes soient créés avec celle-ci.file_path
: Où l'image des volumes de typefile
doit être placée ; par défaut, c'estlibvirt_volume_default_images_path
.device
: Contrôle l'apparence du périphérique dans le système d'exploitation invité. Toutes les options pourlibvirt_volume_default_device
sont valides ici. Par défaut, c'estlibvirt_volume_default_type
.capacity
: capacité du volume, peut être suffixée avec k, M, G, T, P ou E lorsque le type estnetwork
ou MB, GB, TB, etc. lorsque le type estdisk
(requise lorsque le type estdisk
ounetwork
).auth
: Détails d'authentification si requis. Si une authentification est nécessaire,username
,type
etuuid
ouusage
devront être fournis.uuid
etusage
ne doivent pas être tous deux fournis.source
: D'où provient le volume distant lorsque le type estnetwork
.protocol
,name
ethosts_list
doivent être fournis.port
est optionnel.format
: Format du volume. Toutes les options pourlibvirt_volume_default_format
sont valides ici. Par défaut, c'estlibvirt_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
etbacking_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 estblock
.remote_src
: (optionnel) Lorsque le type estfile
oublock
, 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 pilotemacvtap
.
network
: Nom du réseau auquel une interface doit être attachée. Doit être spécifié si et seulement si le type d'interface estnetwork
.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 estdirect
. Comprend les attributs suivants :dev
: Le nom de l'interface hôte à laquelle cette interface VM doit être attachée.mode
: les options incluentvepa
,bridge
,private
etpassthrough
. Voirman virsh
pour plus de détails. Par défaut, c'estvepa
.
trust_guest_rx_filters
: Indique s'il faut faire confiance aux filtres de réception des invités. Cela est mappé à l'attributtrustGuestRxFilters
des interfaces de VM. Par défaut, c'estlibvirt_vm_trust_guest_rx_filters
.model
: Le nom du modèle de l'interface. Par exemple,e1000
oune2k_pci
, s'il n'est pas défini, il par defaut survirtio
.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é parua-
pour être conforme (les alias sansua-
sont ignorés par libvirt). S'il n'est pas défini, il par défaut à la gestion libvirtvnetX
.
console_log_enabled
: sivrai
, enregistre la sortie de la console dans un fichier au chemin spécifié parconsole_log_path
, au lieu de dans un PTY. Sifaux
, la sortie terminale est dirigée vers un PTY au port série 0. Par défaut, c'estfaux
.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'estvrai
.autostart
: Indique s'il faut démarrer la VM lorsque l'hôte démarre. Par défaut, c'estvrai
.boot_firmware
: Peut être l'un des suivants :bios
, ouefi
. Par défaut, c'estbios
.xml_file
: Fournir éventuellement un modèle XML modifié. Basez la personnalisation sur le modèle par défautvm.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
- Mark Goddard (mark@stackhpc.com)
Role to configure and create VMs on a Libvirt/KVM hypervisor
ansible-galaxy install stackhpc.libvirt-vm