From 50a1a8a6f6149c8bf7bbd15b6aaed337aaa40ba0 Mon Sep 17 00:00:00 2001 From: Frank Jogeleit Date: Tue, 24 Oct 2023 10:10:52 +0200 Subject: [PATCH] Use correct namespace label based on configuration (#357) Signed-off-by: Frank Jogeleit --- CHANGELOG.md | 4 ++ charts/policy-reporter/Chart.lock | 6 +-- charts/policy-reporter/Chart.yaml | 4 +- charts/policy-reporter/README.md | 2 +- .../charts/monitoring/Chart.yaml | 2 +- .../clusterpolicy-details.dashboard.yaml | 14 +++-- .../templates/overview.dashboard.yaml | 24 +++++---- .../templates/policy-details.dashboard.yaml | 54 ++++++++++--------- pkg/email/client.go | 35 +++++------- 9 files changed, 80 insertions(+), 65 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 08132361..c9d7c2fd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +# 2.21.1 +* Helm Chart + * Use correct namespace label based on the `monitoring.serviceMonitor.honorLabels` configuration in all Dashboards + # 2.21.0 * Policy Reporter * Migrate to AWS SDK v2 diff --git a/charts/policy-reporter/Chart.lock b/charts/policy-reporter/Chart.lock index e846de81..2c5a296e 100644 --- a/charts/policy-reporter/Chart.lock +++ b/charts/policy-reporter/Chart.lock @@ -1,12 +1,12 @@ dependencies: - name: monitoring repository: "" - version: 2.8.0 + version: 2.8.1 - name: ui repository: "" version: 2.10.1 - name: kyvernoPlugin repository: "" version: 1.6.1 -digest: sha256:b9fa7ca2c2245840d8e6b1202986589a948b8151b77c61bc8364f5899240b713 -generated: "2023-10-20T11:23:44.58793+02:00" +digest: sha256:441dc00e311f2e5cfba50be2663e6c1560fb2d5c6ae611cd779271252a39a7ea +generated: "2023-10-24T09:58:54.455272+02:00" diff --git a/charts/policy-reporter/Chart.yaml b/charts/policy-reporter/Chart.yaml index 726bcacd..eb467452 100644 --- a/charts/policy-reporter/Chart.yaml +++ b/charts/policy-reporter/Chart.yaml @@ -5,7 +5,7 @@ description: | It creates Prometheus Metrics and can send rule validation events to different targets like Loki, Elasticsearch, Slack or Discord type: application -version: 2.21.0 +version: 2.21.1 appVersion: 2.17.0 icon: https://github.com/kyverno/kyverno/raw/main/img/logo.png @@ -18,7 +18,7 @@ maintainers: dependencies: - name: monitoring condition: monitoring.enabled - version: "2.8.0" + version: "2.8.1" - name: ui condition: ui.enabled version: "2.10.1" diff --git a/charts/policy-reporter/README.md b/charts/policy-reporter/README.md index 58476cbf..687fc531 100644 --- a/charts/policy-reporter/README.md +++ b/charts/policy-reporter/README.md @@ -1,6 +1,6 @@ # Policy Reporter -![Version: v2.21.0](https://img.shields.io/badge/Version-v2.21.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: v2.17.0](https://img.shields.io/badge/AppVersion-v2.17.0-informational?style=flat-square) +![Version: v2.21.1](https://img.shields.io/badge/Version-v2.21.1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: v2.17.0](https://img.shields.io/badge/AppVersion-v2.17.0-informational?style=flat-square) ## Motivation diff --git a/charts/policy-reporter/charts/monitoring/Chart.yaml b/charts/policy-reporter/charts/monitoring/Chart.yaml index 2deffc14..22d8759b 100644 --- a/charts/policy-reporter/charts/monitoring/Chart.yaml +++ b/charts/policy-reporter/charts/monitoring/Chart.yaml @@ -3,5 +3,5 @@ name: monitoring description: Policy Reporter Monitoring with predefined ServiceMonitor and Grafana Dashboards type: application -version: 2.8.0 +version: 2.8.1 appVersion: 0.0.0 diff --git a/charts/policy-reporter/charts/monitoring/templates/clusterpolicy-details.dashboard.yaml b/charts/policy-reporter/charts/monitoring/templates/clusterpolicy-details.dashboard.yaml index 9cda0fd9..1c5e1601 100644 --- a/charts/policy-reporter/charts/monitoring/templates/clusterpolicy-details.dashboard.yaml +++ b/charts/policy-reporter/charts/monitoring/templates/clusterpolicy-details.dashboard.yaml @@ -3,6 +3,12 @@ {{- if and .Values.grafana.dashboards.multicluster.enabled .Values.grafana.dashboards.multicluster.label }} {{- $filters = append $filters .Values.grafana.dashboards.multicluster.label }} {{- end }} + +{{- $nsLabel := "exported_namespace" }} +{{- if .Values.serviceMonitor.honorLabels }} +{{- $nsLabel = "namespace" }} +{{- end }} + apiVersion: v1 kind: ConfigMap metadata: @@ -472,7 +478,7 @@ data: "Value": 8 }, "renameByName": { - "exported_namespace": "namespace" + "{{ $nsLabel }}": "namespace" } } } @@ -551,7 +557,7 @@ data: "Value": 8 }, "renameByName": { - "exported_namespace": "namespace" + "{{ $nsLabel }}": "namespace" } } } @@ -627,7 +633,7 @@ data: "Value": 8 }, "renameByName": { - "exported_namespace": "namespace" + "{{ $nsLabel }}": "namespace" } } } @@ -703,7 +709,7 @@ data: "Value": 8 }, "renameByName": { - "exported_namespace": "namespace" + "{{ $nsLabel }}": "namespace" } } } diff --git a/charts/policy-reporter/charts/monitoring/templates/overview.dashboard.yaml b/charts/policy-reporter/charts/monitoring/templates/overview.dashboard.yaml index 83ed6234..3165d4f4 100644 --- a/charts/policy-reporter/charts/monitoring/templates/overview.dashboard.yaml +++ b/charts/policy-reporter/charts/monitoring/templates/overview.dashboard.yaml @@ -3,6 +3,12 @@ {{- if and .Values.grafana.dashboards.multicluster.enabled .Values.grafana.dashboards.multicluster.label }} {{- $filters = append $filters .Values.grafana.dashboards.multicluster.label }} {{- end }} + +{{- $nsLabel := "exported_namespace" }} +{{- if .Values.serviceMonitor.honorLabels }} +{{- $nsLabel = "namespace" }} +{{- end }} + apiVersion: v1 kind: ConfigMap metadata: @@ -109,10 +115,10 @@ data: "pluginVersion": "7.1.5", "targets": [ { - "expr": "sum(policy_report_result{policy=~\"$policy\", category=~\"$category\", severity=~\"$severity\", source=~\"$source\", kind=~\"$kind\", exported_namespace=~\"$namespace\", status=~\"fail|error\"{{ range $filters }}, {{.}}=~\"${{.}}\"{{ end }} } > 0) by (exported_namespace)", + "expr": "sum(policy_report_result{policy=~\"$policy\", category=~\"$category\", severity=~\"$severity\", source=~\"$source\", kind=~\"$kind\", {{ $nsLabel }}=~\"$namespace\", status=~\"fail|error\"{{ range $filters }}, {{.}}=~\"${{.}}\"{{ end }} } > 0) by ({{ $nsLabel }})", "instant": true, "interval": "", - "legendFormat": "{{`{{ exported_namespace }}`}}", + "legendFormat": "{{ printf `{{%s}}` $nsLabel }}", "refId": "A" } ], @@ -238,7 +244,7 @@ data: "refId": "A" }, { - "expr": "sum(policy_report_result{policy=~\"$policy\", category=~\"$category\", severity=~\"$severity\", source=~\"$source\", kind=~\"$kind\", exported_namespace=~\"$namespace\", status=~\"fail|error\"{{ range $filters }}, {{.}}=~\"${{.}}\"{{ end }} } > 0) by (policy)", + "expr": "sum(policy_report_result{policy=~\"$policy\", category=~\"$category\", severity=~\"$severity\", source=~\"$source\", kind=~\"$kind\", {{ $nsLabel }}=~\"$namespace\", status=~\"fail|error\"{{ range $filters }}, {{.}}=~\"${{.}}\"{{ end }} } > 0) by (policy)", "interval": "", "legendFormat": "{{`{{ policy }}`}}", "refId": "B" @@ -323,11 +329,11 @@ data: "pluginVersion": "7.1.5", "targets": [ { - "expr": "sum(policy_report_result{policy=~\"$policy\", category=~\"$category\", severity=~\"$severity\", source=~\"$source\", kind=~\"$kind\", exported_namespace=~\"$namespace\", status=~\"fail|error\"{{ range $filters }}, {{.}}=~\"${{.}}\"{{ end }} }) by (exported_namespace,policy,rule,kind,name,status,category,severity,source{{ range $filters }},{{.}}{{ end }})", + "expr": "sum(policy_report_result{policy=~\"$policy\", category=~\"$category\", severity=~\"$severity\", source=~\"$source\", kind=~\"$kind\", {{ $nsLabel }}=~\"$namespace\", status=~\"fail|error\"{{ range $filters }}, {{.}}=~\"${{.}}\"{{ end }} }) by ({{ $nsLabel }},policy,rule,kind,name,status,category,severity,source{{ range $filters }},{{.}}{{ end }})", "format": "table", "instant": true, "interval": "", - "legendFormat": "{{`{{ exported_namespace }}`}}: {{`{{ policy }}`}}", + "legendFormat": "{{ printf `{{%s}}` $nsLabel }}: {{`{{ policy }}`}}", "refId": "A" } ], @@ -346,7 +352,7 @@ data: "source": 0, "category": 1, "severity": 2, - "exported_namespace": 3, + "{{ $nsLabel }}": 3, "kind": 4, "name": 5, "policy": 6, @@ -354,7 +360,7 @@ data: "status": 8 }, "renameByName": { - "exported_namespace": "namespace" + "{{ $nsLabel }}": "namespace" } } } @@ -526,14 +532,14 @@ data: { "allValue": ".*", "datasource": "${DS_PROMETHEUS}", - "definition": "label_values({__name__= \"policy_report_result\", status=~\"fail|error\"}, exported_namespace)", + "definition": "label_values({__name__= \"policy_report_result\", status=~\"fail|error\"}, {{ $nsLabel }})", "hide": 0, "includeAll": true, "label": "Namespace", "multi": true, "name": "namespace", "options": [], - "query": "label_values({__name__= \"policy_report_result\", status=~\"fail|error\"}, exported_namespace)", + "query": "label_values({__name__= \"policy_report_result\", status=~\"fail|error\"}, {{ $nsLabel }})", "refresh": 2, "regex": "", "skipUrlSync": false, diff --git a/charts/policy-reporter/charts/monitoring/templates/policy-details.dashboard.yaml b/charts/policy-reporter/charts/monitoring/templates/policy-details.dashboard.yaml index f03e63d2..ebeaa547 100644 --- a/charts/policy-reporter/charts/monitoring/templates/policy-details.dashboard.yaml +++ b/charts/policy-reporter/charts/monitoring/templates/policy-details.dashboard.yaml @@ -3,6 +3,12 @@ {{- if and .Values.grafana.dashboards.multicluster.enabled .Values.grafana.dashboards.multicluster.label }} {{- $filters = append $filters .Values.grafana.dashboards.multicluster.label }} {{- end }} + +{{- $nsLabel := "exported_namespace" }} +{{- if .Values.serviceMonitor.honorLabels }} +{{- $nsLabel = "namespace" }} +{{- end }} + apiVersion: v1 kind: ConfigMap metadata: @@ -119,10 +125,10 @@ data: "pluginVersion": "7.1.5", "targets": [ { - "expr": "sum(policy_report_result{policy=~\"$policy\", category=~\"$category\", severity=~\"$severity\", source=~\"$source\", kind=~\"$kind\", exported_namespace=~\"$namespace\", status=\"pass\"{{ range $filters }}, {{.}}=~\"${{.}}\"{{ end }} } > 0) by (exported_namespace)", + "expr": "sum(policy_report_result{policy=~\"$policy\", category=~\"$category\", severity=~\"$severity\", source=~\"$source\", kind=~\"$kind\", {{ $nsLabel }}=~\"$namespace\", status=\"pass\"{{ range $filters }}, {{.}}=~\"${{.}}\"{{ end }} } > 0) by ({{ $nsLabel }})", "instant": true, "interval": "", - "legendFormat": "{{`{{ exported_namespace }}`}}", + "legendFormat": "{{ printf `{{%s}}` $nsLabel }}", "refId": "A" } ], @@ -174,10 +180,10 @@ data: "pluginVersion": "7.1.5", "targets": [ { - "expr": "sum(policy_report_result{policy=~\"$policy\", category=~\"$category\", severity=~\"$severity\", source=~\"$source\", kind=~\"$kind\", exported_namespace=~\"$namespace\", status=\"fail\"{{ range $filters }}, {{.}}=~\"${{.}}\"{{ end }} } > 0) by (exported_namespace)", + "expr": "sum(policy_report_result{policy=~\"$policy\", category=~\"$category\", severity=~\"$severity\", source=~\"$source\", kind=~\"$kind\", {{ $nsLabel }}=~\"$namespace\", status=\"fail\"{{ range $filters }}, {{.}}=~\"${{.}}\"{{ end }} } > 0) by ({{ $nsLabel }})", "instant": true, "interval": "", - "legendFormat": "{{`{{ exported_namespace }}`}}", + "legendFormat": "{{ printf `{{%s}}` $nsLabel }}", "refId": "A" } ], @@ -230,10 +236,10 @@ data: "pluginVersion": "7.1.5", "targets": [ { - "expr": "sum(policy_report_result{policy=~\"$policy\", category=~\"$category\", severity=~\"$severity\", source=~\"$source\", kind=~\"$kind\", exported_namespace=~\"$namespace\", status=\"warn\"{{ range $filters }}, {{.}}=~\"${{.}}\"{{ end }} } > 0) by (exported_namespace)", + "expr": "sum(policy_report_result{policy=~\"$policy\", category=~\"$category\", severity=~\"$severity\", source=~\"$source\", kind=~\"$kind\", {{ $nsLabel }}=~\"$namespace\", status=\"warn\"{{ range $filters }}, {{.}}=~\"${{.}}\"{{ end }} } > 0) by ({{ $nsLabel }})", "instant": true, "interval": "", - "legendFormat": "{{`{{ exported_namespace }}`}}", + "legendFormat": "{{ printf `{{%s}}` $nsLabel }}", "refId": "A" } ], @@ -285,10 +291,10 @@ data: "pluginVersion": "7.1.5", "targets": [ { - "expr": "sum(policy_report_result{policy=~\"$policy\", category=~\"$category\", severity=~\"$severity\", source=~\"$source\", kind=~\"$kind\", exported_namespace=~\"$namespace\", status=\"error\"{{ range $filters }}, {{.}}=~\"${{.}}\"{{ end }} } > 0) by (exported_namespace)", + "expr": "sum(policy_report_result{policy=~\"$policy\", category=~\"$category\", severity=~\"$severity\", source=~\"$source\", kind=~\"$kind\", {{ $nsLabel }}=~\"$namespace\", status=\"error\"{{ range $filters }}, {{.}}=~\"${{.}}\"{{ end }} } > 0) by ({{ $nsLabel }})", "instant": true, "interval": "", - "legendFormat": "{{`{{ exported_namespace }}`}}", + "legendFormat": "{{ printf `{{%s}}` $nsLabel }}", "refId": "A" } ], @@ -348,9 +354,9 @@ data: "steppedLine": false, "targets": [ { - "expr": "sum(policy_report_result{policy=~\"$policy\", category=~\"$category\", severity=~\"$severity\", source=~\"$source\", kind=~\"$kind\", exported_namespace=~\"$namespace\"{{ range $filters }}, {{.}}=~\"${{.}}\"{{ end }} } > 0) by (status, exported_namespace)", + "expr": "sum(policy_report_result{policy=~\"$policy\", category=~\"$category\", severity=~\"$severity\", source=~\"$source\", kind=~\"$kind\", {{ $nsLabel }}=~\"$namespace\"{{ range $filters }}, {{.}}=~\"${{.}}\"{{ end }} } > 0) by (status, {{ $nsLabel }})", "interval": "", - "legendFormat": "{{`{{ exported_namespace }}`}} {{`{{ status }}`}}", + "legendFormat": "{{ printf `{{%s}}` $nsLabel }} {{`{{ status }}`}}", "refId": "A" } ], @@ -436,7 +442,7 @@ data: "pluginVersion": "7.1.5", "targets": [ { - "expr": "sum(policy_report_result{policy=~\"$policy\", category=~\"$category\", severity=~\"$severity\", source=~\"$source\", kind=~\"$kind\", exported_namespace=~\"$namespace\", status=\"pass\"{{ range $filters }}, {{.}}=~\"${{.}}\"{{ end }} }) by (exported_namespace,category,policy,rule,kind,name,severity,status,source{{ range $filters }},{{.}}{{ end }} )", + "expr": "sum(policy_report_result{policy=~\"$policy\", category=~\"$category\", severity=~\"$severity\", source=~\"$source\", kind=~\"$kind\", {{ $nsLabel }}=~\"$namespace\", status=\"pass\"{{ range $filters }}, {{.}}=~\"${{.}}\"{{ end }} }) by ({{ $nsLabel }},category,policy,rule,kind,name,severity,status,source{{ range $filters }},{{.}}{{ end }} )", "format": "table", "instant": true, "interval": "", @@ -460,7 +466,7 @@ data: "Time": 0, "source": 1, "category": 2, - "exported_namespace": 3, + "{{ $nsLabel }}": 3, "kind": 4, "name": 5, "policy": 6, @@ -470,7 +476,7 @@ data: "Value": 9 }, "renameByName": { - "exported_namespace": "namespace" + "{{ $nsLabel }}": "namespace" } } } @@ -516,7 +522,7 @@ data: "pluginVersion": "7.1.5", "targets": [ { - "expr": "sum(policy_report_result{policy=~\"$policy\", category=~\"$category\", severity=~\"$severity\", source=~\"$source\", kind=~\"$kind\", exported_namespace=~\"$namespace\", status=\"fail\"{{ range $filters }}, {{.}}=~\"${{.}}\"{{ end }} }) by (exported_namespace,category,policy,rule,kind,name,severity,status,source{{ range $filters }},{{.}}{{ end }})", + "expr": "sum(policy_report_result{policy=~\"$policy\", category=~\"$category\", severity=~\"$severity\", source=~\"$source\", kind=~\"$kind\", {{ $nsLabel }}=~\"$namespace\", status=\"fail\"{{ range $filters }}, {{.}}=~\"${{.}}\"{{ end }} }) by ({{ $nsLabel }},category,policy,rule,kind,name,severity,status,source{{ range $filters }},{{.}}{{ end }})", "format": "table", "instant": true, "interval": "", @@ -540,7 +546,7 @@ data: "Time": 0, "source": 1, "category": 2, - "exported_namespace": 3, + "{{ $nsLabel }}": 3, "kind": 4, "name": 5, "policy": 6, @@ -550,7 +556,7 @@ data: "Value": 9 }, "renameByName": { - "exported_namespace": "namespace" + "{{ $nsLabel }}": "namespace" } } } @@ -593,7 +599,7 @@ data: "pluginVersion": "7.1.5", "targets": [ { - "expr": "sum(policy_report_result{policy=~\"$policy\", category=~\"$category\", severity=~\"$severity\", source=~\"$source\", kind=~\"$kind\", exported_namespace=~\"$namespace\", status=\"warn\"{{ range $filters }}, {{.}}=~\"${{.}}\"{{ end }} }) by (exported_namespace,category,policy,rule,kind,name,severity,status,source{{ range $filters }},{{.}}{{ end }} )", + "expr": "sum(policy_report_result{policy=~\"$policy\", category=~\"$category\", severity=~\"$severity\", source=~\"$source\", kind=~\"$kind\", {{ $nsLabel }}=~\"$namespace\", status=\"warn\"{{ range $filters }}, {{.}}=~\"${{.}}\"{{ end }} }) by ({{ $nsLabel }},category,policy,rule,kind,name,severity,status,source{{ range $filters }},{{.}}{{ end }} )", "format": "table", "instant": true, "interval": "", @@ -617,7 +623,7 @@ data: "Time": 0, "source": 1, "category": 2, - "exported_namespace": 3, + "{{ $nsLabel }}": 3, "kind": 4, "name": 5, "policy": 6, @@ -627,7 +633,7 @@ data: "Value": 9 }, "renameByName": { - "exported_namespace": "namespace" + "{{ $nsLabel }}": "namespace" } } } @@ -670,7 +676,7 @@ data: "pluginVersion": "7.1.5", "targets": [ { - "expr": "sum(policy_report_result{policy=~\"$policy\", category=~\"$category\", severity=~\"$severity\", source=~\"$source\", kind=~\"$kind\", exported_namespace=~\"$namespace\", status=\"error\"{{ range $filters }}, {{.}}=~\"${{.}}\"{{ end }} }) by (exported_namespace,category,policy,rule,kind,name,severity,status,source{{ range $filters }},{{.}}{{ end }} )", + "expr": "sum(policy_report_result{policy=~\"$policy\", category=~\"$category\", severity=~\"$severity\", source=~\"$source\", kind=~\"$kind\", {{ $nsLabel }}=~\"$namespace\", status=\"error\"{{ range $filters }}, {{.}}=~\"${{.}}\"{{ end }} }) by ({{ $nsLabel }},category,policy,rule,kind,name,severity,status,source{{ range $filters }},{{.}}{{ end }} )", "format": "table", "instant": true, "interval": "", @@ -694,7 +700,7 @@ data: "Time": 0, "Value": 9, "category": 1, - "exported_namespace": 3, + "{{ $nsLabel }}": 3, "kind": 4, "name": 5, "policy": 6, @@ -703,7 +709,7 @@ data: "status": 8 }, "renameByName": { - "exported_namespace": "namespace" + "{{ $nsLabel }}": "namespace" } } } @@ -795,14 +801,14 @@ data: { "allValue": ".*", "datasource": "${DS_PROMETHEUS}", - "definition": "label_values(policy_report_result, exported_namespace)", + "definition": "label_values(policy_report_result, {{ $nsLabel }})", "hide": 0, "includeAll": true, "label": "Namespace", "multi": true, "name": "namespace", "options": [], - "query": "label_values(policy_report_result, exported_namespace)", + "query": "label_values(policy_report_result, {{ $nsLabel }})", "refresh": 2, "regex": "", "skipUrlSync": false, diff --git a/pkg/email/client.go b/pkg/email/client.go index 7997b89c..abff8c05 100644 --- a/pkg/email/client.go +++ b/pkg/email/client.go @@ -33,29 +33,22 @@ func (c *Client) Send(report Report, to []string) error { return err } - for _, to := range to { - msg := mail.NewMSG(). - SetFrom(fmt.Sprintf("Policy Reporter <%s>", c.from)). - AddTo(to). - SetSubject(report.Title) - - if strings.ToLower(report.Format) == "html" || report.Format == "" { - msg.SetBody(mail.TextHTML, report.Message) - } else { - msg.SetBody(mail.TextPlain, report.Message) - } - - if msg.Error != nil { - return msg.Error - } - - err = msg.Send(client) - if err != nil { - return err - } + msg := mail.NewMSG(). + SetFrom(fmt.Sprintf("Policy Reporter <%s>", c.from)). + AddTo(to...). + SetSubject(report.Title) + + if strings.ToLower(report.Format) == "html" || report.Format == "" { + msg.SetBody(mail.TextHTML, report.Message) + } else { + msg.SetBody(mail.TextPlain, report.Message) } - return nil + if msg.Error != nil { + return msg.Error + } + + return msg.Send(client) } func NewClient(from string, server *mail.SMTPServer) *Client {