From a69b81488b82b05d5fea8616e7f2e9043771b01c Mon Sep 17 00:00:00 2001 From: Johannes Kirschbauer Date: Thu, 27 Mar 2025 19:35:59 +0100 Subject: [PATCH] fix(inventory/instances): fix jsonschema compatibility --- lib/distributed-service/flake-module.nix | 20 +------------------- lib/distributed-service/service-module.nix | 4 +++- lib/inventory/build-inventory/interface.nix | 12 ++++++++---- pkgs/classgen/main.py | 2 ++ 4 files changed, 14 insertions(+), 24 deletions(-) diff --git a/lib/distributed-service/flake-module.nix b/lib/distributed-service/flake-module.nix index c97896e97..5e85c7577 100644 --- a/lib/distributed-service/flake-module.nix +++ b/lib/distributed-service/flake-module.nix @@ -15,24 +15,6 @@ in ... }: { - devShells.inventory-schema = pkgs.mkShell { - inputsFrom = with config.checks; [ - lib-inventory-eval - self'.devShells.default - ]; - }; - - legacyPackages.schemas = ( - import ./schemas { - inherit - pkgs - self - lib - self' - ; - } - ); - # Run: nix-unit --extra-experimental-features flakes --flake .#legacyPackages.x86_64-linux. legacyPackages.evalTest-distributedServices = import ./tests { inherit lib self; @@ -45,7 +27,7 @@ in nix-unit --eval-store "$HOME" \ --extra-experimental-features flakes \ ${inputOverrides} \ - --flake ${self}#legacyPackages.${system}.distributedServices + --flake ${self}#legacyPackages.${system}.evalTest-distributedServices touch $out ''; diff --git a/lib/distributed-service/service-module.nix b/lib/distributed-service/service-module.nix index 86da40818..eeda0e5a3 100644 --- a/lib/distributed-service/service-module.nix +++ b/lib/distributed-service/service-module.nix @@ -204,8 +204,9 @@ in elemType = submoduleWith { modules = [ (m: { - # TODO: make this a deferred module? + # TODO: Move the deferred module type into inventory interface ? options.settings = mkOption { + type = types.deferredModule; description = "Settings of '${name}-machine': ${m.name}."; default = { }; }; @@ -220,6 +221,7 @@ in # options._settingsViaTags = mkOption { }; # A deferred module that combines _settingsViaTags with _settings options.settings = mkOption { + type = types.deferredModule; description = "Settings of 'role': ${name}"; default = { }; }; diff --git a/lib/inventory/build-inventory/interface.nix b/lib/inventory/build-inventory/interface.nix index 2676bda1d..e48ce4b95 100644 --- a/lib/inventory/build-inventory/interface.nix +++ b/lib/inventory/build-inventory/interface.nix @@ -103,7 +103,9 @@ in default = options; }; modules = lib.mkOption { - type = types.attrsOf (types.either types.path types.deferredModule); + # Don't define the type yet + # We manually transform the value with types.deferredModule.merge later to keep them serializable + type = types.attrsOf types.raw; default = { }; defaultText = "clanModules of clan-core"; description = '' @@ -310,7 +312,9 @@ in types.submodule { options.settings = lib.mkOption { default = { }; - type = types.deferredModule; + # Dont transform the value with `types.deferredModule` here. We need to keep it json serializable + # TODO: We need a custom serializer for deferredModule + type = types.attrsOf types.raw; }; } ); @@ -321,7 +325,7 @@ in types.submodule { options.settings = lib.mkOption { default = { }; - type = types.deferredModule; + type = types.attrsOf types.raw; }; } ); @@ -329,7 +333,7 @@ in }; settings = lib.mkOption { default = { }; - type = types.deferredModule; + type = types.attrsOf types.raw; }; }; } diff --git a/pkgs/classgen/main.py b/pkgs/classgen/main.py index 1d733f3a3..1ed59203e 100644 --- a/pkgs/classgen/main.py +++ b/pkgs/classgen/main.py @@ -32,6 +32,8 @@ def map_json_type( return {"str"} if json_type == "integer": return {"int"} + if json_type == "number": + return {"float"} if json_type == "boolean": return {"bool"} # In Python, "number" is analogous to the float type.