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
,network
ivolume
.libvirt_volume_default_format
: Format dla wolumenów tworzonych przez rolę. Domyślnie toqcow2
. Opcje toraw
,qcow2
,vmdk
. Zobaczman virsh
dla pełnej gamy.libvirt_volume_default_device
: Kontroluje, jak urządzenie pojawia się w systemie operacyjnym gościa. Domyślnie todisk
. Opcje tocdrom
idisk
.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_mode
lubvm.cpu_mode
nie 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 atrybuttrustGuestRxFilters
interfejsó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_deterministic
nie 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_engine
tokvm
, w przeciwnym raziepc-1.0
.cpu_mode
: Tryb CPU maszyny wirtualnej. Domyślnie tohost-passthrough
, jeślilibvirt_vm_engine
tokvm
, 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_type
są 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, gdytype
tovolume
.name
: Nazwa do przypisania do tworzonego wolumenu. Dla wolumenów typufile
należy uwzględnić rozszerzenie, jeśli chcesz, aby wolumeny były tworzone z jednym.file_path
: Gdzie obrazy wolumenów typufile
powinny 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_device
są 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 todisk
lubnetwork
).auth
: Szczegóły uwierzytelnienia, jeśli są wymagane. Jeśli uwierzytelnienie jest wymagane, należy podaćusername
,type
orazuuid
lubusage
. Nie powinny być podawane jednocześnieuuid
iusage
.source
: Skąd pochodzi zdalny wolumen, gdy typ tonetwork
. Należy podaćprotocol
,name
ihosts_list
.port
jest opcjonalny.format
: Format wolumenu. Wszystkie opcje dlalibvirt_volume_default_format
są 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).image
ibacking_image
to 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 tofile
lubblock
, określ, czyimage
wskazuje 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:0x0781
i identyfikatorem produktu:0x5567
lsusb -v | grep -A4 -i sandisk idVendor 0x0781 SanDisk Corp. idProduct 0x5567 Cruzer Blade bcdDevice 1.00 iManufacturer 1 iProduct 2
interfaces
: 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
,private
ipassthrough
. Zobaczman virsh
po więcej szczegółów. Domyślnie tovepa
.
trust_guest_rx_filters
: Czy ufać filtracji odbioru gościa. Jest to mapowane na atrybuttrustGuestRxFilters
interfejsów VM. Domyślnie tolibvirt_vm_trust_guest_rx_filters
.model
: Nazwa modelu interfejsu. Na przykłade1000
lubne2k_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 tovnetX
zarzą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