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