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,networkundvolume.libvirt_volume_default_format: Format für von der Rolle erstellte Volumes. Standard istqcow2. Optionen sindraw,qcow2,vmdk. Sieheman virshfür die vollständige Liste.libvirt_volume_default_device: Kontrolliert, wie das Gerät im Gastsystem erscheint. Standard istdisk. Optionen sindcdromunddisk.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_modeodervm.cpu_modenicht 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 auflocaltimesynchronisiert.libvirt_vm_trust_guest_rx_filters: Ob Gastempfangsfilter vertraut werden sollen. Dies wird dem AttributtrustGuestRxFiltersder VM-Schnittstellen zugeordnet. Standard istfalse.libvirt_vms: Liste der zu erstellenden oder zu löschenden VMs. Jede VM kann die folgenden Attribute haben:state: aufpresentsetzen, 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_deterministicnochlibvirt_vm_default_uuid_deterministicverwendet.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_enginekvmist, sonstpc-1.0.cpu_mode: CPU-Modus der virtuellen Maschine. Standard isthost-passthrough, wennlibvirt_vm_enginekvmist, 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_typesind hier gültig. Standard istlibvirt_volume_default_type.pool: Name oder UUID des Speicherpools, aus dem das Volume zugewiesen werden soll. Erforderlich, wenn dertypevolumeist.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_devicesind hier gültig. Standard istlibvirt_volume_default_type.capacity: Volumenkapazität, kann mit k, M, G, T, P oder E suffixiert werden, wenn der Typnetworkist oder MB, GB, TB usw., wenn der Typdiskist (erforderlich, wenn der Typdiskodernetworkist).auth: Authentifizierungsdetails, falls erforderlich. Wenn Authentifizierung erforderlich ist, müssenusername,typeunduuidoderusageangegeben werden.uuidundusagedürfen nicht beide angegeben werden.source: Woher das remote Volume kommt, wenn der Typnetworkist.protocol,nameundhosts_listsollten angegeben werden.portist optional.format: Format des Volumes. Alle Optionen fürlibvirt_volume_default_formatsind 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).imageundbacking_imagesind gegenseitig ausschließende Optionen.target: (optional) Manuelles Beeinflussen des Typs und der Reihenfolge von Volumes.dev: (optional) Block-Gerät-Pfad, wenn der Typblockist.remote_src: (optional) Wenn Typfileoderblock, geben Sie an, obimageauf 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 -vaus. Beispiel unten mit einem angehängten Sandisk USB-Stick mit Hersteller-ID:0x0781und Produkt-ID:0x5567.lsusb -v | grep -A4 -i sandisk idVendor 0x0781 SanDisk Corp. idProduct 0x5567 Cruzer Blade bcdDevice 1.00 iManufacturer 1 iProduct 2interfaces: 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 Schnittstellentypnetworkist.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 Schnittstellentypdirectist. Beinhaltet die folgenden Attribute:dev: Der Name der Hostschnittstelle, an die diese VM-Schnittstelle angeschlossen werden soll.mode: Optionen sindvepa,bridge,privateundpassthrough. Sieheman virshfür weitere Details. Standard istvepa.
trust_guest_rx_filters: Ob Gästen empfangen werden soll Filter vertrauen. Dies wird dem AttributtrustGuestRxFiltersder VM-Schnittstellen zugeordnet. Standard istlibvirt_vm_trust_guest_rx_filters.model: Der Name des Schnittstellenmodells. Z. B.e1000oderne2k_pci, falls undefiniert wird es standardmäßig aufvirtiogesetzt.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äßigvnetXvon 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:biosoderefi. 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