From 8178c41c7b7cc11a6e4c27034eaf82b91a509972 Mon Sep 17 00:00:00 2001 From: a-kenji Date: Tue, 15 Jul 2025 14:01:41 +0200 Subject: [PATCH] pkgs/clan: Add clan validation to vars Add clan validation to vars and facts subcommmands --- pkgs/clan-cli/clan_cli/facts/check.py | 4 +++- pkgs/clan-cli/clan_cli/facts/check_test.py | 15 +++++++++++++++ pkgs/clan-cli/clan_cli/facts/list.py | 4 +++- pkgs/clan-cli/clan_cli/facts/list_test.py | 13 +++++++++++++ pkgs/clan-cli/clan_cli/facts/upload.py | 4 +++- pkgs/clan-cli/clan_cli/facts/upload_test.py | 15 +++++++++++++++ pkgs/clan-cli/clan_cli/vars/fix.py | 4 +++- pkgs/clan-cli/clan_cli/vars/fix_test.py | 12 ++++++++++++ pkgs/clan-cli/clan_cli/vars/get.py | 5 +++-- pkgs/clan-cli/clan_cli/vars/get_test.py | 12 ++++++++++++ pkgs/clan-cli/clan_cli/vars/list.py | 5 +++-- pkgs/clan-cli/clan_cli/vars/list_test.py | 12 ++++++++++++ pkgs/clan-cli/clan_cli/vars/upload.py | 4 +++- pkgs/clan-cli/clan_cli/vars/upload_test.py | 14 ++++++++++++++ 14 files changed, 114 insertions(+), 9 deletions(-) create mode 100644 pkgs/clan-cli/clan_cli/facts/check_test.py create mode 100644 pkgs/clan-cli/clan_cli/facts/list_test.py create mode 100644 pkgs/clan-cli/clan_cli/facts/upload_test.py create mode 100644 pkgs/clan-cli/clan_cli/vars/fix_test.py create mode 100644 pkgs/clan-cli/clan_cli/vars/get_test.py create mode 100644 pkgs/clan-cli/clan_cli/vars/list_test.py create mode 100644 pkgs/clan-cli/clan_cli/vars/upload_test.py diff --git a/pkgs/clan-cli/clan_cli/facts/check.py b/pkgs/clan-cli/clan_cli/facts/check.py index 61d6730d2..8b8232bbf 100644 --- a/pkgs/clan-cli/clan_cli/facts/check.py +++ b/pkgs/clan-cli/clan_cli/facts/check.py @@ -1,6 +1,7 @@ import argparse import logging +from clan_lib.flake import require_flake from clan_lib.machines.machines import Machine from clan_cli.completions import add_dynamic_completer, complete_machines @@ -37,9 +38,10 @@ def check_secrets(machine: Machine, service: None | str = None) -> bool: def check_command(args: argparse.Namespace) -> None: + flake = require_flake(args.flake) machine = Machine( name=args.machine, - flake=args.flake, + flake=flake, ) check_secrets(machine, service=args.service) diff --git a/pkgs/clan-cli/clan_cli/facts/check_test.py b/pkgs/clan-cli/clan_cli/facts/check_test.py new file mode 100644 index 000000000..23bc77249 --- /dev/null +++ b/pkgs/clan-cli/clan_cli/facts/check_test.py @@ -0,0 +1,15 @@ +from pathlib import Path + +import pytest +from clan_lib.errors import ClanError + +from clan_cli.tests.helpers import cli + + +def test_check_command_no_flake( + tmp_path: Path, monkeypatch: pytest.MonkeyPatch +) -> None: + monkeypatch.chdir(tmp_path) + + with pytest.raises(ClanError): + cli.run(["facts", "check", "machine1"]) diff --git a/pkgs/clan-cli/clan_cli/facts/list.py b/pkgs/clan-cli/clan_cli/facts/list.py index a58e3ef56..9ec85a92a 100644 --- a/pkgs/clan-cli/clan_cli/facts/list.py +++ b/pkgs/clan-cli/clan_cli/facts/list.py @@ -2,6 +2,7 @@ import argparse import json import logging +from clan_lib.flake import require_flake from clan_lib.machines.machines import Machine from clan_cli.completions import add_dynamic_completer, complete_machines @@ -10,7 +11,8 @@ log = logging.getLogger(__name__) def get_command(args: argparse.Namespace) -> None: - machine = Machine(name=args.machine, flake=args.flake) + flake = require_flake(args.flake) + machine = Machine(name=args.machine, flake=flake) # the raw_facts are bytestrings making them not json serializable raw_facts = machine.public_facts_store.get_all() diff --git a/pkgs/clan-cli/clan_cli/facts/list_test.py b/pkgs/clan-cli/clan_cli/facts/list_test.py new file mode 100644 index 000000000..9bc9cab7f --- /dev/null +++ b/pkgs/clan-cli/clan_cli/facts/list_test.py @@ -0,0 +1,13 @@ +from pathlib import Path + +import pytest +from clan_lib.errors import ClanError + +from clan_cli.tests.helpers import cli + + +def test_list_command_no_flake(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None: + monkeypatch.chdir(tmp_path) + + with pytest.raises(ClanError): + cli.run(["facts", "list", "machine1"]) diff --git a/pkgs/clan-cli/clan_cli/facts/upload.py b/pkgs/clan-cli/clan_cli/facts/upload.py index 583defa27..27833ad8f 100644 --- a/pkgs/clan-cli/clan_cli/facts/upload.py +++ b/pkgs/clan-cli/clan_cli/facts/upload.py @@ -3,6 +3,7 @@ import logging from pathlib import Path from tempfile import TemporaryDirectory +from clan_lib.flake import require_flake from clan_lib.machines.machines import Machine from clan_lib.ssh.remote import Remote @@ -25,7 +26,8 @@ def upload_secrets(machine: Machine, host: Remote) -> None: def upload_command(args: argparse.Namespace) -> None: - machine = Machine(name=args.machine, flake=args.flake) + flake = require_flake(args.flake) + machine = Machine(name=args.machine, flake=flake) with machine.target_host().ssh_control_master() as host: upload_secrets(machine, host) diff --git a/pkgs/clan-cli/clan_cli/facts/upload_test.py b/pkgs/clan-cli/clan_cli/facts/upload_test.py new file mode 100644 index 000000000..62afefb8b --- /dev/null +++ b/pkgs/clan-cli/clan_cli/facts/upload_test.py @@ -0,0 +1,15 @@ +from pathlib import Path + +import pytest +from clan_lib.errors import ClanError + +from clan_cli.tests.helpers import cli + + +def test_upload_command_no_flake( + tmp_path: Path, monkeypatch: pytest.MonkeyPatch +) -> None: + monkeypatch.chdir(tmp_path) + + with pytest.raises(ClanError): + cli.run(["facts", "upload", "machine1"]) diff --git a/pkgs/clan-cli/clan_cli/vars/fix.py b/pkgs/clan-cli/clan_cli/vars/fix.py index 2e6f10454..38b9dbab8 100644 --- a/pkgs/clan-cli/clan_cli/vars/fix.py +++ b/pkgs/clan-cli/clan_cli/vars/fix.py @@ -3,6 +3,7 @@ import logging from clan_cli.completions import add_dynamic_completer, complete_machines from clan_lib.errors import ClanError +from clan_lib.flake import require_flake from clan_lib.machines.machines import Machine log = logging.getLogger(__name__) @@ -29,9 +30,10 @@ def fix_vars(machine: Machine, generator_name: None | str = None) -> None: def fix_command(args: argparse.Namespace) -> None: + flake = require_flake(args.flake) machine = Machine( name=args.machine, - flake=args.flake, + flake=flake, ) fix_vars(machine, generator_name=args.generator) diff --git a/pkgs/clan-cli/clan_cli/vars/fix_test.py b/pkgs/clan-cli/clan_cli/vars/fix_test.py new file mode 100644 index 000000000..ab3bd1f04 --- /dev/null +++ b/pkgs/clan-cli/clan_cli/vars/fix_test.py @@ -0,0 +1,12 @@ +from pathlib import Path + +import pytest +from clan_cli.tests.helpers import cli +from clan_lib.errors import ClanError + + +def test_fix_command_no_flake(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None: + monkeypatch.chdir(tmp_path) + + with pytest.raises(ClanError): + cli.run(["vars", "fix", "machine1"]) diff --git a/pkgs/clan-cli/clan_cli/vars/get.py b/pkgs/clan-cli/clan_cli/vars/get.py index 0966e187f..60b4164bb 100644 --- a/pkgs/clan-cli/clan_cli/vars/get.py +++ b/pkgs/clan-cli/clan_cli/vars/get.py @@ -4,7 +4,7 @@ import sys from clan_cli.completions import add_dynamic_completer, complete_machines from clan_lib.errors import ClanError -from clan_lib.flake import Flake +from clan_lib.flake import Flake, require_flake from .generate import Var from .list import get_machine_vars @@ -52,10 +52,11 @@ def get_command(machine_name: str, var_id: str, flake: Flake) -> None: def _get_command( args: argparse.Namespace, ) -> None: + flake = require_flake(args.flake) get_command( machine_name=args.machine, var_id=args.var_id, - flake=args.flake, + flake=flake, ) diff --git a/pkgs/clan-cli/clan_cli/vars/get_test.py b/pkgs/clan-cli/clan_cli/vars/get_test.py new file mode 100644 index 000000000..00726dabd --- /dev/null +++ b/pkgs/clan-cli/clan_cli/vars/get_test.py @@ -0,0 +1,12 @@ +from pathlib import Path + +import pytest +from clan_cli.tests.helpers import cli +from clan_lib.errors import ClanError + + +def test_get_command_no_flake(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None: + monkeypatch.chdir(tmp_path) + + with pytest.raises(ClanError): + cli.run(["vars", "get", "machine1", "var1"]) diff --git a/pkgs/clan-cli/clan_cli/vars/list.py b/pkgs/clan-cli/clan_cli/vars/list.py index 5bd8cfcda..58ba5deba 100644 --- a/pkgs/clan-cli/clan_cli/vars/list.py +++ b/pkgs/clan-cli/clan_cli/vars/list.py @@ -2,7 +2,7 @@ import argparse import logging from clan_cli.completions import add_dynamic_completer, complete_machines -from clan_lib.flake import Flake +from clan_lib.flake import Flake, require_flake from clan_lib.machines.machines import Machine from .generate import Var @@ -37,7 +37,8 @@ def stringify_all_vars(machine: Machine) -> str: def list_command(args: argparse.Namespace) -> None: - machine = Machine(name=args.machine, flake=args.flake) + flake = require_flake(args.flake) + machine = Machine(name=args.machine, flake=flake) print(stringify_all_vars(machine)) diff --git a/pkgs/clan-cli/clan_cli/vars/list_test.py b/pkgs/clan-cli/clan_cli/vars/list_test.py new file mode 100644 index 000000000..f82d572b6 --- /dev/null +++ b/pkgs/clan-cli/clan_cli/vars/list_test.py @@ -0,0 +1,12 @@ +from pathlib import Path + +import pytest +from clan_cli.tests.helpers import cli +from clan_lib.errors import ClanError + + +def test_list_command_no_flake(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None: + monkeypatch.chdir(tmp_path) + + with pytest.raises(ClanError): + cli.run(["vars", "list", "machine1"]) diff --git a/pkgs/clan-cli/clan_cli/vars/upload.py b/pkgs/clan-cli/clan_cli/vars/upload.py index d71e49ee9..5b2f8af5b 100644 --- a/pkgs/clan-cli/clan_cli/vars/upload.py +++ b/pkgs/clan-cli/clan_cli/vars/upload.py @@ -3,6 +3,7 @@ import logging from pathlib import Path from clan_cli.completions import add_dynamic_completer, complete_machines +from clan_lib.flake import require_flake from clan_lib.machines.machines import Machine from clan_lib.ssh.remote import Remote @@ -22,7 +23,8 @@ def populate_secret_vars(machine: Machine, directory: Path) -> None: def upload_command(args: argparse.Namespace) -> None: - machine = Machine(name=args.machine, flake=args.flake) + flake = require_flake(args.flake) + machine = Machine(name=args.machine, flake=flake) directory = None if args.directory: directory = Path(args.directory) diff --git a/pkgs/clan-cli/clan_cli/vars/upload_test.py b/pkgs/clan-cli/clan_cli/vars/upload_test.py new file mode 100644 index 000000000..b2ae68885 --- /dev/null +++ b/pkgs/clan-cli/clan_cli/vars/upload_test.py @@ -0,0 +1,14 @@ +from pathlib import Path + +import pytest +from clan_cli.tests.helpers import cli +from clan_lib.errors import ClanError + + +def test_upload_command_no_flake( + tmp_path: Path, monkeypatch: pytest.MonkeyPatch +) -> None: + monkeypatch.chdir(tmp_path) + + with pytest.raises(ClanError): + cli.run(["vars", "upload", "machine1"])