From 839c0961995fa06f7c77ab0f88d45b8bb6751ff0 Mon Sep 17 00:00:00 2001 From: Claude DIARRA Date: Wed, 20 Jul 2022 13:44:11 +0200 Subject: [PATCH 1/2] feat: webhook after a successful backup --- README.md | 3 +++ alpine.Dockerfile | 4 +++- backup.sh | 13 +++++++++++++ debian.Dockerfile | 4 +++- 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d6f7f10..a4868ac 100644 --- a/README.md +++ b/README.md @@ -88,6 +88,8 @@ Most variables are the same as in the [official postgres image](https://hub.dock | POSTGRES_USER_FILE | Alternative to POSTGRES_USER, for usage with docker secrets. | | SCHEDULE | [Cron-schedule](http://godoc.org/github.com/robfig/cron#hdr-Predefined_schedules) specifying the interval between postgres backups. Defaults to `@daily`. | | TZ | [POSIX TZ variable](https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html) specifying the timezone used to evaluate SCHEDULE cron (example "Europe/Paris"). | +| WEBHOOK_EXTRA_URL | Extra arguments for the webhook. | +| WEBHOOK_URL | URL to be called after a successful backup. | #### Special Environment Variables @@ -135,3 +137,4 @@ Replace `$BACKUPFILE`, `$VERSION`, `$HOSTNAME`, `$PORT`, `$USERNAME` and `$DBNAM ```sh docker run --rm --tty --interactive -v $BACKUPFILE:/tmp/backupfile.sql.gz postgres:$VERSION /bin/sh -c "zcat /tmp/backupfile.sql.gz | psql --host=$HOSTNAME --port=$PORT --username=$USERNAME --dbname=$DBNAME -W" ``` + diff --git a/alpine.Dockerfile b/alpine.Dockerfile index 51bd847..a63c863 100644 --- a/alpine.Dockerfile +++ b/alpine.Dockerfile @@ -27,7 +27,9 @@ ENV POSTGRES_DB="**None**" \ BACKUP_KEEP_WEEKS=4 \ BACKUP_KEEP_MONTHS=6 \ BACKUP_KEEP_MINS=1440 \ - HEALTHCHECK_PORT=8080 + HEALTHCHECK_PORT=8080 \ + WEBHOOK_URL="**None**" \ + WEBHOOK_EXTRA_ARGS="" COPY backup.sh /backup.sh diff --git a/backup.sh b/backup.sh index ebd481b..53aad44 100755 --- a/backup.sh +++ b/backup.sh @@ -75,12 +75,15 @@ for DB in ${POSTGRES_DBS}; do WFILE="${BACKUP_DIR}/weekly/${WEEKLY_FILENAME}" MFILE="${BACKUP_DIR}/monthly/${MONTHY_FILENAME}" #Create dump + WEBHOOK=true if [ "${POSTGRES_CLUSTER}" = "TRUE" ]; then echo "Creating cluster dump of ${DB} database from ${POSTGRES_HOST}..." pg_dumpall -l "${DB}" ${POSTGRES_EXTRA_OPTS} | gzip > "${FILE}" + if [ $? - ne 0 ]; then WEBHOOK=false; fi else echo "Creating dump of ${DB} database from ${POSTGRES_HOST}..." pg_dump -d "${DB}" -f "${FILE}" ${POSTGRES_EXTRA_OPTS} + if [ $? - ne 0 ]; then WEBHOOK=false; fi fi #Copy (hardlink) for each entry if [ -d "${FILE}" ]; then @@ -115,3 +118,13 @@ for DB in ${POSTGRES_DBS}; do done echo "SQL backup created successfully" + +if [ "${WEBHOOK_URL}" != "**None**" -a ${WEBHOOK} ]; then + echo "Execute post-backup webhook call to ${WEBHOOK_URL}" + curl --request POST \ + --url ${WEBHOOK_URL} \ + --max-time 10 \ + --retry 5 \ + ${WEBHOOK_EXTRA_ARGS} + exit 1 +fi diff --git a/debian.Dockerfile b/debian.Dockerfile index e443193..1b275a3 100644 --- a/debian.Dockerfile +++ b/debian.Dockerfile @@ -42,7 +42,9 @@ ENV POSTGRES_DB="**None**" \ BACKUP_KEEP_WEEKS=4 \ BACKUP_KEEP_MONTHS=6 \ BACKUP_KEEP_MINS=1440 \ - HEALTHCHECK_PORT=8080 + HEALTHCHECK_PORT=8080 \ + WEBHOOK_URL="**None**" \ + WEBHOOK_EXTRA_ARGS="" COPY backup.sh /backup.sh From 6c4d2ce6999f2ed02c19ebea28c539cff1433f03 Mon Sep 17 00:00:00 2001 From: Pau Rodriguez-Estivill Date: Sat, 20 Aug 2022 12:26:52 +0200 Subject: [PATCH 2/2] Remove unneded $? evaluation in a -e script --- backup.sh | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/backup.sh b/backup.sh index 53aad44..16ad501 100755 --- a/backup.sh +++ b/backup.sh @@ -75,15 +75,12 @@ for DB in ${POSTGRES_DBS}; do WFILE="${BACKUP_DIR}/weekly/${WEEKLY_FILENAME}" MFILE="${BACKUP_DIR}/monthly/${MONTHY_FILENAME}" #Create dump - WEBHOOK=true if [ "${POSTGRES_CLUSTER}" = "TRUE" ]; then echo "Creating cluster dump of ${DB} database from ${POSTGRES_HOST}..." pg_dumpall -l "${DB}" ${POSTGRES_EXTRA_OPTS} | gzip > "${FILE}" - if [ $? - ne 0 ]; then WEBHOOK=false; fi else echo "Creating dump of ${DB} database from ${POSTGRES_HOST}..." pg_dump -d "${DB}" -f "${FILE}" ${POSTGRES_EXTRA_OPTS} - if [ $? - ne 0 ]; then WEBHOOK=false; fi fi #Copy (hardlink) for each entry if [ -d "${FILE}" ]; then @@ -119,10 +116,10 @@ done echo "SQL backup created successfully" -if [ "${WEBHOOK_URL}" != "**None**" -a ${WEBHOOK} ]; then +if [ "${WEBHOOK_URL}" != "**None**" ]; then echo "Execute post-backup webhook call to ${WEBHOOK_URL}" curl --request POST \ - --url ${WEBHOOK_URL} \ + --url "${WEBHOOK_URL}" \ --max-time 10 \ --retry 5 \ ${WEBHOOK_EXTRA_ARGS}