From 5b606c035f59f07bc9bd0aaf478124b246d3d62c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Wed, 3 Jul 2024 13:03:40 +0200 Subject: [PATCH] move FlakeId to flake id move FlakeId to flake id --- pkgs/clan-cli/clan_cli/__init__.py | 16 ++++++++++++---- pkgs/clan-cli/clan_cli/backups/create.py | 3 +-- pkgs/clan-cli/clan_cli/backups/list.py | 3 +-- pkgs/clan-cli/clan_cli/backups/restore.py | 3 +-- pkgs/clan-cli/clan_cli/clan/inspect.py | 2 +- pkgs/clan-cli/clan_cli/clan/show.py | 2 +- pkgs/clan-cli/clan_cli/clan_uri.py | 4 ++-- pkgs/clan-cli/clan_cli/config/__init__.py | 4 ++-- pkgs/clan-cli/clan_cli/facts/check.py | 3 +-- pkgs/clan-cli/clan_cli/facts/list.py | 3 +-- pkgs/clan-cli/clan_cli/facts/upload.py | 3 +-- pkgs/clan-cli/clan_cli/flash.py | 2 +- pkgs/clan-cli/clan_cli/machines/create.py | 17 +++++++++-------- pkgs/clan-cli/clan_cli/machines/delete.py | 15 +++++++-------- pkgs/clan-cli/clan_cli/machines/hardware.py | 2 +- pkgs/clan-cli/clan_cli/machines/install.py | 2 +- pkgs/clan-cli/clan_cli/machines/inventory.py | 12 +++++------- pkgs/clan-cli/clan_cli/machines/list.py | 2 +- pkgs/clan-cli/clan_cli/machines/show.py | 3 +-- pkgs/clan-cli/clan_cli/machines/update.py | 3 +-- pkgs/clan-cli/clan_cli/secrets/groups.py | 14 +++++++------- pkgs/clan-cli/clan_cli/secrets/import_sops.py | 6 +++--- pkgs/clan-cli/clan_cli/secrets/key.py | 2 +- pkgs/clan-cli/clan_cli/secrets/machines.py | 12 ++++++------ pkgs/clan-cli/clan_cli/secrets/secrets.py | 12 ++++++------ pkgs/clan-cli/clan_cli/secrets/users.py | 12 ++++++------ pkgs/clan-cli/clan_cli/vms/inspect.py | 2 +- pkgs/clan-cli/clan_cli/vms/run.py | 12 ++++-------- pkgs/clan-cli/tests/test_machines_config.py | 3 ++- pkgs/clan-cli/tests/test_modules.py | 5 ++++- 30 files changed, 91 insertions(+), 93 deletions(-) diff --git a/pkgs/clan-cli/clan_cli/__init__.py b/pkgs/clan-cli/clan_cli/__init__.py index cbd9b454..503a519d 100644 --- a/pkgs/clan-cli/clan_cli/__init__.py +++ b/pkgs/clan-cli/clan_cli/__init__.py @@ -25,6 +25,7 @@ from . import ( state, vms, ) +from .clan_uri import FlakeId from .custom_logger import setup_logging from .dirs import get_clan_flake_toplevel_or_env from .errors import ClanCmdError, ClanError @@ -41,11 +42,18 @@ except ImportError: pass -def flake_path(arg: str) -> str | Path: +def flake_path(arg: str) -> FlakeId: flake_dir = Path(arg).resolve() if flake_dir.exists() and flake_dir.is_dir(): - return flake_dir - return arg + return FlakeId(flake_dir) + return FlakeId(arg) + + +def default_flake() -> FlakeId | None: + val = get_clan_flake_toplevel_or_env() + if val: + return FlakeId(val) + return None def add_common_flags(parser: argparse.ArgumentParser) -> None: @@ -68,7 +76,7 @@ def add_common_flags(parser: argparse.ArgumentParser) -> None: parser.add_argument( "--flake", help="path to the flake where the clan resides in, can be a remote flake or local, can be set through the [CLAN_DIR] environment variable", - default=get_clan_flake_toplevel_or_env(), + default=default_flake(), metavar="PATH", type=flake_path, ) diff --git a/pkgs/clan-cli/clan_cli/backups/create.py b/pkgs/clan-cli/clan_cli/backups/create.py index 1d70754c..ad02d874 100644 --- a/pkgs/clan-cli/clan_cli/backups/create.py +++ b/pkgs/clan-cli/clan_cli/backups/create.py @@ -2,7 +2,6 @@ import argparse import json import logging -from ..clan_uri import FlakeId from ..completions import ( add_dynamic_completer, complete_backup_providers_for_machine, @@ -41,7 +40,7 @@ def create_backup(machine: Machine, provider: str | None = None) -> None: def create_command(args: argparse.Namespace) -> None: if args.flake is None: raise ClanError("Could not find clan flake toplevel directory") - machine = Machine(name=args.machine, flake=FlakeId(args.flake)) + machine = Machine(name=args.machine, flake=args.flake) create_backup(machine=machine, provider=args.provider) diff --git a/pkgs/clan-cli/clan_cli/backups/list.py b/pkgs/clan-cli/clan_cli/backups/list.py index e0a019a0..dc428a54 100644 --- a/pkgs/clan-cli/clan_cli/backups/list.py +++ b/pkgs/clan-cli/clan_cli/backups/list.py @@ -3,7 +3,6 @@ import json import subprocess from dataclasses import dataclass -from ..clan_uri import FlakeId from ..completions import ( add_dynamic_completer, complete_backup_providers_for_machine, @@ -56,7 +55,7 @@ def list_backups(machine: Machine, provider: str | None = None) -> list[Backup]: def list_command(args: argparse.Namespace) -> None: if args.flake is None: raise ClanError("Could not find clan flake toplevel directory") - machine = Machine(name=args.machine, flake=FlakeId(args.flake)) + machine = Machine(name=args.machine, flake=args.flake) backups = list_backups(machine=machine, provider=args.provider) for backup in backups: print(backup.name) diff --git a/pkgs/clan-cli/clan_cli/backups/restore.py b/pkgs/clan-cli/clan_cli/backups/restore.py index c6f03a6b..ec582702 100644 --- a/pkgs/clan-cli/clan_cli/backups/restore.py +++ b/pkgs/clan-cli/clan_cli/backups/restore.py @@ -2,7 +2,6 @@ import argparse import json import subprocess -from ..clan_uri import FlakeId from ..completions import ( add_dynamic_completer, complete_backup_providers_for_machine, @@ -87,7 +86,7 @@ def restore_backup( def restore_command(args: argparse.Namespace) -> None: if args.flake is None: raise ClanError("Could not find clan flake toplevel directory") - machine = Machine(name=args.machine, flake=FlakeId(args.flake)) + machine = Machine(name=args.machine, flake=args.flake) restore_backup( machine=machine, provider=args.provider, diff --git a/pkgs/clan-cli/clan_cli/clan/inspect.py b/pkgs/clan-cli/clan_cli/clan/inspect.py index 2daa5d28..c6400946 100644 --- a/pkgs/clan-cli/clan_cli/clan/inspect.py +++ b/pkgs/clan-cli/clan_cli/clan/inspect.py @@ -109,7 +109,7 @@ class InspectOptions: def inspect_command(args: argparse.Namespace) -> None: inspect_options = InspectOptions( machine=args.machine, - flake=FlakeId(args.flake or Path.cwd()), + flake=args.flake or FlakeId(Path.cwd()), ) res = inspect_flake( flake_url=str(inspect_options.flake), machine_name=inspect_options.machine diff --git a/pkgs/clan-cli/clan_cli/clan/show.py b/pkgs/clan-cli/clan_cli/clan/show.py index e4d1bc62..dbae165b 100644 --- a/pkgs/clan-cli/clan_cli/clan/show.py +++ b/pkgs/clan-cli/clan_cli/clan/show.py @@ -69,7 +69,7 @@ def show_clan_meta(uri: str | Path) -> ClanMetaInfo: def show_command(args: argparse.Namespace) -> None: - flake_path = Path(args.flake).resolve() + flake_path = args.flake.path meta = show_clan_meta(flake_path) print(f"Name: {meta.name}") diff --git a/pkgs/clan-cli/clan_cli/clan_uri.py b/pkgs/clan-cli/clan_cli/clan_uri.py index f85a4971..3cdc2154 100644 --- a/pkgs/clan-cli/clan_cli/clan_uri.py +++ b/pkgs/clan-cli/clan_cli/clan_uri.py @@ -19,12 +19,12 @@ class FlakeId: @property def path(self) -> Path: - assert isinstance(self._value, Path) + assert isinstance(self._value, Path), f"Flake {self._value} is not a local path" return self._value @property def url(self) -> str: - assert isinstance(self._value, str) + assert isinstance(self._value, str), f"Flake {self._value} is not a remote url" return self._value def is_local(self) -> bool: diff --git a/pkgs/clan-cli/clan_cli/config/__init__.py b/pkgs/clan-cli/clan_cli/config/__init__.py index eda73be5..d1a7ce51 100644 --- a/pkgs/clan-cli/clan_cli/config/__init__.py +++ b/pkgs/clan-cli/clan_cli/config/__init__.py @@ -178,12 +178,12 @@ def get_or_set_option(args: argparse.Namespace) -> None: options = json.load(f) # compute settings json file location if args.settings_file is None: - settings_file = machine_settings_file(Path(args.flake), args.machine) + settings_file = machine_settings_file(args.flake.path, args.machine) else: settings_file = args.settings_file # set the option with the given value set_option( - flake_dir=Path(args.flake), + flake_dir=args.flake.path, option=args.option, value=args.value, options=options, diff --git a/pkgs/clan-cli/clan_cli/facts/check.py b/pkgs/clan-cli/clan_cli/facts/check.py index 7ee88938..d879b2d7 100644 --- a/pkgs/clan-cli/clan_cli/facts/check.py +++ b/pkgs/clan-cli/clan_cli/facts/check.py @@ -2,7 +2,6 @@ import argparse import importlib import logging -from ..clan_uri import FlakeId from ..completions import add_dynamic_completer, complete_machines from ..machines.machines import Machine @@ -50,7 +49,7 @@ def check_secrets(machine: Machine, service: None | str = None) -> bool: def check_command(args: argparse.Namespace) -> None: machine = Machine( name=args.machine, - flake=FlakeId(args.flake), + flake=args.flake, ) check_secrets(machine, service=args.service) diff --git a/pkgs/clan-cli/clan_cli/facts/list.py b/pkgs/clan-cli/clan_cli/facts/list.py index eed5a99b..0ec2fcdc 100644 --- a/pkgs/clan-cli/clan_cli/facts/list.py +++ b/pkgs/clan-cli/clan_cli/facts/list.py @@ -3,7 +3,6 @@ import importlib import json import logging -from ..clan_uri import FlakeId from ..completions import add_dynamic_completer, complete_machines from ..machines.machines import Machine @@ -27,7 +26,7 @@ def get_all_facts(machine: Machine) -> dict: def get_command(args: argparse.Namespace) -> None: - machine = Machine(name=args.machine, flake=FlakeId(args.flake)) + machine = Machine(name=args.machine, flake=args.flake) # the raw_facts are bytestrings making them not json serializable raw_facts = get_all_facts(machine) diff --git a/pkgs/clan-cli/clan_cli/facts/upload.py b/pkgs/clan-cli/clan_cli/facts/upload.py index 3d0ebca9..6cb6bf8b 100644 --- a/pkgs/clan-cli/clan_cli/facts/upload.py +++ b/pkgs/clan-cli/clan_cli/facts/upload.py @@ -4,7 +4,6 @@ import logging from pathlib import Path from tempfile import TemporaryDirectory -from ..clan_uri import FlakeId from ..cmd import Log, run from ..completions import add_dynamic_completer, complete_machines from ..machines.machines import Machine @@ -45,7 +44,7 @@ def upload_secrets(machine: Machine) -> None: def upload_command(args: argparse.Namespace) -> None: - machine = Machine(name=args.machine, flake=FlakeId(args.flake)) + machine = Machine(name=args.machine, flake=args.flake) upload_secrets(machine) diff --git a/pkgs/clan-cli/clan_cli/flash.py b/pkgs/clan-cli/clan_cli/flash.py index f1ba90bd..c03e64a6 100644 --- a/pkgs/clan-cli/clan_cli/flash.py +++ b/pkgs/clan-cli/clan_cli/flash.py @@ -120,7 +120,7 @@ class AppendDiskAction(argparse.Action): def flash_command(args: argparse.Namespace) -> None: opts = FlashOptions( - flake=FlakeId(args.flake), + flake=args.flake, machine=args.machine, disks=args.disk, ssh_keys_path=args.ssh_pubkey, diff --git a/pkgs/clan-cli/clan_cli/machines/create.py b/pkgs/clan-cli/clan_cli/machines/create.py index 9a7b7c81..28934bc6 100644 --- a/pkgs/clan-cli/clan_cli/machines/create.py +++ b/pkgs/clan-cli/clan_cli/machines/create.py @@ -3,27 +3,28 @@ import logging import re from pathlib import Path -from clan_cli.api import API -from clan_cli.errors import ClanError -from clan_cli.git import commit_file -from clan_cli.inventory import Inventory, Machine +from ..api import API +from ..clan_uri import FlakeId +from ..errors import ClanError +from ..git import commit_file +from ..inventory import Inventory, Machine log = logging.getLogger(__name__) @API.register -def create_machine(flake_dir: str | Path, machine: Machine) -> None: +def create_machine(flake: FlakeId, machine: Machine) -> None: hostname_regex = r"^(?!-)[A-Za-z0-9-]{1,63}(? None: diff --git a/pkgs/clan-cli/clan_cli/machines/delete.py b/pkgs/clan-cli/clan_cli/machines/delete.py index e6796f07..51076d3a 100644 --- a/pkgs/clan-cli/clan_cli/machines/delete.py +++ b/pkgs/clan-cli/clan_cli/machines/delete.py @@ -1,26 +1,25 @@ import argparse import shutil -from pathlib import Path - -from clan_cli.api import API -from clan_cli.inventory import Inventory +from ..api import API +from ..clan_uri import FlakeId from ..completions import add_dynamic_completer, complete_machines from ..dirs import specific_machine_dir from ..errors import ClanError +from ..inventory import Inventory @API.register -def delete_machine(base_dir: str | Path, name: str) -> None: - inventory = Inventory.load_file(base_dir) +def delete_machine(flake: FlakeId, name: str) -> None: + inventory = Inventory.load_file(flake.path) machine = inventory.machines.pop(name, None) if machine is None: raise ClanError(f"Machine {name} does not exist") - inventory.persist(base_dir, f"Delete machine {name}") + inventory.persist(flake.path, f"Delete machine {name}") - folder = specific_machine_dir(Path(base_dir), name) + folder = specific_machine_dir(flake.path, name) if folder.exists(): shutil.rmtree(folder) diff --git a/pkgs/clan-cli/clan_cli/machines/hardware.py b/pkgs/clan-cli/clan_cli/machines/hardware.py index 38bfcf32..1c60ae9b 100644 --- a/pkgs/clan-cli/clan_cli/machines/hardware.py +++ b/pkgs/clan-cli/clan_cli/machines/hardware.py @@ -147,7 +147,7 @@ def generate_machine_hardware_info( def hw_generate_command(args: argparse.Namespace) -> None: - flake_path = Path(args.flake).resolve() + flake_path = args.flake.path hw_info = generate_machine_hardware_info( flake_path, args.machine, args.hostname, args.password, args.force ) diff --git a/pkgs/clan-cli/clan_cli/machines/install.py b/pkgs/clan-cli/clan_cli/machines/install.py index c7645605..5d7a3cae 100644 --- a/pkgs/clan-cli/clan_cli/machines/install.py +++ b/pkgs/clan-cli/clan_cli/machines/install.py @@ -124,7 +124,7 @@ def install_command(args: argparse.Namespace) -> None: password = None opts = InstallOptions( - flake=FlakeId(args.flake), + flake=args.flake, machine=args.machine, target_host=target_host, kexec=args.kexec, diff --git a/pkgs/clan-cli/clan_cli/machines/inventory.py b/pkgs/clan-cli/clan_cli/machines/inventory.py index 11b33ade..8cac61bb 100644 --- a/pkgs/clan-cli/clan_cli/machines/inventory.py +++ b/pkgs/clan-cli/clan_cli/machines/inventory.py @@ -8,11 +8,11 @@ from .machines import Machine # function to speedup eval if we want to evaluate all machines -def get_all_machines(flake_dir: Path, nix_options: list[str]) -> list[Machine]: +def get_all_machines(flake: FlakeId, nix_options: list[str]) -> list[Machine]: config = nix_config() system = config["system"] json_path = run( - nix_build([f'{flake_dir}#clanInternals.all-machines-json."{system}"']) + nix_build([f'{flake}#clanInternals.all-machines-json."{system}"']) ).stdout machines_json = json.loads(Path(json_path.rstrip()).read_text()) @@ -22,7 +22,7 @@ def get_all_machines(flake_dir: Path, nix_options: list[str]) -> list[Machine]: machines.append( Machine( name=name, - flake=FlakeId(flake_dir), + flake=flake, cached_deployment=machine_data, nix_options=nix_options, ) @@ -31,11 +31,9 @@ def get_all_machines(flake_dir: Path, nix_options: list[str]) -> list[Machine]: def get_selected_machines( - flake_dir: Path, nix_options: list[str], machine_names: list[str] + flake: FlakeId, nix_options: list[str], machine_names: list[str] ) -> list[Machine]: machines = [] for name in machine_names: - machines.append( - Machine(name=name, flake=FlakeId(flake_dir), nix_options=nix_options) - ) + machines.append(Machine(name=name, flake=flake, nix_options=nix_options)) return machines diff --git a/pkgs/clan-cli/clan_cli/machines/list.py b/pkgs/clan-cli/clan_cli/machines/list.py index 83dbf7d7..b0e43473 100644 --- a/pkgs/clan-cli/clan_cli/machines/list.py +++ b/pkgs/clan-cli/clan_cli/machines/list.py @@ -29,7 +29,7 @@ def list_machines(flake_url: str | Path, debug: bool = False) -> dict[str, Machi def list_command(args: argparse.Namespace) -> None: - flake_path = Path(args.flake).resolve() + flake_path = args.flake.path for name in list_machines(flake_path, args.debug).keys(): print(name) diff --git a/pkgs/clan-cli/clan_cli/machines/show.py b/pkgs/clan-cli/clan_cli/machines/show.py index 5343ed71..29284b03 100644 --- a/pkgs/clan-cli/clan_cli/machines/show.py +++ b/pkgs/clan-cli/clan_cli/machines/show.py @@ -45,8 +45,7 @@ def show_machine(flake_url: str | Path, machine_name: str) -> MachineInfo: def show_command(args: argparse.Namespace) -> None: - flake_path = Path(args.flake).resolve() - machine = show_machine(flake_path, args.machine) + machine = show_machine(args.flake.path, args.machine) print(f"Name: {machine.machine_name}") print(f"Description: {machine.machine_description or ''}") print(f"Icon: {machine.machine_icon or ''}") diff --git a/pkgs/clan-cli/clan_cli/machines/update.py b/pkgs/clan-cli/clan_cli/machines/update.py index 73b2b892..b1ab7efd 100644 --- a/pkgs/clan-cli/clan_cli/machines/update.py +++ b/pkgs/clan-cli/clan_cli/machines/update.py @@ -5,7 +5,6 @@ import os import shlex import sys -from ..clan_uri import FlakeId from ..cmd import run from ..completions import add_dynamic_completer, complete_machines from ..errors import ClanError @@ -138,7 +137,7 @@ def update(args: argparse.Namespace) -> None: machines = [] if len(args.machines) == 1 and args.target_host is not None: machine = Machine( - name=args.machines[0], flake=FlakeId(args.flake), nix_options=args.option + name=args.machines[0], flake=args.flake, nix_options=args.option ) machine.target_host_address = args.target_host machines.append(machine) diff --git a/pkgs/clan-cli/clan_cli/secrets/groups.py b/pkgs/clan-cli/clan_cli/secrets/groups.py index 78cdd0fb..67f63782 100644 --- a/pkgs/clan-cli/clan_cli/secrets/groups.py +++ b/pkgs/clan-cli/clan_cli/secrets/groups.py @@ -74,7 +74,7 @@ def list_groups(flake_dir: Path) -> list[Group]: def list_command(args: argparse.Namespace) -> None: - for group in list_groups(Path(args.flake)): + for group in list_groups(args.flake.path): print(group.name) if group.machines: print("machines:") @@ -158,7 +158,7 @@ def add_user(flake_dir: Path, group: str, name: str) -> None: def add_user_command(args: argparse.Namespace) -> None: - add_user(Path(args.flake), args.group, args.user) + add_user(args.flake.path, args.group, args.user) def remove_user(flake_dir: Path, group: str, name: str) -> None: @@ -166,7 +166,7 @@ def remove_user(flake_dir: Path, group: str, name: str) -> None: def remove_user_command(args: argparse.Namespace) -> None: - remove_user(Path(args.flake), args.group, args.user) + remove_user(args.flake.path, args.group, args.user) def add_machine(flake_dir: Path, group: str, name: str) -> None: @@ -184,7 +184,7 @@ def add_machine(flake_dir: Path, group: str, name: str) -> None: def add_machine_command(args: argparse.Namespace) -> None: - add_machine(Path(args.flake), args.group, args.machine) + add_machine(args.flake.path, args.group, args.machine) def remove_machine(flake_dir: Path, group: str, name: str) -> None: @@ -192,7 +192,7 @@ def remove_machine(flake_dir: Path, group: str, name: str) -> None: def remove_machine_command(args: argparse.Namespace) -> None: - remove_machine(Path(args.flake), args.group, args.machine) + remove_machine(args.flake.path, args.group, args.machine) def add_group_argument(parser: argparse.ArgumentParser) -> None: @@ -209,7 +209,7 @@ def add_secret(flake_dir: Path, group: str, name: str) -> None: def add_secret_command(args: argparse.Namespace) -> None: - add_secret(Path(args.flake), args.group, args.secret) + add_secret(args.flake.path, args.group, args.secret) def remove_secret(flake_dir: Path, group: str, name: str) -> None: @@ -224,7 +224,7 @@ def remove_secret(flake_dir: Path, group: str, name: str) -> None: def remove_secret_command(args: argparse.Namespace) -> None: - remove_secret(Path(args.flake), args.group, args.secret) + remove_secret(args.flake.path, args.group, args.secret) def register_groups_parser(parser: argparse.ArgumentParser) -> None: diff --git a/pkgs/clan-cli/clan_cli/secrets/import_sops.py b/pkgs/clan-cli/clan_cli/secrets/import_sops.py index 799dd8e9..96226bc3 100644 --- a/pkgs/clan-cli/clan_cli/secrets/import_sops.py +++ b/pkgs/clan-cli/clan_cli/secrets/import_sops.py @@ -40,15 +40,15 @@ def import_sops(args: argparse.Namespace) -> None: file=sys.stderr, ) continue - if (sops_secrets_folder(Path(args.flake)) / k / "secret").exists(): + if (sops_secrets_folder(args.flake.path) / k / "secret").exists(): print( f"WARNING: {k} already exists, skipping", file=sys.stderr, ) continue encrypt_secret( - Path(args.flake), - sops_secrets_folder(Path(args.flake)) / k, + args.flake.path, + sops_secrets_folder(args.flake.path) / k, v, add_groups=args.group, add_machines=args.machine, diff --git a/pkgs/clan-cli/clan_cli/secrets/key.py b/pkgs/clan-cli/clan_cli/secrets/key.py index 844e6960..8a758ef8 100644 --- a/pkgs/clan-cli/clan_cli/secrets/key.py +++ b/pkgs/clan-cli/clan_cli/secrets/key.py @@ -58,7 +58,7 @@ def show_command(args: argparse.Namespace) -> None: def update_command(args: argparse.Namespace) -> None: - flake_dir = Path(args.flake) + flake_dir = args.flake.path commit_files(update_secrets(flake_dir), flake_dir, "Updated secrets with new keys.") diff --git a/pkgs/clan-cli/clan_cli/secrets/machines.py b/pkgs/clan-cli/clan_cli/secrets/machines.py index 2bb45e45..9fe41d60 100644 --- a/pkgs/clan-cli/clan_cli/secrets/machines.py +++ b/pkgs/clan-cli/clan_cli/secrets/machines.py @@ -81,7 +81,7 @@ def remove_secret(flake_dir: Path, machine: str, secret: str) -> None: def list_command(args: argparse.Namespace) -> None: if args.flake is None: raise ClanError("Could not find clan flake toplevel directory") - lst = list_machines(Path(args.flake)) + lst = list_machines(args.flake.path) if len(lst) > 0: print("\n".join(lst)) @@ -89,31 +89,31 @@ def list_command(args: argparse.Namespace) -> None: def add_command(args: argparse.Namespace) -> None: if args.flake is None: raise ClanError("Could not find clan flake toplevel directory") - add_machine(Path(args.flake), args.machine, args.key, args.force) + add_machine(args.flake.path, args.machine, args.key, args.force) def get_command(args: argparse.Namespace) -> None: if args.flake is None: raise ClanError("Could not find clan flake toplevel directory") - print(get_machine(Path(args.flake), args.machine)) + print(get_machine(args.flake.path, args.machine)) def remove_command(args: argparse.Namespace) -> None: if args.flake is None: raise ClanError("Could not find clan flake toplevel directory") - remove_machine(Path(args.flake), args.machine) + remove_machine(args.flake.path, args.machine) def add_secret_command(args: argparse.Namespace) -> None: if args.flake is None: raise ClanError("Could not find clan flake toplevel directory") - add_secret(Path(args.flake), args.machine, args.secret) + add_secret(args.flake.path, args.machine, args.secret) def remove_secret_command(args: argparse.Namespace) -> None: if args.flake is None: raise ClanError("Could not find clan flake toplevel directory") - remove_secret(Path(args.flake), args.machine, args.secret) + remove_secret(args.flake.path, args.machine, args.secret) def register_machines_parser(parser: argparse.ArgumentParser) -> None: diff --git a/pkgs/clan-cli/clan_cli/secrets/secrets.py b/pkgs/clan-cli/clan_cli/secrets/secrets.py index 5a2224fd..d5d048a4 100644 --- a/pkgs/clan-cli/clan_cli/secrets/secrets.py +++ b/pkgs/clan-cli/clan_cli/secrets/secrets.py @@ -158,7 +158,7 @@ def remove_secret(flake_dir: Path, secret: str) -> None: def remove_command(args: argparse.Namespace) -> None: - remove_secret(Path(args.flake), args.secret) + remove_secret(args.flake.path, args.secret) def add_secret_argument(parser: argparse.ArgumentParser, autocomplete: bool) -> None: @@ -270,7 +270,7 @@ class ListSecretsOptions: def list_command(args: argparse.Namespace) -> None: options = ListSecretsOptions( - flake=FlakeId(args.flake), + flake=args.flake, pattern=args.pattern, ) lst = list_secrets(options.flake.path, options.pattern) @@ -287,7 +287,7 @@ def decrypt_secret(flake_dir: Path, secret: str) -> str: def get_command(args: argparse.Namespace) -> None: - print(decrypt_secret(Path(args.flake), args.secret), end="") + print(decrypt_secret(args.flake.path, args.secret), end="") def set_command(args: argparse.Namespace) -> None: @@ -300,8 +300,8 @@ def set_command(args: argparse.Namespace) -> None: elif tty.is_interactive(): secret_value = getpass.getpass(prompt="Paste your secret: ") encrypt_secret( - Path(args.flake), - sops_secrets_folder(Path(args.flake)) / args.secret, + args.flake.path, + sops_secrets_folder(args.flake.path) / args.secret, secret_value, args.user, args.machine, @@ -310,7 +310,7 @@ def set_command(args: argparse.Namespace) -> None: def rename_command(args: argparse.Namespace) -> None: - flake_dir = Path(args.flake) + flake_dir = args.flake.path old_path = sops_secrets_folder(flake_dir) / args.secret new_path = sops_secrets_folder(flake_dir) / args.new_name if not old_path.exists(): diff --git a/pkgs/clan-cli/clan_cli/secrets/users.py b/pkgs/clan-cli/clan_cli/secrets/users.py index b6cdd569..57ade40f 100644 --- a/pkgs/clan-cli/clan_cli/secrets/users.py +++ b/pkgs/clan-cli/clan_cli/secrets/users.py @@ -86,7 +86,7 @@ def remove_secret(flake_dir: Path, user: str, secret: str) -> None: def list_command(args: argparse.Namespace) -> None: if args.flake is None: raise ClanError("Could not find clan flake toplevel directory") - lst = list_users(Path(args.flake)) + lst = list_users(args.flake.path) if len(lst) > 0: print("\n".join(lst)) @@ -94,31 +94,31 @@ def list_command(args: argparse.Namespace) -> None: def add_command(args: argparse.Namespace) -> None: if args.flake is None: raise ClanError("Could not find clan flake toplevel directory") - add_user(Path(args.flake), args.user, args.key, args.force) + add_user(args.flake.path, args.user, args.key, args.force) def get_command(args: argparse.Namespace) -> None: if args.flake is None: raise ClanError("Could not find clan flake toplevel directory") - print(get_user(Path(args.flake), args.user)) + print(get_user(args.flake.path, args.user)) def remove_command(args: argparse.Namespace) -> None: if args.flake is None: raise ClanError("Could not find clan flake toplevel directory") - remove_user(Path(args.flake), args.user) + remove_user(args.flake.path, args.user) def add_secret_command(args: argparse.Namespace) -> None: if args.flake is None: raise ClanError("Could not find clan flake toplevel directory") - add_secret(Path(args.flake), args.user, args.secret) + add_secret(args.flake.path, args.user, args.secret) def remove_secret_command(args: argparse.Namespace) -> None: if args.flake is None: raise ClanError("Could not find clan flake toplevel directory") - remove_secret(Path(args.flake), args.user, args.secret) + remove_secret(args.flake.path, args.user, args.secret) def register_users_parser(parser: argparse.ArgumentParser) -> None: diff --git a/pkgs/clan-cli/clan_cli/vms/inspect.py b/pkgs/clan-cli/clan_cli/vms/inspect.py index 6289216a..3c00198a 100644 --- a/pkgs/clan-cli/clan_cli/vms/inspect.py +++ b/pkgs/clan-cli/clan_cli/vms/inspect.py @@ -36,7 +36,7 @@ class InspectOptions: def inspect_command(args: argparse.Namespace) -> None: inspect_options = InspectOptions( machine=args.machine, - flake=FlakeId(args.flake or Path.cwd()), + flake=args.flake or FlakeId(Path.cwd()), ) machine = Machine(inspect_options.machine, inspect_options.flake) diff --git a/pkgs/clan-cli/clan_cli/vms/run.py b/pkgs/clan-cli/clan_cli/vms/run.py index 578cb869..a0fdbde8 100644 --- a/pkgs/clan-cli/clan_cli/vms/run.py +++ b/pkgs/clan-cli/clan_cli/vms/run.py @@ -7,7 +7,6 @@ from contextlib import ExitStack from pathlib import Path from tempfile import TemporaryDirectory -from ..clan_uri import FlakeId from ..cmd import Log, run from ..completions import add_dynamic_completer, complete_machines from ..dirs import module_root, user_cache_dir, vm_state_dir @@ -194,16 +193,13 @@ def run_vm( def run_command( - machine: str, - flake: Path, - option: list[str] = [], - **kwargs: dict[str, str], + args: argparse.Namespace, ) -> None: - machine_obj: Machine = Machine(machine, FlakeId(flake)) + machine_obj: Machine = Machine(args.machine, args.flake) vm: VmConfig = inspect_vm(machine=machine_obj) - run_vm(vm, nix_options=option) + run_vm(vm, nix_options=args.option) def register_run_parser(parser: argparse.ArgumentParser) -> None: @@ -211,4 +207,4 @@ def register_run_parser(parser: argparse.ArgumentParser) -> None: "machine", type=str, help="machine in the flake to run" ) add_dynamic_completer(machine_action, complete_machines) - parser.set_defaults(func=lambda args: run_command(**args.__dict__)) + parser.set_defaults(func=lambda args: run_command(args)) diff --git a/pkgs/clan-cli/tests/test_machines_config.py b/pkgs/clan-cli/tests/test_machines_config.py index 3d362eb4..cc9b382e 100644 --- a/pkgs/clan-cli/tests/test_machines_config.py +++ b/pkgs/clan-cli/tests/test_machines_config.py @@ -1,6 +1,7 @@ import pytest from fixtures_flakes import FlakeForTest +from clan_cli.clan_uri import FlakeId from clan_cli.config.machine import ( config_for_machine, set_config_for_machine, @@ -23,7 +24,7 @@ def test_create_machine_on_minimal_clan(test_flake_minimal: FlakeForTest) -> Non assert list_machines(test_flake_minimal.path) == {} create_machine( - test_flake_minimal.path, + FlakeId(test_flake_minimal.path), Machine( name="foo", system="x86_64-linux", diff --git a/pkgs/clan-cli/tests/test_modules.py b/pkgs/clan-cli/tests/test_modules.py index 8530ed63..4f65e2a7 100644 --- a/pkgs/clan-cli/tests/test_modules.py +++ b/pkgs/clan-cli/tests/test_modules.py @@ -5,6 +5,7 @@ import pytest from fixtures_flakes import FlakeForTest from clan_cli.api.modules import list_modules, update_module_instance +from clan_cli.clan_uri import FlakeId from clan_cli.inventory import Machine, Role, Service, ServiceMeta from clan_cli.machines.create import create_machine from clan_cli.nix import nix_eval, run_no_stdout @@ -50,7 +51,9 @@ def test_add_module_to_inventory( age_keys[0].pubkey, ] ) - create_machine(base_path, Machine(name="machine1", tags=[], system="x86_64-linux")) + create_machine( + FlakeId(base_path), Machine(name="machine1", tags=[], system="x86_64-linux") + ) update_module_instance( base_path, "borgbackup",