Update PgBackRest wrapper script and move the config data into separate folder
This commit is contained in:
2
.shellcheckrc
Normal file
2
.shellcheckrc
Normal file
@@ -0,0 +1,2 @@
|
||||
shell=bash
|
||||
external-sources=true
|
||||
32
ReadMe.md
32
ReadMe.md
@@ -2,16 +2,40 @@
|
||||
|
||||
Wrapper to call the full/differential backup on all stanzas
|
||||
|
||||
> [!notice]
|
||||
> Currently all stanzas are hardoded, this should change
|
||||
|
||||
## Options
|
||||
|
||||
```txt
|
||||
-b (backuptype): full/diff
|
||||
-s (stanza): override stanza name, must be in list
|
||||
-s (stanza): override stanza name, must be in stanza.cfg file
|
||||
-l list available stanza
|
||||
-t test run
|
||||
```
|
||||
|
||||
Either `-l` or `-b` option must be set
|
||||
|
||||
## Config
|
||||
|
||||
Two files must be created
|
||||
|
||||
### `config/pgbackrest.cfg`
|
||||
|
||||
Example file is `pgbackrest.sample.cfg`
|
||||
|
||||
This file holds the sudo_user for calling the commands
|
||||
|
||||
```ini
|
||||
[PgBackRest]
|
||||
sudo_user=pgbackrest
|
||||
```
|
||||
|
||||
### `config/stanza.cfg`
|
||||
|
||||
Example file is `stanza.sample.cfg`
|
||||
|
||||
This files holds the stanzas to backup
|
||||
|
||||
```ini
|
||||
[stanzas]
|
||||
stanza_a
|
||||
stanza_b
|
||||
```
|
||||
|
||||
@@ -49,36 +49,54 @@ function convert_time
|
||||
|
||||
## VARIABLES
|
||||
|
||||
REGEX_COMMENT="^[\ \t]*#";
|
||||
INI_BLOCK="^\[[A-Za-z]*\]";
|
||||
BASE_FOLDER=$(dirname "$(readlink -f "$0")")"/";
|
||||
CONFIG="${BASE_FOLDER}../config/";
|
||||
BACKUP_TYPE="";
|
||||
OVERRIDE_STANZA="";
|
||||
LIST_STANZA=0;
|
||||
TEST=0;
|
||||
sudo_user="pgbackrest";
|
||||
# testweb (replaces kome) (aws2/ohio)
|
||||
# zac fte (aws2/tokyo)
|
||||
# sushi database
|
||||
# udon core
|
||||
# mailing-service-a (aws2/oregon)
|
||||
# url-redirect-logging (aws9/tokyo)
|
||||
# mrktsec (aws3/tokyo)
|
||||
# instawin (aws8/tokyo)
|
||||
stanza_list="testwebegplusww zacfte sushidatabase udoncore mailingservicea urlredirectlogging mrktsec instawin";
|
||||
config_file="${CONFIG}pgbackrest.cfg";
|
||||
stanza_file="${CONFIG}stanza.cfg";
|
||||
if [ -f "${config_file}" ]; then
|
||||
# shellcheck disable=SC1090
|
||||
# shellcheck disable=SC2283
|
||||
source <(grep = "${config_file}" | sed 's/ *= */=/g')
|
||||
else
|
||||
echo "Missing config file ${config_file}";
|
||||
exit;
|
||||
fi;
|
||||
if [ -z "${sudo_user}" ]; then
|
||||
echo "sudo_user not set in the config file ${config_file}";
|
||||
exit;
|
||||
fi;
|
||||
# stanza list file
|
||||
if [ ! -f "${stanza_file}" ]; then
|
||||
echo "Missing stanza config file ${stanza_file}";
|
||||
exit;
|
||||
fi;
|
||||
|
||||
PRINTF_BLOCK="=== [%-8s: %19s] ==[%s]===============>\n";
|
||||
|
||||
## OPT PARSEIN
|
||||
|
||||
while getopts ":b:s:lt" opt; do
|
||||
case "${opt}" in
|
||||
b) # backuptype
|
||||
b)
|
||||
# backuptype
|
||||
BACKUP_TYPE="${OPTARG}";
|
||||
;;
|
||||
s) # stanza
|
||||
s)
|
||||
# stanza
|
||||
OVERRIDE_STANZA="${OPTARG}";
|
||||
;;
|
||||
l) # list
|
||||
l)
|
||||
# list
|
||||
LIST_STANZA=1;
|
||||
;;
|
||||
t) # test
|
||||
t)
|
||||
# test
|
||||
TEST=1;
|
||||
;;
|
||||
:)
|
||||
@@ -106,6 +124,23 @@ if [ $LIST_STANZA -eq 1 ]; then
|
||||
for stanza in ${stanza_list}; do
|
||||
echo "${stanza}";
|
||||
done;
|
||||
while read -r stanza; do
|
||||
# skip empty
|
||||
[ -z "${stanza}" ] && continue;
|
||||
# skip starting with #
|
||||
[[ "${stanza}" =~ ${REGEX_COMMENT} ]] && continue;
|
||||
# skip the ini header blocks
|
||||
[[ "${stanza}" =~ ${INI_BLOCK} ]] && continue;
|
||||
# if override stanza matching
|
||||
if [ "${stanza}" = "${OVERRIDE_STANZA}" ]; then
|
||||
echo "[*] ${stanza}";
|
||||
else
|
||||
echo "[ ] ${stanza}";
|
||||
fi;
|
||||
done <<< "$(cat "${stanza_file}")";
|
||||
echo "";
|
||||
echo "Entry marked with '*' is set as override stanza, and will be the only one backed up";
|
||||
echo "";
|
||||
exit;
|
||||
fi;
|
||||
|
||||
@@ -124,20 +159,40 @@ SET_OVERRIDE_STANZA=0;
|
||||
# if we have override single host
|
||||
if [ -n "${OVERRIDE_STANZA}" ]; then
|
||||
echo "+ Set override stanza too: ${OVERRIDE_STANZA}";
|
||||
for stanza in ${stanza_list}; do
|
||||
while read -r stanza; do
|
||||
# skip empty
|
||||
[ -z "${stanza}" ] && continue;
|
||||
# skip starting with #
|
||||
[[ "${stanza}" =~ ${REGEX_COMMENT} ]] && continue;
|
||||
# skip the ini header blocks
|
||||
[[ "${stanza}" =~ ${INI_BLOCK} ]] && continue;
|
||||
# if override stanza matching
|
||||
if [ "${stanza}" = "${OVERRIDE_STANZA}" ]; then
|
||||
stanza_list="${OVERRIDE_STANZA}";
|
||||
SET_OVERRIDE_STANZA=1;
|
||||
break;
|
||||
fi;
|
||||
done;
|
||||
done <<< "$(cat "${stanza_file}")";
|
||||
if [ $SET_OVERRIDE_STANZA = 0 ]; then
|
||||
echo "[!!!] Failed to set override stanza: ${OVERRIDE_STANZA}";
|
||||
exit;
|
||||
fi;
|
||||
fi;
|
||||
# run backup
|
||||
for stanza in ${stanza_list}; do
|
||||
while read -r stanza; do
|
||||
# skip empty
|
||||
[ -z "${stanza}" ] && continue;
|
||||
# skip starting with #
|
||||
[[ "${stanza}" =~ ${REGEX_COMMENT} ]] && continue;
|
||||
# skip the ini header blocks
|
||||
[[ "${stanza}" =~ ${INI_BLOCK} ]] && continue;
|
||||
# override stanza check
|
||||
if [ -n "${OVERRIDE_STANZA}" ]; then
|
||||
if [ "${stanza}" != "${OVERRIDE_STANZA}" ]; then
|
||||
continue
|
||||
fi;
|
||||
fi;
|
||||
# main backup start
|
||||
START=$(date +'%s');
|
||||
# shellcheck disable=SC2059
|
||||
printf "${PRINTF_BLOCK}" "START" "$(date +'%F %T')" "${stanza}";
|
||||
@@ -145,12 +200,12 @@ for stanza in ${stanza_list}; do
|
||||
if [ $TEST -eq 1 ]; then
|
||||
echo "sudo -u ${sudo_user} pgbackrest --type=${BACKUP_TYPE} --stanza=${stanza} backup;";
|
||||
else
|
||||
sudo -u ${sudo_user} pgbackrest --type="${BACKUP_TYPE}" --stanza="${stanza}" backup;
|
||||
sudo -u "${sudo_user}" pgbackrest --type="${BACKUP_TYPE}" --stanza="${stanza}" backup;
|
||||
fi;
|
||||
DURATION=$(( $(date +'%s')-START ));
|
||||
# shellcheck disable=SC2059
|
||||
printf "${PRINTF_BLOCK}" "END" "$(convert_time ${DURATION})" "${stanza}";
|
||||
done;
|
||||
done <<< "$(cat "${stanza_file}")";
|
||||
echo "* PgBackrest Backup end";
|
||||
if [ $TEST -eq 1 ]; then
|
||||
echo "[..........] TEST RUN ONLY";
|
||||
|
||||
3
config/.gitignore
vendored
Normal file
3
config/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
pgbackrest.cfg
|
||||
stanza.cfg
|
||||
!.gitignore
|
||||
2
config/pgbackrest.sample.cfg
Normal file
2
config/pgbackrest.sample.cfg
Normal file
@@ -0,0 +1,2 @@
|
||||
[PgBackRest]
|
||||
sudo_user=pgbackrest
|
||||
3
config/stanza.sample.cfg
Normal file
3
config/stanza.sample.cfg
Normal file
@@ -0,0 +1,3 @@
|
||||
[stanzas]
|
||||
stanza_a
|
||||
stanza_b
|
||||
Reference in New Issue
Block a user