Files
clan-core/pkgs/clan-cli/clan_cli/flash.py
2024-02-07 05:26:01 +01:00

63 lines
1.6 KiB
Python

import argparse
import importlib
import logging
from dataclasses import dataclass
from pathlib import Path
from tempfile import TemporaryDirectory
from .machines.machines import Machine
from .secrets.generate import generate_secrets
log = logging.getLogger(__name__)
def flash_machine(machine: Machine, device: str | None = None) -> None:
secrets_module = importlib.import_module(machine.secrets_module)
secret_store = secrets_module.SecretStore(machine=machine)
generate_secrets(machine)
with TemporaryDirectory() as tmpdir_:
tmpdir = Path(tmpdir_)
upload_dir_ = machine.secrets_upload_directory
if upload_dir_.startswith("/"):
upload_dir_ = upload_dir_[1:]
upload_dir = tmpdir / upload_dir_
upload_dir.mkdir(parents=True)
secret_store.upload(upload_dir)
fs_image = machine.build_nix("config.system.clan.iso")
print(fs_image)
@dataclass
class FlashOptions:
flake: Path
machine: str
device: str | None
def flash_command(args: argparse.Namespace) -> None:
opts = FlashOptions(
flake=args.flake,
machine=args.machine,
device=args.device,
)
machine = Machine(opts.machine, flake=opts.flake)
flash_machine(machine, device=opts.device)
def register_parser(parser: argparse.ArgumentParser) -> None:
parser.add_argument(
"machine",
type=str,
help="machine to install",
)
parser.add_argument(
"--device",
type=str,
help="device to flash the system to",
)
parser.set_defaults(func=flash_command)