I need a script to create an alarm for a specific datastore folder in the storage view (e.g. datastore-1000gb) under a specific Datacenter (e.g. Datacenter-1).
The alarm will have 2 alerts generating a warning at 80% utilization and critical at 90% utilization, and email to a specific email address (alert@email.com) and also a snmp trap. I don't have a specific script in mind except the one I found here: https://communities.vmware.com/t5/VMware-PowerCLI-Discussions/powercli-script-to-create-datastore-al.... It's from 2017. Can it be modified to fit my ask? I'll sincerely appreciate that. Thanks.
There are a number of cmdlets to create and change Alarms, but the requirements you specify are unfortunately afaik not possible.
Similar to the thread you linked to, you can use the API method.
Something like this for example
$dsFolderName = 'datastore-1000gb'
$toAddr = 'alert@email.com'
$dsFolder = Get-Folder -Name $dsFolderName
$spec = New-Object VMware.Vim.AlarmSpec
$spec.Expression = New-Object VMware.Vim.OrAlarmExpression
$spec.Expression.Expression = New-Object VMware.Vim.AlarmExpression[] (1)
$spec.Expression.Expression[0] = New-Object VMware.Vim.MetricAlarmExpression
$spec.Expression.Expression[0].Red = 9000
$spec.Expression.Expression[0].Metric = New-Object VMware.Vim.PerfMetricId
$spec.Expression.Expression[0].Metric.Instance = ''
$spec.Expression.Expression[0].Metric.CounterId = (Get-Metric -MetricGroup Disk -Name 'Space Actually Used').Key
$spec.Expression.Expression[0].Yellow = 8000
$spec.Expression.Expression[0].Type = 'Datastore'
$spec.Expression.Expression[0].Operator = 'isAbove'
$spec.Name = 'Space Utilization 3'
$spec.Action = New-Object VMware.Vim.GroupAlarmAction
$spec.Action.Action = New-Object VMware.Vim.AlarmAction[] (4)
$spec.Action.Action[0] = New-Object VMware.Vim.AlarmTriggeringAction
$spec.Action.Action[0].TransitionSpecs = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec[] (2)
$spec.Action.Action[0].TransitionSpecs[0] = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec
$spec.Action.Action[0].TransitionSpecs[0].Repeats = $false
$spec.Action.Action[0].TransitionSpecs[0].StartState = 'green'
$spec.Action.Action[0].TransitionSpecs[0].FinalState = 'yellow'
$spec.Action.Action[0].TransitionSpecs[1] = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec
$spec.Action.Action[0].TransitionSpecs[1].Repeats = $false
$spec.Action.Action[0].TransitionSpecs[1].StartState = 'red'
$spec.Action.Action[0].TransitionSpecs[1].FinalState = 'yellow'
$spec.Action.Action[0].Yellow2green = $false
$spec.Action.Action[0].Yellow2red = $false
$spec.Action.Action[0].Red2yellow = $false
$spec.Action.Action[0].Action = New-Object VMware.Vim.SendEmailAction
$spec.Action.Action[0].Action.Subject = 'Alarm {alarmName} on Datastore : {targetName} is {newStatus}'
$spec.Action.Action[0].Action.CcList = ''
$spec.Action.Action[0].Action.ToList = $toAddr
$spec.Action.Action[0].Action.Body = ''
$spec.Action.Action[0].Green2yellow = $false
$spec.Action.Action[1] = New-Object VMware.Vim.AlarmTriggeringAction
$spec.Action.Action[1].TransitionSpecs = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec[] (2)
$spec.Action.Action[1].TransitionSpecs[0] = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec
$spec.Action.Action[1].TransitionSpecs[0].Repeats = $false
$spec.Action.Action[1].TransitionSpecs[0].StartState = 'green'
$spec.Action.Action[1].TransitionSpecs[0].FinalState = 'yellow'
$spec.Action.Action[1].TransitionSpecs[1] = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec
$spec.Action.Action[1].TransitionSpecs[1].Repeats = $false
$spec.Action.Action[1].TransitionSpecs[1].StartState = 'red'
$spec.Action.Action[1].TransitionSpecs[1].FinalState = 'yellow'
$spec.Action.Action[1].Yellow2green = $false
$spec.Action.Action[1].Yellow2red = $false
$spec.Action.Action[1].Red2yellow = $false
$spec.Action.Action[1].Action = New-Object VMware.Vim.SendSNMPAction
$spec.Action.Action[1].Green2yellow = $false
$spec.Action.Action[2] = New-Object VMware.Vim.AlarmTriggeringAction
$spec.Action.Action[2].TransitionSpecs = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec[] (1)
$spec.Action.Action[2].TransitionSpecs[0] = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec
$spec.Action.Action[2].TransitionSpecs[0].Repeats = $false
$spec.Action.Action[2].TransitionSpecs[0].StartState = 'yellow'
$spec.Action.Action[2].TransitionSpecs[0].FinalState = 'red'
$spec.Action.Action[2].Yellow2green = $false
$spec.Action.Action[2].Yellow2red = $false
$spec.Action.Action[2].Red2yellow = $false
$spec.Action.Action[2].Action = New-Object VMware.Vim.SendEmailAction
$spec.Action.Action[2].Action.Subject = 'Alarm {alarmName} on Datastore : {targetName} is {newStatus}'
$spec.Action.Action[2].Action.CcList = ''
$spec.Action.Action[2].Action.ToList = $toAddr
$spec.Action.Action[2].Action.Body = ''
$spec.Action.Action[2].Green2yellow = $false
$spec.Action.Action[3] = New-Object VMware.Vim.AlarmTriggeringAction
$spec.Action.Action[3].TransitionSpecs = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec[] (1)
$spec.Action.Action[3].TransitionSpecs[0] = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec
$spec.Action.Action[3].TransitionSpecs[0].Repeats = $false
$spec.Action.Action[3].TransitionSpecs[0].StartState = 'yellow'
$spec.Action.Action[3].TransitionSpecs[0].FinalState = 'red'
$spec.Action.Action[3].Yellow2green = $false
$spec.Action.Action[3].Yellow2red = $false
$spec.Action.Action[3].Red2yellow = $false
$spec.Action.Action[3].Action = New-Object VMware.Vim.SendSNMPAction
$spec.Action.Action[3].Green2yellow = $false
$spec.Description = ''
$spec.Enabled = $false
$spec.Setting = New-Object VMware.Vim.AlarmSetting
$spec.Setting.ToleranceRange = 0
$spec.Setting.ReportingFrequency = 300
$alarmMgr = Get-View AlarmManager
$alarmMgr.CreateAlarm($dsFolder.Id, $spec)
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
There are a number of cmdlets to create and change Alarms, but the requirements you specify are unfortunately afaik not possible.
Similar to the thread you linked to, you can use the API method.
Something like this for example
$dsFolderName = 'datastore-1000gb'
$toAddr = 'alert@email.com'
$dsFolder = Get-Folder -Name $dsFolderName
$spec = New-Object VMware.Vim.AlarmSpec
$spec.Expression = New-Object VMware.Vim.OrAlarmExpression
$spec.Expression.Expression = New-Object VMware.Vim.AlarmExpression[] (1)
$spec.Expression.Expression[0] = New-Object VMware.Vim.MetricAlarmExpression
$spec.Expression.Expression[0].Red = 9000
$spec.Expression.Expression[0].Metric = New-Object VMware.Vim.PerfMetricId
$spec.Expression.Expression[0].Metric.Instance = ''
$spec.Expression.Expression[0].Metric.CounterId = (Get-Metric -MetricGroup Disk -Name 'Space Actually Used').Key
$spec.Expression.Expression[0].Yellow = 8000
$spec.Expression.Expression[0].Type = 'Datastore'
$spec.Expression.Expression[0].Operator = 'isAbove'
$spec.Name = 'Space Utilization 3'
$spec.Action = New-Object VMware.Vim.GroupAlarmAction
$spec.Action.Action = New-Object VMware.Vim.AlarmAction[] (4)
$spec.Action.Action[0] = New-Object VMware.Vim.AlarmTriggeringAction
$spec.Action.Action[0].TransitionSpecs = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec[] (2)
$spec.Action.Action[0].TransitionSpecs[0] = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec
$spec.Action.Action[0].TransitionSpecs[0].Repeats = $false
$spec.Action.Action[0].TransitionSpecs[0].StartState = 'green'
$spec.Action.Action[0].TransitionSpecs[0].FinalState = 'yellow'
$spec.Action.Action[0].TransitionSpecs[1] = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec
$spec.Action.Action[0].TransitionSpecs[1].Repeats = $false
$spec.Action.Action[0].TransitionSpecs[1].StartState = 'red'
$spec.Action.Action[0].TransitionSpecs[1].FinalState = 'yellow'
$spec.Action.Action[0].Yellow2green = $false
$spec.Action.Action[0].Yellow2red = $false
$spec.Action.Action[0].Red2yellow = $false
$spec.Action.Action[0].Action = New-Object VMware.Vim.SendEmailAction
$spec.Action.Action[0].Action.Subject = 'Alarm {alarmName} on Datastore : {targetName} is {newStatus}'
$spec.Action.Action[0].Action.CcList = ''
$spec.Action.Action[0].Action.ToList = $toAddr
$spec.Action.Action[0].Action.Body = ''
$spec.Action.Action[0].Green2yellow = $false
$spec.Action.Action[1] = New-Object VMware.Vim.AlarmTriggeringAction
$spec.Action.Action[1].TransitionSpecs = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec[] (2)
$spec.Action.Action[1].TransitionSpecs[0] = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec
$spec.Action.Action[1].TransitionSpecs[0].Repeats = $false
$spec.Action.Action[1].TransitionSpecs[0].StartState = 'green'
$spec.Action.Action[1].TransitionSpecs[0].FinalState = 'yellow'
$spec.Action.Action[1].TransitionSpecs[1] = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec
$spec.Action.Action[1].TransitionSpecs[1].Repeats = $false
$spec.Action.Action[1].TransitionSpecs[1].StartState = 'red'
$spec.Action.Action[1].TransitionSpecs[1].FinalState = 'yellow'
$spec.Action.Action[1].Yellow2green = $false
$spec.Action.Action[1].Yellow2red = $false
$spec.Action.Action[1].Red2yellow = $false
$spec.Action.Action[1].Action = New-Object VMware.Vim.SendSNMPAction
$spec.Action.Action[1].Green2yellow = $false
$spec.Action.Action[2] = New-Object VMware.Vim.AlarmTriggeringAction
$spec.Action.Action[2].TransitionSpecs = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec[] (1)
$spec.Action.Action[2].TransitionSpecs[0] = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec
$spec.Action.Action[2].TransitionSpecs[0].Repeats = $false
$spec.Action.Action[2].TransitionSpecs[0].StartState = 'yellow'
$spec.Action.Action[2].TransitionSpecs[0].FinalState = 'red'
$spec.Action.Action[2].Yellow2green = $false
$spec.Action.Action[2].Yellow2red = $false
$spec.Action.Action[2].Red2yellow = $false
$spec.Action.Action[2].Action = New-Object VMware.Vim.SendEmailAction
$spec.Action.Action[2].Action.Subject = 'Alarm {alarmName} on Datastore : {targetName} is {newStatus}'
$spec.Action.Action[2].Action.CcList = ''
$spec.Action.Action[2].Action.ToList = $toAddr
$spec.Action.Action[2].Action.Body = ''
$spec.Action.Action[2].Green2yellow = $false
$spec.Action.Action[3] = New-Object VMware.Vim.AlarmTriggeringAction
$spec.Action.Action[3].TransitionSpecs = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec[] (1)
$spec.Action.Action[3].TransitionSpecs[0] = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec
$spec.Action.Action[3].TransitionSpecs[0].Repeats = $false
$spec.Action.Action[3].TransitionSpecs[0].StartState = 'yellow'
$spec.Action.Action[3].TransitionSpecs[0].FinalState = 'red'
$spec.Action.Action[3].Yellow2green = $false
$spec.Action.Action[3].Yellow2red = $false
$spec.Action.Action[3].Red2yellow = $false
$spec.Action.Action[3].Action = New-Object VMware.Vim.SendSNMPAction
$spec.Action.Action[3].Green2yellow = $false
$spec.Description = ''
$spec.Enabled = $false
$spec.Setting = New-Object VMware.Vim.AlarmSetting
$spec.Setting.ToleranceRange = 0
$spec.Setting.ReportingFrequency = 300
$alarmMgr = Get-View AlarmManager
$alarmMgr.CreateAlarm($dsFolder.Id, $spec)
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
Hey @LucD Thanks so much as usual! I'll definitely test this out and let you know how it goes.
Thank you @LucD. This works very well.