diff --git a/modules/submodule.nix b/modules/submodule.nix index d5fc165..27a7b2c 100644 --- a/modules/submodule.nix +++ b/modules/submodule.nix @@ -29,10 +29,16 @@ with lib; default = []; }; + exports = mkOption { + description = "Attribute set of functions to export"; + type = types.attrs; + default = {}; + }; + passthru = mkOption { description = "Attribute set to passthru"; - default = {}; type = types.attrs; + default = {}; }; args._empty = mkOption {}; diff --git a/modules/submodules.nix b/modules/submodules.nix index aa3dfd6..4543960 100644 --- a/modules/submodules.nix +++ b/modules/submodules.nix @@ -144,11 +144,17 @@ in { description = "Submodule definition"; type = types.attrs; }; + + exportAs = mkOption { + description = "Name under which to register exports"; + type = types.nullOr types.str; + default = null; + }; }; config = { definition = { - inherit (evaledSubmodule.config.submodule) name description version tags; + inherit (evaledSubmodule.config.submodule) name description version tags exports; }; features = evaledSubmodule.config._module.features; @@ -230,6 +236,11 @@ in { config = mkMerge ([ { + # register exported functions as args + _module.args = mkMerge (map (submodule: { + ${submodule.exportAs} = submodule.definition.exports; + }) (filter (submodule: submodule.exportAs != null) cfg.imports)); + _module.features = ["submodules"]; submodules.specialArgs.kubenix = kubenix; diff --git a/tests/default.nix b/tests/default.nix index 26ee633..b097332 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -36,6 +36,7 @@ let ./submodules/simple.nix ./submodules/defaults.nix ./submodules/versioning.nix + ./submodules/exports.nix ]; testing.args = { inherit images k8sVersion; diff --git a/tests/submodules/exports.nix b/tests/submodules/exports.nix new file mode 100644 index 0000000..90ec487 --- /dev/null +++ b/tests/submodules/exports.nix @@ -0,0 +1,32 @@ +{ name, config, lib, kubenix, subm-lib, ... }: + +with lib; + +let + submodule = { + imports = [ kubenix.modules.submodule ]; + + config.submodule = { + name = "subm"; + exports = { + inherit id; + }; + }; + }; +in { + imports = with kubenix.modules; [ test submodules ]; + + test = { + name = "submodules-exports"; + description = "Submodules exports test"; + assertions = [{ + message = "should have library exported"; + assertion = subm-lib.id 1 == 1; + }]; + }; + + submodules.imports = [{ + modules = [submodule]; + exportAs = "subm-lib"; + }]; +}