Skip to content

Commit

Permalink
Alerting: Remove mute timings from alert rules on deletion (#1724)
Browse files Browse the repository at this point in the history
Closes #1713
This was broken in Grafana Cloud when grafana/grafana#90500 was released
  • Loading branch information
julienduchesne authored Jul 31, 2024
1 parent 08a1309 commit 26b4ddb
Show file tree
Hide file tree
Showing 2 changed files with 104 additions and 1 deletion.
28 changes: 28 additions & 0 deletions internal/resources/grafana/resource_alerting_mute_timing.go
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,34 @@ func deleteMuteTiming(ctx context.Context, data *schema.ResourceData, meta inter
}
}

// Remove the mute timing from alert rules
ruleResp, err := client.Provisioning.GetAlertRules()
if err != nil {
return diag.FromErr(err)
}
rules := ruleResp.Payload
for _, rule := range rules {
if rule.NotificationSettings == nil {
continue
}

var muteTimeIntervals []string
for _, m := range rule.NotificationSettings.MuteTimeIntervals {
if m != name {
muteTimeIntervals = append(muteTimeIntervals, m)
}
}
if len(muteTimeIntervals) != len(rule.NotificationSettings.MuteTimeIntervals) {
rule.NotificationSettings.MuteTimeIntervals = muteTimeIntervals
params := provisioning.NewPutAlertRuleParams().WithBody(rule).WithUID(rule.UID)
_, err = client.Provisioning.PutAlertRule(params)
if err != nil {
return diag.FromErr(err)
}
}
}

// Delete the mute timing
params := provisioning.NewDeleteMuteTimingParams().WithName(name)
_, err = client.Provisioning.DeleteMuteTiming(params)
diag, _ := common.CheckReadError("mute timing", data, err)
Expand Down
77 changes: 76 additions & 1 deletion internal/resources/grafana/resource_alerting_mute_timing_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"testing"

"github.com/grafana/grafana-openapi-client-go/models"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"

"github.com/grafana/terraform-provider-grafana/v3/internal/testutils"
Expand Down Expand Up @@ -143,7 +144,7 @@ func TestAccMuteTiming_RemoveInUse(t *testing.T) {
contact_point = grafana_contact_point.default_policy.name
}
}
resource "grafana_mute_timing" "test" {
count = local.use_mute ? 1 : 0
org_id = grafana_organization.my_org.id
Expand All @@ -164,3 +165,77 @@ func TestAccMuteTiming_RemoveInUse(t *testing.T) {
},
})
}

func TestAccMuteTiming_RemoveInUseInAlertRule(t *testing.T) {
testutils.CheckCloudInstanceTestsEnabled(t) // TODO: Switch to OSS when this is released: https://github.com/grafana/grafana/pull/90500

randomStr := acctest.RandString(6)

config := func(mute bool) string {
return fmt.Sprintf(`
locals {
use_mute = %[2]t
}
resource "grafana_folder" "rule_folder" {
title = "%[1]s"
}
resource "grafana_contact_point" "default_policy" {
name = "%[1]s"
email {
addresses = ["test@example.com"]
}
}
resource "grafana_rule_group" "this" {
name = "%[1]s"
folder_uid = grafana_folder.rule_folder.uid
interval_seconds = 60
rule {
name = "%[1]s"
condition = "B"
notification_settings {
contact_point = grafana_contact_point.default_policy.name
group_by = ["..."]
mute_timings = local.use_mute ? [grafana_mute_timing.test[0].name] : []
}
data {
ref_id = "A"
query_type = ""
relative_time_range {
from = 600
to = 0
}
datasource_uid = "PD8C576611E62080A"
model = jsonencode({
hide = false
intervalMs = 1000
maxDataPoints = 43200
refId = "A"
})
}
}
}
resource "grafana_mute_timing" "test" {
count = local.use_mute ? 1 : 0
name = "%[1]s"
intervals {}
}`, randomStr, mute)
}

resource.ParallelTest(t, resource.TestCase{
ProtoV5ProviderFactories: testutils.ProtoV5ProviderFactories,
Steps: []resource.TestStep{
{
Config: config(true),
},
{
Config: config(false),
},
},
})
}

0 comments on commit 26b4ddb

Please sign in to comment.