Implemented forced file backup

This commit is contained in:
Kevin Veen-Birkenbach 2023-12-27 20:46:56 +01:00
parent 7f383fcce2
commit 9dd58f3ee4

View File

@ -7,6 +7,7 @@ import re
import pathlib import pathlib
import pandas import pandas
from datetime import datetime from datetime import datetime
import argparse
class BackupException(Exception): class BackupException(Exception):
"""Generic exception for backup errors.""" """Generic exception for backup errors."""
@ -159,7 +160,12 @@ def is_image_ignored(container, ignored_images):
return True return True
return False return False
def backup_routine_for_volume(volume_name, containers, databases, version_dir, whitelisted_images, versions_dir): def backup_with_containers_paused(volume_name, volume_dir, versions_dir, containers):
stop_containers(containers)
backup_volume(volume_name, volume_dir, versions_dir)
start_containers(containers)
def default_backup_routine_for_volume(volume_name, containers, databases, version_dir, whitelisted_images, versions_dir):
"""Perform backup routine for a given volume.""" """Perform backup routine for a given volume."""
volume_dir="" volume_dir=""
for container in containers: for container in containers:
@ -186,13 +192,19 @@ def backup_routine_for_volume(volume_name, containers, databases, version_dir, w
if volume_dir: if volume_dir:
backup_volume(volume_name, volume_dir, versions_dir) backup_volume(volume_name, volume_dir, versions_dir)
if is_any_image_not_whitelisted(containers, whitelisted_images): if is_any_image_not_whitelisted(containers, whitelisted_images):
stop_containers(containers) backup_with_containers_paused(volume_name, volume_dir, versions_dir, containers)
def force_file_backup_routine_for_volume(volume_name, containers, version_dir, versions_dir):
"""Perform file backup routine for a given volume."""
volume_dir=create_volume_directory(version_dir, volume_name)
backup_volume(volume_name, volume_dir, versions_dir) backup_volume(volume_name, volume_dir, versions_dir)
start_containers(containers) backup_with_containers_paused(volume_name, volume_dir, versions_dir, containers)
def main(): def main():
parser = argparse.ArgumentParser(description='Backup Docker volumes.')
parser.add_argument('--force-file-backup', action='store_true',
help='Force file backup for all volumes, ignoring whitelists and database checks.')
args = parser.parse_args()
print('Start backup routine...') print('Start backup routine...')
dirname = os.path.dirname(__file__) dirname = os.path.dirname(__file__)
repository_name = os.path.basename(dirname) repository_name = os.path.basename(dirname)
@ -214,7 +226,6 @@ def main():
'listmonk', 'listmonk',
'mastodon', 'mastodon',
'matomo', 'matomo',
'memcached',
'nextcloud', 'nextcloud',
'openproject', 'openproject',
'pixelfed', 'pixelfed',
@ -228,8 +239,10 @@ def main():
if not containers: if not containers:
print('Skipped due to no running containers using this volume.') print('Skipped due to no running containers using this volume.')
continue continue
if args.force_file_backup:
backup_routine_for_volume(volume_name, containers, databases, version_dir, stop_and_restart_not_needed, versions_dir) force_file_backup_routine_for_volume(volume_name, containers, version_dir, versions_dir)
else:
default_backup_routine_for_volume(volume_name, containers, databases, version_dir, stop_and_restart_not_needed, versions_dir)
print('Finished volume backups.') print('Finished volume backups.')