diff --git a/default.nix b/default.nix index 874581d..561d7f1 100644 --- a/default.nix +++ b/default.nix @@ -8,7 +8,7 @@ with import ./lib.nix { inherit pkgs; inherit (pkgs) lib; }; let evalKubernetesModules = configuration: evalModules rec { modules = [ - (import ./kubernetes.nix {}) + ./kubernetes.nix ./modules.nix configuration ]; args = { diff --git a/kubernetes.nix b/kubernetes.nix index 47fddbf..1f0b34f 100644 --- a/kubernetes.nix +++ b/kubernetes.nix @@ -1,5 +1,3 @@ -{ customResourceDefinitions ? null }: - { config, lib, k8s, pkgs, ... }: with lib; @@ -251,7 +249,7 @@ let customResourceOptions = mapAttrs (groupName: crd: mkOption { - description = "Custom resource for ${name}"; + description = "Custom resource for ${groupName}"; type = types.attrsOf (types.submodule ({name, ...}: { options = { apiVersion = mkOption { @@ -285,11 +283,7 @@ let })); default = {}; } - ) ( - if customResourceDefinitions == null - then config.kubernetes.resources.customResourceDefinitions - else customResourceDefinitions - ); + ) config.kubernetes.resources.customResourceDefinitions; in { inherit swaggerDefinitions definitions exportedDefinitions kubernetesResourceOptions customResourceOptions; }; diff --git a/modules.nix b/modules.nix index e36ade2..dfa4ec1 100644 --- a/modules.nix +++ b/modules.nix @@ -54,10 +54,7 @@ let _module.args.name = module.name; _module.args.module = module; } - (import ./kubernetes.nix { - customResourceDefinitions = - config.kubernetes.resources.customResourceDefinitions; - }) + ./kubernetes.nix ./modules.nix (moduleDefinition.module) { @@ -72,6 +69,11 @@ let mapAttrs' (name: resource: nameValuePair "${serviceName}-${name}" resource) resources ) resources; + prefixGroupResources = resources: serviceName: + mapAttrs' (groupName: resources: + nameValuePair "${serviceName}-${groupName}" resources + ) resources; + defaultModuleConfigurationOptions = mapAttrs (name: moduleDefinition: mkOption { description = "Module default configuration for ${name} module"; type = types.coercedTo types.attrs (value: [value]) (types.listOf types.attrs); @@ -153,7 +155,7 @@ in { kubernetes.customResources = mkMerge ( mapAttrsToList (name: module: - prefixResources (moduleToAttrs module.configuration.kubernetes.customResources) module.name + prefixGroupResources (moduleToAttrs module.configuration.kubernetes.customResources) module.name ) config.kubernetes.modules ); diff --git a/test/modules.nix b/test/modules.nix index 4a822f6..b3a6539 100644 --- a/test/modules.nix +++ b/test/modules.nix @@ -1,4 +1,4 @@ -{lib, k8s, ...}: +{lib, k8s, config, ...}: with k8s; with lib; @@ -40,11 +40,6 @@ with lib; metadata.name = mkForce "${name}-nginx"; } ]; - - kubernetes.customResources.cron.my-awesome-cron-object = mkMerge [ - (k8s.loadJSON ./cr.json) - {metadata.name = name;} - ]; }; }; @@ -52,15 +47,60 @@ with lib; module = "nginx"; configuration.password.name = "test2"; configuration.password.key = "password"; + + configuration.kubernetes.resources.customResourceDefinitions.secret-claims = { + kind = "CustomResourceDefinition"; + apiVersion = "apiextensions.k8s.io/v1beta1"; + metadata.name = "secretclaims.vaultproject.io"; + spec = { + group = "vaultproject.io"; + version = "v1"; + scope = "Namespaced"; + names = { + plural = "secretclaims"; + kind = "SecretClaim"; + shortNames = ["scl"]; + }; + }; + }; + + configuration.kubernetes.customResources.secret-claims.claim = { + metadata.name = "test"; + }; + }; kubernetes.modules.app-v2 = { module = "nginx"; configuration.port = 8080; + + configuration.kubernetes.modules.subsubmodule = { + module = "nginx"; + configuration.kubernetes.resources.customResourceDefinitions.secret-claims = { + kind = "CustomResourceDefinition"; + apiVersion = "apiextensions.k8s.io/v1beta1"; + metadata.name = "secretclaims.vaultproject.io"; + spec = { + group = "vaultproject.io"; + version = "v1"; + scope = "Namespaced"; + names = { + plural = "secretclaims"; + kind = "SecretClaim"; + shortNames = ["scl"]; + }; + }; + }; + + configuration.kubernetes.customResources.secret-claims.claim = { + metadata.name = "test"; + }; + }; }; kubernetes.resources.services.nginx = loadJSON ./service.json; kubernetes.defaultModuleConfiguration.all = { + config.kubernetes.moduleDefinitions = config.kubernetes.moduleDefinitions; config.kubernetes.defaults.deployments.spec.replicas = 3; };