From 724537558ea65744d6be823324268ee36ec924f4 Mon Sep 17 00:00:00 2001 From: Franziska Kunsmann Date: Sat, 13 Feb 2021 08:56:35 +0100 Subject: [PATCH] bundles/postgresql: do a database dump before backing up the database --- bundles/postgresql/files/backup-pre-hook | 9 +++++++++ bundles/postgresql/items.py | 13 +++++++++++++ bundles/postgresql/metadata.py | 6 ++++++ 3 files changed, 28 insertions(+) create mode 100644 bundles/postgresql/files/backup-pre-hook diff --git a/bundles/postgresql/files/backup-pre-hook b/bundles/postgresql/files/backup-pre-hook new file mode 100644 index 0000000..9a56a13 --- /dev/null +++ b/bundles/postgresql/files/backup-pre-hook @@ -0,0 +1,9 @@ +#!/bin/bash + +target="/var/tmp/postgresdumps" + +pg_dumpall --globals-only | gzip --quiet --rsyncable >"$target/globals.sql.gz" + +% for db in sorted(databases): +pg_dump -C "${db}" | gzip --quiet --rsyncable >"$target/db_${db}.sql.gz" +% endfor diff --git a/bundles/postgresql/items.py b/bundles/postgresql/items.py index becbcb1..c0e225e 100644 --- a/bundles/postgresql/items.py +++ b/bundles/postgresql/items.py @@ -56,6 +56,19 @@ files = { }, } +# FIXME currently we do not have a mechanism to use snapshot-backups of +# zfs datasets. +if True: # not node.has_bundle('zfs') and node.has_bundle('backup-client'): + files['/etc/backup-pre-hooks.d/90-postgresql-dump-all'] = { + 'source': 'backup-pre-hook', + 'content_type': 'mako', + 'context': { + 'databases': node.metadata.get('postgresql', {}).get('databases', {}).keys(), + }, + 'mode': '0700', + } + directories['/var/tmp/postgresdumps'] = {} + postgres_roles = { 'root': { 'password': repo.vault.password_for('{} postgresql root'.format(node.name)), diff --git a/bundles/postgresql/metadata.py b/bundles/postgresql/metadata.py index 70ebe7a..5027793 100644 --- a/bundles/postgresql/metadata.py +++ b/bundles/postgresql/metadata.py @@ -2,6 +2,9 @@ defaults = { 'backups': { 'paths': { '/var/lib/postgresql', + + # FIXME + '/var/tmp/postgresdumps', }, }, 'icinga2_api': { @@ -32,6 +35,9 @@ if node.has_bundle('zfs'): }, }, } +# FIXME +#else: +# defaults['backups']['paths'].add('/var/tmp/postgresdumps') @metadata_reactor.provides(