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
|
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")
|
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) {
|
func TestSNS(t *testing.T) {
|
||||||
for _, tc := range []struct {
|
for _, tc := range []struct {
|
||||||
in string
|
in string
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
exclusions:
|
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"}`
|
reason: no need to have every query contains two matchers within every selector - `{job=~"$job", instance=~"$instance"}`
|
||||||
template-job-rule:
|
template-job-rule:
|
||||||
entries:
|
entries:
|
||||||
- dashboard: Alertmanager / Overview
|
- dashboard: Alertmanager / Overview
|
||||||
reason: multi-select is not always required
|
reason: multi-select is not always required
|
||||||
|
|
Loading…
Reference in New Issue