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 ist volume. Optionen sind block, file, network und volume.

  • libvirt_volume_default_format: Format für von der Rolle erstellte Volumes. Standard ist qcow2. Optionen sind raw, qcow2, vmdk. Siehe man virsh für die vollständige Liste.

  • libvirt_volume_default_device: Kontrolliert, wie das Gerät im Gastsystem erscheint. Standard ist disk. Optionen sind cdrom und disk.

  • 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, falls libvirt_cpu_mode oder vm.cpu_mode nicht definiert sind.

  • libvirt_vm_arch: CPU-Architektur, Standard ist x86_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 auf localtime synchronisiert.

  • libvirt_vm_trust_guest_rx_filters: Ob Gastempfangsfilter vertraut werden sollen. Dies wird dem Attribut trustGuestRxFilters der VM-Schnittstellen zugeordnet. Standard ist false.

  • libvirt_vms: Liste der zu erstellenden oder zu löschenden VMs. Jede VM kann die folgenden Attribute haben:

    • state: auf present setzen, um die VM zu erstellen, oder absent, um die VM zu löschen. Standard ist present.

    • name: Der Name, der der VM zugewiesen werden soll.

    • uuid: Die UUID, die manuell der VM zugewiesen werden soll. Wenn angegeben, werden weder uuid_deterministic noch libvirt_vm_default_uuid_deterministic verwendet.

    • uuid_deterministic: Überschreibt den Standardwert in libvirt_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 ist None, wenn libvirt_vm_engine kvm ist, sonst pc-1.0.

    • cpu_mode: CPU-Modus der virtuellen Maschine. Standard ist host-passthrough, wenn libvirt_vm_engine kvm ist, sonst host-model. Kann auf none gesetzt werden, um keinen CPU-Modus zu konfigurieren.

    • clock_offset: Überschreibt den Standardwert in libvirt_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ür libvirt_volume_default_type sind hier gültig. Standard ist libvirt_volume_default_type.
      • pool: Name oder UUID des Speicherpools, aus dem das Volume zugewiesen werden soll. Erforderlich, wenn der type volume ist.
      • name: Name, der dem zu erstellenden Volume zugeordnet werden soll; Für file-Typ-Volumes die Erweiterung angeben, wenn Sie möchten, dass Volumes mit einer erstellt werden.
      • file_path: Wo das Image von file-Typ Volumes platziert werden soll; Standard ist libvirt_volume_default_images_path.
      • device: Kontrolliert, wie das Gerät im Gastsystem erscheint. Alle Optionen für libvirt_volume_default_device sind hier gültig. Standard ist libvirt_volume_default_type.
      • capacity: Volumenkapazität, kann mit k, M, G, T, P oder E suffixiert werden, wenn der Typ network ist oder MB, GB, TB usw., wenn der Typ disk ist (erforderlich, wenn der Typ disk oder network ist).
      • auth: Authentifizierungsdetails, falls erforderlich. Wenn Authentifizierung erforderlich ist, müssen username, type und uuid oder usage angegeben werden. uuid und usage dürfen nicht beide angegeben werden.
      • source: Woher das remote Volume kommt, wenn der Typ network ist. protocol, name und hosts_list sollten angegeben werden. port ist optional.
      • format: Format des Volumes. Alle Optionen für libvirt_volume_default_format sind hier gültig. Standard ist libvirt_volume_default_format.
      • image: (optional) Eine URL zu einem Bild, mit dem das Volume initialisiert wird (vollständige Kopie).
      • checksum: (optional) Prüfziffer des image, 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 und backing_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 Typ block ist.
      • remote_src: (optional) Wenn Typ file oder block, geben Sie an, ob image 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 des macvtap-Treiber.
      • network: Name des Netzwerks, an das eine Schnittstelle angeschlossen werden soll. Muss nur angegeben werden, wenn der Schnittstellentyp network 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 Schnittstellentyp direct ist. Beinhaltet die folgenden Attribute:

        • dev: Der Name der Hostschnittstelle, an die diese VM-Schnittstelle angeschlossen werden soll.
        • mode: Optionen sind vepa, bridge, private und passthrough. Siehe man virsh für weitere Details. Standard ist vepa.
      • trust_guest_rx_filters: Ob Gästen empfangen werden soll Filter vertrauen. Dies wird dem Attribut trustGuestRxFilters der VM-Schnittstellen zugeordnet. Standard ist libvirt_vm_trust_guest_rx_filters.

      • model: Der Name des Schnittstellenmodells. Z. B. e1000 oder ne2k_pci, falls undefiniert wird es standardmäßig auf virtio 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 mit ua- vorangestellt, um konform zu sein (Aliases ohne ua- werden von libvirt ignoriert). Wenn undefiniert, wird standardmäßig vnetX von libvirt verwendet.

    • console_log_enabled: Wenn true, protokolliert die Konsolenausgabe in eine Datei am angegebenen Pfad console_log_path, anstatt in eine PTY. Wenn false, wird die Terminalausgabe direkt an eine PTY am seriellen Port 0 geleitet. Standard ist false.

    • 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 ist true.

    • autostart: Ob die VM beim Start des Hosts gestartet werden soll. Standard ist true.

    • boot_firmware: Kann eines von Folgendem sein: bios oder efi. Standard ist bios.

    • xml_file: Optional eine modifizierte XML-Vorlage bereitstellen. Basisanpassungen basierend auf der Standardvorlage vm.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

Über das Projekt

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

Installieren
ansible-galaxy install stackhpc.libvirt-vm
Lizenz
Unknown
Downloads
380.3k
Besitzer
StackHPC develops OpenStack capabilities for research computing use cases. Through extensive experience, we understand HPC and cloud.