From 4e43d151533b7cae7caaa14247f3e39b4fee1412 Mon Sep 17 00:00:00 2001 From: Chris Coutinho Date: Thu, 13 Nov 2025 12:56:45 +0100 Subject: [PATCH] fix: Move grafana_folder from labels to annotations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes Kubernetes label validation error when deploying dashboard ConfigMap. Problem: - Kubernetes labels cannot contain spaces (validation regex: [A-Za-z0-9][-A-Za-z0-9_.]*[A-Za-z0-9]) - Previous implementation had grafana_folder: "Nextcloud MCP" as a label - Deployment failed with: "Invalid value: 'Nextcloud MCP'" Solution: - Move grafana_folder from labels to annotations (annotations allow spaces) - Keep grafana_dashboard="1" as label for ConfigMap discovery - Grafana sidecar reads folder name from folderAnnotation parameter Changes: - dashboard-configmap.yaml: Move grafana_folder to annotations section - dashboards/README.md: Fix kubectl commands to use annotations - values.yaml: Update comments to clarify annotation usage This follows the standard kube-prometheus-stack pattern where: - Labels are used for ConfigMap discovery (strict validation) - Annotations are used for metadata like folder names (relaxed validation) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- charts/nextcloud-mcp-server/dashboards/README.md | 4 ++++ .../templates/dashboard-configmap.yaml | 9 +++++---- charts/nextcloud-mcp-server/values.yaml | 3 ++- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/charts/nextcloud-mcp-server/dashboards/README.md b/charts/nextcloud-mcp-server/dashboards/README.md index af04709..314ad52 100644 --- a/charts/nextcloud-mcp-server/dashboards/README.md +++ b/charts/nextcloud-mcp-server/dashboards/README.md @@ -123,6 +123,10 @@ kubectl create configmap nextcloud-mcp-dashboard \ # Add sidecar discovery label kubectl label configmap nextcloud-mcp-dashboard \ grafana_dashboard=1 \ + -n monitoring + +# Add folder annotation (annotations support spaces, unlike labels) +kubectl annotate configmap nextcloud-mcp-dashboard \ grafana_folder="Nextcloud MCP" \ -n monitoring ``` diff --git a/charts/nextcloud-mcp-server/templates/dashboard-configmap.yaml b/charts/nextcloud-mcp-server/templates/dashboard-configmap.yaml index b1d59dd..5f77657 100644 --- a/charts/nextcloud-mcp-server/templates/dashboard-configmap.yaml +++ b/charts/nextcloud-mcp-server/templates/dashboard-configmap.yaml @@ -9,15 +9,16 @@ metadata: {{- with .Values.dashboards.labels }} {{- toYaml . | nindent 4 }} {{- end }} - # Grafana sidecar discovery labels + # Grafana sidecar discovery label grafana_dashboard: "1" - {{- if .Values.dashboards.grafanaFolder }} - grafana_folder: {{ .Values.dashboards.grafanaFolder | quote }} - {{- end }} annotations: {{- with .Values.dashboards.annotations }} {{- toYaml . | nindent 4 }} {{- end }} + # Grafana folder name (annotations support spaces, unlike labels) + {{- if .Values.dashboards.grafanaFolder }} + grafana_folder: {{ .Values.dashboards.grafanaFolder | quote }} + {{- end }} data: nextcloud-mcp-server.json: |- {{ .Files.Get "dashboards/nextcloud-mcp-server.json" | indent 4 }} diff --git a/charts/nextcloud-mcp-server/values.yaml b/charts/nextcloud-mcp-server/values.yaml index 9330fa5..a14a65b 100644 --- a/charts/nextcloud-mcp-server/values.yaml +++ b/charts/nextcloud-mcp-server/values.yaml @@ -210,7 +210,8 @@ dashboards: # Enable automatic dashboard provisioning via ConfigMap enabled: false # Grafana folder name where dashboards will be imported - # The grafana-sidecar looks for ConfigMaps with label "grafana_folder" + # The grafana-sidecar looks for ConfigMaps with label "grafana_dashboard: 1" + # and reads the folder name from annotation "grafana_folder" (supports spaces) grafanaFolder: "Nextcloud MCP" # Additional labels for dashboard ConfigMap # These will be added alongside the required "grafana_dashboard: 1" label