mirror of
				https://github.com/kevinveenbirkenbach/docker-volume-backup.git
				synced 2025-11-04 10:38:00 +00:00 
			
		
		
		
	Implemented forced file backup
This commit is contained in:
		@@ -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.')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user