mirror of
https://github.com/grafana/grafana.git
synced 2025-08-03 06:51:13 +08:00
Alerting: Prevent inhibition rules in Grafana Alertmanager (#81712)
This commit prevents saving configurations containing inhibition rules in Grafana Alertmanager. It does not reject inhibition rules when using external Alertmanagers, such as Mimir. This meant the validation had to be put in the MultiOrgAlertmanager instead of in the validation of PostableUserConfig. We can remove this when inhibition rules are supported in Grafana Managed Alerts.
This commit is contained in:
@ -10,11 +10,13 @@ import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/grafana/grafana/pkg/expr"
|
||||
"github.com/prometheus/alertmanager/config"
|
||||
"github.com/prometheus/alertmanager/pkg/labels"
|
||||
"github.com/prometheus/common/model"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/grafana/grafana/pkg/components/simplejson"
|
||||
"github.com/grafana/grafana/pkg/expr"
|
||||
"github.com/grafana/grafana/pkg/services/datasources"
|
||||
apimodels "github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions"
|
||||
ngmodels "github.com/grafana/grafana/pkg/services/ngalert/models"
|
||||
@ -352,3 +354,49 @@ func TestIntegrationAdminConfiguration_SendingToExternalAlertmanagers(t *testing
|
||||
}, 16*time.Second, 8*time.Second) // the sync interval is 2s so after 8s all alertmanagers (if any) most probably are started
|
||||
}
|
||||
}
|
||||
|
||||
func TestIntegrationAdminConfiguration_CannotCreateInhibitionRules(t *testing.T) {
|
||||
testinfra.SQLiteIntegrationTest(t)
|
||||
dir, path := testinfra.CreateGrafDir(t, testinfra.GrafanaOpts{
|
||||
DisableLegacyAlerting: true,
|
||||
EnableUnifiedAlerting: true,
|
||||
AppModeProduction: true,
|
||||
})
|
||||
grafanaListedAddr, store := testinfra.StartGrafana(t, dir, path)
|
||||
createUser(t, store, user.CreateUserCommand{
|
||||
DefaultOrgRole: string(org.RoleAdmin),
|
||||
Password: "admin",
|
||||
Login: "admin",
|
||||
})
|
||||
client := newAlertingApiClient(grafanaListedAddr, "admin", "admin")
|
||||
|
||||
cfg := apimodels.PostableUserConfig{
|
||||
AlertmanagerConfig: apimodels.PostableApiAlertingConfig{
|
||||
Config: apimodels.Config{
|
||||
Route: &apimodels.Route{
|
||||
Receiver: "test",
|
||||
},
|
||||
InhibitRules: []config.InhibitRule{{
|
||||
SourceMatchers: config.Matchers{{
|
||||
Type: labels.MatchEqual,
|
||||
Name: "foo",
|
||||
Value: "bar",
|
||||
}},
|
||||
TargetMatchers: config.Matchers{{
|
||||
Type: labels.MatchEqual,
|
||||
Name: "bar",
|
||||
Value: "baz",
|
||||
}},
|
||||
}},
|
||||
},
|
||||
Receivers: []*apimodels.PostableApiReceiver{{
|
||||
Receiver: config.Receiver{
|
||||
Name: "test",
|
||||
},
|
||||
}},
|
||||
},
|
||||
}
|
||||
ok, err := client.PostConfiguration(t, cfg)
|
||||
require.False(t, ok)
|
||||
require.EqualError(t, err, "inhibition rules are not supported")
|
||||
}
|
||||
|
Reference in New Issue
Block a user