From 2d787300378a89b621d16d9b2df17b8011e2bd9a Mon Sep 17 00:00:00 2001 From: Johannes Kirschbauer Date: Mon, 25 Aug 2025 11:27:03 +0200 Subject: [PATCH 1/2] clan/schema: rename json schemas consistent {clanSchemaNix, clanSchemaJson} --- devShell.nix | 2 +- lib/modules/inventory/schemas/default.nix | 10 +++++----- pkgs/clan-cli/clan_lib/nix_models/update.sh | 2 +- pkgs/clan-cli/flake-module.nix | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/devShell.nix b/devShell.nix index 117b4fcc6..38ce9ee40 100644 --- a/devShell.nix +++ b/devShell.nix @@ -46,7 +46,7 @@ ln -sfT ${inputs.nix-select} "$PRJ_ROOT/pkgs/clan-cli/clan_lib/select" # Generate classes.py from schemas - ${self'.packages.classgen}/bin/classgen ${self'.legacyPackages.schemas.clan-schema-abstract}/schema.json $PRJ_ROOT/pkgs/clan-cli/clan_lib/nix_models/clan.py + ${self'.packages.classgen}/bin/classgen ${self'.legacyPackages.schemas.clanSchemaJson}/schema.json $PRJ_ROOT/pkgs/clan-cli/clan_lib/nix_models/clan.py ''; }; }; diff --git a/lib/modules/inventory/schemas/default.nix b/lib/modules/inventory/schemas/default.nix index fd88f34ab..f85096db5 100644 --- a/lib/modules/inventory/schemas/default.nix +++ b/lib/modules/inventory/schemas/default.nix @@ -21,14 +21,14 @@ let "secrets" "templates" ]; - clanSchema = jsonLib.parseOptions (lib.filterAttrs (n: _v: lib.elem n include) clanOpts) { }; + clanSchemaNix = jsonLib.parseOptions (lib.filterAttrs (n: _v: lib.elem n include) clanOpts) { }; - clan-schema-abstract = pkgs.stdenv.mkDerivation { + clanSchemaJson = pkgs.stdenv.mkDerivation { name = "clan-schema-files"; buildInputs = [ pkgs.cue ]; src = ./.; buildPhase = '' - export SCHEMA=${builtins.toFile "clan-schema.json" (builtins.toJSON clanSchema)} + export SCHEMA=${builtins.toFile "clan-schema.json" (builtins.toJSON clanSchemaNix)} cp $SCHEMA schema.json # Also generate a CUE schema version that is derived from the JSON schema cue import -f -p compose -l '#Root:' schema.json @@ -41,7 +41,7 @@ in { inherit flakeOptions - clanSchema - clan-schema-abstract + clanSchemaNix + clanSchemaJson ; } diff --git a/pkgs/clan-cli/clan_lib/nix_models/update.sh b/pkgs/clan-cli/clan_lib/nix_models/update.sh index 123d5d19a..5bdd0f747 100755 --- a/pkgs/clan-cli/clan_lib/nix_models/update.sh +++ b/pkgs/clan-cli/clan_lib/nix_models/update.sh @@ -2,7 +2,7 @@ set -euo pipefail -clanSchema=$(nix build .#schemas.clan-schema-abstract --print-out-paths)/schema.json +clanSchema=$(nix build .#schemas.clanSchemaJson --print-out-paths)/schema.json SCRIPT_DIR=$(dirname "$0") cd "$SCRIPT_DIR" nix run .#classgen -- "$clanSchema" "./clan.py" diff --git a/pkgs/clan-cli/flake-module.nix b/pkgs/clan-cli/flake-module.nix index d9cb14b71..bab9fe618 100644 --- a/pkgs/clan-cli/flake-module.nix +++ b/pkgs/clan-cli/flake-module.nix @@ -134,7 +134,7 @@ classFile = "clan.py"; }; installPhase = '' - ${self'.packages.classgen}/bin/classgen ${self'.legacyPackages.schemas.clan-schema-abstract}/schema.json b_classes.py + ${self'.packages.classgen}/bin/classgen ${self'.legacyPackages.schemas.clanSchemaJson}/schema.json b_classes.py file1=$classFile file2=b_classes.py From 4414403deceffb6bd41b5ebb234d603f275f4f11 Mon Sep 17 00:00:00 2001 From: Johannes Kirschbauer Date: Mon, 25 Aug 2025 11:27:38 +0200 Subject: [PATCH 2/2] clan/inventory: allow list usage of roles via polymorphism --- lib/modules/inventoryClass/roles-interface.nix | 4 +++- pkgs/clan-cli/clan_lib/nix_models/clan.py | 9 +-------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/lib/modules/inventoryClass/roles-interface.nix b/lib/modules/inventoryClass/roles-interface.nix index 562e7079f..0f3a437f4 100644 --- a/lib/modules/inventoryClass/roles-interface.nix +++ b/lib/modules/inventoryClass/roles-interface.nix @@ -27,7 +27,9 @@ in default = { }; }; tags = lib.mkOption { - type = types.attrsOf (types.submodule { }); + type = types.coercedTo (types.listOf types.str) (t: lib.genAttrs t (_: { })) ( + types.attrsOf (types.submodule { }) + ); default = { }; }; settings = diff --git a/pkgs/clan-cli/clan_lib/nix_models/clan.py b/pkgs/clan-cli/clan_lib/nix_models/clan.py index ca542af05..fce261d54 100644 --- a/pkgs/clan-cli/clan_lib/nix_models/clan.py +++ b/pkgs/clan-cli/clan_lib/nix_models/clan.py @@ -31,17 +31,10 @@ class InventoryInstanceRoleMachine(TypedDict): - - -class InventoryInstanceRoleTag(TypedDict): - pass - - - InventoryInstanceRoleExtramodulesType = list[dict[str, Any] | str] InventoryInstanceRoleMachinesType = dict[str, InventoryInstanceRoleMachine] InventoryInstanceRoleSettingsType = Unknown -InventoryInstanceRoleTagsType = dict[str, InventoryInstanceRoleTag] +InventoryInstanceRoleTagsType = dict[str, Any] | list[str] class InventoryInstanceRole(TypedDict): extraModules: NotRequired[InventoryInstanceRoleExtramodulesType]