--- apiVersion: v1 kind: Secret metadata: name: {{ .Release.Name }}-init-script stringData: init.sh: | #!/bin/bash set -e echo "== create users" {{- if .Values.users }} psql -v ON_ERROR_STOP=1 <<\EOT {{- range $user, $u := .Values.users }} SELECT 'CREATE ROLE {{ $user }} LOGIN INHERIT;' WHERE NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = '{{ $user }}')\gexec ALTER ROLE {{ $user }} WITH PASSWORD '{{ $u.password }}' LOGIN INHERIT {{ ternary "REPLICATION" "NOREPLICATION" (default false $u.replication) }}; COMMENT ON ROLE {{ $user }} IS 'user managed by helm'; {{- end }} EOT {{- end }} echo "== delete users" MANAGED_USERS=$(echo '\du+' | psql | awk -F'|' '$4 == " user managed by helm" {print $1}' | awk NF=NF RS= OFS=' ') DEFINED_USERS="{{ join " " (keys .Values.users) }}" DELETE_USERS=$(for user in $MANAGED_USERS; do case " $DEFINED_USERS " in *" $user "*) :;; *) echo $user;; esac; done) echo "users to delete: $DELETE_USERS" for user in $DELETE_USERS; do # https://stackoverflow.com/a/51257346/2931267 psql -v ON_ERROR_STOP=1 --echo-all <