56 lines
1.5 KiB
Python
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()
|