Fix TeslaMate/UnPoller dashboard UID sed clobbering datasource refs

The previous sed replaced ALL "uid" fields in dashboard JSON files,
including datasource references inside panels, causing dashboards to
go dark. Scope the replacement to only the first occurrence (the
top-level dashboard UID) using GNU sed 0,/pattern/ addressing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Erich Blume 2026-03-18 12:53:00 -07:00
commit 334fbbb9e3

View file

@ -80,10 +80,12 @@ spec:
; do
wget -q -O "$DEST/$f" "$BASE_URL/$f"
done
# Stamp stable UIDs so stars/bookmarks survive pod restarts
# 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.
for f in "$DEST"/*.json; do
uid="teslamate-$(basename "$f" .json)"
sed -i "s/\"uid\": *\"[^\"]*\"/\"uid\": \"${uid}\"/" "$f"
sed -i "0,/\"uid\": *\"[^\"]*\"/{s/\"uid\": *\"[^\"]*\"/\"uid\": \"${uid}\"/}" "$f"
done
echo "Fetched $(ls "$DEST" | wc -l) TeslaMate dashboards"
securityContext:
@ -120,11 +122,11 @@ 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 UIDs so stars/bookmarks survive pod restarts
# Stamp stable top-level UIDs so stars/bookmarks survive pod restarts
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 "s/\"uid\": *\"[^\"]*\"/\"uid\": \"${uid}\"/" "$f"
sed -i "0,/\"uid\": *\"[^\"]*\"/{s/\"uid\": *\"[^\"]*\"/\"uid\": \"${uid}\"/}" "$f"
done
echo "Fetched $(ls "$DEST" | wc -l) UnPoller dashboards"
securityContext: