VMware Cloud Community
jFishner
Contributor
Contributor
Jump to solution

How to create Alarm

How can i create Alarm using powershell.

Scope: Virtual Center

Alarrm: Type Host

Trigger condition: Host Connected

Action: Run script

0 Kudos
1 Solution

Accepted Solutions
harkamal
Expert
Expert
Jump to solution

$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)

View solution in original post

0 Kudos
11 Replies
LucD
Leadership
Leadership
Jump to solution

Are you using vCenter ?


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
jFishner
Contributor
Contributor
Jump to solution

Yes Virtual Center 4

0 Kudos
harkamal
Expert
Expert
Jump to solution

$si = Get-View ServiceInstance

$alm = Get-View $si.Content.AlarmManager

$alm.CreateAlarm($si.Content.RootFolder,$alarm)

0 Kudos
LucD
Leadership
Leadership
Jump to solution

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

harkamal
Expert
Expert
Jump to solution

$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)
0 Kudos
kaizenwerks
Contributor
Contributor
Jump to solution

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!

0 Kudos
LucD
Leadership
Leadership
Jump to solution

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

0 Kudos
kaizenwerks
Contributor
Contributor
Jump to solution

Well that's unfortunate. Is there any other way to automate creating/modifying alarms then?

0 Kudos
LucD
Leadership
Leadership
Jump to solution

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

0 Kudos
kaizenwerks
Contributor
Contributor
Jump to solution

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)

0 Kudos
LucD
Leadership
Leadership
Jump to solution

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

0 Kudos