ESXi vSphere CLI: завершение работы виртуальных машин, скрипт на bash / sh

В жизни ИТ специалистов могут возникать ситуации, когда нужно максимально быстро завершить работу серверов. В нашем случае речь идет о виртуальных машинах на гипервизоре VMware ESXi, которые нужно попытаться мягко выключить и после этого погасить сервер.

Если машины мягко не выключатся (зависли или на них не установлены vm-tools), то ждем 10 секунд и выключаем "аппаратно" т.к. в данном случае мы идем на оправданный риск.
Разделим работа на 3 части:
1. Включим возможность подключаться к гипервизору по SSH.
2. Напишем скрипт, который выведет список виртуальных машин на сервере, завершит работу каждой и выключит сервер.
3. Загрузим скрипт по SSH на сервер и запустим в консоли.

В моем случае серверов много, поэтому скрипт один и загружается в момент выполнения. Если хранить скрипт на серверах, то после перезагрузки ESXi его удаляет, да и централизованного управления не будет.

Думаю, включить SSH доступ вам не составит труда по любому мануалу из Интернет. Перейдем сразу к скрипту /home/sysadmin/vm.sh :
#!/bin/sh

# выводим список всех VM с хоста в файл
vim-cmd vmsvc/getallvms | sed -e '1d' | awk '{print $1}' > vms.txt

# корректно выключаем каждую VM из списка
cat vms.txt | while read line
do
 vim-cmd vmsvc/power.shutdown $line
done

# ждем 10 секунд
sleep 10

# выключаем каждую VM из списка по питанию
cat vms.txt | while read line
do
 vim-cmd vmsvc/power.off $line
done

# удаляем файл со списков машин
rm vms.txt

# выключаем сервер
poweroff -f
Теперь нам нужно загрузить этот скрипт на сервер и выполнить. Пароль мы будем передавать в скрипте с помощью программы sshpass, она должна быть в системе. Напишем скрипт на любой linux машине (/home/sysadmin/vm-shutdown.sh):
#!/bin/bash
sshpass -p SHH-PASSWORD scp -o StrictHostKeyChecking=no /home/sysadmin/vm.sh root@192.168.0.1:/
sshpass -p SHH-PASSWORD ssh -o "StrictHostKeyChecking no" root@192.168.0.1 "sh /vm.sh"
При запуске данного скрипта будет выключен сервер 192.168.0.1. Далее, вы можете поступить следующим образом: сделать бота для Telegram и получить возможность удаленно выполнить этот скрипт. Настройка бота для наших целей разобрана в этой статье.

Комментариев нет:

Отправить комментарий