60 lines
1.7 KiB
Bash
Executable File
60 lines
1.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
K01_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
REPO_ROOT="$(cd "$K01_DIR/../.." && pwd)"
|
|
SQL_DIR="$REPO_ROOT/desc/sql"
|
|
FIXTURE_DIR="$REPO_ROOT/deploy/dev/fixture"
|
|
|
|
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
|
|
|
|
domain_dir() {
|
|
case "$1" in
|
|
user) echo users ;;
|
|
*) echo "$1" ;;
|
|
esac
|
|
}
|
|
|
|
psql_exec() {
|
|
local cluster="$1" sql="$2"
|
|
local pw
|
|
pw="$(kubectl -n juwan get secret "${cluster}-app" -o jsonpath='{.data.password}' | base64 -d)"
|
|
kubectl -n juwan exec -i "${cluster}-1" -c postgres -- env PGPASSWORD="$pw" \
|
|
psql -v ON_ERROR_STOP=1 -h 127.0.0.1 -U app -d app <<<"$sql"
|
|
}
|
|
|
|
psql_file() {
|
|
local cluster="$1" file="$2"
|
|
local pw
|
|
pw="$(kubectl -n juwan get secret "${cluster}-app" -o jsonpath='{.data.password}' | base64 -d)"
|
|
kubectl -n juwan exec -i "${cluster}-1" -c postgres -- env PGPASSWORD="$pw" \
|
|
psql -v ON_ERROR_STOP=1 -h 127.0.0.1 -U app -d app < "$file"
|
|
}
|
|
|
|
kubectl -n juwan wait --for=condition=Ready cluster.postgresql.cnpg.io --all --timeout=600s
|
|
|
|
clusters=()
|
|
while IFS= read -r name; do
|
|
[ -n "$name" ] && clusters+=("$name")
|
|
done < <(kubectl -n juwan get cluster -o go-template='{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
|
|
|
|
for cluster in "${clusters[@]}"; do
|
|
domain="${cluster%-db}"
|
|
dir="$(domain_dir "$domain")"
|
|
echo "$cluster"
|
|
psql_exec "$cluster" "DROP OWNED BY app CASCADE;"
|
|
psql_file "$cluster" "$SQL_DIR/common/update_updated_at_column.sql"
|
|
for f in "$SQL_DIR/$dir"/*.sql; do
|
|
[ -f "$f" ] || continue
|
|
echo " $(basename "$f")"
|
|
psql_file "$cluster" "$f"
|
|
done
|
|
if [ -f "$FIXTURE_DIR/$dir.sql" ]; then
|
|
echo " $dir.sql"
|
|
psql_file "$cluster" "$FIXTURE_DIR/$dir.sql"
|
|
fi
|
|
done
|
|
|
|
echo
|
|
echo "schema + fixture loaded, ${#clusters[@]} clusters"
|