From 89de86fefce23fc8563daef3dc3520420b0f8426 Mon Sep 17 00:00:00 2001 From: Simon Pasquier Date: Wed, 4 May 2022 14:58:39 +0200 Subject: [PATCH 1/2] config: fix validation of OpsGenie configuration The validation should fail if both `api_key` and `api_key_file` are defined. I think there was a typo in the original PR (#2728) that enforced `api_url` and `api_key_file` not being defined at the same time. Signed-off-by: Simon Pasquier --- config/notifiers.go | 2 +- config/notifiers_test.go | 66 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 1 deletion(-) diff --git a/config/notifiers.go b/config/notifiers.go index a2cadf9e..5e00b257 100644 --- a/config/notifiers.go +++ b/config/notifiers.go @@ -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") } diff --git a/config/notifiers_test.go b/config/notifiers_test.go index 93b9dca2..7ad2b270 100644 --- a/config/notifiers_test.go +++ b/config/notifiers_test.go @@ -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 From 661d5c6678fd8194ff78ff3203a27c50c7bb3b62 Mon Sep 17 00:00:00 2001 From: gotjosh Date: Mon, 2 May 2022 12:44:39 +0100 Subject: [PATCH 2/2] Mixin: Rename exclusion rule from `panel-job-instance-rule` to `target-instance-rule` Within https://github.com/grafana/dashboard-linter/commit/9a32e58ed01ee136ea674887f04a559a15eda3e6, the rules have been split into two different rules: `target-job-rule` `target-instance-rule` All of our queries do contain the `job` label but as per the reason, we don't need both in this particular case. Fixes #2899 Signed-off-by: gotjosh Signed-off-by: Simon Pasquier --- doc/alertmanager-mixin/.lint | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/alertmanager-mixin/.lint b/doc/alertmanager-mixin/.lint index 200eac5f..901a2850 100644 --- a/doc/alertmanager-mixin/.lint +++ b/doc/alertmanager-mixin/.lint @@ -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