diff --git a/omv_backup.py b/omv_backup.py index 426c6d4..256e198 100644 --- a/omv_backup.py +++ b/omv_backup.py @@ -166,101 +166,107 @@ print(f"Port {port} on {BACKUP_HOST} is open.") print("Starting") if _RESTORE: - topic = "sectorq/omv/restore/{}".format(_APP) - client.connect(broker,1883,60) - msg = {"status":"inactive","bak_name":_APP,"start_time":"inactive","end_time":"inactive","progress":0} - - client.publish(topic, json.dumps(msg)) - client.disconnect() - now = datetime.datetime.now() - BACKUP_HOST = "root@omv.home.lan" - BACKUP_DEVICE = "/srv/dev-disk-by-uuid-2f843500-95b6-43b0-bea1-9b67032989b8" - BACKUP_DIR = f"/backup/{host}" - NEW_BACKUP_DIR = f"/backup/m-server/docker_data/latest/{_APP}" - DATETIME = now.strftime("%Y-%m-%d_%H-%M-%S") - SOURCE_DIR = f"/share/docker_data/" - if _FIRST: - BACKUP_PATH="{}/initial".format(BACKUP_DIR) + if _APP == "all": + _APP = ["nginx","ha","gitlab","mailu"] else: - BACKUP_PATH="{}/{}".format(BACKUP_DIR, DATETIME) - LATEST_LINK="{}/latest".format(BACKUP_DIR) - FULL_BACKUP_LATEST = f"{NEW_BACKUP_DIR}/latest" - LATEST_LINK = f"/{host}/{_APP}/latest" - - - msg = {"status":"started","bak_name":_APP,"start_time":DATETIME,"end_time":"in progress", "progress":0} - client.connect(broker,1883,60) - client.publish(topic, json.dumps(msg)) - client.disconnect() - - print("Create backup dir") - print(cmnd) - - - #cmnd = "rsync -av --delete {}/ --link-dest {} --exclude=\".cache\" {}".format(SOURCE_DIR, LATEST_LINK, BACKUP_PATH) - cmnd = f"rsync -avz --delete rsync://{BACKUP_HOST}{NEW_BACKUP_DIR} {SOURCE_DIR}" - - - - - ans = "y" - print(cmnd) - print("Sync files") - if _TEST: - ans = input("continue?") or "n" - if ans == "y" and _EXECUTE: - status, output = subprocess.getstatusoutput(cmnd) + _APP = _APP.split(",") - if _APP == "nginx": - print("Stopping docker") - cmnd = "docker stop nginx-app-1" - status, output = subprocess.getstatusoutput(cmnd) - domains = ["sectorq.eu","gitlab.sectorq.eu","ha.sectorq.eu","mail.sectorq.eu","pw.sectorq.eu","semaphore.sectorq.eu","kestra.sectorq.eu","auth.sectorq.eu"] - for d in domains: - cmnd = f'sqlite3 /share/docker_data/nginx/data/database.sqlite "UPDATE proxy_host SET forward_host = \'{IP}\' WHERE domain_names = \'[\\"{d}\\"]\'"' - print(cmnd) - status, output = subprocess.getstatusoutput(cmnd) - cmnd = 'egrep -l "# kestra.sectorq.eu|# auth.sectorq.eu|# ha.sectorq.eu|# pw.sectorq.eu|# semaphore.sectorq.eu|# sectorq.eu|# gitlab.sectorq.eu|# ha.sectorq.eu" /share/docker_data/nginx/data/nginx/proxy_host/*' - status, output = subprocess.getstatusoutput(cmnd) - print(output.splitlines()) - for file in output.splitlines(): - print(file) - f = open(file) - contents = f.read() - f.close() - regex = re.compile(r'\n\s+set \$server\s+\"\w+.\w+.\w+.\w+\";') - contents = re.sub(regex, f'\n set $server \"{IP}\";', contents) - #print(contents) - print(regex) - f = open(file, "w") - contents = f.write(contents) - f.close() - status, output = subprocess.getstatusoutput(cmnd) - print("Starting docker") - cmnd = "docker start nginx-app-1" - status, output = subprocess.getstatusoutput(cmnd) - now = datetime.datetime.now() - ENDTIME = now.strftime("%Y-%m-%d_%H:%M:%S") - msg = {"status":"finished","bak_name":_APP,"start_time":DATETIME,"end_time":ENDTIME,"progress":0} - client.connect(broker,1883,10) - client.publish(topic, json.dumps(msg)) - client.disconnect() + for app in _APP: + topic = "sectorq/omv/restore/{}".format(app) + client.connect(broker,1883,60) + msg = {"status":"inactive","bak_name":app,"start_time":"inactive","end_time":"inactive","progress":0} - print("Getting size of FS") - #cmnd = "du -h --max-depth=0 {}".format(BACKUP_FS) - cmnd = "ssh root@omv.home.lan 'df -h /srv/dev-disk-by-uuid-2f843500-95b6-43b0-bea1-9b67032989b8|awk '\\''{ print $3 }'\\''|tail -1'" - print(cmnd) - status, output = subprocess.getstatusoutput(cmnd) - used_space = (output.split())[0] - now = datetime.datetime.now() - ENDJOB = now.strftime("%Y-%m-%d_%H:%M:%S") - print("Size : {}".format(used_space)) - print("Sending finished status") - msg = {"mode":_MODE,"status":"finished","bak_name":"complete","start_time":STARTTIME,"end_time":ENDJOB,"progress":0,"used_space":used_space} - print(msg) - client.connect(broker,1883,10) - client.publish(topic_sum, json.dumps(msg)) - client.disconnect() + client.publish(topic, json.dumps(msg)) + client.disconnect() + now = datetime.datetime.now() + BACKUP_HOST = "root@omv.home.lan" + BACKUP_DEVICE = "/srv/dev-disk-by-uuid-2f843500-95b6-43b0-bea1-9b67032989b8" + BACKUP_DIR = f"/backup/{host}" + NEW_BACKUP_DIR = f"/backup/m-server/docker_data/latest/{app}" + DATETIME = now.strftime("%Y-%m-%d_%H-%M-%S") + SOURCE_DIR = f"/share/docker_data/" + if _FIRST: + BACKUP_PATH="{}/initial".format(BACKUP_DIR) + else: + BACKUP_PATH="{}/{}".format(BACKUP_DIR, DATETIME) + LATEST_LINK="{}/latest".format(BACKUP_DIR) + FULL_BACKUP_LATEST = f"{NEW_BACKUP_DIR}/latest" + LATEST_LINK = f"/{host}/{app}/latest" + + + msg = {"status":"started","bak_name":app,"start_time":DATETIME,"end_time":"in progress", "progress":0} + client.connect(broker,1883,60) + client.publish(topic, json.dumps(msg)) + client.disconnect() + + print("Create backup dir") + print(cmnd) + + + #cmnd = "rsync -av --delete {}/ --link-dest {} --exclude=\".cache\" {}".format(SOURCE_DIR, LATEST_LINK, BACKUP_PATH) + cmnd = f"rsync -avz --delete rsync://{BACKUP_HOST}{NEW_BACKUP_DIR} {SOURCE_DIR}" + + + + + ans = "y" + print(cmnd) + print("Sync files") + if _TEST: + ans = input("continue?") or "n" + if ans == "y" and _EXECUTE: + status, output = subprocess.getstatusoutput(cmnd) + + if _APP == "nginx": + print("Stopping docker") + cmnd = "docker stop nginx-app-1" + status, output = subprocess.getstatusoutput(cmnd) + domains = ["sectorq.eu","gitlab.sectorq.eu","ha.sectorq.eu","mail.sectorq.eu","pw.sectorq.eu","semaphore.sectorq.eu","kestra.sectorq.eu","auth.sectorq.eu"] + for d in domains: + cmnd = f'sqlite3 /share/docker_data/nginx/data/database.sqlite "UPDATE proxy_host SET forward_host = \'{IP}\' WHERE domain_names = \'[\\"{d}\\"]\'"' + print(cmnd) + status, output = subprocess.getstatusoutput(cmnd) + cmnd = 'egrep -l "# kestra.sectorq.eu|# auth.sectorq.eu|# ha.sectorq.eu|# pw.sectorq.eu|# semaphore.sectorq.eu|# sectorq.eu|# gitlab.sectorq.eu|# ha.sectorq.eu" /share/docker_data/nginx/data/nginx/proxy_host/*' + status, output = subprocess.getstatusoutput(cmnd) + print(output.splitlines()) + for file in output.splitlines(): + print(file) + f = open(file) + contents = f.read() + f.close() + regex = re.compile(r'\n\s+set \$server\s+\"\w+.\w+.\w+.\w+\";') + contents = re.sub(regex, f'\n set $server \"{IP}\";', contents) + #print(contents) + print(regex) + f = open(file, "w") + contents = f.write(contents) + f.close() + status, output = subprocess.getstatusoutput(cmnd) + print("Starting docker") + cmnd = "docker start nginx-app-1" + status, output = subprocess.getstatusoutput(cmnd) + now = datetime.datetime.now() + ENDTIME = now.strftime("%Y-%m-%d_%H:%M:%S") + msg = {"status":"finished","bak_name":app,"start_time":DATETIME,"end_time":ENDTIME,"progress":0} + client.connect(broker,1883,10) + client.publish(topic, json.dumps(msg)) + client.disconnect() + + print("Getting size of FS") + #cmnd = "du -h --max-depth=0 {}".format(BACKUP_FS) + cmnd = "ssh root@omv.home.lan 'df -h /srv/dev-disk-by-uuid-2f843500-95b6-43b0-bea1-9b67032989b8|awk '\\''{ print $3 }'\\''|tail -1'" + print(cmnd) + status, output = subprocess.getstatusoutput(cmnd) + used_space = (output.split())[0] + now = datetime.datetime.now() + ENDJOB = now.strftime("%Y-%m-%d_%H:%M:%S") + print("Size : {}".format(used_space)) + print("Sending finished status") + msg = {"mode":_MODE,"status":"finished","bak_name":"complete","start_time":STARTTIME,"end_time":ENDJOB,"progress":0,"used_space":used_space} + print(msg) + client.connect(broker,1883,10) + client.publish(topic_sum, json.dumps(msg)) + client.disconnect() if _MODE == "auto": cmnd = "ssh root@omv.home.lan 'systemctl suspend &'"