How can i create Alarm using powershell.
Scope: Virtual Center
Alarrm: Type Host
Trigger condition: Host Connected
Action: Run script
$si = Get-View ServiceInstance $alm = Get-View $si.Content.AlarmManager $sae = New-Object VMware.Vim.StateAlarmExpression $sae.Operator = "isEqual" $sae.Type = "HostSystem" $sae.StatePath = "runtime.connectionState" $sae.Red = "connected" $oae = New-Object VMware.Vim.OrAlarmExpression $oae.Expression = $sae $rsa = New-Object VMware.Vim.RunScriptAction $rsa.script = "cmd.exe /c c:\run.bat" $atats = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec $atats.StartState = "yellow" $atats.FinalState = "red" $atats.Repeats = $false $ata = New-Object VMware.Vim.AlarmTriggeringAction $ata.Action = $rsa $ata.TransitionSpecs = $atats $gaa = New-Object VMware.Vim.GroupAlarmAction $gaa.Action += $ata $alarm = *New-Object* VMware.Vim.AlarmSpec $alarm.Name = "my_Alarm2009" $alarm.Description = "myDesc" $alarm.Enabled = $true $alarm.Expression = $oae $alarm.Action = $gaa $alarm.ActionFrequency = 0 $alarm.Setting = New-Object VMware.Vim.AlarmSetting $alm.CreateAlarm($si.Content.RootFolder,$alarm)
Are you using vCenter ?
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
Yes Virtual Center 4
$si = Get-View ServiceInstance
$alm = Get-View $si.Content.AlarmManager
$alm.CreateAlarm($si.Content.RootFolder,$alarm)
Try something like this
$serviceInstance = get-view ServiceInstance $alarmMgr = get-view $serviceInstance.Content.alarmManager $entity = Get-View (Get-Folder -Name "Datacenters").ID $alarm = New-Object VMware.Vim.AlarmSpec $alarm.action = New-Object VMware.Vim.GroupAlarmAction $alarm.action.action = @(New-Object VMware.Vim.AlarmTriggeringAction) $alarm.action.action[0].action = New-Object VMware.Vim.RunScriptAction $alarm.action.action[0].action.script = 'C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe -PSConsoleFile "C:\Program Files\VMware\Infrastructure\VIToolkitForWindows\vim.psc1" c:\temp\test.ps1' $alarm.action.action[0].green2yellow = $false $alarm.action.action[0].red2yellow = $false $alarm.action.action[0].yellow2green = $true $alarm.action.action[0].yellow2red = $false $alarm.Description = "Host connected" $alarm.Enabled = $TRUE $alarm.expression = New-Object VMware.Vim.OrAlarmExpression $alarm.expression.expression = @(New-Object VMware.Vim.StateAlarmExpression) $alarm.Expression.expression[0].Operator = "isEqual" # $alarm.expression.expression[0].red = "" $alarm.Expression.expression[0].StatePath = "runtime.connectionState" $alarm.expression.expression[0].type = "HostSystem" $alarm.expression.expression[0].yellow = "disconnected" $alarm.Name = "My Host connection" $alarm.setting = New-Object VMware.Vim.AlarmSetting $alarm.setting.reportingFrequency = 0 $alarm.setting.toleranceRange = 0 $alarmMgr.CreateAlarm($entity.MoRef, $alarm)
This will create an alarm where the yellow state is an 'disconnected host".
The script is triggered when the host connection state goes from disconnected to connected.
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
$si = Get-View ServiceInstance $alm = Get-View $si.Content.AlarmManager $sae = New-Object VMware.Vim.StateAlarmExpression $sae.Operator = "isEqual" $sae.Type = "HostSystem" $sae.StatePath = "runtime.connectionState" $sae.Red = "connected" $oae = New-Object VMware.Vim.OrAlarmExpression $oae.Expression = $sae $rsa = New-Object VMware.Vim.RunScriptAction $rsa.script = "cmd.exe /c c:\run.bat" $atats = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec $atats.StartState = "yellow" $atats.FinalState = "red" $atats.Repeats = $false $ata = New-Object VMware.Vim.AlarmTriggeringAction $ata.Action = $rsa $ata.TransitionSpecs = $atats $gaa = New-Object VMware.Vim.GroupAlarmAction $gaa.Action += $ata $alarm = *New-Object* VMware.Vim.AlarmSpec $alarm.Name = "my_Alarm2009" $alarm.Description = "myDesc" $alarm.Enabled = $true $alarm.Expression = $oae $alarm.Action = $gaa $alarm.ActionFrequency = 0 $alarm.Setting = New-Object VMware.Vim.AlarmSetting $alm.CreateAlarm($si.Content.RootFolder,$alarm)
Hi All,
Does anyone have the StatePath objects?
Connection state: "runtime.connectionState"
How about CPU, Memory, Network, Disk, Heartbeat, etc.
In the larger picture, I'm trying to script all the other alarms besides the host connection and I'm assuming it will be pretty similar if I just know the correct connection state. Please let me know if that's the case. Thanks!
There aren't that many as can be seen in the StateAlarmExpression object.
For virtual machine: runtime.powerState or summary.quickStats.guestHeartbeatStatus
For hosts: runtime.connectionState
____________
Blog: LucD notes
Twitter: lucd22
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
Well that's unfortunate. Is there any other way to automate creating/modifying alarms then?
There are also metric and event alarms.
Have a look at Alarm expressions – Part 1 : Metric alarms and Alarm expressions – Part 2 : Event alarms.
____________
Blog: LucD notes
Twitter: lucd22
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
Just to finish this one script off, I tried using two arguments to set yellow and red states but I keep getting an error. Any thoughts?
-
Exception calling "CreateAlarm" with "2" argument(s): "A specified parameter wa
s not correct.
-
$vcserver="xxx"
connect-VIServer $vcserver
$serviceInstance = get-view ServiceInstance
$alarmMgr = get-view $serviceInstance.Content.alarmManager
$entity = Get-View (Get-VMHost -Name "xxx").ID
$alarm = New-Object VMware.Vim.AlarmSpec
$alarm.action = New-Object VMware.Vim.GroupAlarmAction
$alarm.action.action = @(New-Object VMware.Vim.AlarmTriggeringAction)
#$alarm.action.action[0].action = New-Object VMware.Vim.RunScriptAction
$alarm.action.action[0].action = New-Object VMware.Vim.SendEmailAction
#$alarm.action.action[0].action.script = 'C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe -PSConsoleFile "C:\Program Files\VMware\Infrastructure\VIToolkitForWindows\vim.psc1" c:\temp\test.ps1'
$alarm.action.action[0].action.ToList = "xxl"
$alarm.action.action[0].action.CcList = ""
$alarm.action.action[0].action.Subject = "VMware Alert"
$alarm.action.action[0].action.Body = ""
#$alarm.action.action[0].action.script = $false
$alarm.action.action[0].green2yellow = $false
$alarm.action.action[0].red2yellow = $false
$alarm.action.action[0].yellow2green = $true
$alarm.action.action[0].yellow2red = $true
$alarm.Description = "Host connected"
$alarm.Enabled = $TRUE
$alarm.expression = New-Object VMware.Vim.OrAlarmExpression
$alarm.expression.expression = @(New-Object VMware.Vim.StateAlarmExpression)
$alarm.Expression.expression[0].Operator = "isEqual"
#$alarm.expression.expression[0].red = "not responding"
$alarm.Expression.expression[0].StatePath = "runtime.connectionState"
$alarm.expression.expression[0].type = "HostSystem"
$alarm.expression.expression[0].yellow = "disconnected"
$alarm.expression = New-Object VMware.Vim.OrAlarmExpression
$alarm.expression.expression = @(New-Object VMware.Vim.StateAlarmExpression)
$alarm.Expression.expression[0].Operator = "isEqual"
$alarm.expression.expression[0].red = "not responding"
$alarm.Expression.expression[0].StatePath = "runtime.connectionState"
$alarm.expression.expression[0].type = "HostSystem"
#$alarm.expression.expression[0].yellow = "disconnected"
$alarm.Name = "Host Connection State"
$alarm.setting = New-Object VMware.Vim.AlarmSetting
$alarm.setting.reportingFrequency = 300
$alarm.setting.toleranceRange = 0
$alarmMgr.CreateAlarm($entity.MoRef, $alarm)
The state for red is not correct, that should be
... $alarm.expression.expression[0].red = "notResponding" ...
The accepted values are defined in the HostSystemConnectionState enum description.
____________
Blog: LucD notes
Twitter: lucd22
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference