t2d.ansible_role_libvirt_vm
Libvirt VM
Ce rôle configure et crée (ou détruit) des VMs sur un hyperviseur KVM.
Exigences
L'hôte doit avoir la technologie de virtualisation (VT) activée et doit être préconfiguré avec libvirt/KVM.
Variables du Rôle
libvirt_vm_default_console_log_dir
: Le répertoire par défaut dans lequel stocker les journaux de console de la VM, si un chemin spécifique au journal de la VM n'est pas fourni. Par défaut, c'est "/var/log/libvirt/qemu/".libvirt_vm_image_cache_path
: Le répertoire dans lequel les images téléchargées sont mises en cache. Par défaut, c'est "/tmp/".libvirt_volume_default_images_path
: Répertoire dans lequel les images des instances sont stockées. Par défaut, c'est '/var/lib/libvirt/images'.libvirt_volume_default_type
: Quel type de volume de support utilise l'instance ? Par défaut, c'estvolume
.libvirt_volume_default_format
: Format pour les volumes créés par le rôle, par défaut c'estqcow2
.libvirt_volume_default_device
: Contrôle comment le dispositif apparaît dans le système d'exploitation invité. Par défaut, c'estdisk
.libvirt_vm_engine
: moteur de virtualisation. Si non défini, le rôle tentera 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
est indéfini.libvirt_vm_arch
: architecture CPU, par défaut c'estx86_64
.libvirt_vm_uri
: Surcharge l'URI de connexion de 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, le décalage de l'horloge des instances est réglé sur la valeur fournie. Lorsque non défini, la synchronisation est réglée surlocaltime
.libvirt_vms
: liste des VMs à créer ou 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.memory_mb
: la mémoire à attribuer à la VM, en mégaoctets.vcpus
: le nombre de cœurs de 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
: Surcharge la valeur par défaut définie danslibvirt_vm_clock_offset
.enable_vnc
: Si vrai, active l'écoute VNC sur localhost pour utilisation avec VirtManager et des outils similaires.volumes
: une liste de volumes à attacher à la VM. Chaque volume est défini par le dictionnaire suivant :pool
: Nom ou UUID du pool de stockage à partir duquel le volume doit être alloué.name
: Nom à associer au volume créé ; pour les volumes de typefile
, inclure l'extension si vous souhaitez que les volumes soient créés avec celle-ci.file_path
: Emplacement où l'image des volumes de typefile
doit être placée ; par défaut, c'estlibvirt_volume_default_images_path
.device
:disk
oucdrom
.capacity
: capacité du volume (peut être suffixée par M,G,T ou MB,GB,TB, etc.) (requise lorsque le type estdisk
).format
: options comprennentraw
,qcow2
,vmdk
. Voirman virsh
pour la gamme complète. Par défaut, c'estqcow2
.image
: (optionnel) une URL vers une image avec laquelle le volume est initialisé (copie complète).backing_image
: (optionnel) nom du volume de support qui doit déjà être dans le même pool (copy-on-write).image
etbacking_image
sont des options mutuellement exclusives.target
: (optionnel) Influence manuellement le type et l'ordre des volumes.
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'une 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 letype
d'interface estnetwork
.mac
: adresse "matérielle" de l'instance virtuelle, si absente, une adresse 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 letype
d'interface estdirect
. Comprend les attributs suivants :dev
: Le nom de l'interface hôte à laquelle cette interface VM doit être attachée.mode
: options comprennentvepa
,bridge
,private
etpassthrough
. Voirman virsh
pour plus de détails. Par défaut, c'estvepa
.
console_log_enabled
: sitrue
, enregistre la sortie de la console dans un fichier au chemin spécifié parconsole_log_path
, au lieu de sur un PTY. Sifalse
, la sortie terminale est dirigée vers un PTY au port série 0. Par défaut, c'estfalse
.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 l'avoir définie. Par défaut, c'esttrue
.autostart
: Indique s'il faut démarrer la VM lorsque l'hôte démarre. Par défaut, c'esttrue
.xml_file
: Optionnellement fournir un modèle XML modifié. Basez la personnalisation sur le modèle par défautvm.xml.j2
afin d'inclure les expressions jinja attendues que le rôle utilise.
N.B. Les variables suivantes sont dépréciées : 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 singleton contenant une spécification de VM utilisant ces variables dépréciées.
Dépendances
Si vous utilisez des disques au format qcow2, qemu-img (dans le package qemu-utils) est requis.
Exemple de Playbook
---
- name: Créer des VMs
hosts: hyperviseur
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' # premier dispositif sur le bus ide
interfaces:
- network: 'br-datacentre'
- 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'
Informations sur l'Auteur
- Mark Goddard (mark@stackhpc.com)