From 317123d5d83e717ff8e7db922a50386592e637fc Mon Sep 17 00:00:00 2001 From: Jaka Hudoklin Date: Tue, 9 Jan 2018 17:03:58 +0100 Subject: [PATCH] feat(kubernetes): apply defaults to custom resources --- kubernetes.nix | 29 +++++++++++++++++++---------- test/modules.nix | 2 -- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/kubernetes.nix b/kubernetes.nix index 8aed6a0..47fddbf 100644 --- a/kubernetes.nix +++ b/kubernetes.nix @@ -249,10 +249,10 @@ let default = {}; }) exportedDefinitions; - customResourceOptions = mapAttrs (name: crd: + customResourceOptions = mapAttrs (groupName: crd: mkOption { description = "Custom resource for ${name}"; - type = types.attrsOf (types.submodule ({name, config, ...}: { + type = types.attrsOf (types.submodule ({name, ...}: { options = { apiVersion = mkOption { description = "API version of custom resource"; @@ -278,6 +278,10 @@ let default = {}; }; } // extraOptions; + config = mkMerge ( + config.kubernetes.defaults.${groupName} ++ + config.kubernetes.defaults.all + ); })); default = {}; } @@ -297,20 +301,25 @@ let }; versionOptions = { - "1.7" = (versionDefinitions."1.7").kubernetesResourceOptions // { - # kubernetes 1.7 supports crd, but does not have swagger definitions for some reason - customResourceDefinitions = - versionDefinitions."1.8".kubernetesResourceOptions.customResourceDefinitions; + "1.7" = versionDefinitions."1.7" // { + kubernetesResourceOptions = versionDefinitions."1.7".kubernetesResourceOptions // { + # kubernetes 1.7 supports crd, but does not have swagger definitions for some reason + customResourceDefinitions = + versionDefinitions."1.8".kubernetesResourceOptions.customResourceDefinitions; + }; }; - "1.8" = (versionDefinitions."1.8").kubernetesResourceOptions; - "1.9" = (versionDefinitions."1.9").kubernetesResourceOptions; + "1.8" = versionDefinitions."1.8"; + "1.9" = versionDefinitions."1.9"; }; defaultOptions = mapAttrs (name: value: mkOption { description = "Kubernetes defaults for ${name} resources"; type = types.coercedTo types.attrs (value: [value]) (types.listOf types.attrs); default = []; - }) versionOptions.${config.kubernetes.version}; + }) ( + (versionOptions.${config.kubernetes.version}.kubernetesResourceOptions) // + (versionOptions.${config.kubernetes.version}.customResourceOptions) + ); in { options.kubernetes.version = mkOption { description = "Kubernetes version to deploy to"; @@ -320,7 +329,7 @@ in { options.kubernetes.resources = mkOption { type = types.submodule { - options = versionOptions.${config.kubernetes.version}; + options = versionOptions.${config.kubernetes.version}.kubernetesResourceOptions; }; description = "Attribute set of kubernetes resources"; default = {}; diff --git a/test/modules.nix b/test/modules.nix index 2b2cc4f..4a822f6 100644 --- a/test/modules.nix +++ b/test/modules.nix @@ -67,7 +67,5 @@ with lib; kubernetes.defaultModuleConfiguration.nginx = { kubernetes.defaults.deployments.spec.replicas = mkDefault 4; }; - - kubernetes.defaults.all.metadata.namespace = "test"; }; }