diff --git a/pkgs/clan-cli/clan_cli/inventory/__init__.py b/pkgs/clan-cli/clan_cli/inventory/__init__.py index 9dba86ddf..0a7965f28 100644 --- a/pkgs/clan-cli/clan_cli/inventory/__init__.py +++ b/pkgs/clan-cli/clan_cli/inventory/__init__.py @@ -473,10 +473,18 @@ def patch(d: dict[str, Any], path: str, content: Any) -> None: @API.register def patch_inventory_with(base_dir: Path, section: str, content: dict[str, Any]) -> None: + """ + Pass only the section to update and the content to update with. + Make sure you pass only attributes that you would like to persist. + ATTENTION: Don't pass nix eval values unintentionally. + """ + inventory_file = get_inventory_path(base_dir) + curr_inventory = {} - with inventory_file.open("r") as f: - curr_inventory = json.load(f) + if inventory_file.exists(): + with inventory_file.open("r") as f: + curr_inventory = json.load(f) patch(curr_inventory, section, content) diff --git a/pkgs/clan-cli/clan_cli/machines/create.py b/pkgs/clan-cli/clan_cli/machines/create.py index 5ea2a4e67..c54309f86 100644 --- a/pkgs/clan-cli/clan_cli/machines/create.py +++ b/pkgs/clan-cli/clan_cli/machines/create.py @@ -12,12 +12,11 @@ from clan_cli.flake import Flake from clan_cli.git import commit_file from clan_cli.inventory import ( Machine as InventoryMachine, - patch_inventory_with, - dataclass_to_dict, ) from clan_cli.inventory import ( MachineDeploy, - get_inventory, + dataclass_to_dict, + patch_inventory_with, ) from clan_cli.machines.list import list_nixos_machines from clan_cli.templates import ( diff --git a/pkgs/clan-cli/tests/test_patch_inventory.py b/pkgs/clan-cli/tests/test_patch_inventory.py index e1e1533b0..387502db6 100644 --- a/pkgs/clan-cli/tests/test_patch_inventory.py +++ b/pkgs/clan-cli/tests/test_patch_inventory.py @@ -1,4 +1,6 @@ # Functions to test +from typing import Any + import pytest from clan_cli.errors import ClanError from clan_cli.inventory import ( @@ -370,7 +372,7 @@ def test_dont_persist_defaults() -> None: "enabled": True, "config": {"foo": "bar"}, } - data_disk = {} + data_disk: dict[str, Any] = {} writeables = determine_writeability(prios, data_eval, data_disk) assert writeables == {"writeable": {"config", "enabled"}, "non_writeable": set()}