libvirt-vm

Libvirt VM

Эта роль настраивает и создает (или уничтожает) виртуальные машины (ВМ) на гипервизоре KVM.

Требования

На хосте должна быть включена технология виртуализации (VT) и должна быть преднастроена с libvirt/KVM.

Переменные роли

  • libvirt_vm_default_console_log_dir: Директория по умолчанию для хранения логов консоли ВМ, если не указан путь к конкретному лог-файлу. По умолчанию — "/var/log/libvirt-consoles".

  • libvirt_vm_default_uuid_deterministic: Должен ли UUID рассчитываться путем хеширования имени ВМ. Если нет, UUID генерируется случайным образом libvirt при определении ВМ. По умолчанию — False.

  • libvirt_vm_image_cache_path: Директория для кэширования загруженных образов. По умолчанию — "/tmp/".

  • libvirt_volume_default_images_path: Директория, в которой хранятся образы экземпляров. По умолчанию — '/var/lib/libvirt/images'.

  • libvirt_volume_default_type: Какой тип тома используется экземпляром? По умолчанию — volume. Варианты: block, file, network и volume.

  • libvirt_volume_default_format: Формат для томов, создаваемых ролью. По умолчанию — qcow2. Варианты: raw, qcow2, vmdk. См. man virsh для полного списка.

  • libvirt_volume_default_device: Управляет тем, как устройство отображается в гостевой ОС. По умолчанию — disk. Варианты: cdrom и disk.

  • libvirt_vm_engine: Движок виртуализации. Если не установлен, роль попытается автоматически определить оптимальный движок для использования.

  • libvirt_vm_emulator: Путь к исполняемому файлу эмулятора. Если не установлен, роль попытается автоматически определить правильный эмулятор.

  • libvirt_cpu_mode_default: Режим процессора по умолчанию, если libvirt_cpu_mode или vm.cpu_mode не определены.

  • libvirt_vm_arch: Архитектура ЦП, по умолчанию — x86_64.

  • libvirt_vm_uri: Переопределить URI подключения libvirt. См. документацию libvirt для получения дополнительных деталей.

  • libvirt_vm_virsh_default_env: Переменные в этом словаре добавляются в окружение при выполнении команд virsh.

  • libvirt_vm_clock_offset: Если определено, смещение часов экземпляра устанавливается на указанное значение. Если не определено, синхронизация устанавливается на localtime.

  • libvirt_vm_trust_guest_rx_filters: Доверять ли фильтрам приема гостя. Это соответствует атрибуту trustGuestRxFilters интерфейсов ВМ. По умолчанию — false.

  • libvirt_vms: Список ВМ, которые нужно создать/уничтожить. Каждая ВМ может иметь следующие атрибуты:

    • state: Установить в present для создания или absent для уничтожения ВМ. По умолчанию — present.

    • name: Имя, назначаемое ВМ.

    • uuid: UUID, который вручную присваивается ВМ. Если указан, не используются ни uuid_deterministic, ни libvirt_vm_default_uuid_deterministic.

    • uuid_deterministic: переопределяет значение по умолчанию в libvirt_vm_default_uuid_deterministic.

    • memory_mb: Объем памяти, который нужно назначить ВМ, в мегабайтах.

    • vcpus: Количество виртуальных ядер ЦП, которые нужно назначить ВМ.

    • machine: Тип виртуальной машины. По умолчанию — None, если libvirt_vm_enginekvm, в противном случае — pc-1.0.

    • cpu_mode: Режим ЦП виртуальной машины. По умолчанию — host-passthrough, если libvirt_vm_enginekvm, в противном случае — host-model. Может быть установлен в none, чтобы не настраивать режим ЦП.

    • clock_offset: Переопределяет значение по умолчанию в libvirt_vm_clock_offset.

    • enable_vnc: Если true, включает прослушивание VNC на localhost для использования с VirtManager и аналогичными инструментами.

    • enable_spice: Если true, включает прослушивание SPICE для использования с Virtual Machine Manager и аналогичными инструментами.

    • enable_guest_virtio: Если true, включает устройство virtio для использования с агентом Qemu.

    • volumes: Список томов, которые нужно подключить к ВМ. Каждый том определяется следующим словарем:

      • type: Какой тип тома используется экземпляром? Все варианты для libvirt_volume_default_type действительны здесь. По умолчанию — libvirt_volume_default_type.
      • pool: Имя или UUID пула хранения, из которого том должен быть выделен. Обязательно, когда typevolume.
      • name: Имя, связанное с создаваемым томом; для томов типа file включите расширение, если хотите, чтобы тома создавались с ним.
      • file_path: Куда поместить образ томов типа file; по умолчанию — libvirt_volume_default_images_path.
      • device: Управляет тем, как устройство отображается в гостевой ОС. Все варианты для libvirt_volume_default_device действительны здесь. По умолчанию — libvirt_volume_default_type.
      • capacity: Вместимость тома, может иметь суффикс k, M, G, T, P или E, когда тип — network, или MB, GB, TB и т. д., когда тип — disk (обязательно, когда тип — disk или network).
      • auth: Данные аутентификации, если они требуются. Если требуется аутентификация, необходимо указать username, type и либо uuid, либо usage. uuid и usage не должны быть указаны одновременно.
      • source: Откуда поступает удаленный том, когда тип — network. Должны быть указаны protocol, name и hosts_list. port является опциональным.
      • format: Формат тома. Все варианты для libvirt_volume_default_format действительны здесь. По умолчанию — libvirt_volume_default_format.
      • image: (опционально) URL изображения, с которым том инициализируется (полная копия).
      • checksum: (опционально) контрольная сумма image, чтобы избежать загрузки, когда это не нужно.
      • backing_image: (опционально) имя базового тома, который предполагается быть в том же пуле (copy-on-write).
      • image и backing_image являются взаимно исключающими параметрами.
      • target: (опционально) Вручную влияйте на тип и порядок томов.
      • dev: (опционально) Путь блочного устройства, когда тип — block.
      • remote_src: (опционально) Когда тип — file или block, укажите, указывает ли image на удаленный файл (true) или файл, локальный для хоста, запустившего плейбук (false). По умолчанию true.
    • usb_devices: Список USB-устройств, которые нужно предоставить ВМ от хоста.

      Каждое USB-устройство определяется следующим словарем:

      • vendor: Идентификатор производителя USB-устройства.
      • product: Идентификатор продукта USB-устройства.

      Примечание: Если ВМ настроена, а USB-устройство не подключено, Libvirt выдаст ошибку.

      Чтобы получить идентификатор производителя и идентификатор продукта USB-устройства из хоста, работающего с правами sudo/root, с подключенным USB-устройством, выполните команду lsusb -v. Пример ниже с подключенной флешкой Sandisk с идентификатором производителя: 0x0781 и идентификатором продукта: 0x5567.

      lsusb -v | grep -A4 -i sandisk
      
        idVendor           0x0781 SanDisk Corp.
        idProduct          0x5567 Cruzer Blade
        bcdDevice            1.00
        iManufacturer           1 
        iProduct                2 
      
    • interfaces: Список сетевых интерфейсов, которые нужно подключить к ВМ. Каждый сетевой интерфейс определяется следующим словарем:

      • type: Тип интерфейса. Возможные значения:

        • network: Подключает интерфейс к именованной виртуальной сети Libvirt. Это значение по умолчанию.
        • direct: Непосредственно подключает интерфейс к одному из физических интерфейсов хоста, используя драйвер macvtap.
      • network: Имя сети, к которой должен быть подключен интерфейс. Должно быть указано, если и только если тип интерфейса network.

      • mac: "Аппаратный" адрес виртуального экземпляра, если отсутствует, он создается.

      • source: Словарь, определяющий хост-интерфейс, к которому должен быть подключен этот интерфейс ВМ. Должно быть указано, если и только если тип интерфейса direct. Включает следующие атрибуты:

        • dev: Имя хост-интерфейса, к которому должен быть подключен этот интерфейс ВМ.
        • mode: Варианты включают vepa, bridge, private и passthrough. См. man virsh для получения дополнительных деталей. По умолчанию — vepa.
      • trust_guest_rx_filters: Доверять ли фильтрам приема гостя. Это соответствует атрибуту trustGuestRxFilters интерфейсов ВМ. По умолчанию — libvirt_vm_trust_guest_rx_filters.

      • model: Название модели интерфейса. Например, e1000 или ne2k_pci, если не определено, по умолчанию — virtio.

      • alias: Необязательный псевдоним интерфейса. Это можно использовать для привязки конкретной сетевой конфигурации к постоянным сетевым устройствам по имени. Пользовательский псевдоним всегда префиксован ua-, чтобы соответствовать требованиям (псевдонимы без ua- игнорируются libvirt). Если не определено, по умолчанию — управляемый libvirt vnetX.

    • console_log_enabled: Если true, логирует вывод консоли в файл по указанному пути console_log_path, вместо PTY. Если false, вывод терминала направляется на PTY на последовательном порту 0. По умолчанию — false.

    • console_log_path: Путь к файлу лога консоли. По умолчанию — {{ libvirt_vm_default_console_log_dir }}/{{ name }}-console.log.

    • start: Нужно ли немедленно запустить ВМ после ее определения. По умолчанию — true.

    • autostart: Нужно ли запускать ВМ при загрузке хоста. По умолчанию — true.

    • boot_firmware: Может быть одним из: bios или efi. По умолчанию — bios.

    • xml_file: Опционально предоставьте измененный шаблон XML. Базовая настройка должна основываться на шаблоне по умолчанию vm.xml.j2, чтобы включить ожидаемые выражения jinja, используемые ролью.

N.B. следующие переменные устарели: 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 и libvirt_vm_console_log_path. Если переменная libvirt_vms оставлена без значения, ее значением по умолчанию будет одиночный список, содержащий спецификацию ВМ с использованием этих устаревших переменных.

Зависимости

При использовании дисков формата qcow2 требуется qemu-img (в пакете qemu-utils).

Пример Плейбука

---
- name: Создание ВМ
  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'  # первое устройство на иде шине
            - 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'

Авторская информация

О проекте

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

Установить
ansible-galaxy install stackhpc/ansible-role-libvirt-vm
Лицензия
Unknown
Загрузки
353618
Владелец
StackHPC develops OpenStack capabilities for research computing use cases. Through extensive experience, we understand HPC and cloud.