Автозапуск виртуальной машины в Citrix XenServer 6.2

/ Просмотров: 4025

Для 6 версии из XenCenter настроить автозапуск уже не получится, это можно сделать из консоли или добавить возможность управлять этими настройками их XenCenter.

Способ 1 (мне не нравится).

Для начала добавляем эту возможность для пула.

Если сервер всего один, нужно создать пул даже из одного сервера.

Получаем uuid нащего пула:

xe pool-list

результат:

uuid ( RO) : 8a3b99c9-c4e9-802c-1298-794d939fb999

Устанавливаем ключ auto_poweron параметра other-config в true:

xe pool-param-set uuid=8a3b99c9-c4e9-802c-1298-794d939fb999 other-config:auto_poweron=true

Теперь для виртуалок, которым требуется автозапуск.

Получаем uuid существующих виртуалок:

xe vm-list

для каждой виртуалки для которой нужно включить автостарт устанавливаем ключ auto_poweron параметра other-config в true:

xe vm-param-set uuid={uuid виртуалки} other-config:auto_poweron=true

Если все сделано верно, после перезагрузки сервера, те виртуалки на которых установлен other-config:auto_poweron=true запустятся автоматически.

Отменить автозапуск виртуалки

xe vm-param-remove uuid=acadd23e-f958-64a2-eab0-89f7b74e59f9 param-name=other-config param-key=auto_poweron

Способ 2.

Недостаток первого способа в том, что включение/выключение автозапуска виртуалок производится только из консоли. Есть возможность настроить все таким образом, чтобы управление автостартом осуществлялось из XenCenter.

К сожалению один раз в консоли полазить придется.

У меня если FAR/NC/MC не установлен — значит компьютер сломан smile. Ставим mc.

yum install --enablerepo=base mc

За автозапуск виртуалок отвечает скрипт /opt/xensource/bin/xapi-autostart-vms

Исправим его таким образом, чтобы автоматически стартовали те машины у которых имеется тег «autostart». Но сначала разберемся с пулом.

В скрипте можно заменить строку

if [ $? -eq 0 ] && [ "${auto_poweron}" = "true" ]; then

на

if [ $? -eq 0 ]; then

в этом случае настройки пула относительно автостарта виртуалок будут проигнорированы, автостарт будет осуществляться только исходя из настроек самих виртуальных машин. Более того, в этом случае вовсе не требуется наличия пула.

Но возможно потребуется отключить автозапуск всех виртуалок в пуле, плюс ко всему хочется оставить совместимость со стандартным функционалом (способ 1). Для этого изменяем скрипт следующим образом.

Находим строку:

auto_poweron=$(xe pool-param-get uuid=${pool} param-name=other-config param-key=auto_poweron 2> /dev/null)

После нее вставляем следующую:

pool_tags=$(xe pool-param-get uuid=${pool} param-name=tags 2> /dev/null)

Находим строку:

if [ $? -eq 0 ] && [ "${auto_poweron}" = "true" ]); then

Заменяем ее на:

if [ $? -eq 0 ] && ([ "${auto_poweron}" = "true" ] || [[ ${pool_tags} == *autostart* ]]); then

В результате разрешить автостарт виртуальных машин в пуле можно как при помощи тега «autostart», так и стандартным способом (установка ключа auto_poweron=true).

Переходим к самим виртуалкам. Находим в скрипте строу:

xe vm-start other-config:auto_poweron=true power-state=halted --multiple >/dev/null 2>/dev/null || true

После нее добавляем строку:

xe vm-start tags="autostart" power-state=halted --multiple >/dev/null 2>/dev/null || true

Готовый скрипт выглядит так:

#!/bin/sh
[ -e /proc/xen ] || exit 0
XAPI_START_TIMEOUT_SECONDS=240
/opt/xensource/bin/xapi-wait-init-complete ${XAPI_START_TIMEOUT_SECONDS}
if [ $? -eq 0 ]; then
    pool=$(xe pool-list params=uuid --minimal 2> /dev/null)
        auto_poweron=$(xe pool-param-get uuid=${pool} param-name=other-config param-key=auto_poweron 2> /dev/null)
        pool_tags=$(xe pool-param-get uuid=${pool} param-name=tags 2> /dev/null)
        if [ $? -eq 0 ] && ([ "${auto_poweron}" = "true" ] || [[ ${pool_tags} == *autostart* ]]); then
                logger "$0 auto_poweron is enabled on the pool-- this is an unsupported configuration."
                xe vm-start other-config:auto_poweron=true power-state=halted --multiple >/dev/null 2>/dev/null || true
                xe vm-start tags="autostart" power-state=halted --multiple >/dev/null 2>/dev/null || true
        fi
fi

У этого кода есть один недостаток. Если тегов у виртуальной машины несколько, то автостарт не сработает. Для устранения этого бага меняем строку запуска виртуалок на следующий код:

было:

xe vm-start tags="autostart" power-state=halted --multiple >/dev/null 2>/dev/null || true

стало:

ARRAY=`xe vm-list | grep uuid | awk '{ print $5 }'`
                for f in $ARRAY
                do
                    vm_tags=$(xe vm-param-get uuid=${f} param-name=tags 2> /dev/null)
                    if [ $? -eq 0 ] && ([[ ${vm_tags} == *autostart* ]]); then
                        xe vm-start uuid=$f power-state=halted
                    fi
                done

Весь скрипт:

#!/bin/sh
[ -e /proc/xen ] || exit 0
XAPI_START_TIMEOUT_SECONDS=240
# wait for xapi to complete initialisation for a max of XAPI_START_TIMEOUT_SECONDS
/opt/xensource/bin/xapi-wait-init-complete ${XAPI_START_TIMEOUT_SECONDS}
if [ $? -eq 0 ]; then
    pool=$(xe pool-list params=uuid --minimal 2> /dev/null)
        auto_poweron=$(xe pool-param-get uuid=${pool} param-name=other-config param-key=auto_poweron 2> /dev/null)
        pool_tags=$(xe pool-param-get uuid=${pool} param-name=tags 2> /dev/null)
        if [ $? -eq 0 ] && ([ "${auto_poweron}" = "true" ] || [[ ${pool_tags} == *autostart* ]]); then
                logger "$0 auto_poweron is enabled on the pool-- this is an unsupported configuration."
                #if xapi init completed then start vms (best effort, don't report errors)
                xe vm-start other-config:auto_poweron=true power-state=halted --multiple >/dev/null 2>/dev/null || true
#               xe vm-start tags="autostart" power-state=halted --multiple >/dev/null 2>/dev/null || true
                ARRAY=`xe vm-list | grep uuid | awk '{ print $5 }'`
                for f in $ARRAY
                do
                    vm_tags=$(xe vm-param-get uuid=${f} param-name=tags 2> /dev/null)
                    if [ $? -eq 0 ] && ([[ ${vm_tags} == *autostart* ]]); then
                        xe vm-start uuid=$f power-state=halted
                    fi
                done
        fi
fi

Настраиваем автостарт в XenCenter.

Кликаем ПКМ на нашем пуле -> Properties -> General-> Tags -> Edit tags…

Добавляем тег «autostart». Отмечаем его. OK.

Кликаем ПКМ виртуалке, которую нужно автостартовать -> Properties -> General-> Tags -> Edit tags…

Тег «autostart» уже должен быть создан, просто его птичим. OK.

Проверяем.