import gzip import os import shutil import subprocess import sys import tempfile from datetime import datetime def main(): pg_dumpall_cmd = os.environ.get("PG_DUMPALL_CMD", "/usr/bin/pg_dumpall") database_host = os.environ.get("DATABASE_HOST", "localhost") database_port = os.environ.get("DATABASE_PORT", "5432") database_user = os.environ.get("DATABASE_USER", "postgres") try: ssh_host = os.environ["SSH_HOST"] except KeyError: sys.exit( "Error: Please provide a valid ssh host configuration through the SSH_HOST " 'environment variable. E.g. SSH_HOST="user@host:/some/path/"' ) backupfilename = ( f"all-databases-{datetime.now().strftime('%Y-%m-%d_%Hh%Mm%Ss.%A')}.sql" ) with tempfile.TemporaryDirectory() as tmpdirname: backupfilepath = os.path.join(tmpdirname, backupfilename) subprocess.run( [ pg_dumpall_cmd, "-h", database_host, "-p", database_port, "-U", database_user, "-f", backupfilepath, ] ) compressedfilepath = os.path.join(tmpdirname, f"{backupfilename}.gz") with open(backupfilepath, "rb") as backupfile: with gzip.open(compressedfilepath, "wb") as compressedfile: shutil.copyfileobj(backupfile, compressedfile) subprocess.run(["scp", compressedfilepath, ssh_host]) if __name__ == "__main__": main()