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 to volume. Opcje to block, file, network i volume.

  • libvirt_volume_default_format: Format dla wolumenów tworzonych przez rolę. Domyślnie to qcow2. Opcje to raw, qcow2, vmdk. Zobacz man virsh dla pełnej gamy.

  • libvirt_volume_default_device: Kontroluje, jak urządzenie pojawia się w systemie operacyjnym gościa. Domyślnie to disk. Opcje to cdrom i disk.

  • 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śli libvirt_cpu_mode lub vm.cpu_mode nie są zdefiniowane.

  • libvirt_vm_arch: Architektura CPU, domyślnie to x86_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 na localtime.

  • libvirt_vm_trust_guest_rx_filters: Czy ufać filtrów odbioru gościa. Jest to mapowane na atrybut trustGuestRxFilters interfejsów VM. Domyślnie to fałsz.

  • libvirt_vms: lista VM do utworzenia lub zniszczenia. Każda z nich może mieć następujące atrybuty:

    • state: ustaw na present, aby utworzyć, lub absent, aby zniszczyć VM. Domyślnie to present.

    • name: nazwa przypisana do VM.

    • uuid: UUID przypisany ręcznie do VM. Jeśli podany, ani uuid_deterministic, ani libvirt_vm_default_uuid_deterministic nie są używane.

    • uuid_deterministic: nadpisuje domyślne ustawienie w libvirt_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 to None, jeśli libvirt_vm_engine to kvm, w przeciwnym razie pc-1.0.

    • cpu_mode: Tryb CPU maszyny wirtualnej. Domyślnie to host-passthrough, jeśli libvirt_vm_engine to kvm, w przeciwnym razie host-model. Może być ustawione na brak, aby nie konfigurować trybu CPU.

    • clock_offset: Nadpisuje domyślne ustawienie w libvirt_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 dla libvirt_volume_default_type są tutaj ważne. Domyślnie to libvirt_volume_default_type.
      • pool: Nazwa lub UUID puli pamięci masowej, z której wolumen powinien zostać przydzielony. Wymagane, gdy type to volume.
      • name: Nazwa do przypisania do tworzonego wolumenu. Dla wolumenów typu file należy uwzględnić rozszerzenie, jeśli chcesz, aby wolumeny były tworzone z jednym.
      • file_path: Gdzie obrazy wolumenów typu file powinny być umieszczone; domyślnie to libvirt_volume_default_images_path.
      • device: Kontroluje, jak urządzenie pojawia się w systemie operacyjnym gościa. Wszystkie opcje dla libvirt_volume_default_device są tutaj ważne. Domyślnie to libvirt_volume_default_type.
      • capacity: pojemność wolumenu; można dołączyć sufiksy k, M, G, T, P lub E, gdy typ to network, lub MB, GB, TB itp., gdy typ to disk (wymagane, gdy typ to disk lub network).
      • auth: Szczegóły uwierzytelnienia, jeśli są wymagane. Jeśli uwierzytelnienie jest wymagane, należy podać username, type oraz uuid lub usage. Nie powinny być podawane jednocześnie uuid i usage.
      • source: Skąd pochodzi zdalny wolumen, gdy typ to network. Należy podać protocol, name i hosts_list. port jest opcjonalny.
      • format: Format wolumenu. Wszystkie opcje dla libvirt_volume_default_format są ważne tutaj. Domyślnie to libvirt_volume_default_format.
      • image: (opcjonalnie) URL do obrazu, z którym wolumen jest inicjalizowany (pełna kopia).
      • checksum: (opcjonalnie) sumy kontrolne dla image, 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 i backing_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 to block.
      • remote_src: (opcjonalnie) Gdy typ to file lub block, określ, czy image 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 sterownika macvtap.
      • network: Nazwa sieci, do której powinien być podłączony interfejs. Musi być określona, jeśli i tylko wtedy, gdy typ interfejsu to network.

      • 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 to direct. 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 i passthrough. Zobacz man virsh po więcej szczegółów. Domyślnie to vepa.
      • trust_guest_rx_filters: Czy ufać filtracji odbioru gościa. Jest to mapowane na atrybut trustGuestRxFilters interfejsów VM. Domyślnie to libvirt_vm_trust_guest_rx_filters.

      • model: Nazwa modelu interfejsu. Na przykład e1000 lub ne2k_pci, jeśli nie zdefiniowane, domyślnie to virtio.

      • 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 poprzedzony ua-, aby być zgodnym (aliasy bez ua- są ignorowane przez libvirt). Jeśli nie zdefiniowane, domyślnie to vnetX zarządzane przez libvirt.

    • console_log_enabled: Jeśli prawda, zapisuje logi konsoli do pliku w ścieżce określonej przez console_log_path, zamiast do PTY. Jeśli fałsz, bezpośredni terminalowy wyjście do PTY na porcie szeregowym 0. Domyślnie to fał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 to prawda.

    • autostart: Czy uruchomić VM, gdy host się uruchamia. Domyślnie to prawda.

    • boot_firmware: Może być jednym z: bios, lub efi. Domyślnie to bios.

    • xml_file: Opcjonalnie dostarcz zmodyfikowany szablon XML. Bazuj na domyślnym szablonie vm.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

O projekcie

Role to configure and create VMs on a Libvirt/KVM hypervisor

Zainstaluj
ansible-galaxy install stackhpc.libvirt-vm
Licencja
Unknown
Pobrania
380.3k
Właściciel
StackHPC develops OpenStack capabilities for research computing use cases. Through extensive experience, we understand HPC and cloud.