mirror of
https://github.com/TECHNOFAB11/kubenix.git
synced 2025-12-12 16:10:05 +01:00
feat: make propagation independent of submodules
This commit is contained in:
parent
bdc145e2bb
commit
7afbc91301
4 changed files with 82 additions and 39 deletions
|
|
@ -3,17 +3,37 @@
|
|||
with lib;
|
||||
|
||||
{
|
||||
options._module.features = mkOption {
|
||||
options = {
|
||||
kubenix.project = mkOption {
|
||||
description = "Name of the project";
|
||||
type = types.str;
|
||||
default = "kubenix";
|
||||
};
|
||||
|
||||
_module.features = mkOption {
|
||||
description = "List of features exposed by module";
|
||||
type = types.listOf types.str;
|
||||
default = [];
|
||||
};
|
||||
|
||||
options.kubenix = {
|
||||
project = mkOption {
|
||||
description = "Name of the project";
|
||||
type = types.str;
|
||||
default = "kubenix";
|
||||
_module.propagate = mkOption {
|
||||
description = "Module propagation options";
|
||||
type = types.listOf (types.submodule ({config, ...}: {
|
||||
options = {
|
||||
features = mkOption {
|
||||
description = "List of features that submodule has to have to propagate module";
|
||||
type = types.listOf types.str;
|
||||
default = [];
|
||||
};
|
||||
|
||||
module = mkOption {
|
||||
description = "Module to propagate";
|
||||
type = types.unspecified;
|
||||
default = {};
|
||||
};
|
||||
};
|
||||
}));
|
||||
default = [];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@ with lib;
|
|||
let
|
||||
cfg = config.docker;
|
||||
in {
|
||||
imports = [ ./base.nix ];
|
||||
|
||||
options.docker = {
|
||||
registry.url = mkOption {
|
||||
description = "Default registry url where images are published";
|
||||
|
|
@ -70,13 +72,16 @@ in {
|
|||
};
|
||||
|
||||
config = {
|
||||
# define docker feature
|
||||
_module.features = ["docker"];
|
||||
|
||||
# pass docker library as param
|
||||
_module.args.docker = import ../lib/docker.nix { inherit lib pkgs; };
|
||||
|
||||
submodules.defaults = [{
|
||||
# propagate docker options if docker feature is enabled
|
||||
_module.propagate = [{
|
||||
features = [ "docker" ];
|
||||
default = { config, name, ... }: {
|
||||
module = { config, name, ... }: {
|
||||
# propagate registry options
|
||||
docker.registry = cfg.registry;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -193,7 +193,7 @@ let
|
|||
}) latestCustomResourceTypes);
|
||||
|
||||
in {
|
||||
imports = [ ./base.nix ./submodules.nix ];
|
||||
imports = [ ./base.nix ];
|
||||
|
||||
options.kubernetes = {
|
||||
version = mkOption {
|
||||
|
|
@ -299,8 +299,38 @@ in {
|
|||
# expose k8s helper methods as module argument
|
||||
_module.args.k8s = import ../lib/k8s.nix { inherit lib; };
|
||||
|
||||
# features that module is defining
|
||||
_module.features = [ "k8s" ];
|
||||
|
||||
# module propagation options
|
||||
_module.propagate = [{
|
||||
features = ["k8s"];
|
||||
module = { config, ... }: {
|
||||
# propagate kubernetes version and namespace
|
||||
kubernetes.version = mkDefault cfg.version;
|
||||
kubernetes.namespace = mkDefault cfg.namespace;
|
||||
};
|
||||
} {
|
||||
features = ["k8s" "submodule"];
|
||||
module = { config, ... }: {
|
||||
# set module defaults
|
||||
kubernetes.api.defaults = (
|
||||
# propagate defaults if default propagation is enabled
|
||||
(filter (default: default.propagate) cfg.api.defaults) ++
|
||||
|
||||
[
|
||||
# set module name and version for all kuberentes resources
|
||||
{
|
||||
default.metadata.labels = {
|
||||
"kubenix/module-name" = config.submodule.name;
|
||||
"kubenix/module-version" = config.submodule.version;
|
||||
};
|
||||
}
|
||||
]
|
||||
);
|
||||
};
|
||||
}];
|
||||
|
||||
kubernetes.api = mkMerge ([{
|
||||
# register custom types
|
||||
types = map (cr: {
|
||||
|
|
@ -309,18 +339,11 @@ in {
|
|||
|
||||
defaults = [{
|
||||
default = {
|
||||
# set default kubernetes namespace to all resources
|
||||
metadata.namespace = mkDefault config.kubernetes.namespace;
|
||||
metadata.labels = mkMerge [
|
||||
{
|
||||
"kubenix/project-name" = config.kubenix.project;
|
||||
}
|
||||
|
||||
# if we are inside submodule, define additional labels
|
||||
(mkIf (elem "submodule" config._module.features) {
|
||||
"kubenix/module-name" = config.submodule.name;
|
||||
"kubenix/module-version" = config.submodule.version;
|
||||
})
|
||||
];
|
||||
# set project name to all resources
|
||||
metadata.labels."kubenix/project-name" = config.kubenix.project;
|
||||
};
|
||||
}];
|
||||
}] ++
|
||||
|
|
@ -360,17 +383,5 @@ in {
|
|||
items = config.kubernetes.objects;
|
||||
labels."kubenix/project-name" = config.kubenix.project;
|
||||
};
|
||||
|
||||
submodules.defaults = [{
|
||||
features = [ "k8s" ];
|
||||
default = { config, name, ... }: {
|
||||
# propagate kubernetes version and namespace
|
||||
kubernetes.version = mkDefault cfg.version;
|
||||
kubernetes.namespace = mkDefault cfg.namespace;
|
||||
|
||||
# propagate defaults if default propagation is enabled
|
||||
kubernetes.api.defaults = filter (default: default.propagate) cfg.api.defaults;
|
||||
};
|
||||
}];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -215,18 +215,25 @@ in {
|
|||
default = {};
|
||||
};
|
||||
|
||||
config = mkMerge [
|
||||
config = mkMerge ([
|
||||
{
|
||||
_module.features = ["submodules"];
|
||||
|
||||
submodules.specialArgs.kubenix = kubenix;
|
||||
|
||||
# passthru kubenix.project to submodules
|
||||
submodules.defaults = [{
|
||||
submodules.defaults = mkMerge [
|
||||
[{
|
||||
default = {
|
||||
kubenix.project = parentConfig.kubenix.project;
|
||||
};
|
||||
}];
|
||||
}]
|
||||
|
||||
(map (propagate: {
|
||||
features = propagate.features;
|
||||
default = propagate.module;
|
||||
}) config._module.propagate)
|
||||
];
|
||||
}
|
||||
|
||||
(mkIf cfg.propagate.enable {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue