ansible_role_libvirt_vm
Libvirt VM
Эта роль настраивает и создаёт (или удаляет) виртуальные машины (VM) на гипервизоре KVM.
Требования
На хосте должна быть включена технология виртуализации (VT), и он должен быть предварительно настроен с libvirt/KVM.
Переменные роли
libvirt_vm_default_console_log_dir
: Директория по умолчанию для хранения логов консоли VM, если не указан путь к файлу логов для конкретной VM. По умолчанию "/var/log/libvirt/qemu/".libvirt_vm_image_cache_path
: Директория для кэша загруженных образов. По умолчанию "/tmp/".libvirt_volume_default_images_path
: Директория, в которой хранятся образы экземпляров. По умолчанию '/var/lib/libvirt/images'.libvirt_volume_default_type
: Какой тип вспомогательного тома использует экземпляр? По умолчаниюvolume
.libvirt_volume_default_format
: Формат для томов, создаваемых ролью. По умолчаниюqcow2
.libvirt_volume_default_device
: Как устройство отображается в гостевой ОС. По умолчанию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_vms
: Список VMs для создания/уничтожения. Каждая из них может иметь следующие атрибуты:state
: Устанавливается вpresent
для создания илиabsent
для удаления VM. По умолчаниюpresent
.name
: Имя, которое будет присвоено VM.memory_mb
: Объём памяти, который будет присвоен VM, в мегабайтах.vcpus
: Количество вычислительных ядер VCPU, которые будут присвоены VM.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 и подобными инструментами.volumes
: Список томов для подключения к VM. Каждый том определяется следующим словарём:pool
: Имя или UUID пула хранения, из которого должен быть выделен том.name
: Имя, которое будет связано с создаваемым томом; для томов типаfile
включите расширение, если хотите создавать тома с ним.file_path
: Где следует разместить образ для томов типаfile
; по умолчаниюlibvirt_volume_default_images_path
.device
:disk
илиcdrom
.capacity
: ёмкость тома (может иметь суффиксы M,G,T или MB,GB,TB и т.д.) (обязательно, когда типdisk
).format
: включенные варианты -raw
,qcow2
,vmdk
. Смотритеman virsh
для полного списка. По умолчаниюqcow2
.image
: (опционально) URL для образа, с которым будет инициализирован том (полная копия).backing_image
: (опционально) имя вспомогательного тома, который предполагается уже находящимся в том же пуле (копирование по записи).image
иbacking_image
- взаимоисключающие варианты.target
: (опционально) Ручное влияние на тип и порядок томов.
interfaces
: Список сетевых интерфейсов для подключения к VM. Каждый сетевой интерфейс определяется следующим словарём:type
: Тип интерфейса. Возможные значения:network
: Подключает интерфейс к именованной виртуальной сети Libvirt. Это значение по умолчанию.direct
: Прямое подключение интерфейса к одному из физических интерфейсов хоста, используя драйверmacvtap
.
network
: Имя сети, к которой должен быть подключён интерфейс. Должно быть указано, если и только если тип интерфейса -network
.mac
: "Аппаратный" адрес виртуального экземпляра, если отсутствует - создаётся.source
: Словарь, определяющий интерфейс хоста, к которому должен быть подключен этот интерфейс VM. Должно быть указано, если и только если тип интерфейса -direct
. Включает следующие атрибуты:dev
: Имя интерфейса хоста, к которому должен быть подключен этот интерфейс VM.mode
: Опции включаютvepa
,bridge
,private
иpassthrough
. Смотритеman virsh
для дополнительных подробностей. По умолчаниюvepa
.
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
: Нужно ли сразу запускать VM после её определения. По умолчаниюtrue
.autostart
: Необходимо ли запускать VM при старте хоста. По умолчаниюtrue
.xml_file
: Опционально предоставить изменённый XML-шаблон. Основная настройка базируется на стандартном шаблонеvm.xml.j2
, чтобы включить ожидаемые выражения jinja, которые использует роль.
Примечание: следующие переменные устарели: 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
не установлена, её
значение по умолчанию будет одиночным списком, содержащим спецификацию VM с использованием
этих устаревших переменных.
Зависимости
Если используются диски формата qcow2, требуется qemu-img (в пакете qemu-utils).
Пример плейбука
---
- name: Создание VMs
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' # первое устройство на шине ide
interfaces:
- network: 'br-datacentre'
- 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 t2d/ansible-role-libvirt-vm