Compare commits

...

3 Commits

View File

@@ -44,16 +44,14 @@ def get_machine_id():
### GLOBAL CONFIGURATION ### ### GLOBAL CONFIGURATION ###
# Container names treated as special instances for database backups # Container names treated as special instances for database backups
SPECIAL_INSTANCES = ['central-mariadb', 'central-postgres'] DATABASE_CONTAINERS = ['central-mariadb', 'central-postgres']
# Images which do not require container stop for file backups # Images which do not require container stop for file backups
IMAGES_NO_STOP_REQUIRED = [] IMAGES_NO_STOP_REQUIRED = []
# Images to skip entirely # Images to skip entirely
IMAGES_NO_BACKUP_REQUIRED = [ IMAGES_NO_BACKUP_REQUIRED = []
'redis',
'memcached'
]
# Compose dirs requiring hard restart # Compose dirs requiring hard restart
DOCKER_COMPOSE_HARD_RESTART_REQUIRED = ['mailu'] DOCKER_COMPOSE_HARD_RESTART_REQUIRED = ['mailu']
@@ -70,7 +68,7 @@ VERSION_DIR = create_version_directory()
def get_instance(container): def get_instance(container):
"""Extract the database instance name based on container name.""" """Extract the database instance name based on container name."""
if container in SPECIAL_INSTANCES: if container in DATABASE_CONTAINERS:
instance_name = container instance_name = container
else: else:
instance_name = re.split("(_|-)(database|db|postgres)", container)[0] instance_name = re.split("(_|-)(database|db|postgres)", container)[0]
@@ -224,7 +222,7 @@ def change_containers_status(containers, status):
print(f"No containers to {status}.") print(f"No containers to {status}.")
def is_image_whitelisted(container, images): def is_image_whitelisted(container, images):
info = (container)[0] info = get_image_info(container)[0]
return any(img in info for img in images) return any(img in info for img in images)
def is_container_stop_required(containers): def is_container_stop_required(containers):
@@ -311,7 +309,7 @@ def handle_docker_compose_services(parent_directory):
print(f"No docker-compose.yml found in {dir_path}. Skipping.") print(f"No docker-compose.yml found in {dir_path}. Skipping.")
def main(): def main():
global SPECIAL_INSTANCES, IMAGES_NO_STOP_REQUIRED global DATABASE_CONTAINERS, IMAGES_NO_STOP_REQUIRED
parser = argparse.ArgumentParser(description='Backup Docker volumes.') parser = argparse.ArgumentParser(description='Backup Docker volumes.')
parser.add_argument('--everything', action='store_true', parser.add_argument('--everything', action='store_true',
help='Force file backup for all volumes and additional execute database dumps') help='Force file backup for all volumes and additional execute database dumps')
@@ -320,19 +318,28 @@ def main():
parser.add_argument('--compose-dir', type=str, required=True, parser.add_argument('--compose-dir', type=str, required=True,
help='Path to the parent directory containing docker-compose setups') help='Path to the parent directory containing docker-compose setups')
parser.add_argument( parser.add_argument(
'--special-instances', '--database-containers',
nargs='+', nargs='+',
default=SPECIAL_INSTANCES, required=True,
help='List of container names treated as special instances for database backups' help='List of container names treated as special instances for database backups'
) )
parser.add_argument( parser.add_argument(
'--images-no-stop-required', '--images-no-stop-required',
nargs='+', nargs='+',
required=True,
help='List of image names for which containers should not be stopped during file backup' help='List of image names for which containers should not be stopped during file backup'
) )
parser.add_argument(
'--images-no-backup-required',
nargs='+',
help='List of image names for which no backup should be performed (optional)'
)
args = parser.parse_args() args = parser.parse_args()
SPECIAL_INSTANCES = args.special_instances DATABASE_CONTAINERS = args.DATABASE_CONTAINERS
IMAGES_NO_STOP_REQUIRED = args.images_no_stop_required IMAGES_NO_STOP_REQUIRED = args.images_no_stop_required
if args.images_no_backup_required is not None:
global IMAGES_NO_BACKUP_REQUIRED
IMAGES_NO_BACKUP_REQUIRED = args.images_no_backup_required
print('Start volume backups...') print('Start volume backups...')
volume_names = execute_shell_command("docker volume ls --format '{{.Name}}'") volume_names = execute_shell_command("docker volume ls --format '{{.Name}}'")