From c92b949a205216149c0305b9ac85aa05411748b2 Mon Sep 17 00:00:00 2001 From: Erich Blume Date: Wed, 18 Mar 2026 12:56:50 -0700 Subject: [PATCH] Fix UID sed to target root-level dashboard uid only The top-level "uid" in Grafana dashboard JSON is at 2-space indent near the end of the file, not the first occurrence. Match on ^ "uid" to avoid clobbering nested datasource uid references. Co-Authored-By: Claude Opus 4.6 (1M context) --- argocd/manifests/grafana/deployment.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/argocd/manifests/grafana/deployment.yaml b/argocd/manifests/grafana/deployment.yaml index 3fda945..61a2f88 100644 --- a/argocd/manifests/grafana/deployment.yaml +++ b/argocd/manifests/grafana/deployment.yaml @@ -80,12 +80,11 @@ spec: ; do wget -q -O "$DEST/$f" "$BASE_URL/$f" done - # Stamp stable top-level UIDs so stars/bookmarks survive pod restarts - # Uses 0,/pattern/ to replace only the first "uid" (the dashboard UID), - # leaving datasource UIDs inside panels untouched. + # Stamp stable top-level UIDs so stars/bookmarks survive pod restarts. + # Match root-level uid (2-space indent) to avoid clobbering datasource refs. for f in "$DEST"/*.json; do uid="teslamate-$(basename "$f" .json)" - sed -i "0,/\"uid\": *\"[^\"]*\"/{s/\"uid\": *\"[^\"]*\"/\"uid\": \"${uid}\"/}" "$f" + sed -i "s/^ \"uid\": *\"[^\"]*\"/ \"uid\": \"${uid}\"/" "$f" done echo "Fetched $(ls "$DEST" | wc -l) TeslaMate dashboards" securityContext: @@ -122,11 +121,12 @@ spec: # Fix datasource UIDs to match our Prometheus instance sed -i 's/"uid": *"bdkj55oguty4gd"/"uid": "prometheus"/g' "$DEST"/*.json sed -i 's/"uid": *"\${DS_PROMETHEUS}"/"uid": "prometheus"/g' "$DEST"/*.json - # Stamp stable top-level UIDs so stars/bookmarks survive pod restarts + # Stamp stable top-level UIDs so stars/bookmarks survive pod restarts. + # Match root-level uid (2-space indent) to avoid clobbering datasource refs. for f in "$DEST"/*.json; do slug=$(basename "$f" .json | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]/-/g' | sed 's/--*/-/g' | sed 's/^-//;s/-$//') uid="unpoller-${slug}" - sed -i "0,/\"uid\": *\"[^\"]*\"/{s/\"uid\": *\"[^\"]*\"/\"uid\": \"${uid}\"/}" "$f" + sed -i "s/^ \"uid\": *\"[^\"]*\"/ \"uid\": \"${uid}\"/" "$f" done echo "Fetched $(ls "$DEST" | wc -l) UnPoller dashboards" securityContext: