pirate-backup/pirate-backup.py
2023-03-01 19:30:14 +01:00

56 lines
1.5 KiB
Python

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()