55 lines
1.5 KiB
Bash
Executable File
55 lines
1.5 KiB
Bash
Executable File
#! /usr/bin/env bash
|
|
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
|
USER_HOME=$HOME
|
|
[[ -n "${SUDO_USER}" ]] && USER_HOME="$(eval "echo ~${SUDO_USER}")"
|
|
. ${SHRC_D:-$SCRIPT_DIR}/01_util.functions
|
|
|
|
set -e
|
|
|
|
# create backup folder
|
|
folder="./dumps/"
|
|
mkdir -p "$folder"
|
|
|
|
# get namespaces with postgres database pod
|
|
json_results=$(
|
|
# While tcdbinfo lists all SQL databases, we want only postgresql
|
|
# in this script.
|
|
"${SCRIPT_DIR}/tcdbinfo.sh" --json "${@}" \
|
|
| jq -s '.[] | select( .protocol = "postgresql" )'
|
|
)
|
|
|
|
namespaces=$(<<<"$json_results" jq -sr '.[] | .name')
|
|
|
|
for ns in $namespaces; do
|
|
# extract application name
|
|
app=$(echo "$ns" | sed 's/^ix-//')
|
|
|
|
echo "Creating database backup for $app."
|
|
|
|
file="$app.sql"
|
|
|
|
# Scale down deployment to avoid inconsistencies in DB
|
|
k3s kubectl scale deploy "$app" -n "$ns" --replicas=0
|
|
while true; do k3s kubectl get pods -n "$ns" | grep -i -q terminating || break; done;
|
|
|
|
k3s kubectl exec -n "$ns" -c "$app"-postgresql "$app"-postgresql-0 -- bash -c "
|
|
PGPASSWORD=\$POSTGRES_PASSWORD $( # Does not affect the output
|
|
) pg_dump -Fc -U \$POSTGRES_USER -d \$POSTGRES_DB -f /tmp/$file
|
|
"
|
|
k3s kubectl cp -n "$ns" -c "$app"-postgresql "$app-postgresql-0:tmp/$file" $folder$file
|
|
|
|
# Scale deployment back up
|
|
k3s kubectl scale deploy "$app" -n "$ns" --replicas=1
|
|
|
|
if [ ! -f "$folder$file" ]; then
|
|
>&2 echo "$folder$file does not exist."
|
|
exit 1
|
|
fi
|
|
|
|
echo "File $file created."
|
|
|
|
done
|
|
|
|
exit 0
|
|
|