virt_guest_manage
Роль управления виртуальными гостями
Эта роль использует официальный модуль ansible virt для управления виртуальными машинами на базе RHEL, используя KVM в качестве гипервизора. По умолчанию используется форк AlmaLinux от RHEL. Вы можете управлять всеми вашими виртуальными машинами (ВМ) напрямую через настройки в group_vars или host_vars. Основная особенность этой роли - параллельная установка всех виртуальных машин, указанных в virt_guest_list
.
Начало работы
Поддерживаемые версии дистрибутивов на уровне виртуальных машин
- CentOS el6 (не тестировалось с последними версиями роли)
- CentOS el7
- AlmaLinux el8
- AlmaLinux el9
Обновление значений по умолчанию для ваших нужд
Сначала вам нужно обновить virt_guest_init_passwd
, установив свой собственный пароль. Второе, что нужно сделать, это найти и установить ближайший зеркальный сервер для загрузки всех компонентов установщика на базе RHEL.
Вне сферы этой роли
Эта роль может управлять виртуальными дисками на базе LVM для ВМ, но вам нужно создать физический объем (PVS) и группу томов (VGS) перед использованием. Также есть два разных варианта для виртуальных сетевых интерфейсов ВМ. Первый вариант - использовать существующий и уже настроенный Linux мост, а второй - использовать networking libvirt. В любом случае последний вариант может быть управляем с помощью virt_network_list
напрямую из этой роли.
Переменные
Общие
virt_guest_dependency_qemu_kvm_role
: [необязательно, по умолчаниюtrue
]: Включить ли зависимую роль для qemu-kvmvirt_guest_mirror
: [по умолчанию:http://repo.almalinux.org
]: Зеркало Almalinux, которое будет использоваться для установки ОСvirt_guest_os_location
: [по умолчанию:{{ virt_guest_mirror }}/almalinux/9/BaseOS/x86_64/os
]: Путь, где хранятся компоненты ОС Almalinuxvirt_guest_kickstart_config_dir
: [по умолчанию:/tmp/kickstart
]: Путь, где будут созданы файлы kickstartvirt_guest_kickstart_config_port
: [по умолчанию:8000
]: Порт для загрузки конфигурации kickstart во время установкиvirt_guest_kickstart_config_url
: [по умолчанию:ip гипервизора
]: URL для загрузки конфигурации kickstart во время установкиvirt_guest_kickstart_config_serve_timeout
: [по умолчанию:90
]: Время в секундах для обслуживания файлов kickstartvirt_guest_kickstart_installation_timeout
: [по умолчанию:480
]: Время в секундах для завершения установки kickstartvirt_guest_init_passwd
: [обязательно]: Пароль для пользователя root, который вы будете использовать для первого входаvirt_guest_init_hostname
: [по умолчанию:fresh-installed.local
]: Первое имя хоста на уровне ОС виртуальной машины
Список виртуальных сетей и их настройки
virt_network_list
: [обязательно, по умолчанию:{}
]: Объявления виртуальных сетейvirt_network_list.key
: [обязательно]: Имя виртуальной сети (например,br-nat0:
)virt_network_list.key.router
: [обязательно]: IP-адрес виртуального маршрутизатора (например,192.168.2.1
)virt_network_list.key.netmask
: [обязательно]: Маска подсети виртуальной сети (например,255.255.255.0
)virt_network_list.key.start
: [обязательно]: Первый IP в диапазоне виртуальной сети (например,192.168.2.1
)virt_network_list.key.end
: [обязательно]: Последний IP в диапазоне виртуальной сети (например,192.168.2.254
)
Список виртуальных гостей и их настройки
virt_guest_list
: [обязательно, по умолчанию:{}
]: Объявления виртуальных гостейvirt_guest_list.key
: [обязательно]: Имя виртуальной машины (например,example-vm:
)virt_guest_list.key.autostart
: [необязательно, по умолчаниюtrue
]: Включить ли автозапуск виртуальной машиныvirt_guest_list.key.uuid
: [обязательно]: Уникальный идентификатор виртуальной машины (например,ad852ffe-07d9-43ec-9f5a-ced644f9a7a5
)virt_guest_list.key.cpu
: [необязательно, по умолчанию1
]: Установить ограничения на количество ядер ЦПvirt_guest_list.key.ram
: [необязательно, по умолчанию2
]: Установить ограничения по RAM. Это значение указывается в GiBvirt_guest_list.key.disk
: [обязательно]: Объявления диска виртуального гостяvirt_guest_list.key.disk.[s|v]d[a-z]
: [обязательно]: Имя виртуального диска в виртуальной машине (например,sda
,sdb
,sdc
и т.д., илиvda
,vdb
,vdc
и т.д.)virt_guest_list.key.disk.[s|v]d[a-z].type
: [необязательно, по умолчаниюblock
]: Тип виртуального диска (например,block
,file
)virt_guest_list.key.disk.[s|v]d[a-z].name
: [обязательно только для.type: file
]: Имя виртуального файла диска qemuvirt_guest_list.key.disk.[s|v]d[a-z].format
: [необязательно, по умолчаниюraw
]: Тип формата диска qemu (например,raw
,qcow2
)virt_guest_list.key.disk.[s|v]d[a-z].format_options
: [необязательно, по умолчаниюpreallocation=off
]: Опции формата диска qemu (например,preallocation=metadata
)virt_guest_list.key.disk.[s|v]d[a-z].vg
: [обязательно только для.type: block
]: Имя группы томов LVMvirt_guest_list.key.disk.[s|v]d[a-z].lv
: [обязательно только для.type: block
]: Имя логического тома LVMvirt_guest_list.key.disk.[s|v]d[a-z].size
: [обязательно, кроме использования физических дисков]: Размер виртуального диска (например,2048M
,10G
,1T
, также можно использовать20%VG
или любой эквивалент для дисков на базе LVM)virt_guest_list.key.disk.[s|v]d[a-z].device
: [обязательно только для физических дисков]: Полный путь к физическому диску на гипервизоре (например,/dev/sdb
,/dev/nvme0n1
и т.д.)virt_guest_list.key.disk.[s|v]da.fstype
: [необязательно, по умолчаниюxfs
]: Тип файловой системы для всех разделов внутри виртуального диска (например,ext4
,ext3
и т.д.)virt_guest_list.key.network
: [обязательно]: Объявления сетей виртуального гостяvirt_guest_list.key.network.eth[0-9]
: [обязательно]: Имя сетевого интерфейса в виртуальной машине (например,eth0
,eth1
и т.д.)virt_guest_list.key.network.eth[0-9].mac
: [обязательно]: MAC-адрес виртуального сетевого интерфейса (например,52:54:00:16:01:bc
и т.д.)virt_guest_list.key.network.eth[0-9].bridge
: [обязательно]: Имя интерфейса моста, в который будет включен интерфейс vnet (например,br0
,bridge1
и т.д.)virt_guest_list.key.network.eth[0-9].model
: [необязательно, по умолчаниюvirtio
]: Модель виртуального сетевого интерфейса qemu (например,virtio
,e1000
,rtl8139
и т.д.)virt_guest_list.key.network.eth0.ip
: [необязательно]: Статический IP-адрес для основного сетевого интерфейсаvirt_guest_list.key.network.eth0.netmask
: [необязательно]: Маска сети для основного сетевого интерфейсаvirt_guest_list.key.network.eth0.gateway
: [необязательно]: IP-адрес шлюза для основного сетевого интерфейсаvirt_guest_list.key.network.eth0.dns
: [необязательно]: Основной DNS-сервер. Эта опция поддерживает только один DNS-сервер.virt_guest_list.key.vnc_enable
: [необязательно, по умолчаниюfalse
]: Включить VNC-сервер на стороне qemu-kvm для доступа к виртуальной машине
Зависимости
роль serverbee.qemu_kvm
Пример(ы)
Простой пример
---
- hosts: localhost
roles:
- serverbee.virt_guest_manage
vars:
virt_guest_list:
example-vm:
uuid: 7eb09567-83b8-4aab-916e-24924d6a0f89
disk:
sda:
vg: vg_local
lv: lv_vm_example
size: 10G
network:
eth0:
mac: 52:54:00:16:01:bc
bridge: br0
Пример с полными опциями
---
- hosts: localhost
roles:
- serverbee.virt_guest_manage
vars:
virt_network_list:
br-nat0:
router: 192.168.2.1
netmask: 255.255.255.0
start: 192.168.2.2
end: 192.168.2.254
virt_guest_list:
example-vm:
autostart: false
uuid: 7eb09567-83b8-4aab-916e-24924d6a0f89
cpu: 2 # Ядро
ram: 4 # GiB
disk:
sda:
type: block
format: raw
vg: vg_local
lv: lv_vm_example-first
size: 20%VG
fstype: ext4
vdb:
type: file
format: qcow2
format_options: preallocation=metadata
name: example-second-drive
size: 5G
sdc:
device: /dev/nvme0n1
network:
eth0:
mac: 52:54:00:16:01:bc
bridge: br0
model: virtio
ip: 172.16.2.2
netmask: 255.255.255.248
gateway: 172.16.2.1
dns: 172.16.2.1
eth1:
mac: 52:54:00:16:02:ba
network: br-nat0
model: e1000
vnc_enable: true
Что еще?
Проверка процесса установки ВМ
Первое, что вы можете сделать - это проверить, отвечает ли ваша ВМ на ping-запросы. Если она не отвечает, вы можете использовать инструмент командной строки virsh
, чтобы увидеть список всех ваших ВМ и проверить прогресс каждой установки. Команда virsh устанавливается автоматически как зависимость для этой роли. Вы можете смотреть с помощью опции console
:
$ virsh list --all
$ virsh console example-vm
Таймаут для завершения установки
Существует переменная с именем virt_guest_kickstart_installation_timeout
, по умолчанию установленная на 480 секунд. Если у вас возникают проблемы с выключением вашей ВМ до завершения установки, вам нужно увеличить таймаут. Также лучше установить ближайшее зеркало хотя бы в той же стране, где находится ваш провайдер хостинга, чтобы увеличить скорость загрузки. Вы можете сделать это, изменив переменные virt_guest_mirror
и virt_guest_os_location
.
Дополнительные переменные для управления только одной ВМ
Эта опция может быть очень полезной, если у вас много виртуальных машин, но хотите управлять только одной из них. Это позволит быстрее запускать плейбук Ansible и не применять изменения к другим виртуальным машинам. Для этого вам нужно установить дополнительную переменную с именем vm
при применении вашего плейбука:
$ ansible-playbook virt-guest-manage.yml --extra-vars vm=example-vm
Поддерживается передача только одного имени виртуальной машины за раз.
Повторная установка ВМ
Если вы играли с чем-то ранее и хотите повторно запустить установку, сначала вам нужно вручную удалить все существующие части:
$ virsh list --all
$ virsh destroy example-vm
$ virsh undefine example-vm
$ lvremove vg_local/lv_vm_example
Эта роль не поддерживает автоматическую переустановку ВМ, чтобы предотвратить удаление существующих и необходимых данных.
Лицензия
Лицензия GPLv3
Информация об авторе
Виталий Яковенко
ansible-galaxy install serverbee/ansible-role-virt-guest-manage