feat(kubernetes): apply defaults to custom resources

This commit is contained in:
Jaka Hudoklin 2018-01-09 17:03:58 +01:00
parent 208a80f036
commit 317123d5d8
2 changed files with 19 additions and 12 deletions

View file

@ -249,10 +249,10 @@ let
default = {}; default = {};
}) exportedDefinitions; }) exportedDefinitions;
customResourceOptions = mapAttrs (name: crd: customResourceOptions = mapAttrs (groupName: crd:
mkOption { mkOption {
description = "Custom resource for ${name}"; description = "Custom resource for ${name}";
type = types.attrsOf (types.submodule ({name, config, ...}: { type = types.attrsOf (types.submodule ({name, ...}: {
options = { options = {
apiVersion = mkOption { apiVersion = mkOption {
description = "API version of custom resource"; description = "API version of custom resource";
@ -278,6 +278,10 @@ let
default = {}; default = {};
}; };
} // extraOptions; } // extraOptions;
config = mkMerge (
config.kubernetes.defaults.${groupName} ++
config.kubernetes.defaults.all
);
})); }));
default = {}; default = {};
} }
@ -297,20 +301,25 @@ let
}; };
versionOptions = { versionOptions = {
"1.7" = (versionDefinitions."1.7").kubernetesResourceOptions // { "1.7" = versionDefinitions."1.7" // {
# kubernetes 1.7 supports crd, but does not have swagger definitions for some reason kubernetesResourceOptions = versionDefinitions."1.7".kubernetesResourceOptions // {
customResourceDefinitions = # kubernetes 1.7 supports crd, but does not have swagger definitions for some reason
versionDefinitions."1.8".kubernetesResourceOptions.customResourceDefinitions; customResourceDefinitions =
versionDefinitions."1.8".kubernetesResourceOptions.customResourceDefinitions;
};
}; };
"1.8" = (versionDefinitions."1.8").kubernetesResourceOptions; "1.8" = versionDefinitions."1.8";
"1.9" = (versionDefinitions."1.9").kubernetesResourceOptions; "1.9" = versionDefinitions."1.9";
}; };
defaultOptions = mapAttrs (name: value: mkOption { defaultOptions = mapAttrs (name: value: mkOption {
description = "Kubernetes defaults for ${name} resources"; description = "Kubernetes defaults for ${name} resources";
type = types.coercedTo types.attrs (value: [value]) (types.listOf types.attrs); type = types.coercedTo types.attrs (value: [value]) (types.listOf types.attrs);
default = []; default = [];
}) versionOptions.${config.kubernetes.version}; }) (
(versionOptions.${config.kubernetes.version}.kubernetesResourceOptions) //
(versionOptions.${config.kubernetes.version}.customResourceOptions)
);
in { in {
options.kubernetes.version = mkOption { options.kubernetes.version = mkOption {
description = "Kubernetes version to deploy to"; description = "Kubernetes version to deploy to";
@ -320,7 +329,7 @@ in {
options.kubernetes.resources = mkOption { options.kubernetes.resources = mkOption {
type = types.submodule { type = types.submodule {
options = versionOptions.${config.kubernetes.version}; options = versionOptions.${config.kubernetes.version}.kubernetesResourceOptions;
}; };
description = "Attribute set of kubernetes resources"; description = "Attribute set of kubernetes resources";
default = {}; default = {};

View file

@ -67,7 +67,5 @@ with lib;
kubernetes.defaultModuleConfiguration.nginx = { kubernetes.defaultModuleConfiguration.nginx = {
kubernetes.defaults.deployments.spec.replicas = mkDefault 4; kubernetes.defaults.deployments.spec.replicas = mkDefault 4;
}; };
kubernetes.defaults.all.metadata.namespace = "test";
}; };
} }