serverbee.virt_guest_manage
Rôle de gestion des machines virtuelles
Ce rôle utilise le module virt ansible officiel pour gérer les machines virtuelles basées sur RHEL en utilisant KVM comme hyperviseur. Par défaut, il utilise le fork AlmaLinux de RHEL. Vous pouvez contrôler toutes vos machines virtuelles directement via les paramètres dans group_vars ou host_vars. La principale caractéristique de ce rôle est l'installation parallèle de toutes les machines virtuelles définies dans virt_guest_list
.
Pour commencer
Versions des distributions prises en charge au niveau de la machine virtuelle
- CentOS el6 (non testé avec les dernières versions du rôle)
- CentOS el7
- AlmaLinux el8
- AlmaLinux el9
Mise à jour des valeurs par défaut selon vos besoins
Tout d'abord, vous devez mettre à jour virt_guest_init_passwd
en définissant un mot de passe personnalisé. Deuxièmement, vous devez trouver et définir le miroir le plus proche pour télécharger tous les composants de l'installateur basé sur RHEL.
En dehors du périmètre de ce rôle
Ce rôle peut gérer les disques virtuels basés sur LVM pour les machines virtuelles, mais vous devez créer un Volume Physique (PVS) et un Groupe de Volumes (VGS) avant de l'utiliser. Il existe également deux options pour les interfaces réseau virtuelles des machines virtuelles. La première consiste à utiliser un pont Linux existant et déjà configuré, et la deuxième à utiliser le réseau libvirt. De toute façon, la dernière option peut être gérée avec virt_network_list
directement depuis ce rôle.
Variables
Général
virt_guest_dependency_qemu_kvm_role
: [optionnel, par défauttrue
]: Activer ou non un rôle de dépendance pour qemu-kvmvirt_guest_mirror
: [par défaut:http://repo.almalinux.org
]: Miroir AlmaLinux utilisé pour installer le système d'exploitationvirt_guest_os_location
: [par défaut:{{ virt_guest_mirror }}/almalinux/9/BaseOS/x86_64/os
]: Chemin d'emplacement où se trouvent les composants du système d'exploitation AlmaLinuxvirt_guest_kickstart_config_dir
: [par défaut:/tmp/kickstart
]: Chemin où les fichiers kickstart seront créésvirt_guest_kickstart_config_port
: [par défaut:8000
]: Port pour télécharger la configuration kickstart pendant l'installationvirt_guest_kickstart_config_url
: [par défaut:ip de l'hyperviseur
]: URL pour télécharger la configuration kickstart pendant l'installationvirt_guest_kickstart_config_serve_timeout
: [par défaut:90
]: Temps en secondes pour servir les fichiers kickstartvirt_guest_kickstart_installation_timeout
: [par défaut:480
]: Temps en secondes pour terminer une installation kickstartvirt_guest_init_passwd
: [ requis]: Mot de passe de l'utilisateur root que vous utiliserez pour la première connexionvirt_guest_init_hostname
: [par défaut:fresh-installed.local
]: Le premier nom d'hôte au niveau du système d'exploitation de la machine virtuelle
Liste des réseaux virtuels et ses propres paramètres
virt_network_list
: [requis, par défaut:{}
]: Déclarations de réseau virtuelvirt_network_list.key
: [requis]: Nom du réseau virtuel (par exemple,br-nat0:
)virt_network_list.key.router
: [requis]: Adresse IP du routeur virtuel (par exemple,192.168.2.1
)virt_network_list.key.netmask
: [requis]: Masque de réseau du réseau virtuel (par exemple,255.255.255.0
)virt_network_list.key.start
: [requis]: Première adresse IP de la plage du réseau virtuel (par exemple,192.168.2.1
)virt_network_list.key.end
: [requis]: Dernière adresse IP de la plage du réseau virtuel (par exemple,192.168.2.254
)
Liste des machines virtuelles et ses propres paramètres
virt_guest_list
: [requis, par défaut:{}
]: Déclarations des invités virtuelsvirt_guest_list.key
: [requis]: Nom de la machine virtuelle (par exemple,example-vm:
)virt_guest_list.key.autostart
: [optionnel, par défauttrue
]: Activer ou non le démarrage automatique de la machine virtuellevirt_guest_list.key.uuid
: [requis]: Identifiant unique universel de la machine virtuelle (par exemple,ad852ffe-07d9-43ec-9f5a-ced644f9a7a5
)virt_guest_list.key.cpu
: [optionnel, par défaut1
]: Définir les limites de cœurs de CPUvirt_guest_list.key.ram
: [optionnel, par défaut2
]: Définir les limites de RAM. Cette valeur est en GiBvirt_guest_list.key.disk
: [requis]: Déclarations du ou des disques de l'invité virtuelvirt_guest_list.key.disk.[s|v]d[a-z]
: [requis]: Nom du disque virtuel dans la machine virtuelle (par exemple,sda
,sdb
,sdc
, etc. ouvda
,vdb
,vdc
, etc.)virt_guest_list.key.disk.[s|v]d[a-z].type
: [optionnel, par défautblock
]: Type de disque virtuel (par exemple,block
,file
)virt_guest_list.key.disk.[s|v]d[a-z].name
: [requis uniquement pour.type: file
]: Nom du fichier de disque virtuel qemuvirt_guest_list.key.disk.[s|v]d[a-z].format
: [optionnel, par défautraw
]: Type de format qemu du disque virtuel (par exemple,raw
,qcow2
)virt_guest_list.key.disk.[s|v]d[a-z].format_options
: [optionnel, par défautpreallocation=off
]: Options de format du disque qemu (par exemple,preallocation=metadata
)virt_guest_list.key.disk.[s|v]d[a-z].vg
: [requis uniquement pour.type: block
]: Nom du groupe de volumes LVMvirt_guest_list.key.disk.[s|v]d[a-z].lv
: [requis uniquement pour.type: block
]: Nom du volume logique LVMvirt_guest_list.key.disk.[s|v]d[a-z].size
: [requis, sauf en cas d'utilisation de disques physiques]: Taille du disque virtuel (par exemple,2048M
,10G
,1T
, aussi20%VG
ou tout équivalent peut être utilisé pour les disques basés sur LVM)virt_guest_list.key.disk.[s|v]d[a-z].device
: [requis uniquement pour les disques physiques]: Chemin complet vers le disque physique sur un hyperviseur (par exemple,/dev/sdb
,/dev/nvme0n1
, etc.)virt_guest_list.key.disk.[s|v]da.fstype
: [optionnel, par défautxfs
]: Type de système de fichiers pour toutes les partitions à l'intérieur d'un disque virtuel (par exemple,ext4
,ext3
, etc.)virt_guest_list.key.network
: [requis]: Déclarations du ou des réseaux de l'invité virtuelvirt_guest_list.key.network.eth[0-9]
: [requis]: Nom de l'interface réseau dans la machine virtuelle (par exemple,eth0
,eth1
, etc.)virt_guest_list.key.network.eth[0-9].mac
: [requis]: Adresse MAC de l'interface réseau virtuelle (par exemple,52:54:00:16:01:bc
, etc.)virt_guest_list.key.network.eth[0-9].bridge
: [requis]: Nom de l'interface de pont dans laquelle l'interface vnet sera incluse (par exemple,br0
,bridge1
, etc.)virt_guest_list.key.network.eth[0-9].model
: [optionnel, par défautvirtio
]: Le modèle qemu de l'interface réseau virtuelle (par exemple,virtio
,e1000
,rtl8139
, etc.)virt_guest_list.key.network.eth0.ip
: [optionnel]: Adresse IP statique pour l'interface réseau principalevirt_guest_list.key.network.eth0.netmask
: [optionnel]: Masque de réseau pour l'interface réseau principalevirt_guest_list.key.network.eth0.gateway
: [optionnel]: Adresse IP de la passerelle pour l'interface réseau principalevirt_guest_list.key.network.eth0.dns
: [optionnel]: Serveur DNS principal. Cette option ne prend en charge qu'un seul serveur DNS.virt_guest_list.key.vnc_enable
: [optionnel, par défautfalse
]: Activer le serveur VNC du côté qemu-kvm pour accéder à une machine virtuelle
Dépendances
Rôle serverbee.qemu_kvm
Exemple(s)
Exemple 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
Exemple complet avec toutes les options
---
- 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 # Cœurs
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
Quoi d'autre ?
Vérification de l'avancement de l'installation de la VM
Tout d'abord, vous pouvez vérifier si votre VM répond aux requêtes ping. Si elle ne répond pas, vous pouvez utiliser l'outil en ligne de commande virsh
pour voir la liste de toutes vos VMs et vérifier l'avancement de chaque installation. La commande Virsh s'installe automatiquement comme dépendance pour ce rôle. Vous pouvez surveiller avec l'option console
:
$ virsh list --all
$ virsh console example-vm
Délai d'expiration pour terminer l'installation
Il existe une variable nommée virt_guest_kickstart_installation_timeout
qui est par défaut fixée à 480 secondes. Si vous rencontrez des problèmes pour arrêter votre VM avant la fin de son installation, vous devez augmenter le délai d'expiration. Il est également préférable de définir le miroir le plus proche, au moins dans le même pays que votre hébergeur, pour augmenter la vitesse de téléchargement. Vous pouvez le faire en modifiant les variables virt_guest_mirror
et virt_guest_os_location
.
Extra vars pour gérer une seule VM
Cette option peut être très utile si vous avez de nombreuses machines virtuelles, mais que vous souhaitez en gérer uniquement une. Cela exécutera le playbook Ansible plus rapidement et sans appliquer certaines choses à d'autres machines virtuelles. Pour cela, vous devez définir une variable supplémentaire appelée vm
lorsque vous appliquez votre playbook:
$ ansible-playbook virt-guest-manage.yml --extra-vars vm=example-vm
Cela prend en charge uniquement un nom de machine virtuelle à la fois.
Réexécution d'une installation de VM
Si vous avez fait des essais avant et souhaitez relancer une installation, vous devez d'abord supprimer toutes les parties existantes manuellement:
$ virsh list --all
$ virsh destroy example-vm
$ virsh undefine example-vm
$ lvremove vg_local/lv_vm_example
Ce rôle ne prend pas en charge la réinstallation automatique des VMs afin d'éviter la suppression de données existantes et nécessaires.
Licence
Licence GPLv3
Informations sur l'auteur
Vitaly Yakovenko
ansible-galaxy install serverbee.virt_guest_manage