diff --git a/backupper.py b/backupper.py index 6c8835a..9ef375c 100644 --- a/backupper.py +++ b/backupper.py @@ -5,17 +5,14 @@ import subprocess from datetime import datetime parser = argparse.ArgumentParser(description='Backup manager for backing up Docker Containers to Google Drive.') -#group = parser.add_mutually_exclusive_group(required=True) -# parser.add_argument('--export', action='store_true', help="Back up the Docker Container with the load method.") -# parser.add_argument('--containers', action='store_true', type=list, help="Back up the Docker Container with the -# load method.", required=True) parser.add_argument('--containers', nargs='+', required=True) parser.add_argument('--data', required=False) +parser.add_argument('--backup', required=True, help='Backup target directory.') +parser.add_argument('--export', required=True, help='Compressed backup file target directory.') parser.add_argument('--upload', action='store_true', required=False) +parser.add_argument('--clean', action='store_true', required=False) -#sub = parser.add_subparsers(help='Backup mysql databases.') -#mysql_parser = sub.add_parser mysql_parser = parser.add_argument_group('mysql') mysql_parser.add_argument('--mysql', required=False, help='MySql container name or id') mysql_parser.add_argument('--user', required=False, help='MySql username') @@ -28,10 +25,12 @@ mysql = args.mysql user = args.user password = args.password upload = args.upload +folder = args.backup +export = args.export +clean = args.clean def clear_backup(): - folder = 'backup' for filename in os.listdir(folder): file_path = os.path.join(folder, filename) try: @@ -54,14 +53,14 @@ def runcommand(cmd): if containers: - if not os.path.exists('backup'): - os.mkdir('backup') + if not os.path.exists(folder): + os.mkdir(folder) clear_backup() for container in containers: print 'Backing up ' + container + '...' - exitCode = runcommand("docker export " + container + " -o backup/" + container + ".tar.gz") + exitCode = runcommand("docker export " + container + " -o " + folder + "/" + container + ".tar.gz") if exitCode[0] is 0: print container + ' successfully backed up.' else: @@ -73,7 +72,7 @@ if data: print 'Data folder is not exist.' print 'Backing up data folder...' - exitCode = runcommand("tar -zcf backup/data.tar.gz " + data) + exitCode = runcommand("tar -zcf " + folder + "/data.tar.gz " + data) if exitCode[0] is 0: print 'Data folder successfully backed up.' else: @@ -89,7 +88,7 @@ if mysql: print 'Backing up MySql databases...' exitCode = runcommand("docker exec " + mysql + " /usr/bin/mysqldump -u " + user + " --password=" + password - + " --all-databases > backup/backup.sql") + + " --all-databases > " + folder + "/backup.sql") if exitCode[0] is 0: print 'MySql databases successfully backed up.' else: @@ -98,19 +97,29 @@ if mysql: if upload: backup_name = datetime.now().strftime("%d-%m-%Y_%H-%M-%S") + backup_path = export + "/backup_" + backup_name + ".tar.gz" print 'Preparing for backup...' - exitCode = runcommand("tar -zcf backup_" + backup_name + ".tar.gz backup") + + if not os.path.exists(export): + os.mkdir(export) + + exitCode = runcommand("tar -zcf " + backup_path + " " + folder) if exitCode[0] is 0: print 'Preparing successfully.' print 'Uploading...' - exitCode = runcommand("mega-put backup_" + backup_name + ".tar.gz /backup/backup_" + backup_name + ".tar.gz") + exitCode = runcommand("mega-put " + backup_path + " /backup/backup_" + backup_name + ".tar.gz") if exitCode[0] is 0: print 'Upload successful.' else: print 'Upload failed.' print exitCode[2] - if os.path.exists("backup_" + backup_name + ".tar.gz"): - os.remove("backup_" + backup_name + ".tar.gz") else: print 'Preparing failed.' print exitCode[2] + +if clean: + if os.path.exists(folder): + shutil.rmtree(folder) + + if os.path.exists(export): + shutil.rmtree(export)