diff --git a/lib/modules/inventory/distributed-service/all-services-wrapper.nix b/lib/modules/inventory/distributed-service/all-services-wrapper.nix index eda9940ab..d250ed517 100644 --- a/lib/modules/inventory/distributed-service/all-services-wrapper.nix +++ b/lib/modules/inventory/distributed-service/all-services-wrapper.nix @@ -27,14 +27,16 @@ in placeholder = "mappedServiceName"; elemType = submoduleWith { class = "clan.service"; + specialArgs = { + exports = config.exports; + directory = directory; + clanLib = specialArgs.clanLib; + }; modules = [ ( { name, ... }: { _module.args._ctx = [ name ]; - _module.args.exports = config.exports; - _module.args.directory = directory; - } ) ./service-module.nix diff --git a/lib/modules/inventory/distributed-service/tests/default.nix b/lib/modules/inventory/distributed-service/tests/default.nix index a58d8390e..6a7beb4db 100644 --- a/lib/modules/inventory/distributed-service/tests/default.nix +++ b/lib/modules/inventory/distributed-service/tests/default.nix @@ -56,6 +56,7 @@ in extraModules = import ./extraModules.nix { inherit clanLib; }; exports = import ./exports.nix { inherit lib clanLib; }; settings = import ./settings.nix { inherit lib callInventoryAdapter; }; + specialArgs = import ./specialArgs.nix { inherit lib callInventoryAdapter; }; resolve_module_spec = import ./import_module_spec.nix { inherit lib callInventoryAdapter; }; test_simple = let diff --git a/lib/modules/inventory/distributed-service/tests/specialArgs.nix b/lib/modules/inventory/distributed-service/tests/specialArgs.nix new file mode 100644 index 000000000..8670f0e45 --- /dev/null +++ b/lib/modules/inventory/distributed-service/tests/specialArgs.nix @@ -0,0 +1,40 @@ +{ callInventoryAdapter, lib, ... }: +let + res = callInventoryAdapter { + modules."A" = m: { + _class = "clan.service"; + config = { + manifest = { + name = "network"; + }; + roles.default = { }; + + }; + options.test = lib.mkOption { + default = m; + }; + }; + machines = { + jon = { }; + }; + instances."instance_foo" = { + module = { + name = "A"; + input = "self"; + }; + roles.peer.machines.jon = { }; + }; + }; + + specialArgs = lib.attrNames res.servicesEval.config.mappedServices.self-A.test.specialArgs; +in +{ + test_simple = { + expr = specialArgs; + expected = [ + "clanLib" + "directory" + "exports" + ]; + }; +}