Выключаем VMware ESXi 5.X хост из гостевой Ubuntu и APC UPS USB

Челябинская область

Автор:Dmitriy Altuhov

Выключаем VMware ESXi 5.X хост из гостевой Ubuntu и APC UPS USB

Имеется ИБП APC SmartUPS, подключенный по USB к HP ProLiant, на котором работает гипервизор VMware ESXi (хост) и гостевая ОС Ubuntu. В гостевую ОС Ubuntu проброшен USB APC SmartUPS и настроен apcupsd.

Задача: выключать гипервизор VMware ESXi (хост) и сам физический сервер при отключении электричества (по сигналу ИБП).

Решение достаточно простое — выключать сервер запуском скрипта через SSH.

Генерируем RSA ключи:
#ssh-keygen -t rsa
Отвечаем на вопросы:
Enter file in which to save the key (/root/.ssh/id_rsa): — соглашаемся на значение по умолчанию.
Enter passphrase (empty for no passphrase): — Оставляем значение пустым. Паролем пользоваться не будем.
Enter same passphrase again: — Снова оставляем значение пустым.
Скрипт создал 2 ключа: приватный и публичный.
Your identification has been saved in /root/.ssh/id_rsa. — секретный приватный ключ для декодирования.
Your public key has been saved in /root/.ssh/id_rsa.pub. — публичный ключ для кодирования.
Будьте внимательны! Ключи нужно генерировать именно для пользователя root, так как именно с правами этого пользователя и работает демон apcupsd.
Сейчас нужно скопировать на ESXi сервер наш публичный ключ:
#ssh-copy-id -i ~/.ssh/id_rsa.pub root@server_ESXi
Обратите внимание! Даже после этого зайти на сервер ESXi без пароля мы не можем. Это связано с тем, что в настройках ssh на ESXi прописан параметр :
AuthorizedKeysFile /etc/ssh/keys-%u/authorized_keys
То есть ключи авторизации хранятся не в домашнем каталоге пользователя, а в специфическом, который прописан в настройках.
Для того, что бы авторизация по ключу все-таки заработала залогинимся на ESXi
$ ssh root@server_ESXi
И скопируем файл с ключами на нужное место
~ # cp /.ssh/authorized_keys /etc/ssh/keys-root/authorized_keys
После этого мы сможем заходить без пароля с сервера Ubuntu на сервер ESXi.

Далее самое интересное. Нам нужно разместить скрипт выключения виртуальных машин и хоста ESXi на самом хосте. Но, как мы знаем, ESXi «удаляет» все файлы созданные вручную.
Для решения проблемы нужно разместить наш скрипт на datastore и в rc.local добавить строчки копирования скрипта из datastore в корень /

Создаём файл ups_down.sh на рабочем столе (где установлен vSphere Client):

#!/bin/sh
# Получаем ID всех виртуалок
VMID=$(/usr/bin/vim-cmd vmsvc/getallvms | grep ^[0-9] | awk '{print $1}')
# Просматриваем все виртуалки в цикле
for i in $VMID
do
# Получаем их состояние (turned on, off, whatever)
STATE=$(/usr/bin/vim-cmd vmsvc/power.getstate $i | tail -1 | awk '{print $2}')
# Если виртуалка запущена - выключить
if [ $STATE == on ]
then
/usr/bin/vim-cmd vmsvc/power.shutdown $i
fi
done
#Делаем паузу в ожидании, пока виртуалки погаснут
sleep 30
# Теперь выключаем и сам сервер виртуализации.
/sbin/shutdown.sh
/sbin/poweroff

Копируем ups_down.sh с помощью vSphere Client в datastore

В файл /etc/rc.local.d/local.sh (для ESXi 5.X) добавляем строки (обязательно укажите правильный путь к файлу ups_down.sh в Вашем datastore!):

#Copy UPS Script
cp /vmfs/volumes/53176326-c45cf969-605d-9cb654bb5444/ups_down.sh /
chmod +x /ups_down.sh

Запускаем auto-backup.sh для сохранения изменений в образ ESXi

4. Окончательная настройка apcupsd
Остался последний шаг. Заставить apcupsd выполнить скрипт ups_down.sh на сервере ESXi. Для этого открываем файл /etc/apcupsd/apccontrol, ищем в нем:
doshutdown)
echo "UPS ${2} initiated Shutdown Sequence" | ${WALL}
${SHUTDOWN} -h now "apcupsd UPS ${2} initiated shutdown"

И в этом блоке заменяем строку
${SHUTDOWN} -h now "apcupsd UPS ${2} initiated shutdown"
на
/usr/bin/ssh root@server_ESXi /ups_down.sh
На этом основная настройка закончена. При пропадании питания корректно выключится как сам сервер виртуализации, так и все виртуальные сервера.

Оригинал статьи: http://yakim.org.ua/articles/servers/158-ups-esxi.html

1 Comment so far

Check HDD SMART ESXi host from linux guest script bash — Технологии будущего (Челябинская область) | Ремонт компьютеров, Видеонаблюдение, СКУД, АТС, Linux, виртуализациPosted on  6:14 пп - Фев 20, 2015

[…] На ESXi host должен быть включен SSH С Linux-машины должен быть настроен беспарольный доступ по SSH на ESXi хост. Об этом писал тут: http://it74.net/techblog/vyklyuchaem-vmware-esxi-host-iz-gostevoj-ubuntu/ […]

Обсуждение закрыто.

Comments Are Closed!!!