From ddb08c8a62c12b049259229e40bdcb3045f81ec7 Mon Sep 17 00:00:00 2001 From: Einar Forselv Date: Tue, 3 Dec 2019 06:24:05 +0100 Subject: [PATCH] Working pg backup --- restic_volume_backup/containers_db.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/restic_volume_backup/containers_db.py b/restic_volume_backup/containers_db.py index decb1b5..9b03c19 100644 --- a/restic_volume_backup/containers_db.py +++ b/restic_volume_backup/containers_db.py @@ -4,6 +4,7 @@ from restic_volume_backup import ( commands, restic, ) +from restic_volume_backup import utils class MariadbContainer(Container): @@ -102,6 +103,7 @@ class PostgresContainer(Container): 'username': self.get_config_env('POSTGRES_USER'), 'password': self.get_config_env('POSTGRES_PASSWORD'), 'port': "5432", + 'database': self.get_config_env('POSTGRES_DB'), } def ping(self) -> bool: @@ -116,7 +118,23 @@ class PostgresContainer(Container): def dump_command(self) -> list: """list: create a dump command restic and use to send data through stdin""" - raise NotImplementedError("Base container class don't implement this") + # NOTE: Backs up a single database from POSTGRES_DB env var + creds = self.get_credentials() + return [ + "pg_dump", + f"--host={creds['host']}", + f"--port={creds['port']}", + f"--username={creds['username']}", + creds['database'], + ] def backup(self): - print("SKIPPING") + config = Config() + creds = self.get_credentials() + + with utils.environment('PGPASSWORD', creds['password']): + return restic.backup_from_stdin( + config.repository, + f"/backup/{self.service_name}/{creds['database']}.sql", + self.dump_command(), + )