Alerting: make sure to update contact point references when updating (#54896)

This commit is contained in:
Jean-Philippe Quéméner 2022-09-08 15:20:52 +02:00 committed by GitHub
parent 9dd4eab553
commit e41f78a56d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 84 additions and 1 deletions

View File

@ -418,6 +418,7 @@ groupLoop:
// If we're renaming, we'll need to fix up the macro receiver group for consistency.
// Firstly, if we're the only receiver in the group, simply rename the group to match. Done!
if len(receiverGroup.GrafanaManagedReceivers) == 1 {
replaceReferences(receiverGroup.Name, target.Name, cfg.AlertmanagerConfig.Route)
receiverGroup.Name = target.Name
receiverGroup.GrafanaManagedReceivers[i] = target
configModified = true
@ -460,3 +461,15 @@ groupLoop:
return configModified
}
func replaceReferences(oldName, newName string, routes ...*apimodels.Route) {
if len(routes) == 0 {
return
}
for _, route := range routes {
if route.Receiver == oldName {
route.Receiver = newName
}
replaceReferences(oldName, newName, route.Routes...)
}
}

View File

@ -319,6 +319,16 @@ func TestStitchReceivers(t *testing.T) {
},
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{
@ -362,7 +372,7 @@ func TestStitchReceivers(t *testing.T) {
},
},
{
name: "rename with only one receiver in group, renames group",
name: "rename with only one receiver in group, renames group and references",
new: &definitions.PostableGrafanaReceiver{
UID: "abc",
Name: "new-receiver",
@ -370,6 +380,16 @@ func TestStitchReceivers(t *testing.T) {
},
expModified: true,
expCfg: definitions.PostableApiAlertingConfig{
Config: definitions.Config{
Route: &definitions.Route{
Receiver: "new-receiver",
Routes: []*definitions.Route{
{
Receiver: "new-receiver",
},
},
},
},
Receivers: []*definitions.PostableApiReceiver{
{
Receiver: config.Receiver{
@ -421,6 +441,16 @@ func TestStitchReceivers(t *testing.T) {
},
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{
@ -472,6 +502,16 @@ func TestStitchReceivers(t *testing.T) {
},
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{
@ -533,6 +573,16 @@ func TestStitchReceivers(t *testing.T) {
},
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{
@ -604,6 +654,16 @@ func TestStitchReceivers(t *testing.T) {
func createTestConfigWithReceivers() *definitions.PostableUserConfig {
return &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{
@ -652,6 +712,16 @@ func createTestConfigWithReceivers() *definitions.PostableUserConfig {
func createInconsistentTestConfigWithReceivers() *definitions.PostableUserConfig {
return &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{