monitoring: dedupe grafana user via api

This commit is contained in:
Brad Stein 2026-01-21 12:11:28 -03:00
parent 6eeb551239
commit a0caeb407c

View File

@ -2,8 +2,17 @@
apiVersion: batch/v1 apiVersion: batch/v1
kind: Job kind: Job
metadata: metadata:
name: grafana-user-dedupe name: grafana-user-dedupe-api
namespace: monitoring namespace: monitoring
annotations:
vault.hashicorp.com/agent-inject: "true"
vault.hashicorp.com/role: "monitoring"
vault.hashicorp.com/agent-inject-secret-grafana-env.sh: "kv/data/atlas/monitoring/grafana-admin"
vault.hashicorp.com/agent-inject-template-grafana-env.sh: |
{{ with secret "kv/data/atlas/monitoring/grafana-admin" }}
export GRAFANA_USER="{{ index .Data.data "admin-user" }}"
export GRAFANA_PASSWORD="{{ index .Data.data "admin-password" }}"
{{ end }}
spec: spec:
backoffLimit: 1 backoffLimit: 1
template: template:
@ -18,10 +27,15 @@ spec:
args: args:
- | - |
set -euo pipefail set -euo pipefail
apk add --no-cache sqlite apk add --no-cache curl jq
db="/var/lib/grafana/grafana.db" . /vault/secrets/grafana-env.sh
if [ ! -f "$db" ]; then grafana_url="${GRAFANA_URL}"
echo "grafana db not found at $db" if [ -z "${grafana_url}" ]; then
echo "GRAFANA_URL is required"
exit 1
fi
if [ -z "${GRAFANA_USER}" ] || [ -z "${GRAFANA_PASSWORD}" ]; then
echo "Grafana admin credentials missing"
exit 1 exit 1
fi fi
if [ -z "${GRAFANA_DEDUPE_EMAILS}" ]; then if [ -z "${GRAFANA_DEDUPE_EMAILS}" ]; then
@ -29,23 +43,19 @@ spec:
exit 1 exit 1
fi fi
for email in $(echo "${GRAFANA_DEDUPE_EMAILS}" | tr ',' ' '); do for email in $(echo "${GRAFANA_DEDUPE_EMAILS}" | tr ',' ' '); do
ids="$(sqlite3 "$db" "select id from user where email = '${email}';")" user_id="$(curl -sf -u "${GRAFANA_USER}:${GRAFANA_PASSWORD}" \
if [ -z "$ids" ]; then "${grafana_url}/api/users/lookup?loginOrEmail=${email}" | jq -r '.id // empty')"
if [ -z "$user_id" ]; then
echo "no grafana user found for ${email}" echo "no grafana user found for ${email}"
continue continue
fi fi
echo "deleting grafana users with ids: ${ids}" echo "deleting grafana user ${user_id} (${email})"
sqlite3 "$db" "delete from user_auth where user_id in (${ids});" curl -sf -X DELETE -u "${GRAFANA_USER}:${GRAFANA_PASSWORD}" \
sqlite3 "$db" "delete from user where id in (${ids});" "${grafana_url}/api/admin/users/${user_id}"
done done
echo "done" echo "done"
env: env:
- name: GRAFANA_URL
value: http://grafana
- name: GRAFANA_DEDUPE_EMAILS - name: GRAFANA_DEDUPE_EMAILS
value: brad.stein@gmail.com,brad@bstein.dev value: brad.stein@gmail.com,brad@bstein.dev
volumeMounts:
- name: grafana-storage
mountPath: /var/lib/grafana
volumes:
- name: grafana-storage
persistentVolumeClaim:
claimName: grafana