Skip to content

Commit 707834f

Browse files
Terraform Team AutomationMonica Joshi
authored andcommitted
Added - Support for Alarms enhancements
1 parent 401e9dd commit 707834f

12 files changed

+449
-4
lines changed

examples/monitoring/alarms/alarms.tf

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,10 @@ variable "alarm_metric_compartment_id_in_subtree" {
5757
default = false
5858
}
5959

60+
variable "alarm_notification_version" {
61+
default = "1.X"
62+
}
63+
6064
variable "alarm_namespace" {
6165
default = "oci_computeagent"
6266
}
@@ -81,6 +85,10 @@ variable "alarm_resource_group" {
8185
default = "resourceGroup"
8286
}
8387

88+
variable "alarm_rule_name" {
89+
default = "BASE"
90+
}
91+
8492
variable "alarm_severity" {
8593
default = "WARNING"
8694
}
@@ -167,10 +175,26 @@ resource "oci_monitoring_alarm" "test_alarm" {
167175
body = var.alarm_body
168176
message_format = var.alarm_message_format
169177
metric_compartment_id_in_subtree = var.alarm_metric_compartment_id_in_subtree
178+
notification_version = var.alarm_notification_version
179+
overrides {
180+
body = "90% CPU utilization."
181+
pending_duration = "PT10M"
182+
query = "CPUUtilization[1m].mean() > 90"
183+
rule_name = "RULE1"
184+
severity = "WARNING"
185+
}
186+
overrides {
187+
body = "95% CPU utilization."
188+
pending_duration = "PT5M"
189+
query = "CPUUtilization[1m].mean() > 95"
190+
rule_name = "RULE2"
191+
severity = "CRITICAL"
192+
}
170193
pending_duration = var.alarm_pending_duration
171194
repeat_notification_duration = var.alarm_repeat_notification_duration
172195
resolution = var.alarm_resolution
173196
resource_group = var.alarm_resource_group
197+
rule_name = var.alarm_rule_name
174198
is_notifications_per_metric_dimension_enabled = var.is_notifications_per_metric_dimension_enabled
175199

176200
suppression {

internal/integrationtest/monitoring_alarm_status_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ func TestMonitoringAlarmStatusResource_basic(t *testing.T) {
6363
resource.TestCheckResourceAttrSet(datasourceName, "alarm_statuses.#"),
6464
resource.TestCheckResourceAttrSet(datasourceName, "alarm_statuses.0.display_name"),
6565
resource.TestCheckResourceAttrSet(datasourceName, "alarm_statuses.0.id"),
66+
resource.TestCheckResourceAttrSet(datasourceName, "alarm_statuses.0.rule_name"),
6667
resource.TestCheckResourceAttrSet(datasourceName, "alarm_statuses.0.severity"),
6768
resource.TestCheckResourceAttrSet(datasourceName, "alarm_statuses.0.status"),
6869
resource.TestCheckResourceAttrSet(datasourceName, "alarm_statuses.0.timestamp_triggered"),

internal/integrationtest/monitoring_alarm_test.go

Lines changed: 68 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,18 +62,34 @@ var (
6262
"is_notifications_per_metric_dimension_enabled": acctest.Representation{RepType: acctest.Required, Create: `true`, Update: `true`},
6363
"message_format": acctest.Representation{RepType: acctest.Optional, Create: `ONS_OPTIMIZED`, Update: `PRETTY_JSON`},
6464
"metric_compartment_id_in_subtree": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `true`},
65+
"notification_version": acctest.Representation{RepType: acctest.Optional, Create: `1.X`, Update: `2.X`},
66+
"overrides": []acctest.RepresentationGroup{{RepType: acctest.Optional, Group: MonitoringAlarmOverrideRepresentation1}, {RepType: acctest.Optional, Group: MonitoringAlarmOverrideRepresentation2}},
6567
"pending_duration": acctest.Representation{RepType: acctest.Optional, Create: `PT5M`, Update: `PT10M`},
6668
"repeat_notification_duration": acctest.Representation{RepType: acctest.Optional, Create: `PT2H`, Update: `PT10M`},
6769
"resolution": acctest.Representation{RepType: acctest.Optional, Create: `1m`},
6870
"resource_group": acctest.Representation{RepType: acctest.Optional, Create: `resourceGroup`, Update: `resourceGroup2`},
71+
"rule_name": acctest.Representation{RepType: acctest.Optional, Create: `BASE`, Update: `BASE2`},
6972
"suppression": acctest.RepresentationGroup{RepType: acctest.Optional, Group: MonitoringAlarmSuppressionRepresentation},
7073
}
74+
MonitoringAlarmOverrideRepresentation1 = map[string]interface{}{
75+
"body": acctest.Representation{RepType: acctest.Optional, Create: `90% CPU utilization.`, Update: `95% CPU utilization.`},
76+
"pending_duration": acctest.Representation{RepType: acctest.Optional, Create: `PT15M`, Update: `PT10M`},
77+
"query": acctest.Representation{RepType: acctest.Optional, Create: `CPUUtilization[1m].mean() > 90`, Update: `CPUUtilization[1m].mean() > 95`},
78+
"rule_name": acctest.Representation{RepType: acctest.Optional, Create: `RULE1`, Update: `RULE3`},
79+
"severity": acctest.Representation{RepType: acctest.Optional, Create: `WARNING`, Update: `CRITICAL`},
80+
}
81+
MonitoringAlarmOverrideRepresentation2 = map[string]interface{}{
82+
"body": acctest.Representation{RepType: acctest.Optional, Create: `98% CPU utilization.`, Update: `99% CPU utilization.`},
83+
"pending_duration": acctest.Representation{RepType: acctest.Optional, Create: `PT10M`, Update: `PT5M`},
84+
"query": acctest.Representation{RepType: acctest.Optional, Create: `CPUUtilization[1m].mean() > 98`, Update: `CPUUtilization[1m].mean() > 99`},
85+
"rule_name": acctest.Representation{RepType: acctest.Optional, Create: `RULE2`, Update: `RULE4`},
86+
"severity": acctest.Representation{RepType: acctest.Optional, Create: `WARNING`, Update: `CRITICAL`},
87+
}
7188
MonitoringAlarmSuppressionRepresentation = map[string]interface{}{
7289
"time_suppress_from": acctest.Representation{RepType: acctest.Required, Create: `2126-02-01T18:00:00.001Z`, Update: `2125-12-01T18:00:00.001Z`},
7390
"time_suppress_until": acctest.Representation{RepType: acctest.Required, Create: `2126-02-01T19:00:00.001Z`, Update: `2125-12-01T19:00:00.001Z`},
7491
"description": acctest.Representation{RepType: acctest.Optional, Create: `System Maintenance`, Update: `description2`},
7592
}
76-
7793
MonitoringAlarmResourceDependencies = DefinedTagsDependencies +
7894
acctest.GenerateResourceFromRepresentationMap("oci_ons_notification_topic", "test_notification_topic", acctest.Required, acctest.Create, getONSTopicRepresentationCopyWithRandomNameOrHttpReplayValue(10, "talarm1")) +
7995
acctest.GenerateResourceFromRepresentationMap("oci_ons_notification_topic", "test_notification_topic2", acctest.Required, acctest.Create, getONSTopicRepresentationCopyWithRandomNameOrHttpReplayValue(10, "talarm2"))
@@ -151,11 +167,24 @@ func TestMonitoringAlarmResource_basic(t *testing.T) {
151167
resource.TestCheckResourceAttrSet(resourceName, "metric_compartment_id"),
152168
resource.TestCheckResourceAttr(resourceName, "metric_compartment_id_in_subtree", "false"),
153169
resource.TestCheckResourceAttr(resourceName, "namespace", "oci_computeagent"),
170+
resource.TestCheckResourceAttr(resourceName, "notification_version", "1.X"),
171+
resource.TestCheckResourceAttr(resourceName, "overrides.#", "2"),
172+
resource.TestCheckResourceAttr(resourceName, "overrides.0.body", "90% CPU utilization."),
173+
resource.TestCheckResourceAttr(resourceName, "overrides.0.pending_duration", "PT15M"),
174+
resource.TestCheckResourceAttr(resourceName, "overrides.0.query", "CPUUtilization[1m].mean() > 90"),
175+
resource.TestCheckResourceAttr(resourceName, "overrides.0.rule_name", "RULE1"),
176+
resource.TestCheckResourceAttr(resourceName, "overrides.0.severity", "WARNING"),
177+
resource.TestCheckResourceAttr(resourceName, "overrides.1.body", "98% CPU utilization."),
178+
resource.TestCheckResourceAttr(resourceName, "overrides.1.pending_duration", "PT10M"),
179+
resource.TestCheckResourceAttr(resourceName, "overrides.1.query", "CPUUtilization[1m].mean() > 98"),
180+
resource.TestCheckResourceAttr(resourceName, "overrides.1.rule_name", "RULE2"),
181+
resource.TestCheckResourceAttr(resourceName, "overrides.1.severity", "WARNING"),
154182
resource.TestCheckResourceAttr(resourceName, "pending_duration", "PT5M"),
155183
resource.TestCheckResourceAttr(resourceName, "query", "CpuUtilization[10m].percentile(0.9) < 85"),
156184
resource.TestCheckResourceAttr(resourceName, "repeat_notification_duration", "PT2H"),
157185
resource.TestCheckResourceAttr(resourceName, "resolution", "1m"),
158186
resource.TestCheckResourceAttr(resourceName, "resource_group", "resourceGroup"),
187+
resource.TestCheckResourceAttr(resourceName, "rule_name", "BASE"),
159188
resource.TestCheckResourceAttr(resourceName, "severity", "WARNING"),
160189
resource.TestCheckResourceAttrSet(resourceName, "state"),
161190
resource.TestCheckResourceAttr(resourceName, "suppression.#", "1"),
@@ -197,11 +226,19 @@ func TestMonitoringAlarmResource_basic(t *testing.T) {
197226
resource.TestCheckResourceAttrSet(resourceName, "metric_compartment_id"),
198227
resource.TestCheckResourceAttr(resourceName, "metric_compartment_id_in_subtree", "false"),
199228
resource.TestCheckResourceAttr(resourceName, "namespace", "oci_computeagent"),
229+
resource.TestCheckResourceAttr(resourceName, "notification_version", "1.X"),
230+
resource.TestCheckResourceAttr(resourceName, "overrides.#", "2"),
231+
resource.TestCheckResourceAttr(resourceName, "overrides.0.body", "90% CPU utilization."),
232+
resource.TestCheckResourceAttr(resourceName, "overrides.0.pending_duration", "PT15M"),
233+
resource.TestCheckResourceAttr(resourceName, "overrides.0.query", "CPUUtilization[1m].mean() > 90"),
234+
resource.TestCheckResourceAttr(resourceName, "overrides.0.rule_name", "RULE1"),
235+
resource.TestCheckResourceAttr(resourceName, "overrides.0.severity", "WARNING"),
200236
resource.TestCheckResourceAttr(resourceName, "pending_duration", "PT5M"),
201237
resource.TestCheckResourceAttr(resourceName, "query", "CpuUtilization[10m].percentile(0.9) < 85"),
202238
resource.TestCheckResourceAttr(resourceName, "repeat_notification_duration", "PT2H"),
203239
resource.TestCheckResourceAttr(resourceName, "resolution", "1m"),
204240
resource.TestCheckResourceAttr(resourceName, "resource_group", "resourceGroup"),
241+
resource.TestCheckResourceAttr(resourceName, "rule_name", "BASE"),
205242
resource.TestCheckResourceAttr(resourceName, "severity", "WARNING"),
206243
resource.TestCheckResourceAttrSet(resourceName, "state"),
207244
resource.TestCheckResourceAttr(resourceName, "suppression.#", "1"),
@@ -239,11 +276,24 @@ func TestMonitoringAlarmResource_basic(t *testing.T) {
239276
resource.TestCheckResourceAttrSet(resourceName, "metric_compartment_id"),
240277
resource.TestCheckResourceAttr(resourceName, "metric_compartment_id_in_subtree", "true"),
241278
resource.TestCheckResourceAttr(resourceName, "namespace", "oci_lbaas"),
279+
resource.TestCheckResourceAttr(resourceName, "notification_version", "2.X"),
280+
resource.TestCheckResourceAttr(resourceName, "overrides.#", "2"),
281+
resource.TestCheckResourceAttr(resourceName, "overrides.0.body", "95% CPU utilization."),
282+
resource.TestCheckResourceAttr(resourceName, "overrides.0.pending_duration", "PT10M"),
283+
resource.TestCheckResourceAttr(resourceName, "overrides.0.query", "CPUUtilization[1m].mean() > 95"),
284+
resource.TestCheckResourceAttr(resourceName, "overrides.0.rule_name", "RULE3"),
285+
resource.TestCheckResourceAttr(resourceName, "overrides.0.severity", "CRITICAL"),
286+
resource.TestCheckResourceAttr(resourceName, "overrides.1.body", "99% CPU utilization."),
287+
resource.TestCheckResourceAttr(resourceName, "overrides.1.pending_duration", "PT5M"),
288+
resource.TestCheckResourceAttr(resourceName, "overrides.1.query", "CPUUtilization[1m].mean() > 99"),
289+
resource.TestCheckResourceAttr(resourceName, "overrides.1.rule_name", "RULE4"),
290+
resource.TestCheckResourceAttr(resourceName, "overrides.1.severity", "CRITICAL"),
242291
resource.TestCheckResourceAttr(resourceName, "pending_duration", "PT10M"),
243292
resource.TestCheckResourceAttr(resourceName, "query", "AcceptedConnections[10m].count() <= 0"),
244293
resource.TestCheckResourceAttr(resourceName, "repeat_notification_duration", "PT10M"),
245294
resource.TestCheckResourceAttr(resourceName, "resolution", "1m"),
246295
resource.TestCheckResourceAttr(resourceName, "resource_group", "resourceGroup2"),
296+
resource.TestCheckResourceAttr(resourceName, "rule_name", "BASE2"),
247297
resource.TestCheckResourceAttr(resourceName, "severity", "INFO"),
248298
resource.TestCheckResourceAttrSet(resourceName, "state"),
249299
resource.TestCheckResourceAttr(resourceName, "suppression.#", "1"),
@@ -266,8 +316,7 @@ func TestMonitoringAlarmResource_basic(t *testing.T) {
266316
{
267317
Config: config +
268318
acctest.GenerateDataSourceFromRepresentationMap("oci_monitoring_alarms", "test_alarms", acctest.Optional, acctest.Update, MonitoringAlarmDataSourceRepresentation) +
269-
compartmentIdVariableStr + MonitoringAlarmResourceDependencies +
270-
acctest.GenerateResourceFromRepresentationMap("oci_monitoring_alarm", "test_alarm", acctest.Optional, acctest.Update, MonitoringAlarmRepresentation),
319+
compartmentIdVariableStr + MonitoringAlarmResourceConfig,
271320
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
272321
resource.TestCheckResourceAttr(datasourceName, "compartment_id", compartmentId),
273322
resource.TestCheckResourceAttr(datasourceName, "compartment_id_in_subtree", "false"),
@@ -284,7 +333,15 @@ func TestMonitoringAlarmResource_basic(t *testing.T) {
284333
resource.TestCheckResourceAttr(datasourceName, "alarms.0.is_notifications_per_metric_dimension_enabled", "true"),
285334
resource.TestCheckResourceAttrSet(datasourceName, "alarms.0.metric_compartment_id"),
286335
resource.TestCheckResourceAttr(datasourceName, "alarms.0.namespace", "oci_lbaas"),
336+
resource.TestCheckResourceAttr(datasourceName, "alarms.0.notification_version", "2.X"),
337+
resource.TestCheckResourceAttr(datasourceName, "alarms.0.overrides.#", "2"),
338+
resource.TestCheckResourceAttr(datasourceName, "alarms.0.overrides.0.body", "95% CPU utilization."),
339+
resource.TestCheckResourceAttr(datasourceName, "alarms.0.overrides.0.pending_duration", "PT10M"),
340+
resource.TestCheckResourceAttr(datasourceName, "alarms.0.overrides.0.query", "CPUUtilization[1m].mean() > 95"),
341+
resource.TestCheckResourceAttr(datasourceName, "alarms.0.overrides.0.rule_name", "RULE3"),
342+
resource.TestCheckResourceAttr(datasourceName, "alarms.0.overrides.0.severity", "CRITICAL"),
287343
resource.TestCheckResourceAttr(datasourceName, "alarms.0.query", "AcceptedConnections[10m].count() <= 0"),
344+
resource.TestCheckResourceAttr(datasourceName, "alarms.0.rule_name", "BASE2"),
288345
resource.TestCheckResourceAttr(datasourceName, "alarms.0.severity", "INFO"),
289346
resource.TestCheckResourceAttrSet(datasourceName, "alarms.0.state"),
290347
resource.TestCheckResourceAttr(datasourceName, "alarms.0.suppression.#", "1"),
@@ -313,11 +370,19 @@ func TestMonitoringAlarmResource_basic(t *testing.T) {
313370
resource.TestCheckResourceAttr(singularDatasourceName, "message_format", "PRETTY_JSON"),
314371
resource.TestCheckResourceAttr(singularDatasourceName, "metric_compartment_id_in_subtree", "true"),
315372
resource.TestCheckResourceAttr(singularDatasourceName, "namespace", "oci_lbaas"),
373+
resource.TestCheckResourceAttr(singularDatasourceName, "notification_version", "2.X"),
374+
resource.TestCheckResourceAttr(singularDatasourceName, "overrides.#", "2"),
375+
resource.TestCheckResourceAttr(singularDatasourceName, "overrides.1.body", "99% CPU utilization."),
376+
resource.TestCheckResourceAttr(singularDatasourceName, "overrides.1.pending_duration", "PT5M"),
377+
resource.TestCheckResourceAttr(singularDatasourceName, "overrides.1.query", "CPUUtilization[1m].mean() > 99"),
378+
resource.TestCheckResourceAttr(singularDatasourceName, "overrides.1.rule_name", "RULE4"),
379+
resource.TestCheckResourceAttr(singularDatasourceName, "overrides.1.severity", "CRITICAL"),
316380
resource.TestCheckResourceAttr(singularDatasourceName, "pending_duration", "PT10M"),
317381
resource.TestCheckResourceAttr(singularDatasourceName, "query", "AcceptedConnections[10m].count() <= 0"),
318382
resource.TestCheckResourceAttr(singularDatasourceName, "repeat_notification_duration", "PT10M"),
319383
resource.TestCheckResourceAttr(singularDatasourceName, "resolution", "1m"),
320384
resource.TestCheckResourceAttr(singularDatasourceName, "resource_group", "resourceGroup2"),
385+
resource.TestCheckResourceAttr(singularDatasourceName, "rule_name", "BASE2"),
321386
resource.TestCheckResourceAttr(singularDatasourceName, "severity", "INFO"),
322387
resource.TestCheckResourceAttrSet(singularDatasourceName, "state"),
323388
resource.TestCheckResourceAttr(singularDatasourceName, "suppression.#", "1"),

internal/service/monitoring/monitoring_alarm_data_source.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,16 @@ func (s *MonitoringAlarmDataSourceCrud) SetData() error {
108108
s.D.Set("namespace", *s.Res.Namespace)
109109
}
110110

111+
if s.Res.NotificationVersion != nil {
112+
s.D.Set("notification_version", *s.Res.NotificationVersion)
113+
}
114+
115+
overrides := []interface{}{}
116+
for _, item := range s.Res.Overrides {
117+
overrides = append(overrides, AlarmOverrideToMap(item))
118+
}
119+
s.D.Set("overrides", overrides)
120+
111121
if s.Res.PendingDuration != nil {
112122
s.D.Set("pending_duration", *s.Res.PendingDuration)
113123
}
@@ -128,6 +138,10 @@ func (s *MonitoringAlarmDataSourceCrud) SetData() error {
128138
s.D.Set("resource_group", *s.Res.ResourceGroup)
129139
}
130140

141+
if s.Res.RuleName != nil {
142+
s.D.Set("rule_name", *s.Res.RuleName)
143+
}
144+
131145
s.D.Set("severity", s.Res.Severity)
132146

133147
s.D.Set("state", s.Res.LifecycleState)

0 commit comments

Comments
 (0)