Многие Enterprise-администраторы используют алармы (alarms) для оповещения о каких-либо сбоях в виртуальном датацентре VMware vSphere, а наиболее продвинутые из них даже пишут сценарии, выполняемые при том или ином срабатывании аларма в ответ на событие (event).
Но как протестировать выполнение этого действия, если вам нужно вызвать этот аларм, но сам ивент симулировать в производственной среде трудно (например, потеря соединения с хостом ESXi)?
Для этого во фреймворке PowerCLI предусмотрена возможность генерации "фейкового" аларма в VMware vCenter, который не затрагивает производственную среду. Сначала нам нужно найти имя этого ивента, по происхождении которого срабатывает аларм. Нужно пойти по этой ссылке и найти названия, оканчивающиеся на "Event".
Например, найдем HostConnectionLostEvent (потеря соединения с хостом ESXi):
Список событий также можно узнать, выполнив следующий сценарий PowerCLI:
Итак, возьмем событие HostConnectionLostEvent и выполним для него следующий сценарий:
# Usual load modules and connections
import-module VMware.VimAutomation.Core
connect-viserver 192.168.10.99
$server = $global:DefaultVIServer
$entity = Get-View (Get-VMHost -Name 192.168.10.240)
$eventMgr = Get-View $server.ExtensionData.Content.EventManager
# Subsitute your event to trigger
$event = New-Object VMware.Vim.HostConnectionLostEvent
# This property is specific to this event, and is required. This domain and user doesn't have to be an existing account.
$event.UserName = "CAGE.LOCAL\Chaos Monkey"
$hostEventArg = New-Object VMware.Vim.HostEventArgument
$hostEventArg.Host = $entity.MoRef
$hostEventArg.Name = "Host-is-a-label"
$event.Host = $HostEventArg
# Sends the event to vCenter
$eventMgr.PostEvent($event,$null)
Получим сгенерированный аларм в VMware vCenter (кликабельно):
Для некоторых ивентов заполнение некоторых данных свойств является обязательным. Например, если вы поменяете в сценарии выше строчку с инициализацией ивента вот на эту:
Exception calling "PostEvent" with "2" argument(s): "
Required property switchUuid is missing from data object of type UplinkPortVlanUntrunkedEvent
while parsing serialized DataObject of type vim.event.UplinkPortVlanUntrunkedEvent
Это значит, что вам надо добавить требуемый параметр - switchUuid. Заполним его для переменной $event:
$event.SwitchUuid = "Fake UUID"
После этого сценарий PowerCLI выполнится успешно, и мы увидим наш фейковый аларм в консоли vSphere Client:
Таким образом, вам надо изучить структуру свойств события, чтобы корректно исполнять сценарий, приведенный выше.