1 Commits

4 changed files with 43 additions and 1 deletions

View File

@@ -34,11 +34,16 @@ Example file is `stanza.sample.cfg`
This files holds the stanzas to backup This files holds the stanzas to backup
`stanza:repo number:path to config file`
If the stanza has several repo settings as in "repo1-...", "repo2-..." then the repo to target can be listed in here by ":repo number" If the stanza has several repo settings as in "repo1-...", "repo2-..." then the repo to target can be listed in here by ":repo number"
The third optional parameter is a config file path
```ini ```ini
[stanzas] [stanzas]
stanza_a stanza_a
stanza_b:1 stanza_b:1
stanza_b:2 stanza_b:2
stanza_c::/etc/to/config
``` ```

View File

@@ -71,6 +71,10 @@ if [ -z "${sudo_user}" ]; then
echo "sudo_user not set in the config file ${config_file}"; echo "sudo_user not set in the config file ${config_file}";
exit; exit;
fi; fi;
if [ -z "${pgbackrest_config}" ] ||[ ! -f "${pgbackrest_config}" ]; then
echo "Missing pgbackrest default config file ${pgbackrest_config}";
exit;
fi;
# stanza list file # stanza list file
if [ ! -f "${stanza_file}" ]; then if [ ! -f "${stanza_file}" ]; then
echo "Missing stanza config file ${stanza_file}"; echo "Missing stanza config file ${stanza_file}";
@@ -179,6 +183,8 @@ while read -r stanza; do
# split into the name and repo list # split into the name and repo list
stanza_name=$(echo "${stanza}" | cut -d ":" -f 1); stanza_name=$(echo "${stanza}" | cut -d ":" -f 1);
stanza_repo=$(echo "${stanza}" | awk -F':' '{print (NF>1) ? $2 : ""}'); stanza_repo=$(echo "${stanza}" | awk -F':' '{print (NF>1) ? $2 : ""}');
# if we have a config
stanza_config=$(echo "${stanza}" | awk -F':' '{print (NF>1) ? $3 : ""}');
# override stanza check # override stanza check
if [ -n "${OVERRIDE_STANZA}" ]; then if [ -n "${OVERRIDE_STANZA}" ]; then
# skip if not matching name # skip if not matching name
@@ -187,20 +193,49 @@ while read -r stanza; do
fi; fi;
# if we have repo set, check if repo is matching # if we have repo set, check if repo is matching
OVERRIDE_STANZA_REPO=$(echo "${OVERRIDE_STANZA}" | awk -F':' '{print (NF>1) ? $2 : ""}'); OVERRIDE_STANZA_REPO=$(echo "${OVERRIDE_STANZA}" | awk -F':' '{print (NF>1) ? $2 : ""}');
if [ -n "${OVERRIDE_STANZA_REPO}" ] && [ -n "${stanza_repo}" ] && [ "${stanza_repo}" != "${OVERRIDE_STANZA_REPO}" ]; then if [ -n "${OVERRIDE_STANZA_REPO}" ] && [ "${stanza_repo}" != "${OVERRIDE_STANZA_REPO}" ]; then
continue continue
fi; fi;
# set repo from override # set repo from override
stanza_repo="${OVERRIDE_STANZA_REPO}"; stanza_repo="${OVERRIDE_STANZA_REPO}";
OVERRIDE_STANZA_CONFIG=$(echo "${OVERRIDE_STANZA}" | awk -F':' '{print (NF>2) ? $3 : ""}');
# if we have a config set in the stanza config, but none in the override, use the one from the stanza config
if [ -z "${OVERRIDE_STANZA_CONFIG}" ] && [ -n "${stanza_config}" ]; then
OVERRIDE_STANZA_CONFIG="${stanza_config}";
else
stanza_config="${OVERRIDE_STANZA_CONFIG}";
fi;
fi; fi;
# build the call command # build the call command
CALL=( CALL=(
"sudo" "-u" "${sudo_user}" "sudo" "-u" "${sudo_user}"
"pgbackrest" "--type=${BACKUP_TYPE}" "--stanza=${stanza_name}" "pgbackrest" "--type=${BACKUP_TYPE}" "--stanza=${stanza_name}"
); );
_stanza_config="${pgbackrest_config}";
if [ -f "${stanza_config}" ]; then
_stanza_config="${stanza_config}";
fi;
stanza_check=$(grep -E "^\[${stanza_name}\]$" "${_stanza_config}");
if [ -z "${stanza_check}" ]; then
echo "[!] Stanza ${stanza_name} not found in config file ${_stanza_config}, skipping stanza";
continue;
fi;
if [ -n "${stanza_repo}" ]; then if [ -n "${stanza_repo}" ]; then
# check if repo exists in config file with "repo<number>-"
repo_check=$(grep -E "^repo${stanza_repo}-" "${_stanza_config}");
if [ -z "${repo_check}" ]; then
echo "[!] Stanza repo ${stanza_repo} for stanza ${stanza_name} not found in config file ${_stanza_config}, skipping stanza";
continue;
fi;
CALL=("${CALL[@]}" "--repo=${stanza_repo}"); CALL=("${CALL[@]}" "--repo=${stanza_repo}");
fi; fi;
if [ -n "${stanza_config}" ]; then
if [ ! -f "${stanza_config}" ]; then
echo "[!] Stanza config file ${stanza_config} for stanza ${stanza_name} not found, skipping stanza";
continue;
fi;
CALL=("${CALL[@]}" "--config=${stanza_config}");
fi;
CALL=("${CALL[@]}" "backup"); CALL=("${CALL[@]}" "backup");
# main backup start # main backup start
START=$(date +'%s'); START=$(date +'%s');

View File

@@ -1,2 +1,3 @@
[PgBackRest] [PgBackRest]
sudo_user=postgres sudo_user=postgres
pgbackrest_config=/etc/pgbackrest.conf

View File

@@ -2,3 +2,4 @@
stanza_a stanza_a
stanza_b:1 stanza_b:1
stanza_b:2 stanza_b:2
stanca_c::/path/to/config/file