Merge pull request #2910 from simonpasquier/fix-opsgenie-configuration-validation
config: fix validation of OpsGenie configuration
This commit is contained in:
commit
14b01e6a34
|
@ -492,7 +492,7 @@ func (c *OpsGenieConfig) UnmarshalYAML(unmarshal func(interface{}) error) error
|
|||
return err
|
||||
}
|
||||
|
||||
if c.APIURL != nil && len(c.APIKeyFile) > 0 {
|
||||
if c.APIKey != "" && len(c.APIKeyFile) > 0 {
|
||||
return fmt.Errorf("at most one of api_key & api_key_file must be configured")
|
||||
}
|
||||
|
||||
|
|
|
@ -590,6 +590,72 @@ func TestOpsgenieTypeMatcher(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestOpsGenieConfiguration(t *testing.T) {
|
||||
for _, tc := range []struct {
|
||||
name string
|
||||
in string
|
||||
|
||||
err bool
|
||||
}{
|
||||
{
|
||||
name: "valid configuration",
|
||||
in: `api_key: xyz
|
||||
responders:
|
||||
- id: foo
|
||||
type: scheDule
|
||||
- name: bar
|
||||
type: teams
|
||||
- username: fred
|
||||
type: USER
|
||||
api_url: http://example.com
|
||||
`,
|
||||
},
|
||||
{
|
||||
name: "api_key and api_key_file both defined",
|
||||
in: `api_key: xyz
|
||||
api_key_file: xyz
|
||||
api_url: http://example.com
|
||||
`,
|
||||
err: true,
|
||||
},
|
||||
{
|
||||
name: "invalid responder type",
|
||||
in: `api_key: xyz
|
||||
responders:
|
||||
- id: foo
|
||||
type: wrong
|
||||
api_url: http://example.com
|
||||
`,
|
||||
err: true,
|
||||
},
|
||||
{
|
||||
name: "missing responder field",
|
||||
in: `api_key: xyz
|
||||
responders:
|
||||
- type: schedule
|
||||
api_url: http://example.com
|
||||
`,
|
||||
err: true,
|
||||
},
|
||||
} {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
var cfg OpsGenieConfig
|
||||
|
||||
err := yaml.UnmarshalStrict([]byte(tc.in), &cfg)
|
||||
if tc.err {
|
||||
if err == nil {
|
||||
t.Fatalf("expected error but got none")
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
t.Errorf("expected no error, got %v", err)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestSNS(t *testing.T) {
|
||||
for _, tc := range []struct {
|
||||
in string
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
exclusions:
|
||||
panel-job-instance-rule:
|
||||
target-instance-rule:
|
||||
reason: no need to have every query contains two matchers within every selector - `{job=~"$job", instance=~"$instance"}`
|
||||
template-job-rule:
|
||||
template-job-rule:
|
||||
entries:
|
||||
- dashboard: Alertmanager / Overview
|
||||
reason: multi-select is not always required
|
||||
|
|
Loading…
Reference in New Issue