Skip to content

Commit 971cd27

Browse files
feat(observability): Add missing support for OpsGenie priority level (#931)
relates to STACKITCDN-879 Co-authored-by: Ruben Hoenle <Ruben.Hoenle@stackit.cloud>
1 parent 4b670ee commit 971cd27

7 files changed

Lines changed: 47 additions & 24 deletions

File tree

docs/data-sources/observability_instance.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ Read-Only:
110110

111111
- `api_key` (String) The API key for OpsGenie.
112112
- `api_url` (String) The host to send OpsGenie API requests to. Must be a valid URL
113+
- `priority` (String) Priority of the alert. Possible values are: `P1`, `P2`, `P3`, `P4`, `P5`.
113114
- `tags` (String) Comma separated list of tags attached to the notifications.
114115

115116

docs/resources/observability_instance.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ Optional:
115115

116116
- `api_key` (String) The API key for OpsGenie.
117117
- `api_url` (String) The host to send OpsGenie API requests to. Must be a valid URL
118+
- `priority` (String) Priority of the alert. Possible values are: `P1`, `P2`, `P3`, `P4`, `P5`.
118119
- `tags` (String) Comma separated list of tags attached to the notifications.
119120

120121

stackit/internal/services/observability/instance/datasource.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,10 @@ func (d *instanceDataSource) Schema(_ context.Context, _ datasource.SchemaReques
247247
Description: "Comma separated list of tags attached to the notifications.",
248248
Computed: true,
249249
},
250+
"priority": schema.StringAttribute{
251+
Description: "Priority of the alert. " + utils.FormatPossibleValues([]string{"P1", "P2", "P3", "P4", "P5"}...),
252+
Computed: true,
253+
},
250254
},
251255
},
252256
},

