From 1005a9fbe2b6c1fbd4ba5034689d162fdb652c37 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 23 Jan 2026 11:59:17 +0100 Subject: [PATCH] feat(base-cluster/monitoring): add alert about base-cluster updates --- .../base-cluster-update/current-source.yaml | 22 ++++++++++++ .../base-cluster-update/update-alert.yaml | 35 +++++++++++++++++++ .../base-cluster-update/update-source.yaml | 26 ++++++++++++++ .../_kube-state-metrics-config.yaml | 29 ++++++++++++++- 4 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 charts/base-cluster/templates/base-cluster-update/current-source.yaml create mode 100644 charts/base-cluster/templates/base-cluster-update/update-alert.yaml create mode 100644 charts/base-cluster/templates/base-cluster-update/update-source.yaml diff --git a/charts/base-cluster/templates/base-cluster-update/current-source.yaml b/charts/base-cluster/templates/base-cluster-update/current-source.yaml new file mode 100644 index 0000000000..0d26b5bb8b --- /dev/null +++ b/charts/base-cluster/templates/base-cluster-update/current-source.yaml @@ -0,0 +1,22 @@ +{{- if .Values.monitoring.prometheus.enabled }} + {{- include "base-cluster.helm.resourceWithDependencies" (dict "name" "base-cluster-current" "resource" (include "base-cluster.currentVersionRule" .) "render" false "dependencies" (dict "monitoring" "kube-prometheus-stack") "context" $ "additionalLabels" (dict "monitoring/provisioned-by" "base-cluster")) }} +{{- end -}} + +{{- define "base-cluster.currentVersionRule" -}} +apiVersion: monitoring.coreos.com/v1 +kind: PrometheusRule +metadata: + name: base-cluster-current + namespace: flux-system + labels: {{- include "common.labels.standard" . | nindent 4 }} + monitoring/provisioned-by: base-cluster +spec: + groups: + - name: base-cluster-current + rules: + - record: base_cluster_current_version:info + expr: vector(1) + labels: {{- with semver .Chart.Version }} + tag: {{ printf "%d.%d.%d" .Major .Minor .Patch | quote }} + {{- end }} +{{- end }} diff --git a/charts/base-cluster/templates/base-cluster-update/update-alert.yaml b/charts/base-cluster/templates/base-cluster-update/update-alert.yaml new file mode 100644 index 0000000000..25c7fecf3d --- /dev/null +++ b/charts/base-cluster/templates/base-cluster-update/update-alert.yaml @@ -0,0 +1,35 @@ +{{- if .Values.monitoring.prometheus.enabled }} + {{- include "base-cluster.helm.resourceWithDependencies" (dict "name" "base-cluster-update" "resource" (include "base-cluster.updateAlert" .) "render" false "dependencies" (dict "monitoring" "kube-prometheus-stack") "context" $ "additionalLabels" (dict "monitoring/provisioned-by" "base-cluster")) }} +{{- end -}} + +{{- define "base-cluster.updateAlert" -}} +apiVersion: monitoring.coreos.com/v1 +kind: PrometheusRule +metadata: + name: base-cluster-update + namespace: flux-system + labels: {{- include "common.labels.standard" . | nindent 4 }} + monitoring/provisioned-by: base-cluster +spec: + groups: + - name: base-cluster-update + rules: + - alert: BaseClusterUpdateAvailable + annotations: + description: {{ "New base-cluster version is available. New version: {{ $labels.tag }}." | quote }} + summary: New base-cluster version is available. + expr: |- + ( + ( + (max(image_policy_latest_version{customresource_namespace="flux-system",customresource_name="base-cluster-chart"}) by (tag)) + - + base_cluster_current_version:info + ) + or + (max(image_policy_latest_version{customresource_namespace="flux-system",customresource_name="base-cluster-chart"}) by (tag)) + ) == 1 + for: 1w + labels: + severity: critical + period: WorkingHours +{{- end }} diff --git a/charts/base-cluster/templates/base-cluster-update/update-source.yaml b/charts/base-cluster/templates/base-cluster-update/update-source.yaml new file mode 100644 index 0000000000..faeafa2288 --- /dev/null +++ b/charts/base-cluster/templates/base-cluster-update/update-source.yaml @@ -0,0 +1,26 @@ +{{- if and .Values.monitoring.prometheus.enabled }} +apiVersion: image.toolkit.fluxcd.io/v1 +kind: ImageRepository +metadata: + name: base-cluster-chart + namespace: flux-system + labels: {{- include "common.labels.standard" . | nindent 4 }} + monitoring/provisioned-by: base-cluster +spec: + image: ghcr.io/teutonet/teutonet-helm-charts/base-cluster # artifacthub-ignore + interval: 24h +--- +apiVersion: image.toolkit.fluxcd.io/v1 +kind: ImagePolicy +metadata: + name: base-cluster-chart + namespace: flux-system + labels: {{- include "common.labels.standard" . | nindent 4 }} + monitoring/provisioned-by: base-cluster +spec: + imageRepositoryRef: + name: base-cluster-chart + policy: + semver: + range: x.x.x +{{- end }} diff --git a/charts/base-cluster/templates/monitoring/kube-prometheus-stack/_kube-state-metrics-config.yaml b/charts/base-cluster/templates/monitoring/kube-prometheus-stack/_kube-state-metrics-config.yaml index b1cc9201a6..9240a78968 100644 --- a/charts/base-cluster/templates/monitoring/kube-prometheus-stack/_kube-state-metrics-config.yaml +++ b/charts/base-cluster/templates/monitoring/kube-prometheus-stack/_kube-state-metrics-config.yaml @@ -97,7 +97,34 @@ customResourceState: ) ) -}} - {{- end }} + {{- end -}} + + {{- $resources = append $resources (dict + "groupVersionKind" (dict + "group" "image.toolkit.fluxcd.io" + "kind" "ImagePolicy" + ) + "metricNamePrefix" "image_policy" + "metrics" (list + (dict + "name" "latest_version" + "help" "The latest version of the image as determined by the ImagePolicy." + "each" (dict + "type" "Info" + "info" (dict + "labelsFromPath" (dict + "tag" (list "status" "latestRef" "tag") + ) + ) + ) + "labelsFromPath" (dict + "customresource_namespace" (list "metadata" "namespace") + "customresource_name" (list "metadata" "name") + ) + ) + ) + ) + }} resources: {{- toYaml $resources | nindent 8 }} podAnnotations: checksum/config: {{ toYaml $resources | sha256sum | quote }}