From 121ac483cab3975f6c782359058929b14d4d5245 Mon Sep 17 00:00:00 2001 From: Lockszmith Date: Tue, 11 Jul 2023 23:21:15 -0400 Subject: [PATCH] Added TrueCharts db tools Copied from here: https://truecharts.org/manual/SCALE/guides/sql-export/ Link to source of page: https://github.com/truecharts/website/blame/main/docs/manual/SCALE/guides/sql-export.md#L13 Permalink in space/time: https://github.com/truecharts/website/blame/30484d04f7079d43e7948e267f894954c936c1db/docs/manual/SCALE/guides/sql-export.md#L13 --- tcdbbackup.sh | 37 +++++++++++++++++++++++++++++++++++++ tcdbinfo.sh | 28 ++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100755 tcdbbackup.sh create mode 100755 tcdbinfo.sh diff --git a/tcdbbackup.sh b/tcdbbackup.sh new file mode 100755 index 0000000..f95eb62 --- /dev/null +++ b/tcdbbackup.sh @@ -0,0 +1,37 @@ +#!/bin/bash +# create backup folder +folder="./dumps/" +mkdir -p "$folder" + +# get namespaces with postgres database pod +namespaces=$(k3s kubectl get pods -A | grep postgres | awk '{print $1}') + +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 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 + diff --git a/tcdbinfo.sh b/tcdbinfo.sh new file mode 100755 index 0000000..ecf54f6 --- /dev/null +++ b/tcdbinfo.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +# get namespaces +namespaces=$(k3s kubectl get secrets -A | grep -E "dbcreds|cnpg-main-urls" | awk '{print $1, $2}') + +# iterate over namespaces +( printf "Application | Username | Password | Address | Port\n" +echo "$namespaces" | while read ns secret; do + # extract application name + app_name=$(echo "$ns" | sed 's/^ix-//') + if [ "$secret" = "dbcreds" ]; then + creds=$(k3s kubectl get secret/$secret --namespace "$ns" -o jsonpath='{.data.url}' | base64 -d) + else + creds=$(k3s kubectl get secret/$secret --namespace "$ns" -o jsonpath='{.data.std}' | base64 -d) + fi + + # get username, password, addresspart, and port + username=$(echo "$creds" | awk -F '//' '{print $2}' | awk -F ':' '{print $1}') + password=$(echo "$creds" | awk -F ':' '{print $3}' | awk -F '@' '{print $1}') + addresspart=$(echo "$creds" | awk -F '@' '{print $2}' | awk -F ':' '{print $1}') + port=$(echo "$creds" | awk -F ':' '{print $4}' | awk -F '/' '{print $1}') + + # construct full address + full_address="${addresspart}.${ns}.svc.cluster.local" + + # print results with aligned columns + printf "%s | %s | %s | %s | %s\n" "$app_name" "$username" "$password" "$full_address" "$port" +done ) | column -t -s "|"