mirror of
https://github.com/prometheus/prometheus.git
synced 2024-09-19 23:37:31 -07:00
fix drop alertmanager on apply config step
Signed-off-by: tommy0 <tommy0@mail.ru>
This commit is contained in:
parent
ab2a7bb74f
commit
7fe64e9d65
|
@ -264,6 +264,14 @@ func (n *Manager) ApplyConfig(conf *config.Config) error {
|
|||
return err
|
||||
}
|
||||
|
||||
// If alertmanagers already exists, don't skip it, in reload step will be refreshed new targets.
|
||||
oldAmSets, ok := n.alertmanagers[k]
|
||||
if ok {
|
||||
oldAmSets.mtx.RLock()
|
||||
ams.ams = oldAmSets.ams
|
||||
oldAmSets.mtx.RUnlock()
|
||||
}
|
||||
|
||||
amSets[k] = ams
|
||||
}
|
||||
|
||||
|
|
|
@ -502,6 +502,68 @@ alerting:
|
|||
}
|
||||
}
|
||||
|
||||
func TestReApplyConfig(t *testing.T) {
|
||||
tests := []struct {
|
||||
in *targetgroup.Group
|
||||
out string
|
||||
}{
|
||||
{
|
||||
in: &targetgroup.Group{
|
||||
Targets: []model.LabelSet{
|
||||
{
|
||||
"__address__": "alertmanager:9093",
|
||||
},
|
||||
},
|
||||
},
|
||||
out: "http://alertmanager:9093/api/v2/alerts",
|
||||
},
|
||||
}
|
||||
|
||||
n := NewManager(&Options{}, nil)
|
||||
|
||||
cfg := &config.Config{}
|
||||
s := `
|
||||
alerting:
|
||||
alertmanagers:
|
||||
- static_configs:
|
||||
`
|
||||
err := yaml.UnmarshalStrict([]byte(s), cfg)
|
||||
require.NoError(t, err, "Unable to load YAML config.")
|
||||
require.Equal(t, 1, len(cfg.AlertingConfig.AlertmanagerConfigs))
|
||||
|
||||
// First apply config.
|
||||
err = n.ApplyConfig(cfg)
|
||||
require.NoError(t, err, "Error applying the config.")
|
||||
|
||||
tgs := make(map[string][]*targetgroup.Group)
|
||||
for _, tt := range tests {
|
||||
for k := range cfg.AlertingConfig.AlertmanagerConfigs.ToMap() {
|
||||
tgs[k] = []*targetgroup.Group{
|
||||
tt.in,
|
||||
}
|
||||
break
|
||||
}
|
||||
// Try reload for new alertmanagers.
|
||||
n.reload(tgs)
|
||||
res := n.Alertmanagers()[0].String()
|
||||
|
||||
require.Equal(t, tt.out, res)
|
||||
}
|
||||
|
||||
// Reapply config.
|
||||
err = n.ApplyConfig(cfg)
|
||||
require.NoError(t, err, "Error reapplying the config.")
|
||||
|
||||
// Check that alertmanagers list not empty before next reload apply.
|
||||
for _, tt := range tests {
|
||||
require.Equal(t, len(n.Alertmanagers()), 1, "Alertmanagers list must not be empty")
|
||||
|
||||
res := n.Alertmanagers()[0].String()
|
||||
|
||||
require.Equal(t, tt.out, res)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDroppedAlertmanagers(t *testing.T) {
|
||||
tests := []struct {
|
||||
in *targetgroup.Group
|
||||
|
|
Loading…
Reference in a new issue