Files
clan-core/pkgs/clan-cli/clan_cli/backups/create.py
2023-12-06 17:13:58 +01:00

45 lines
1.5 KiB
Python

import argparse
import json
import subprocess
from ..errors import ClanError
from ..machines.machines import Machine
def create_backup(machine: Machine, provider: str | None = None) -> None:
backup_scripts = json.loads(
machine.eval_nix(f"nixosConfigurations.{machine.name}.config.clanCore.backups")
)
if provider is None:
for provider in backup_scripts["providers"]:
proc = subprocess.run(
["bash", "-c", backup_scripts["providers"][provider]["start"]],
)
if proc.returncode != 0:
raise ClanError("failed to start backup")
else:
print("successfully started backup")
else:
if provider not in backup_scripts["providers"]:
raise ClanError(f"provider {provider} not found")
proc = subprocess.run(
["bash", "-c", backup_scripts["providers"][provider]["start"]],
)
if proc.returncode != 0:
raise ClanError("failed to start backup")
else:
print("successfully started backup")
def create_command(args: argparse.Namespace) -> None:
machine = Machine(name=args.machine, flake_dir=args.flake)
create_backup(machine=machine, provider=args.provider)
def register_create_parser(parser: argparse.ArgumentParser) -> None:
parser.add_argument(
"machine", type=str, help="machine in the flake to create backups of"
)
parser.add_argument("--provider", type=str, help="backup provider to use")
parser.set_defaults(func=create_command)