Автоматический запуск виртуальных машин в XCP-ng 7
Сегодня настраиваем автоматический запуск виртуальных машин при старте хоста XCP-ng.
Введение
Задача озвучена выше. Хост — XCP-ng 7.6.
Я знаю два с половиной варианта решения проблемы: опции auto_poweron и скрипты.
Опция auto_poweron
В XenServer 6.x из графического интерфейса была удалена опция автоматического запуска, потому что она конфликтует с функциями высокой доступности (HA). Но если возможности высокой доступности не используются, можно включить автозапуск через консоль.
Настраиваем пул серверов:
xe pool-param-set uuid=UUID other-config:auto_poweron=true
Настраиваем каждую виртуальную машину, которую нужно автоматически запускать:
xe vm-param-set uuid=UUID other-config:auto_poweron=true
Готово.
Фатальный недостаток этого способа — мы не можем задать порядок запуска машин. Порядок можно установить, сформировав vApps. Но сами vApps придётся запускать или вручную, или через скрипты.
Скрипты
Создадим на основе скрипта /opt/xensource/bin/xapi-autostart-vms свой скрипт запуска виртуалок /usr/local/bin/vm-autostart:
#!/bin/bash
# VM UUIDs that automatic starts
VM_UUIDS=()
# DNS
VM_UUIDS+=(71a2119d-9ace-e8ed-429f-e34a7b495b1d)
# Pi-Hole
VM_UUIDS+=(295cd49f-1558-179a-a796-27e51832f6f7)
# XAPI start timeout
XAPI_START_TIMEOUT_SEC=240
# VM start timeout
VM_START_TIMEOUT_SEC=240
# PV drivers undetected version
PV_DRV_UNDETECTED_VER="micro: -1"
# Check Xen FS
[ -e /proc/xen ] || exit 0
# Wait for xapi to complete initialisation
/opt/xensource/bin/xapi-wait-init-complete 240
if [ $? -eq 0 ]
then
for VM_UUID in "${VM_UUIDS[@]}"
do
VM_LABEL=$(xe vm-param-get param-name=name-label uuid=$VM_UUID)
echo "Starting $VM_LABEL"
xe vm-start uuid=$VM_UUID
echo "Waiting $VM_LABEL for boot"
sleep 3
timeout $VM_START_TIMEOUT_SEC xe event-wait class=vm uuid=$VM_UUID PV-drivers-detected=true PV-drivers-version=/="$PV_DRV_UNDETECTED_VER"
done
echo "All VMs started"
fi
Установим права:
chmod 755 /usr/local/bin/vm-autostart
На основе /usr/lib/systemd/system/xapi-domains.service создадим свой юнит-файл /etc/systemd/system/vm-autostart.service для запуска скрипта, приведённого выше:
[Unit]
Description=Start VMs on dom0 start
Requires=xapi.service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/vm-autostart
[Install]
WantedBy=multi-user.target
Перечитываем описания сервисов и включаем запуск нашего сервиса при загрузке системы:
systemctl daemon-reload
systemctl enable vm-autostart.service
Перезагружаем хост, проверяем автозапуск:
# systemctl status vm-autostart.service
● vm-autostart.service - Start VMs and vApps on dom0 start
Loaded: loaded (/etc/systemd/system/vm-autostart.service; enabled; vendor preset: disabled)
Active: activating (start) since Thu 2019-06-13 20:19:33 MSK; 4min 34s ago
Main PID: 949 (vm-autostart)
CGroup: /system.slice/vm-autostart.service
├─ 949 /bin/sh /usr/local/bin/vm-autostart
└─4979 xe vm-start uuid=295cd49f-1558-179a-a796-27e51832f6f7
