diff --git a/default.nix b/default.nix index d4d964a..7ee7c59 100644 --- a/default.nix +++ b/default.nix @@ -10,6 +10,8 @@ let inherit kubenix; }; + # evalModules with same interface as lib.evalModules and kubenix as + # special argument evalModules = { module ? null, modules ? [module], @@ -27,8 +29,9 @@ let modules = import ./modules; kubenix = { - inherit evalModules kubenix; + inherit evalModules modules; lib = kubenixLib; - } // modules; + module = modules.module; + }; in kubenix diff --git a/lib/default.nix b/lib/default.nix index 266b6ed..257e02c 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -3,4 +3,5 @@ (import ./extra.nix { inherit pkgs lib; }) // { k8s = import ./k8s.nix { inherit lib; }; docker = import ./docker.nix { inherit lib pkgs; }; + helm = import ./helm { inherit pkgs; }; } diff --git a/modules/helm/chart2json.nix b/lib/helm/chart2json.nix similarity index 100% rename from modules/helm/chart2json.nix rename to lib/helm/chart2json.nix diff --git a/lib/helm/default.nix b/lib/helm/default.nix new file mode 100644 index 0000000..093251b --- /dev/null +++ b/lib/helm/default.nix @@ -0,0 +1,6 @@ +{ pkgs }: + +{ + chart2json = pkgs.callPackage ./chart2json.nix { }; + fetch = pkgs.callPackage ./fetchhelm.nix { }; +} diff --git a/modules/helm/fetchhelm.nix b/lib/helm/fetchhelm.nix similarity index 100% rename from modules/helm/fetchhelm.nix rename to lib/helm/fetchhelm.nix diff --git a/modules/helm/test.nix b/lib/helm/test.nix similarity index 100% rename from modules/helm/test.nix rename to lib/helm/test.nix diff --git a/modules/default.nix b/modules/default.nix index 39b54b7..25678e6 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -1,9 +1,10 @@ { + k8s = ./k8s.nix; + istio = ./istio.nix; submodules = ./submodules.nix; - k8s = ./k8s; - istio = ./istio; - testing = ./testing; - helm = ./helm; - docker = ./docker; + helm = ./helm.nix; + docker = ./docker.nix; + testing = ./testing.nix; + test = ./test.nix; module = ./module.nix; } diff --git a/modules/docker/default.nix b/modules/docker.nix similarity index 100% rename from modules/docker/default.nix rename to modules/docker.nix diff --git a/modules/k8s/generated/v1.10.nix b/modules/generated/v1.10.nix similarity index 100% rename from modules/k8s/generated/v1.10.nix rename to modules/generated/v1.10.nix diff --git a/modules/k8s/generated/v1.11.nix b/modules/generated/v1.11.nix similarity index 100% rename from modules/k8s/generated/v1.11.nix rename to modules/generated/v1.11.nix diff --git a/modules/k8s/generated/v1.12.nix b/modules/generated/v1.12.nix similarity index 100% rename from modules/k8s/generated/v1.12.nix rename to modules/generated/v1.12.nix diff --git a/modules/k8s/generated/v1.13.nix b/modules/generated/v1.13.nix similarity index 100% rename from modules/k8s/generated/v1.13.nix rename to modules/generated/v1.13.nix diff --git a/modules/k8s/generated/v1.7.nix b/modules/generated/v1.7.nix similarity index 100% rename from modules/k8s/generated/v1.7.nix rename to modules/generated/v1.7.nix diff --git a/modules/k8s/generated/v1.8.nix b/modules/generated/v1.8.nix similarity index 100% rename from modules/k8s/generated/v1.8.nix rename to modules/generated/v1.8.nix diff --git a/modules/k8s/generated/v1.9.nix b/modules/generated/v1.9.nix similarity index 100% rename from modules/k8s/generated/v1.9.nix rename to modules/generated/v1.9.nix diff --git a/modules/helm/default.nix b/modules/helm.nix similarity index 88% rename from modules/helm/default.nix rename to modules/helm.nix index 065272c..b280efe 100644 --- a/modules/helm/default.nix +++ b/modules/helm.nix @@ -1,4 +1,7 @@ -{ config, lib, pkgs, kubenix, ... }: +# helm defines kubenix module with options for using helm charts +# with kubenix + +{ config, lib, pkgs, helm, ... }: with lib; @@ -21,13 +24,11 @@ let version = last splitted; }; - chart2json = pkgs.callPackage ./chart2json.nix { }; - fetchhelm = pkgs.callPackage ./fetchhelm.nix { }; - in { - imports = [ - kubenix.k8s - ]; + imports = [ ./k8s.nix ]; + + # expose helm helper methods as module argument + config._module.args.helm = import ../lib/helm { inherit pkgs; }; options.kubernetes.helm = { instances = mkOption { @@ -86,19 +87,13 @@ in { metadata.namespace = mkDefault config.namespace; }]; - config.objects = importJSON (chart2json { + config.objects = importJSON (helm.chart2json { inherit (config) chart name namespace values kubeVersion; }); })); }; }; - # include helper helm methods as args - config._module.args.helm = { - fetch = fetchhelm; - chart2json = chart2json; - }; - config.kubernetes.api = mkMerge (flatten (mapAttrsToList (_: instance: map (object: let apiVersion = parseApiVersion object.apiVersion; diff --git a/modules/istio/overrides.nix b/modules/istio-overrides.nix similarity index 100% rename from modules/istio/overrides.nix rename to modules/istio-overrides.nix diff --git a/modules/istio/default.nix b/modules/istio.nix similarity index 99% rename from modules/istio/default.nix rename to modules/istio.nix index 51c4f9f..b019440 100644 --- a/modules/istio/default.nix +++ b/modules/istio.nix @@ -4697,7 +4697,7 @@ let }; }; - } // (import ./overrides.nix {inherit definitions lib;}); + } // (import ./istio-overrides.nix {inherit definitions lib;}); in { kubernetes.customResources = [ { diff --git a/modules/k8s/default.nix b/modules/k8s.nix similarity index 97% rename from modules/k8s/default.nix rename to modules/k8s.nix index 49a0070..22b2035 100644 --- a/modules/k8s/default.nix +++ b/modules/k8s.nix @@ -1,3 +1,5 @@ +# K8S module defines kubernetes definitions for kubenix + { config, lib, pkgs, k8s, ... }: with lib; @@ -108,8 +110,8 @@ let indexOf = lst: value: head (filter (v: v != -1) (imap0 (i: v: if v == value then i else -1) lst)); in { - # expose k8s helper methods through arg in modules - config._module.args.k8s = import ../../lib/k8s.nix { inherit lib; }; + # expose k8s helper methods as module argument + config._module.args.k8s = import ../lib/k8s.nix { inherit lib; }; options.kubernetes.version = mkOption { description = "Kubernetes version to use"; diff --git a/modules/k8s/submodule.nix b/modules/k8s/submodule.nix deleted file mode 100644 index fe9fc58..0000000 --- a/modules/k8s/submodule.nix +++ /dev/null @@ -1,59 +0,0 @@ -{ config, lib, kubenix, ... }: - -with lib; - -let - globalConfig = config; -in { - imports = [ kubenix.submodules ]; - - options = { - 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.k8s ]; - kubernetes.version = mkDefault config.kubernetes.version; - kubernetes.api.defaults = - mkIf config.kubernetes.propagateDefaults config.kubernetes.api.defaults; - }; - } { - default = ({config, ...}: { - kubernetes.api.defaults = [{ - default.metadata.labels = { - "kubenix/module-name" = config.submodule.name; - "kubenix/module-version" = config.submodule.version; - }; - }]; - }); - }]; - - kubernetes.objects = mkMerge (mapAttrsToList (_: submodule: - submodule.config.kubernetes.objects - ) config.submodules.instances); - }; -} diff --git a/modules/module.nix b/modules/module.nix index ea2747c..33a2e47 100644 --- a/modules/module.nix +++ b/modules/module.nix @@ -1,11 +1,15 @@ -{ config, lib, kubenix, ... }: +# module.nix defines default kubenix module with additional helper options +# and preincluded kubenix module definitions for kubernetes, docker and +# kubenix submodules + +{ config, lib, ... }: with lib; let parentConfig = config; in { - imports = with kubenix; [ submodules k8s docker ]; + imports = [ ./k8s.nix ./docker.nix ./submodules.nix ]; options = { kubenix.release = mkOption { @@ -42,7 +46,7 @@ in { config = { submodules.defaults = [{ default = { - imports = [ kubenix.module ]; + imports = [ ./module.nix ]; kubernetes.version = mkDefault config.kubernetes.version; kubernetes.api.defaults = mkIf config.kubernetes.propagateDefaults config.kubernetes.api.defaults; diff --git a/modules/testing/test.nix b/modules/test.nix similarity index 100% rename from modules/testing/test.nix rename to modules/test.nix diff --git a/modules/testing/default.nix b/modules/testing.nix similarity index 100% rename from modules/testing/default.nix rename to modules/testing.nix diff --git a/tests/default.nix b/tests/default.nix index 70c6cd8..251b69e 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -16,13 +16,9 @@ let version' = replaceStrings ["."] ["_"] version; in nameValuePair "v${version'}" (kubenix.evalModules { modules = [ - kubenix.testing + kubenix.modules.testing { - imports = [kubenix.k8s kubenix.submodules]; - - kubernetes.version = version; - testing.throwError = throwError; testing.e2e = e2e; testing.tests = [ @@ -40,7 +36,7 @@ let ./module.nix ]; testing.defaults = ({kubenix, ...}: { - imports = [kubenix.k8s]; + imports = [kubenix.modules.k8s]; kubernetes.version = version; _module.args.images = images; }); diff --git a/tests/helm/simple.nix b/tests/helm/simple.nix index 139c2a7..98f05d5 100644 --- a/tests/helm/simple.nix +++ b/tests/helm/simple.nix @@ -1,4 +1,4 @@ -{ config, lib, test, pkgs, kubenix, helm, ... }: +{ config, lib, pkgs, kubenix, helm, ... }: with lib; with kubenix.lib; @@ -29,9 +29,7 @@ let finalImageTag = "latest"; }; in { - imports = [ - kubenix.helm - ]; + imports = [ kubenix.modules.test kubenix.modules.helm ]; test = { name = "helm-simple"; diff --git a/tests/istio/bookinfo.nix b/tests/istio/bookinfo.nix index bcb090c..269bca8 100644 --- a/tests/istio/bookinfo.nix +++ b/tests/istio/bookinfo.nix @@ -1,12 +1,7 @@ -{ config, test, kubenix, k8s, ... }: - -with k8s; +{ config, kubenix, ... }: { - imports = [ - kubenix.k8s - kubenix.istio - ]; + imports = with kubenix.modules; [ test k8s istio ]; test = { name = "istio-bookinfo"; diff --git a/tests/k8s/1.13/crd.nix b/tests/k8s/1.13/crd.nix index 589b073..4b3b20d 100644 --- a/tests/k8s/1.13/crd.nix +++ b/tests/k8s/1.13/crd.nix @@ -5,9 +5,7 @@ with lib; let cfg = config.kubernetes.api.customresourcedefinitions.crontabs; in { - imports = [ - kubenix.k8s - ]; + imports = with kubenix.modules; [ test k8s ]; test = { name = "k8s-1.13-crd"; diff --git a/tests/k8s/crd.nix b/tests/k8s/crd.nix index 0c4c913..2fea676 100644 --- a/tests/k8s/crd.nix +++ b/tests/k8s/crd.nix @@ -5,9 +5,7 @@ with lib; let cfg = config.kubernetes.api.customresourcedefinitions.crontabs; in { - imports = [ - kubenix.k8s - ]; + imports = with kubenix.modules; [ test k8s ]; test = { name = "k8s-crd"; diff --git a/tests/k8s/defaults.nix b/tests/k8s/defaults.nix index 07d9508..8f4a8fe 100644 --- a/tests/k8s/defaults.nix +++ b/tests/k8s/defaults.nix @@ -1,15 +1,12 @@ -{ config, lib, test, kubenix, k8s, ... }: +{ config, lib, kubenix, ... }: with lib; -with k8s; let pod1 = config.kubernetes.api.pods.pod1; pod2 = config.kubernetes.api.pods.pod2; in { - imports = [ - kubenix.k8s - ]; + imports = with kubenix.modules; [ test k8s ]; test = { name = "k8s-defaults"; diff --git a/tests/k8s/deployment.nix b/tests/k8s/deployment.nix index e1b3919..d2288fd 100644 --- a/tests/k8s/deployment.nix +++ b/tests/k8s/deployment.nix @@ -1,4 +1,4 @@ -{ config, lib, pkgs, test, kubenix, images, ... }: +{ config, lib, pkgs, kubenix, images, ... }: with lib; @@ -6,9 +6,7 @@ let cfg = config.kubernetes.api.deployments.nginx; image = images.nginx; in { - imports = [ - kubenix.k8s - ]; + imports = [ kubenix.modules.test kubenix.modules.k8s ]; test = { name = "k8s-deployment"; diff --git a/tests/k8s/order.nix b/tests/k8s/order.nix index 5079a9e..314e820 100644 --- a/tests/k8s/order.nix +++ b/tests/k8s/order.nix @@ -5,9 +5,7 @@ with lib; let cfg = config.kubernetes.api.customresourcedefinitions.crontabs; in { - imports = [ - kubenix.k8s - ]; + imports = with kubenix.modules; [ test k8s ]; test = { name = "k8s-order"; diff --git a/tests/k8s/simple.nix b/tests/k8s/simple.nix index 07f447a..107b788 100644 --- a/tests/k8s/simple.nix +++ b/tests/k8s/simple.nix @@ -1,13 +1,9 @@ -{ config, test, kubenix, k8s, ... }: - -with k8s; +{ config, kubenix, ... }: let cfg = config.kubernetes.api.pods.nginx; in { - imports = [ - kubenix.k8s - ]; + imports = [ kubenix.modules.test kubenix.modules.k8s ]; test = { name = "k8s-simple"; diff --git a/tests/module.nix b/tests/module.nix index b2a7ae7..4191489 100644 --- a/tests/module.nix +++ b/tests/module.nix @@ -6,9 +6,7 @@ let cfg = config.submodules.instances.test.config; deployment = cfg.kubernetes.api.deployments.nginx; in { - imports = [ - kubenix.module - ]; + imports = [ kubenix.modules.test kubenix.module ]; test = { name = "module"; diff --git a/tests/submodules/defaults.nix b/tests/submodules/defaults.nix index 7b662d4..32d0838 100644 --- a/tests/submodules/defaults.nix +++ b/tests/submodules/defaults.nix @@ -21,9 +21,7 @@ let }; }; in { - imports = [ - kubenix.submodules - ]; + imports = with kubenix.modules; [ test submodules ]; test = { name = "submodules-defatuls"; diff --git a/tests/submodules/simple.nix b/tests/submodules/simple.nix index 4d967d8..c8b3c05 100644 --- a/tests/submodules/simple.nix +++ b/tests/submodules/simple.nix @@ -5,9 +5,7 @@ with lib; let cfg = config.submodules.instances.instance; in { - imports = [ - kubenix.submodules - ]; + imports = with kubenix.modules; [ test submodules ]; test = { name = "submodules-simple"; diff --git a/tests/submodules/versioning.nix b/tests/submodules/versioning.nix index d5fde23..e316b5f 100644 --- a/tests/submodules/versioning.nix +++ b/tests/submodules/versioning.nix @@ -16,9 +16,7 @@ let }; }; in { - imports = [ - kubenix.submodules - ]; + imports = with kubenix.modules; [ test submodules ]; test = { name = "submodules-imports";