stackhpc.libvirt-vm
Libvirt VM
Diese Rolle konfiguriert und erstellt (oder löscht) VMs auf einem KVM-Hypervisor.
Anforderungen
Der Host sollte Virtualisierungstechnologie (VT) aktiviert haben und vorab mit libvirt/KVM vorkonfiguriert sein.
Variablen der Rolle
libvirt_vm_default_console_log_dir
: Das Standardverzeichnis, in dem VM-Konsoleprotokolle gespeichert werden, wenn kein spezifischer Protokollpfad für die VM angegeben ist. Standard ist "/var/log/libvirt-consoles".libvirt_vm_default_uuid_deterministic
: Ob die UUID durch Hashing des VM-Namens berechnet werden soll. Wenn nicht, wird die UUID zufällig von libvirt generiert, wenn die VM definiert wird. Standard ist False.libvirt_vm_image_cache_path
: Das Verzeichnis, in dem heruntergeladene Images zwischengespeichert werden. Standard ist "/tmp/".libvirt_volume_default_images_path
: Verzeichnis, in dem Instanz-Images gespeichert werden. Standard ist '/var/lib/libvirt/images'.libvirt_volume_default_type
: Welchen Typ von Speichervolume verwendet die Instanz? Standard istvolume
. Optionen sindblock
,file
,network
undvolume
.libvirt_volume_default_format
: Format für von der Rolle erstellte Volumes. Standard istqcow2
. Optionen sindraw
,qcow2
,vmdk
. Sieheman virsh
für die vollständige Liste.libvirt_volume_default_device
: Kontrolliert, wie das Gerät im Gastsystem erscheint. Standard istdisk
. Optionen sindcdrom
unddisk
.libvirt_vm_engine
: Virtualisierungs-Engine. Wenn nicht gesetzt, versucht die Rolle, die optimale Engine automatisch zu erkennen.libvirt_vm_emulator
: Pfad zur Emulator-Binärdatei. Wenn nicht gesetzt, versucht die Rolle, den richtigen Emulator automatisch zu erkennen.libvirt_cpu_mode_default
: Der Standard-CPU-Modus, fallslibvirt_cpu_mode
odervm.cpu_mode
nicht definiert sind.libvirt_vm_arch
: CPU-Architektur, Standard istx86_64
.libvirt_vm_uri
: Überschreibt die libvirt-Verbindungs-URI. Siehe die libvirt-Dokumentation für weitere Details.libvirt_vm_virsh_default_env
: Variablen, die in diesem Dictionary enthalten sind, werden zur Umgebung hinzugefügt, die beim Ausführen von virsh-Befehlen verwendet wird.libvirt_vm_clock_offset
: Wenn definiert, wird der Zeitversatz der Instanz auf den angegebenen Wert gesetzt. Wenn undefiniert, wird die Uhrzeit auflocaltime
synchronisiert.libvirt_vm_trust_guest_rx_filters
: Ob Gastempfangsfilter vertraut werden sollen. Dies wird dem AttributtrustGuestRxFilters
der VM-Schnittstellen zugeordnet. Standard istfalse
.libvirt_vms
: Liste der zu erstellenden oder zu löschenden VMs. Jede VM kann die folgenden Attribute haben:state
: aufpresent
setzen, um die VM zu erstellen, oderabsent
, um die VM zu löschen. Standard istpresent
.name
: Der Name, der der VM zugewiesen werden soll.uuid
: Die UUID, die manuell der VM zugewiesen werden soll. Wenn angegeben, werden wederuuid_deterministic
nochlibvirt_vm_default_uuid_deterministic
verwendet.uuid_deterministic
: Überschreibt den Standardwert inlibvirt_vm_default_uuid_deterministic
.memory_mb
: Der Arbeitsspeicher, der der VM in Megabyte zugewiesen werden soll.vcpus
: Die Anzahl der VCPU-Kerne, die der VM zugewiesen werden sollen.machine
: Typ der virtuellen Maschine. Standard istNone
, wennlibvirt_vm_engine
kvm
ist, sonstpc-1.0
.cpu_mode
: CPU-Modus der virtuellen Maschine. Standard isthost-passthrough
, wennlibvirt_vm_engine
kvm
ist, sonsthost-model
. Kann auf none gesetzt werden, um keinen CPU-Modus zu konfigurieren.clock_offset
: Überschreibt den Standardwert inlibvirt_vm_clock_offset
.enable_vnc
: Wenn true, aktiviert VNC-Listening auf localhost zur Verwendung mit VirtManager und ähnlichen Tools.enable_spice
: Wenn true, aktiviert SPICE-Listening zur Verwendung mit Virtual Machine Manager und ähnlichen Tools.enable_guest_virtio
: Wenn true, aktiviert das Gast-Virtio-Gerät zur Verwendung mit dem Qemu-Gast-Agenten.volumes
: Eine Liste von Volumes, die der VM zugeordnet werden sollen. Jedes Volume wird mit dem folgenden Dictionary definiert:type
: Welchen Typ von Speichervolume verwendet die Instanz? Alle Optionen fürlibvirt_volume_default_type
sind hier gültig. Standard istlibvirt_volume_default_type
.pool
: Name oder UUID des Speicherpools, aus dem das Volume zugewiesen werden soll. Erforderlich, wenn dertype
volume
ist.name
: Name, der dem zu erstellenden Volume zugeordnet werden soll; Fürfile
-Typ-Volumes die Erweiterung angeben, wenn Sie möchten, dass Volumes mit einer erstellt werden.file_path
: Wo das Image vonfile
-Typ Volumes platziert werden soll; Standard istlibvirt_volume_default_images_path
.device
: Kontrolliert, wie das Gerät im Gastsystem erscheint. Alle Optionen fürlibvirt_volume_default_device
sind hier gültig. Standard istlibvirt_volume_default_type
.capacity
: Volumenkapazität, kann mit k, M, G, T, P oder E suffixiert werden, wenn der Typnetwork
ist oder MB, GB, TB usw., wenn der Typdisk
ist (erforderlich, wenn der Typdisk
odernetwork
ist).auth
: Authentifizierungsdetails, falls erforderlich. Wenn Authentifizierung erforderlich ist, müssenusername
,type
unduuid
oderusage
angegeben werden.uuid
undusage
dürfen nicht beide angegeben werden.source
: Woher das remote Volume kommt, wenn der Typnetwork
ist.protocol
,name
undhosts_list
sollten angegeben werden.port
ist optional.format
: Format des Volumes. Alle Optionen fürlibvirt_volume_default_format
sind hier gültig. Standard istlibvirt_volume_default_format
.image
: (optional) Eine URL zu einem Bild, mit dem das Volume initialisiert wird (vollständige Kopie).checksum
: (optional) Prüfziffer desimage
, um den Download zu vermeiden, wenn er nicht erforderlich ist.backing_image
: (optional) Name des Backup-Volumes, das bereits im gleichen Pool angenommen wird (Copy-on-Write).image
undbacking_image
sind gegenseitig ausschließende Optionen.target
: (optional) Manuelles Beeinflussen des Typs und der Reihenfolge von Volumes.dev
: (optional) Block-Gerät-Pfad, wenn der Typblock
ist.remote_src
: (optional) Wenn Typfile
oderblock
, geben Sie an, obimage
auf eine remote Datei (true) oder eine lokale Datei des Hosts, der das Playbook gestartet hat (false), verweist. Standard ist true.
usb_devices
: Eine Liste von USB-Geräten, die dem VM vom Host präsentiert werden sollen.Jedes USB-Gerät ist mit dem folgenden Dictionary definiert:
vendor
: Die Hersteller-ID des USB-Geräts.product
: Die Produkt-ID des USB-Geräts.
Hinweis: Libvirt gibt einen Fehler aus, wenn die VM bereitgestellt wird und das USB-Gerät nicht angeschlossen ist.
Um die Hersteller-ID und die Produkt-ID des USB-Geräts vom Host zu erhalten, der als sudo / root mit dem steckenden USB-Gerät läuft, führen Sie
lsusb -v
aus. Beispiel unten mit einem angehängten Sandisk USB-Stick mit Hersteller-ID:0x0781
und Produkt-ID:0x5567
.lsusb -v | grep -A4 -i sandisk idVendor 0x0781 SanDisk Corp. idProduct 0x5567 Cruzer Blade bcdDevice 1.00 iManufacturer 1 iProduct 2
interfaces
: Eine Liste von Netzwerkschnittstellen, die an die VM angeschlossen werden sollen. Jede Netzwerkschnittstelle wird mit dem folgenden Dictionary definiert:type
: Der Typ der Schnittstelle. Mögliche Werte:network
: Schließt die Schnittstelle an ein benanntes Libvirt virtuelles Netzwerk an. Dies ist der Standardwert.direct
: Schließt die Schnittstelle direkt an eine der physischen Schnittstellen des Hosts an, unter Verwendung desmacvtap
-Treiber.
network
: Name des Netzwerks, an das eine Schnittstelle angeschlossen werden soll. Muss nur angegeben werden, wenn der Schnittstellentypnetwork
ist.mac
: "Hardware"-Adresse der virtuellen Instanz, wenn nicht vorhanden, wird eine erstellt.source
: Ein Dictionary, das die Hostschnittstelle definiert, an die diese VM-Schnittstelle angeschlossen werden soll. Muss nur angegeben werden, wenn der Schnittstellentypdirect
ist. Beinhaltet die folgenden Attribute:dev
: Der Name der Hostschnittstelle, an die diese VM-Schnittstelle angeschlossen werden soll.mode
: Optionen sindvepa
,bridge
,private
undpassthrough
. Sieheman virsh
für weitere Details. Standard istvepa
.
trust_guest_rx_filters
: Ob Gästen empfangen werden soll Filter vertrauen. Dies wird dem AttributtrustGuestRxFilters
der VM-Schnittstellen zugeordnet. Standard istlibvirt_vm_trust_guest_rx_filters
.model
: Der Name des Schnittstellenmodells. Z. B.e1000
oderne2k_pci
, falls undefiniert wird es standardmäßig aufvirtio
gesetzt.alias
: Ein optionaler Schnittstellenalias. Dies kann verwendet werden, um spezifische Netzwerkkonfigurationen an persistente Netzwerkgeräte über den Namen zu binden. Der vom Benutzer definierte Alias wird immer mitua-
vorangestellt, um konform zu sein (Aliases ohneua-
werden von libvirt ignoriert). Wenn undefiniert, wird standardmäßigvnetX
von libvirt verwendet.
console_log_enabled
: Wenntrue
, protokolliert die Konsolenausgabe in eine Datei am angegebenen Pfadconsole_log_path
, anstatt in eine PTY. Wennfalse
, wird die Terminalausgabe direkt an eine PTY am seriellen Port 0 geleitet. Standard istfalse
.console_log_path
: Pfad zur Konsolenprotokolldatei. Standard ist{{ libvirt_vm_default_console_log_dir }}/{{ name }}-console.log
.start
: Ob die VM sofort nach der Definition gestartet werden soll. Standard isttrue
.autostart
: Ob die VM beim Start des Hosts gestartet werden soll. Standard isttrue
.boot_firmware
: Kann eines von Folgendem sein:bios
oderefi
. Standard istbios
.xml_file
: Optional eine modifizierte XML-Vorlage bereitstellen. Basisanpassungen basierend auf der Standardvorlagevm.xml.j2
, um die erwarteten Jinja Ausdrücke einzuschließen, die die Rolle verwendet.
Hinweis: Die folgenden Variablen sind veraltet: 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
und
libvirt_vm_console_log_path
. Wenn die Variable libvirt_vms
nicht gesetzt ist, ist der
Standardwert eine Einzelinstanzliste, die eine VM-Spezifikation unter Verwendung
dieser veralteten Variablen enthält.
Abhängigkeiten
Wenn qcow2-Format-Images verwendet werden, ist qemu-img (im Paket qemu-utils) erforderlich.
Beispiel-Playbook
---
- name: VMs erstellen
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' # erstes Gerät am IDE-Bus
- 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'
Autoreninformation
- Mark Goddard (mark@stackhpc.com)
Role to configure and create VMs on a Libvirt/KVM hypervisor
ansible-galaxy install stackhpc.libvirt-vm