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_engine
—kvm
, в противном случае —pc-1.0
.cpu_mode
: Режим ЦП виртуальной машины. По умолчанию —host-passthrough
, еслиlibvirt_vm_engine
—kvm
, в противном случае —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 пула хранения, из которого том должен быть выделен. Обязательно, когдаtype
—volume
.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). Если не определено, по умолчанию — управляемый libvirtvnetX
.
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'
Авторская информация
- Марк Годдард (mark@stackhpc.com)
ansible-galaxy install stackhpc/ansible-role-libvirt-vm