Тушим все по команде UPS

Материал из Wiki Test Lab
Перейти к: навигация, поиск

Назад    Главная
 

Тушим все по команде UPS

Источник

Один из часто задаваемых вопросов - поддерживается ли работа vSphere с UPS? К сожалению нет, и интеграцию придется делать вручную.

Можно использовать например ghettoUPSHostShutdown.pl, но можно использовать и PowerCLI.

Что для этого требуется:

Иметь Windows хост (или ВМ), следящую за ИБП. Как вариант - повесить эту задачу на vCenter (если он физический).

При пропадании питания вызвать скрипт, который погасит инфраструктуру.

При восстановлении питания поднять инфраструктуру, а затем ВМ.


Итак, вариант 1. vCenter расположен на физической машине.

Get-VM | Where-Object {$_.PowerState -eq "PoweredOn" -and $_.Guest.State -eq "Running"} | Shutdown-VMGuest
Start-Sleep -Seconds 300
Get-VM | Where-Object {$_.PowerState -eq "PoweredOn"} | Stop-VM -RunAsync
Start-Sleep -Seconds 60
Get-VMHost | ForEach-Object {
  Set-VMHost -vmhost $_ -state maintenance
  Stop-VMHost -vmhost $_ -RunAsync
}

Вариант 2. vCenter расположен на виртуальной машине. В этом случае сначала выключаем vCenter, чтобы избежать потенциального влияния DRS. Например так:

Get-VM -Name "vCenter" | %{
  if ($_.PowerState -eq "PoweredOn") {
    if ($_.Guest.State -eq "Running") {
      Shutdown-VMGuest
    } else {
      Stop-VM -RunAsync
    }
  }
}

Можно использовать cтандартные средства Windows:

shutdown /s /t 0 /m \\vcenter

И для каждого физического хоста вызываем такой скрипт:

Get-VM | Where-Object  {$_.PowerState -eq "PoweredOn"  -and $_.Guest.State -eq "Running"} |  Shutdown-VMGuest 
Start-Sleep -Seconds 300
Get-VM | Where-Object {$_.PowerState -eq "PoweredOn"} |  Stop-VM -RunAsync
Start-Sleep -Seconds 60
Get-VMHost | Stop-VMHost -RunAsync

Есть вариации на тему автоматического рестарта ВМ при восстановлении питания, однако на мой взгляд это может привести к проблемам, если не учитывать взаимные зависимости ВМ и отправить в массовый старт пару сотен виртуальных машин. С другой стороны, никто не мешает автоматически поднять только vCenter и инфраструктурные машины типа контроллеров домена и DNS (если нет физических), а затем вызвать ваш собственный скрипт для поднятия всех машин в нужном вам порядке и с нужными вам задержками.

Личные инструменты