stackhpc.libvirt-vm
Maszyna Wirtualna Libvirt
Ta rola konfiguruje i tworzy (lub niszczy) maszyny wirtualne (VM) na hypervisorze KVM.
Wymagania
Host powinien mieć włączoną technologię wirtualizacji (VT) oraz być wstępnie skonfigurowany z libvirt/KVM.
Zmienne Roli
libvirt_vm_default_console_log_dir: Domyślny katalog, w którym będą przechowywane logi konsoli VM, jeśli nie podano konkretnej ścieżki logu. Domyślnie jest to "/var/log/libvirt-consoles".libvirt_vm_default_uuid_deterministic: Czy UUID powinien być obliczany na podstawie skrótu nazwy VM. Jeśli nie, UUID jest losowo generowany przez libvirt podczas definiowania VM. Domyślnie jest to Fałsz.libvirt_vm_image_cache_path: Katalog, w którym będą przechowywane pobrane obrazy. Domyślnie to "/tmp/".libvirt_volume_default_images_path: Katalog, w którym przechowywane są obrazy instancji. Domyślnie to '/var/lib/libvirt/images'.libvirt_volume_default_type: Jaki typ wolumenu bazowego używa instancja? Domyślnie tovolume. Opcje toblock,file,networkivolume.libvirt_volume_default_format: Format dla wolumenów tworzonych przez rolę. Domyślnie toqcow2. Opcje toraw,qcow2,vmdk. Zobaczman virshdla pełnej gamy.libvirt_volume_default_device: Kontroluje, jak urządzenie pojawia się w systemie operacyjnym gościa. Domyślnie todisk. Opcje tocdromidisk.libvirt_vm_engine: Silnik wirtualizacji. Jeśli nie jest ustawiony, rola spróbuje automatycznie wykryć optymalny silnik do użycia.libvirt_vm_emulator: Ścieżka do pliku wykonywalnego emulatora. Jeśli nie jest ustawiony, rola spróbuje automatycznie wykryć poprawny emulator do użycia.libvirt_cpu_mode_default: Domyślny tryb CPU, jeślilibvirt_cpu_modelubvm.cpu_modenie są zdefiniowane.libvirt_vm_arch: Architektura CPU, domyślnie tox86_64.libvirt_vm_uri: Nadpisuje URI połączenia libvirt. Zobacz dokumentację libvirt dla więcej szczegółów.libvirt_vm_virsh_default_env: Zmienne zawarte w tym słowniku są dodawane do środowiska używanego podczas wykonywania poleceń virsh.libvirt_vm_clock_offset: Jeśli jest zdefiniowane, przesunięcie zegara instancji jest ustawiane na podaną wartość. Gdy nie jest zdefiniowane, synchronizacja ustawiana jest nalocaltime.libvirt_vm_trust_guest_rx_filters: Czy ufać filtrów odbioru gościa. Jest to mapowane na atrybuttrustGuestRxFiltersinterfejsów VM. Domyślnie tofałsz.libvirt_vms: lista VM do utworzenia lub zniszczenia. Każda z nich może mieć następujące atrybuty:state: ustaw napresent, aby utworzyć, lubabsent, aby zniszczyć VM. Domyślnie topresent.name: nazwa przypisana do VM.uuid: UUID przypisany ręcznie do VM. Jeśli podany, aniuuid_deterministic, anilibvirt_vm_default_uuid_deterministicnie są używane.uuid_deterministic: nadpisuje domyślne ustawienie wlibvirt_vm_default_uuid_deterministic.memory_mb: pamięć przypisana do VM, w megabajtach.vcpus: liczba rdzeni VCPU przypisanych do VM.machine: Typ maszyny wirtualnej. Domyślnie toNone, jeślilibvirt_vm_enginetokvm, w przeciwnym raziepc-1.0.cpu_mode: Tryb CPU maszyny wirtualnej. Domyślnie tohost-passthrough, jeślilibvirt_vm_enginetokvm, w przeciwnym raziehost-model. Może być ustawione na brak, aby nie konfigurować trybu CPU.clock_offset: Nadpisuje domyślne ustawienie wlibvirt_vm_clock_offset.enable_vnc: Jeśli prawda, włącza nasłuch VNC na localhost do użycia z VirtManager i podobnymi narzędziami.enable_spice: Jeśli prawda, włącza nasłuch SPICE do użycia z Virtual Machine Manager i podobnymi narzędziami.enable_guest_virtio: Jeśli prawda, włącza urządzenie virtio gościa do użycia z agentem gościa Qemu.volumes: lista wolumenów do podłączenia do VM. Każdy wolumen jest zdefiniowany za pomocą następującego słownika:type: Jaki typ wolumenu bazowego używa instancja? Wszystkie opcje dlalibvirt_volume_default_typesą tutaj ważne. Domyślnie tolibvirt_volume_default_type.pool: Nazwa lub UUID puli pamięci masowej, z której wolumen powinien zostać przydzielony. Wymagane, gdytypetovolume.name: Nazwa do przypisania do tworzonego wolumenu. Dla wolumenów typufilenależy uwzględnić rozszerzenie, jeśli chcesz, aby wolumeny były tworzone z jednym.file_path: Gdzie obrazy wolumenów typufilepowinny być umieszczone; domyślnie tolibvirt_volume_default_images_path.device: Kontroluje, jak urządzenie pojawia się w systemie operacyjnym gościa. Wszystkie opcje dlalibvirt_volume_default_devicesą tutaj ważne. Domyślnie tolibvirt_volume_default_type.capacity: pojemność wolumenu; można dołączyć sufiksy k, M, G, T, P lub E, gdy typ tonetwork, lub MB, GB, TB itp., gdy typ todisk(wymagane, gdy typ todisklubnetwork).auth: Szczegóły uwierzytelnienia, jeśli są wymagane. Jeśli uwierzytelnienie jest wymagane, należy podaćusername,typeorazuuidlubusage. Nie powinny być podawane jednocześnieuuidiusage.source: Skąd pochodzi zdalny wolumen, gdy typ tonetwork. Należy podaćprotocol,nameihosts_list.portjest opcjonalny.format: Format wolumenu. Wszystkie opcje dlalibvirt_volume_default_formatsą ważne tutaj. Domyślnie tolibvirt_volume_default_format.image: (opcjonalnie) URL do obrazu, z którym wolumen jest inicjalizowany (pełna kopia).checksum: (opcjonalnie) sumy kontrolne dlaimage, aby uniknąć pobierania, gdy nie jest to konieczne.backing_image: (opcjonalnie) nazwa wolumenu bazowego, który zakłada się, że jest już w tej samej puli (kopiowanie przy zapisie).imageibacking_imageto opcje wzajemnie wykluczające się.target: (opcjonalnie) Ręcznie wpływa na typ i kolejność wolumenów.dev: (opcjonalnie) Ścieżka do urządzenia blokowego, gdy typ toblock.remote_src: (opcjonalnie) Gdy typ tofilelubblock, określ, czyimagewskazuje na zdalny plik (prawda) czy plik lokalny do hosta, który uruchomił playbook (fałsz). Domyślnie to prawda.
usb_devices: lista urządzeń USB, które należy zaprezentować VM z hosta.Każde urządzenie USB jest zdefiniowane za pomocą następującego słownika:
vendor: Identyfikator dostawcy urządzenia USB.product: Identyfikator produktu urządzenia USB.
Uwaga - Libvirt zgłosi błąd, jeśli VM jest provisionowana, a urządzenie USB nie jest podłączone.
Aby uzyskać identyfikator dostawcy i identyfikator produktu urządzenia USB z hosta działającego jako sudo/root z podłączonym urządzeniem USB, uruchom
lsusb -v. Przykład poniżej z podłączonym Sandisk USB Memory Stick z identyfikatorem dostawcy:0x0781i identyfikatorem produktu:0x5567lsusb -v | grep -A4 -i sandisk idVendor 0x0781 SanDisk Corp. idProduct 0x5567 Cruzer Blade bcdDevice 1.00 iManufacturer 1 iProduct 2interfaces: lista interfejsów sieciowych, które należy podłączyć do VM. Każdy interfejs sieciowy jest zdefiniowany za pomocą następującego słownika:type: Typ interfejsu. Możliwe wartości:network: Podłącza interfejs do nazwanego wirtualnego sieci Libvirt. To jest domyślną wartością.direct: Bezpośrednio podłącza interfejs do jednego z fizycznych interfejsów hosta, używając sterownikamacvtap.
network: Nazwa sieci, do której powinien być podłączony interfejs. Musi być określona, jeśli i tylko wtedy, gdy typ interfejsu tonetwork.mac: "Adres sprzętowy" wirtualnej instancji, jeśli nieobecny, zostanie utworzony.source: Słownik definiujący interfejs hosta, do którego ten interfejs VM powinien być podłączony. Musi być określona, jeśli i tylko wtedy, gdy typ interfejsu todirect. Zawiera następujące atrybuty:dev: Nazwa interfejsu hosta, do którego ten interfejs VM powinien być podłączony.mode: opcje obejmująvepa,bridge,privateipassthrough. Zobaczman virshpo więcej szczegółów. Domyślnie tovepa.
trust_guest_rx_filters: Czy ufać filtracji odbioru gościa. Jest to mapowane na atrybuttrustGuestRxFiltersinterfejsów VM. Domyślnie tolibvirt_vm_trust_guest_rx_filters.model: Nazwa modelu interfejsu. Na przykłade1000lubne2k_pci, jeśli nie zdefiniowane, domyślnie tovirtio.alias: Opcjonalny alias interfejsu. Może być używany do powiązania określonej konfiguracji sieciowej z trwałymi urządzeniami sieciowymi za pomocą nazwy. Zdefiniowany przez użytkownika alias jest zawsze poprzedzonyua-, aby być zgodnym (aliasy bezua-są ignorowane przez libvirt). Jeśli nie zdefiniowane, domyślnie tovnetXzarządzane przez libvirt.
console_log_enabled: Jeśliprawda, zapisuje logi konsoli do pliku w ścieżce określonej przezconsole_log_path, zamiast do PTY. Jeślifałsz, bezpośredni terminalowy wyjście do PTY na porcie szeregowym 0. Domyślnie tofałsz.console_log_path: Ścieżka do pliku logu konsoli. Domyślnie to{{ libvirt_vm_default_console_log_dir }}/{{ name }}-console.log.start: Czy natychmiast uruchomić VM po jej zdefiniowaniu. Domyślnie toprawda.autostart: Czy uruchomić VM, gdy host się uruchamia. Domyślnie toprawda.boot_firmware: Może być jednym z:bios, lubefi. Domyślnie tobios.xml_file: Opcjonalnie dostarcz zmodyfikowany szablon XML. Bazuj na domyślnym szablonievm.xml.j2, aby zawierał oczekiwane wyrażenia jinja, których używa rola.
N.B. następujące zmienne są przestarzałe: 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 oraz libvirt_vm_console_log_path. Jeśli zmienna libvirt_vms jest pozostawiona bez ustawienia, jej domyślna wartość będzie pojedynczą listą zawierającą specyfikację VM z użyciem tych przestarzałych zmiennych.
Zależności
Jeśli używasz dysków w formacie qcow2, wymagany jest qemu-img (w pakiecie qemu-utils).
Przykładowy Playbook
---
- name: Tworzenie VM
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' # pierwsze urządzenie na busie ide
- 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'
Informacje o autorze
- Mark Goddard (mark@stackhpc.com)
ansible-galaxy install stackhpc.libvirt-vm