clan-lib: Move nix_options from Machine class to Flake class

This commit is contained in:
Qubasa
2025-06-23 13:46:10 +02:00
parent 20080f8857
commit cd1d49b603
11 changed files with 57 additions and 54 deletions

View File

@@ -35,20 +35,27 @@ with contextlib.suppress(ImportError):
import argcomplete # type: ignore[no-redef]
def flake_path(arg: str) -> Flake:
def flake_path(arg: str) -> str:
flake_dir = Path(arg).resolve()
if flake_dir.exists() and flake_dir.is_dir():
return Flake(str(flake_dir))
return Flake(arg)
return str(flake_dir)
return arg
def default_flake() -> Flake | None:
def default_flake() -> str | None:
val = get_clan_flake_toplevel_or_env()
if val:
return Flake(str(val))
return str(val)
return None
def create_flake_from_args(args: argparse.Namespace) -> Flake:
"""Create a Flake object from parsed arguments, including nix_options."""
flake_path_str = args.flake
nix_options = getattr(args, "option", [])
return Flake(flake_path_str, nix_options=nix_options)
def add_common_flags(parser: argparse.ArgumentParser) -> None:
def argument_exists(parser: argparse.ArgumentParser, arg: str) -> bool:
"""
@@ -450,6 +457,10 @@ def main() -> None:
if not hasattr(args, "func"):
return
# Convert flake path to Flake object with nix_options if flake argument exists
if hasattr(args, "flake") and args.flake is not None:
args.flake = create_flake_from_args(args)
try:
args.func(args)
except ClanError as e:

View File

@@ -42,7 +42,7 @@ def install_command(args: argparse.Namespace) -> None:
else:
password = None
machine = Machine(name=args.machine, flake=args.flake, nix_options=args.option)
machine = Machine(name=args.machine, flake=args.flake)
host_key_check = args.host_key_check
if target_host_str is not None:

View File

@@ -46,9 +46,7 @@ def update_command(args: argparse.Namespace) -> None:
raise ClanError(msg)
for machine_name in selected_machines:
machine = Machine(
name=machine_name, flake=args.flake, nix_options=args.option
)
machine = Machine(name=machine_name, flake=args.flake)
machines.append(machine)
if args.target_host is not None and len(machines) > 1:

View File

@@ -2,7 +2,7 @@ import argparse
import logging
import shlex
from clan_cli import create_parser
from clan_cli import create_flake_from_args, create_parser
from clan_lib.custom_logger import print_trace
log = logging.getLogger(__name__)
@@ -13,6 +13,10 @@ def run(args: list[str]) -> argparse.Namespace:
parsed = parser.parse_args(args)
cmd = shlex.join(["clan", *args])
# Convert flake path to Flake object with nix_options if flake argument exists
if hasattr(parsed, "flake") and parsed.flake is not None:
parsed.flake = create_flake_from_args(parsed)
print_trace(f"$ {cmd}", log, "localhost")
if hasattr(parsed, "func"):
parsed.func(parsed)

View File

@@ -511,7 +511,7 @@ def generate_command(args: argparse.Namespace) -> None:
msg = "Could not find clan flake toplevel directory"
raise ClanError(msg)
machines: list[Machine] = list(list_full_machines(args.flake, args.option).values())
machines: list[Machine] = list(list_full_machines(args.flake).values())
if len(args.machines) > 0:
machines = list(