#!/bin/bash resticRestoreSnapshot() { local idx="$1" local snapshot_id="$2" local target_dir="$3" local include_path="$4" if [[ -z "$snapshot_id" || -z "$target_dir" ]]; then isError "resticRestoreSnapshot requires snapshot_id and target_dir" return 1 fi resticEnvExport "$idx" || return 1 runFileOp mkdir -p "$target_dir" local args=(restore "$snapshot_id" --target "$target_dir") [[ -n "$include_path" ]] && args+=(--include "$include_path") isNotice "Restoring ${snapshot_id:0:8} from $(resticLocationName "$idx") → $target_dir" runBackupOp restic "${args[@]}" local rc=$? resticEnvUnset return $rc } resticRestoreAppLatest() { local idx="$1" local app_name="$2" local target_dir="$3" local host="${4:-$CFG_INSTALL_NAME}" local snapshot_id snapshot_id=$(resticSnapshotLatestId "$idx" "$app_name" "$host") if [[ -z "$snapshot_id" ]]; then isError "No snapshot found in $(resticLocationName "$idx") for app=$app_name host=$host" return 1 fi local include_path="$containers_dir$app_name" resticRestoreSnapshot "$idx" "$snapshot_id" "$target_dir" "$include_path" } resticRestoreSystemLatest() { local idx="$1" local target_dir="$2" local host="${3:-$CFG_INSTALL_NAME}" resticEnvExport "$idx" || return 1 local snapshot_id snapshot_id=$(runBackupOp restic snapshots \ --tag "system=config" --host "$host" \ --latest 1 --json --no-lock 2>/dev/null | \ grep -o '"short_id":"[^"]*"' | head -1 | cut -d'"' -f4) resticEnvUnset if [[ -z "$snapshot_id" ]]; then isError "No system-config snapshot found in $(resticLocationName "$idx") for host=$host" return 1 fi # Whole-snapshot restore (the snapshot is just the config tree) into staging. resticRestoreSnapshot "$idx" "$snapshot_id" "$target_dir" }