2025-12-26 18:13:26 +01:00
|
|
|
from __future__ import annotations
|
|
|
|
|
|
|
|
|
|
import os
|
|
|
|
|
import sys
|
|
|
|
|
|
2026-07-12 14:53:55 +02:00
|
|
|
from .run import docker_volume_exists, run
|
2025-12-26 18:13:26 +01:00
|
|
|
|
|
|
|
|
|
2026-07-12 14:53:55 +02:00
|
|
|
def restore_volume_files(volume_name: str, backup_files_dir: str) -> int:
|
2025-12-26 18:13:26 +01:00
|
|
|
if not os.path.isdir(backup_files_dir):
|
|
|
|
|
print(f"ERROR: backup files dir not found: {backup_files_dir}", file=sys.stderr)
|
|
|
|
|
return 2
|
|
|
|
|
|
|
|
|
|
if not docker_volume_exists(volume_name):
|
|
|
|
|
print(f"Volume {volume_name} does not exist. Creating...")
|
|
|
|
|
run(["docker", "volume", "create", volume_name])
|
|
|
|
|
else:
|
|
|
|
|
print(f"Volume {volume_name} already exists.")
|
|
|
|
|
|
2026-07-12 14:53:55 +02:00
|
|
|
cp = run(
|
|
|
|
|
["docker", "volume", "inspect", "--format", "{{ .Mountpoint }}", volume_name],
|
|
|
|
|
capture=True,
|
2025-12-26 18:13:26 +01:00
|
|
|
)
|
2026-07-12 14:53:55 +02:00
|
|
|
raw = cp.stdout or b""
|
|
|
|
|
mountpoint = (raw.decode() if isinstance(raw, bytes) else raw).strip()
|
|
|
|
|
if not mountpoint:
|
|
|
|
|
print(
|
|
|
|
|
f"ERROR: could not resolve mountpoint for volume {volume_name}",
|
|
|
|
|
file=sys.stderr,
|
|
|
|
|
)
|
|
|
|
|
return 2
|
|
|
|
|
|
|
|
|
|
src = os.path.join(backup_files_dir, "")
|
|
|
|
|
dest = os.path.join(mountpoint, "")
|
|
|
|
|
run(["rsync", "-avv", "--delete", src, dest])
|
2025-12-26 18:13:26 +01:00
|
|
|
print("File restore complete.")
|
|
|
|
|
return 0
|