diff --git a/pkg/services/ngalert/provisioning/contactpoints.go b/pkg/services/ngalert/provisioning/contactpoints.go index 60b61df460c..64d238f4093 100644 --- a/pkg/services/ngalert/provisioning/contactpoints.go +++ b/pkg/services/ngalert/provisioning/contactpoints.go @@ -453,7 +453,7 @@ groupLoop: // Otherwise, we only want to rename the receiver we are touching... NOT all of them. // Check to see whether a different group with the name we want already exists. - for i, candidateExistingGroup := range cfg.AlertmanagerConfig.Receivers { + for _, candidateExistingGroup := range cfg.AlertmanagerConfig.Receivers { // If so, put our modified receiver into that group. Done! if candidateExistingGroup.Name == target.Name { // Drop it from the old group... diff --git a/pkg/services/ngalert/provisioning/contactpoints_test.go b/pkg/services/ngalert/provisioning/contactpoints_test.go index 5f331b686d7..5b775ca5473 100644 --- a/pkg/services/ngalert/provisioning/contactpoints_test.go +++ b/pkg/services/ngalert/provisioning/contactpoints_test.go @@ -493,6 +493,292 @@ func TestStitchReceivers(t *testing.T) { }, }, }, + { + name: "rename to another, larger group", + initial: &definitions.PostableUserConfig{ + AlertmanagerConfig: definitions.PostableApiAlertingConfig{ + Config: definitions.Config{ + Route: &definitions.Route{ + Receiver: "receiver-1", + Routes: []*definitions.Route{ + { + Receiver: "receiver-1", + }, + }, + }, + }, + Receivers: []*definitions.PostableApiReceiver{ + { + Receiver: config.Receiver{ + Name: "receiver-1", + }, + PostableGrafanaReceivers: definitions.PostableGrafanaReceivers{ + GrafanaManagedReceivers: []*definitions.PostableGrafanaReceiver{ + { + UID: "1", + Name: "receiver-1", + Type: "slack", + }, + { + UID: "2", + Name: "receiver-1", + Type: "slack", + }, + }, + }, + }, + { + Receiver: config.Receiver{ + Name: "receiver-2", + }, + PostableGrafanaReceivers: definitions.PostableGrafanaReceivers{ + GrafanaManagedReceivers: []*definitions.PostableGrafanaReceiver{ + { + UID: "3", + Name: "receiver-2", + Type: "slack", + }, + { + UID: "4", + Name: "receiver-2", + Type: "slack", + }, + { + UID: "5", + Name: "receiver-2", + Type: "slack", + }, + }, + }, + }, + }, + }, + }, + new: &definitions.PostableGrafanaReceiver{ + UID: "2", + Name: "receiver-2", + Type: "slack", + }, + expModified: true, + expCfg: definitions.PostableApiAlertingConfig{ + Config: definitions.Config{ + Route: &definitions.Route{ + Receiver: "receiver-1", + Routes: []*definitions.Route{ + { + Receiver: "receiver-1", + }, + }, + }, + }, + Receivers: []*definitions.PostableApiReceiver{ + { + Receiver: config.Receiver{ + Name: "receiver-1", + }, + PostableGrafanaReceivers: definitions.PostableGrafanaReceivers{ + GrafanaManagedReceivers: []*definitions.PostableGrafanaReceiver{ + { + UID: "1", + Name: "receiver-1", + Type: "slack", + }, + }, + }, + }, + { + Receiver: config.Receiver{ + Name: "receiver-2", + }, + PostableGrafanaReceivers: definitions.PostableGrafanaReceivers{ + GrafanaManagedReceivers: []*definitions.PostableGrafanaReceiver{ + { + UID: "3", + Name: "receiver-2", + Type: "slack", + }, + { + UID: "4", + Name: "receiver-2", + Type: "slack", + }, + { + UID: "5", + Name: "receiver-2", + Type: "slack", + }, + { + UID: "2", + Name: "receiver-2", + Type: "slack", + }, + }, + }, + }, + }, + }, + }, + { + name: "rename when there are many groups", + initial: &definitions.PostableUserConfig{ + AlertmanagerConfig: definitions.PostableApiAlertingConfig{ + Config: definitions.Config{ + Route: &definitions.Route{ + Receiver: "receiver-1", + Routes: []*definitions.Route{ + { + Receiver: "receiver-1", + }, + }, + }, + }, + Receivers: []*definitions.PostableApiReceiver{ + { + Receiver: config.Receiver{ + Name: "receiver-1", + }, + PostableGrafanaReceivers: definitions.PostableGrafanaReceivers{ + GrafanaManagedReceivers: []*definitions.PostableGrafanaReceiver{ + { + UID: "1", + Name: "receiver-1", + Type: "slack", + }, + { + UID: "2", + Name: "receiver-1", + Type: "slack", + }, + }, + }, + }, + { + Receiver: config.Receiver{ + Name: "receiver-2", + }, + PostableGrafanaReceivers: definitions.PostableGrafanaReceivers{ + GrafanaManagedReceivers: []*definitions.PostableGrafanaReceiver{ + { + UID: "3", + Name: "receiver-2", + Type: "slack", + }, + }, + }, + }, + { + Receiver: config.Receiver{ + Name: "receiver-3", + }, + PostableGrafanaReceivers: definitions.PostableGrafanaReceivers{ + GrafanaManagedReceivers: []*definitions.PostableGrafanaReceiver{ + { + UID: "4", + Name: "receiver-4", + Type: "slack", + }, + }, + }, + }, + { + Receiver: config.Receiver{ + Name: "receiver-4", + }, + PostableGrafanaReceivers: definitions.PostableGrafanaReceivers{ + GrafanaManagedReceivers: []*definitions.PostableGrafanaReceiver{ + { + UID: "5", + Name: "receiver-4", + Type: "slack", + }, + }, + }, + }, + }, + }, + }, + new: &definitions.PostableGrafanaReceiver{ + UID: "2", + Name: "receiver-4", + Type: "slack", + }, + expModified: true, + expCfg: definitions.PostableApiAlertingConfig{ + Config: definitions.Config{ + Route: &definitions.Route{ + Receiver: "receiver-1", + Routes: []*definitions.Route{ + { + Receiver: "receiver-1", + }, + }, + }, + }, + Receivers: []*definitions.PostableApiReceiver{ + { + Receiver: config.Receiver{ + Name: "receiver-1", + }, + PostableGrafanaReceivers: definitions.PostableGrafanaReceivers{ + GrafanaManagedReceivers: []*definitions.PostableGrafanaReceiver{ + { + UID: "1", + Name: "receiver-1", + Type: "slack", + }, + }, + }, + }, + { + Receiver: config.Receiver{ + Name: "receiver-2", + }, + PostableGrafanaReceivers: definitions.PostableGrafanaReceivers{ + GrafanaManagedReceivers: []*definitions.PostableGrafanaReceiver{ + { + UID: "3", + Name: "receiver-2", + Type: "slack", + }, + }, + }, + }, + { + Receiver: config.Receiver{ + Name: "receiver-3", + }, + PostableGrafanaReceivers: definitions.PostableGrafanaReceivers{ + GrafanaManagedReceivers: []*definitions.PostableGrafanaReceiver{ + { + UID: "4", + Name: "receiver-4", + Type: "slack", + }, + }, + }, + }, + { + Receiver: config.Receiver{ + Name: "receiver-4", + }, + PostableGrafanaReceivers: definitions.PostableGrafanaReceivers{ + GrafanaManagedReceivers: []*definitions.PostableGrafanaReceiver{ + { + UID: "5", + Name: "receiver-4", + Type: "slack", + }, + { + UID: "2", + Name: "receiver-4", + Type: "slack", + }, + }, + }, + }, + }, + }, + }, { name: "rename to a name that doesn't exist, creates new group and moves", new: &definitions.PostableGrafanaReceiver{