forked from coop-cloud/backup-bot-two
		
	fix: select correct latest snapshot to restore
This commit is contained in:
		
							
								
								
									
										24
									
								
								backupbot.py
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								backupbot.py
									
									
									
									
									
								
							| @ -107,24 +107,26 @@ def create(retries): | ||||
|  | ||||
|  | ||||
| @cli.command() | ||||
| @click.option('snapshot', '--snapshot', '-s', envvar='SNAPSHOT', default='latest') | ||||
| @click.option('snapshot_id', '--snapshot', '-s', envvar='SNAPSHOT', default='latest') | ||||
| @click.option('target', '--target', '-t', envvar='TARGET', default='/') | ||||
| @click.option('noninteractive', '--noninteractive', envvar='NONINTERACTIVE', is_flag=True) | ||||
| @click.option('volumes', '--volumes', '-v', envvar='VOLUMES', multiple=True) | ||||
| @click.option('container', '--container', '-c', envvar='CONTAINER', multiple=True) | ||||
| @click.option('no_commands', '--no-commands', envvar='NO_COMMANDS', is_flag=True) | ||||
| def restore(snapshot, target, noninteractive, volumes, container, no_commands): | ||||
| def restore(snapshot_id, target, noninteractive, volumes, container, no_commands): | ||||
|     app_settings = parse_backup_labels('restore', container) | ||||
|     if SERVICE != 'ALL': | ||||
|         app_settings = {SERVICE: app_settings[SERVICE]} | ||||
|     pre_commands, post_commands, backup_paths, apps_versions = get_backup_details(app_settings, volumes) | ||||
|     snapshots = get_snapshots(snapshot_id=snapshot) | ||||
|     if not snapshot: | ||||
|         logger.error(f"No Snapshots with ID {snapshots} for {apps_versions.keys()} found.") | ||||
|     snapshots = get_snapshots(snapshot_id) | ||||
|     if not snapshots: | ||||
|         logger.error(f"No Snapshots with ID {snapshot_id} for {apps_versions.keys()} found.") | ||||
|         exit(1) | ||||
|     snapshot = snapshots[0] | ||||
|     snapshot_id = snapshot['short_id'] | ||||
|     if not noninteractive: | ||||
|         print(f"Snapshot to restore: \t{snapshot}") | ||||
|         restore_app_versions = app_versions_from_tags(snapshots[0].get('tags')) | ||||
|         print(f"Snapshot to restore: \t{snapshot_id}") | ||||
|         restore_app_versions = app_versions_from_tags(snapshot.get('tags')) | ||||
|         print("Apps:") | ||||
|         for app, version in apps_versions.items(): | ||||
|             restore_version = restore_app_versions.get(app) | ||||
| @ -138,7 +140,7 @@ def restore(snapshot, target, noninteractive, volumes, container, no_commands): | ||||
|             print("The following commands will be executed:") | ||||
|             for container, cmd in list(pre_commands.items()) + list(post_commands.items()): | ||||
|                 print(f"\t{container.labels['com.docker.swarm.service.name']}:\t{cmd}") | ||||
|         snapshot_date = datetime.fromisoformat(snapshots[0]['time']) | ||||
|         snapshot_date = datetime.fromisoformat(snapshot['time']) | ||||
|         delta = datetime.now(tz=timezone.utc) - snapshot_date | ||||
|         print(f"This snapshot is {delta} old") | ||||
|         print("\nTHIS COMMAND WILL IRREVERSIBLY OVERWRITES FILES") | ||||
| @ -146,18 +148,18 @@ def restore(snapshot, target, noninteractive, volumes, container, no_commands): | ||||
|         if prompt != 'YES': | ||||
|             logger.error("Restore aborted") | ||||
|             exit(1) | ||||
|     print(f"Restoring Snapshot {snapshot} at {target}") | ||||
|     print(f"Restoring Snapshot {snapshot_id} at {target}") | ||||
|     if not no_commands and pre_commands: | ||||
|         print(f"Run pre commands.") | ||||
|         run_commands(pre_commands) | ||||
|     result = restic_restore(snapshot_id=snapshot, include=backup_paths, target_dir=target) | ||||
|     result = restic_restore(snapshot_id=snapshot_id, include=backup_paths, target_dir=target) | ||||
|     if not no_commands and post_commands: | ||||
|         print(f"Run post commands.") | ||||
|         run_commands(post_commands) | ||||
|     logger.debug(result) | ||||
|  | ||||
|  | ||||
| def restic_restore(snapshot_id='latest', include=[], target_dir=None): | ||||
| def restic_restore(snapshot_id, include=[], target_dir=None): | ||||
|     cmd = restic.cat.base_command() + ['restore', snapshot_id] | ||||
|     for path in include: | ||||
|         cmd.extend(['--include', path]) | ||||
|  | ||||
		Reference in New Issue
	
	Block a user