monitoring: dedupe grafana user via api
This commit is contained in:
parent
6eeb551239
commit
a0caeb407c
@ -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
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user