Initial commit
This commit is contained in:
55
pirate-backup.py
Normal file
55
pirate-backup.py
Normal file
@@ -0,0 +1,55 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user