alex sikorsky
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Накидал тут скриптик для корректного гашения больших инфраструктур по сигналам упса. Для работы требует Power Shell, PowerCLI и заполнить первые три строки. !!!Warning!!! Это сильно альфа версия, функционал куцый, баги не выловленны. Посему применять с осторожностью. Приветсвуются замечания и предложения по фичам... Код: $server = "" $user = "" $password = "" function SetStartUpPolicy { param($vm) $CurrentStartUpPolicy = Get-VMStartPolicy -VM $vm $StartAction = Get-Annotation -CustomAttribute StartAction -Entity $vm $StartOrder = Get-Annotation -CustomAttribute StartOrder -Entity $vm switch ($StartAction) { "StartAction:Automatic" {Set-VMStartPolicy -StartPolicy $CurrentStartUpPolicy -StartAction "PowerOn" -StartOrder $StartOrder.value -Confirm:$false} "StartAction:Any" {Set-VMStartPolicy -StartPolicy $CurrentStartUpPolicy -StartAction "PowerOn" -UnspecifiedStartOrder:$true -Confirm:$false} "StartAction:Manual" {Set-VMStartPolicy -StartPolicy $CurrentStartUpPolicy -StartAction "None" -Confirm:$false} } } function OnBattery { Connect-VIServer -Server $server -User $user -Password $password $VMs = Get-VM | Get-Annotation -CustomAttribute ShutdownPolicy | Where-Object {$_.Value -eq "OnBattery"} foreach($vm in $VMs) { $currentvm = Get-VM -Name $vm.AnnotatedEntity Shutdown-VMGuest -VM $currentvm -Server $server -Confirm:$false SetStartUpPolicy $currentvm } Disconnect-VIServer -Server $server -Confirm:$false } function OnBatteryClear { Connect-VIServer -Server $server -User $user -Password $password $VMs = Get-VM | Get-Annotation -CustomAttribute ShutdownPolicy | Where-Object {$_.Value -eq "OnBattery"} foreach($vm in $VMs) { $currentvm = Get-VM -Name $vm.AnnotatedEntity Start-VM -RunAsync -VM $currentvm -Confirm:$false } Disconnect-VIServer -Server $server -Confirm:$false } function BatteryLow { Connect-VIServer -Server $server -User $user -Password $password $VMs = Get-VM | Get-Annotation -CustomAttribute ShutdownPolicy | Where-Object {$_.Value -eq "BatteryLow"} foreach($vm in $VMs) { $currentvm = Get-VM -Name $vm.AnnotatedEntity Shutdown-VMGuest -VM $currentvm -Server $server -Confirm:$false SetStartUpPolicy $currentvm } $VMs = Get-VM | Get-Annotation -CustomAttribute ShutdownPolicy | Where-Object {$_.Value -eq "Agent"} foreach($vm in $VMs) { $currentvm = Get-VM -Name $vm.AnnotatedEntity SetStartUpPolicy $currentvm Shutdown-VMGuest -VM $currentvm -Server $server -Confirm:$false } Disconnect-VIServer -Server $server -Confirm:$false } foreach ($arg in $args) { switch ($arg) { "--OnBattery" {OnBattery} "--OnBatteryClear" {OnBatteryClear} "--BatteryLow" {BatteryLow} Default {exit} } } | На любой VM в разделе Annotations жмем Edit и создаем три атрибута: Атрибут | Возможные значения | ShutdownPolicy | OnBattery, BatteryLow, Agent | StartAction | Automatic, Any, Manual | StartOrder | Целое положительное число | Принцип работы следующий, при переходе на батарею упс дергает агент который запускает скрипт с параметром “--OnBattery". Тот выдёргивает список VM у которых атрибут “ShutdownPolicy” равен “OnBattery”, делает им Shutdown-Guest и, на всякий пожарный, настраивает параметры автозапуска в соответствии в атрибутами “StartAction” и “ StartOrder ”. Смысл сего действа погасить заранее не критичные VMки , это сократит, во первых, время необходимое для полного гашения системы когда батарея сядет окончательно . Во вторых, теоретически , несколько снизит энергопотребление серверов и они проработают дольше с тем что осталось. И да, запускать этот этап лучше не сразу, а минут через десять, дабы убедится что электричество точно отключили Если электричество вернули до того как все умерло – запускам скрип с параметром "--OnBatteryClear". Все что было погашено в первом пункте будет запущенно. Ну и когда батарея подходит к концу, тут надо прикинуть сколько времени нужно на окончательное завершение, запускам с параметром "--BatteryLow”. Соответственно будут найдены все VM со значением “BatteryLow " они будут погашены и для них будет настроен автозапуск. Смысл параметра “Agent” такой же как и “BatteryLow ", но такая VM будет выключена самой последней. |