stackit/internal/services/observability/instance/resource.go

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -187,15 +187,17 @@ var emailConfigsTypes = map[string]attr.Type{
187187

188188
// Struct corresponding to Model.AlertConfig.receivers.opsGenieConfigs
189189
type opsgenieConfigsModel struct {
190-
ApiKey types.String `tfsdk:"api_key"`
191-
ApiUrl types.String `tfsdk:"api_url"`
192-
Tags types.String `tfsdk:"tags"`
190+
ApiKey types.String `tfsdk:"api_key"`
191+
ApiUrl types.String `tfsdk:"api_url"`
192+
Tags types.String `tfsdk:"tags"`
193+
Priority types.String `tfsdk:"priority"`
193194
}
194195

195196
var opsgenieConfigsTypes = map[string]attr.Type{
196-
"api_key": types.StringType,
197-
"api_url": types.StringType,
198-
"tags": types.StringType,
197+
"api_key": types.StringType,
198+
"api_url": types.StringType,
199+
"tags": types.StringType,
200+
"priority": types.StringType,
199201
}
200202

201203
// Struct corresponding to Model.AlertConfig.receivers.webHooksConfigs
@@ -629,6 +631,10 @@ func (r *instanceResource) Schema(_ context.Context, _ resource.SchemaRequest, r
629631
Description: "Comma separated list of tags attached to the notifications.",
630632
Optional: true,
631633
},
634+
"priority": schema.StringAttribute{
635+
Description: "Priority of the alert. " + utils.FormatPossibleValues("P1", "P2", "P3", "P4", "P5"),
636+
Optional: true,
637+
},
632638
},
633639
},
634640
},
@@ -1665,9 +1671,10 @@ func mapReceiversToAttributes(ctx context.Context, respReceivers *[]observabilit
16651671
if receiver.OpsgenieConfigs != nil {
16661672
for _, opsgenieConfig := range *receiver.OpsgenieConfigs {
16671673
opsGenieConfigMap := map[string]attr.Value{
1668-
"api_key": types.StringPointerValue(opsgenieConfig.ApiKey),
1669-
"api_url": types.StringPointerValue(opsgenieConfig.ApiUrl),
1670-
"tags": types.StringPointerValue(opsgenieConfig.Tags),
1674+
"api_key": types.StringPointerValue(opsgenieConfig.ApiKey),
1675+
"api_url": types.StringPointerValue(opsgenieConfig.ApiUrl),
1676+
"tags": types.StringPointerValue(opsgenieConfig.Tags),
1677+
"priority": types.StringPointerValue(opsgenieConfig.Priority),
16711678
}
16721679
opsGenieConfigModel, diags := types.ObjectValue(opsgenieConfigsTypes, opsGenieConfigMap)
16731680
if diags.HasError() {
@@ -2014,9 +2021,10 @@ func toReceiverPayload(ctx context.Context, model *alertConfigModel) (*[]observa
20142021
for i := range opsgenieConfigs {
20152022
opsgenieConfig := opsgenieConfigs[i]
20162023
payloadOpsGenieConfigs = append(payloadOpsGenieConfigs, observability.CreateAlertConfigReceiverPayloadOpsgenieConfigsInner{
2017-
ApiKey: conversion.StringValueToPointer(opsgenieConfig.ApiKey),
2018-
ApiUrl: conversion.StringValueToPointer(opsgenieConfig.ApiUrl),
2019-
Tags: conversion.StringValueToPointer(opsgenieConfig.Tags),
2024+
ApiKey: conversion.StringValueToPointer(opsgenieConfig.ApiKey),
2025+
ApiUrl: conversion.StringValueToPointer(opsgenieConfig.ApiUrl),
2026+
Tags: conversion.StringValueToPointer(opsgenieConfig.Tags),
2027+
Priority: conversion.StringValueToPointer(opsgenieConfig.Priority),
20202028
})
20212029
}
20222030
receiverPayload.OpsgenieConfigs = &payloadOpsGenieConfigs

stackit/internal/services/observability/instance/resource_test.go

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,10 @@ func fixtureEmailConfigsModel() basetypes.ListValue {
3333
func fixtureOpsGenieConfigsModel() basetypes.ListValue {
3434
return types.ListValueMust(types.ObjectType{AttrTypes: opsgenieConfigsTypes}, []attr.Value{
3535
types.ObjectValueMust(opsgenieConfigsTypes, map[string]attr.Value{
36-
"api_key": types.StringValue("key"),
37-
"tags": types.StringValue("tag"),
38-
"api_url": types.StringValue("ops.example.com"),
36+
"api_key": types.StringValue("key"),
37+
"tags": types.StringValue("tag"),
38+
"api_url": types.StringValue("ops.example.com"),
39+
"priority": types.StringValue("P3"),
3940
}),
4041
})
4142
}
@@ -140,9 +141,10 @@ func fixtureEmailConfigsPayload() observability.CreateAlertConfigReceiverPayload
140141

141142
func fixtureOpsGenieConfigsPayload() observability.CreateAlertConfigReceiverPayloadOpsgenieConfigsInner {
142143
return observability.CreateAlertConfigReceiverPayloadOpsgenieConfigsInner{
143-
ApiKey: utils.Ptr("key"),
144-
Tags: utils.Ptr("tag"),
145-
ApiUrl: utils.Ptr("ops.example.com"),
144+
ApiKey: utils.Ptr("key"),
145+
Tags: utils.Ptr("tag"),
146+
ApiUrl: utils.Ptr("ops.example.com"),
147+
Priority: utils.Ptr("P3"),
146148
}
147149
}
148150

@@ -220,9 +222,10 @@ func fixtureEmailConfigsResponse() observability.EmailConfig {
220222

221223
func fixtureOpsGenieConfigsResponse() observability.OpsgenieConfig {
222224
return observability.OpsgenieConfig{
223-
ApiKey: utils.Ptr("key"),
224-
Tags: utils.Ptr("tag"),
225-
ApiUrl: utils.Ptr("ops.example.com"),
225+
ApiKey: utils.Ptr("key"),
226+
Tags: utils.Ptr("tag"),
227+
ApiUrl: utils.Ptr("ops.example.com"),
228+
Priority: utils.Ptr("P3"),
226229
}
227230
}
228231

stackit/internal/services/observability/observability_acc_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ var testConfigVarsMax = config.Variables{
8484
"opsgenie_api_key": config.StringVariable("example-api-key"),
8585
"opsgenie_api_tags": config.StringVariable("observability-alert"),
8686
"opsgenie_api_url": config.StringVariable("https://api.eu.opsgenie.com"),
87+
"opsgenie_priority": config.StringVariable("P3"),
8788
"webhook_configs_url": config.StringVariable("https://example.com"),
8889
"ms_teams": config.StringVariable("true"),
8990
"group_by": config.StringVariable("alertname"),
@@ -505,6 +506,7 @@ func TestAccResourceMax(t *testing.T) {
505506
resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.opsgenie_configs.0.api_key", testutil.ConvertConfigVariable(testConfigVarsMax["opsgenie_api_key"])),
506507
resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.opsgenie_configs.0.tags", testutil.ConvertConfigVariable(testConfigVarsMax["opsgenie_api_tags"])),
507508
resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.opsgenie_configs.0.api_url", testutil.ConvertConfigVariable(testConfigVarsMax["opsgenie_api_url"])),
509+
resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.opsgenie_configs.0.priority", testutil.ConvertConfigVariable(testConfigVarsMax["opsgenie_priority"])),
508510

509511
resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.webhooks_configs.0.url", testutil.ConvertConfigVariable(testConfigVarsMax["webhook_configs_url"])),
510512
resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.webhooks_configs.0.ms_teams", testutil.ConvertConfigVariable(testConfigVarsMax["ms_teams"])),
@@ -666,6 +668,7 @@ func TestAccResourceMax(t *testing.T) {
666668
resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.receivers.0.opsgenie_configs.0.api_key", testutil.ConvertConfigVariable(testConfigVarsMax["opsgenie_api_key"])),
667669
resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.receivers.0.opsgenie_configs.0.tags", testutil.ConvertConfigVariable(testConfigVarsMax["opsgenie_api_tags"])),
668670
resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.receivers.0.opsgenie_configs.0.api_url", testutil.ConvertConfigVariable(testConfigVarsMax["opsgenie_api_url"])),
671+
resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.receivers.0.opsgenie_configs.0.priority", testutil.ConvertConfigVariable(testConfigVarsMax["opsgenie_priority"])),
669672

670673
resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.receivers.0.webhooks_configs.0.url", testutil.ConvertConfigVariable(testConfigVarsMax["webhook_configs_url"])),
671674
resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.receivers.0.webhooks_configs.0.ms_teams", testutil.ConvertConfigVariable(testConfigVarsMax["ms_teams"])),
@@ -888,6 +891,7 @@ func TestAccResourceMax(t *testing.T) {
888891
resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.opsgenie_configs.0.api_key", testutil.ConvertConfigVariable(testConfigVarsMax["opsgenie_api_key"])),
889892
resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.opsgenie_configs.0.tags", testutil.ConvertConfigVariable(testConfigVarsMax["opsgenie_api_tags"])),
890893
resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.opsgenie_configs.0.api_url", testutil.ConvertConfigVariable(testConfigVarsMax["opsgenie_api_url"])),
894+
resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.opsgenie_configs.0.priority", testutil.ConvertConfigVariable(testConfigVarsMax["opsgenie_priority"])),
891895

892896
resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.webhooks_configs.0.url", testutil.ConvertConfigVariable(testConfigVarsMax["webhook_configs_url"])),
893897
resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.webhooks_configs.0.ms_teams", testutil.ConvertConfigVariable(testConfigVarsMax["ms_teams"])),

stackit/internal/services/observability/testdata/resource-max.tf

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ variable "email_to" {}
2626
variable "opsgenie_api_key" {}
2727
variable "opsgenie_api_tags" {}
2828
variable "opsgenie_api_url" {}
29+
variable "opsgenie_priority" {}
2930
variable "webhook_configs_url" {}
3031
variable "ms_teams" {}
3132
variable "group_by" {}
@@ -114,9 +115,10 @@ resource "stackit_observability_instance" "instance" {
114115
]
115116
opsgenie_configs = [
116117
{
117-
api_key = var.opsgenie_api_key
118-
tags = var.opsgenie_api_tags
119-
api_url = var.opsgenie_api_url
118+
api_key = var.opsgenie_api_key
119+
tags = var.opsgenie_api_tags
120+
api_url = var.opsgenie_api_url
121+
priority = var.opsgenie_priority
120122
}
121123
]
122124
webhooks_configs = [

0 commit comments

Comments
 (0)