diff --git a/modules/all.nix b/modules/all.nix new file mode 100644 index 0000000..a7d45b0 --- /dev/null +++ b/modules/all.nix @@ -0,0 +1,71 @@ +{ config, lib, kubenix, ... }: + +with lib; + +let + parentConfig = config; +in { + imports = with kubenix; [ submodules k8s docker ]; + + options = { + kubenix.release = mkOption { + description = "Name of the release"; + type = types.str; + default = "default"; + }; + + kubernetes.propagateDefaults = mkOption { + description = "Whether to propagate child defaults to submodules"; + type = types.bool; + default = true; + }; + + submodules.instances = mkOption { + type = types.attrsOf (types.submodule ({config, ...}: { + options = { + namespace = mkOption { + description = "Default kubernetes namespace"; + type = types.str; + default = "default"; + }; + }; + + config.config = { + kubernetes.api.defaults = [{ + default.metadata.namespace = mkDefault config.namespace; + }]; + }; + })); + }; + }; + + config = { + submodules.defaults = [{ + default = { + imports = [ kubenix.all ]; + kubernetes.version = mkDefault config.kubernetes.version; + kubernetes.api.defaults = + mkIf config.kubernetes.propagateDefaults config.kubernetes.api.defaults; + }; + } { + default = ({config, ...}: { + kubenix.release = parentConfig.kubenix.release; + kubernetes.api.defaults = [{ + default.metadata.labels = { + "kubenix/module-name" = config.submodule.name; + "kubenix/module-version" = config.submodule.version; + "kubenix/release" = config.kubenix.release; + }; + }]; + }); + }]; + + kubernetes.objects = mkMerge (mapAttrsToList (_: submodule: + submodule.config.kubernetes.objects + ) config.submodules.instances); + + docker.push = mkMerge (mapAttrsToList (_: submodule: + submodule.config.docker.push + ) config.submodules.instances); + }; +} diff --git a/modules/default.nix b/modules/default.nix index 72750db..d8260e3 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -1,9 +1,9 @@ { submodules = ./submodules.nix; k8s = ./k8s; - k8s-submodules = ./k8s/submodule.nix; istio = ./istio; testing = ./testing; helm = ./helm; docker = ./docker; + all = ./all.nix; } diff --git a/modules/submodules.nix b/modules/submodules.nix index df34edc..4ea4d0a 100644 --- a/modules/submodules.nix +++ b/modules/submodules.nix @@ -191,6 +191,7 @@ in { submodules.instances = mkOption { description = "Attribute set of submodule instances"; + default = {}; type = types.attrsOf (types.submodule ({name, config, ...}: let # submodule associated with submodule = findSubmodule { diff --git a/release.nix b/release.nix index 3658a78..23a1e0d 100644 --- a/release.nix +++ b/release.nix @@ -1,4 +1,4 @@ -{pkgs ? import {}}: +{ pkgs ? import {} }: let kubenix = import ./. { inherit pkgs; }; diff --git a/tests/k8s/submodule.nix b/tests/all.nix similarity index 93% rename from tests/k8s/submodule.nix rename to tests/all.nix index 6fb68f4..50d6c1e 100644 --- a/tests/k8s/submodule.nix +++ b/tests/all.nix @@ -8,12 +8,12 @@ let image = images.nginx; in { imports = [ - kubenix.k8s-submodules + kubenix.all ]; test = { - name = "k8s-submodules"; - description = "Simple k8s submodule test"; + name = "all"; + description = "Test testing all submodule"; assertions = [{ message = "Namespace not propagated"; assertion = deployment.metadata.namespace == "test"; diff --git a/tests/default.nix b/tests/default.nix index 60ab3f6..9ff3e11 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -30,7 +30,6 @@ let ./k8s/deployment.nix ./k8s/crd.nix ./k8s/1.13/crd.nix - ./k8s/submodule.nix ./k8s/defaults.nix ./k8s/order.nix ./helm/simple.nix @@ -38,6 +37,7 @@ let ./submodules/simple.nix ./submodules/defaults.nix ./submodules/versioning.nix + ./all.nix ]; testing.defaults = ({kubenix, ...}: { imports = [kubenix.k8s];