From a8dcc69d548b6d22b1ea725744662495705d4b76 Mon Sep 17 00:00:00 2001 From: Jaka Hudoklin Date: Sun, 6 Oct 2019 21:36:13 +0200 Subject: [PATCH] feat(submodules): support for submodule passthru --- modules/docker.nix | 15 +++------------ modules/k8s.nix | 19 ++++--------------- modules/submodule.nix | 2 +- modules/submodules.nix | 16 +++++++++++++++- tests/k8s/submodule.nix | 8 +++++++- 5 files changed, 30 insertions(+), 30 deletions(-) diff --git a/modules/docker.nix b/modules/docker.nix index 6b9f6d6..8c28672 100644 --- a/modules/docker.nix +++ b/modules/docker.nix @@ -87,17 +87,8 @@ in { }; }]; - docker.export = mkMerge [ - (mapAttrsToList (_: i: i.image) - (filterAttrs (_: i: i.registry != null) config.docker.images)) - - # passthru of docker exported images if passthru is enabled on submodule - # and submodule has docker module loaded - (flatten (mapAttrsToList (_: submodule: - optionals - (submodule.passthru.enable && (elem "docker" submodule.config._module.features)) - submodule.config.docker.export - ) config.submodules.instances)) - ]; + # list of exported docker images + docker.export = mapAttrsToList (_: i: i.image) + (filterAttrs (_: i: i.registry != null) config.docker.images); }; } diff --git a/modules/k8s.nix b/modules/k8s.nix index a72585c..61f46e0 100644 --- a/modules/k8s.nix +++ b/modules/k8s.nix @@ -363,21 +363,10 @@ in { resources.${group}.${version}.${kind}.${name} = object; }) cfg.imports)); - kubernetes.objects = mkMerge [ - # versioned resources - (flatten (map (type: - mapAttrsToList (name: resource: moduleToAttrs resource) - cfg.api.resources.${type.group}.${type.version}.${type.kind} - ) cfg.api.types)) - - # passthru of child kubernetes objects if passthru is enabled on submodule - # and submodule has k8s module loaded - (flatten (mapAttrsToList (_: submodule: - optionals - (submodule.passthru.enable && (elem "k8s" submodule.config._module.features)) - submodule.config.kubernetes.objects - ) config.submodules.instances)) - ]; + kubernetes.objects = flatten (map (type: + mapAttrsToList (name: resource: moduleToAttrs resource) + cfg.api.resources.${type.group}.${type.version}.${type.kind} + ) cfg.api.types); kubernetes.generated = k8s.mkHashedList { items = config.kubernetes.objects; diff --git a/modules/submodule.nix b/modules/submodule.nix index b8c4ed4..d5fc165 100644 --- a/modules/submodule.nix +++ b/modules/submodule.nix @@ -30,7 +30,7 @@ with lib; }; passthru = mkOption { - description = "Attribute set to passthru to parent"; + description = "Attribute set to passthru"; default = {}; type = types.attrs; }; diff --git a/modules/submodules.nix b/modules/submodules.nix index 0081e04..e457ef0 100644 --- a/modules/submodules.nix +++ b/modules/submodules.nix @@ -44,6 +44,20 @@ let then throw "No module found ${name}/${if version == null then "latest" else version}" else head versionSortedSubmodules; in matchingModule; + + passthruConfig = mapAttrsToList (name: opt: { + ${name} = mkMerge (mapAttrsToList (_: inst: + if inst.passthru.enable + then inst.config.submodule.passthru.${name} or {} + else {} + ) config.submodules.instances); + + _module.args = mkMerge (mapAttrsToList (_: inst: + if inst.passthru.enable + then inst.config.submodule.passthru._module.args or {} + else {} + ) config.submodules.instances); + }) (removeAttrs options ["_definedNames" "_module" "submodules"]); in { imports = [ ./base.nix ]; @@ -248,5 +262,5 @@ in { }; }]; }) - ]; + ] ++ passthruConfig); } diff --git a/tests/k8s/submodule.nix b/tests/k8s/submodule.nix index 7998365..2dca0d4 100644 --- a/tests/k8s/submodule.nix +++ b/tests/k8s/submodule.nix @@ -26,7 +26,13 @@ in { imports = with kubenix.modules; [ submodule k8s docker ]; config = { - submodule.name = "test-submodule"; + submodule = { + name = "test-submodule"; + passthru = { + kubernetes.objects = config.kubernetes.objects; + docker.images = config.docker.images; + }; + }; kubernetes.resources.pods.nginx = { metadata.name = name;