mirror of
https://github.com/TECHNOFAB11/kubenix.git
synced 2025-12-12 16:10:05 +01:00
feat(submodules): allow to match defaults by module version
This commit is contained in:
parent
28d2b4baac
commit
baea3cc3b3
2 changed files with 47 additions and 14 deletions
|
|
@ -6,16 +6,24 @@ let
|
||||||
cfg = config.submodules;
|
cfg = config.submodules;
|
||||||
parentConfig = config;
|
parentConfig = config;
|
||||||
|
|
||||||
getDefaults = {name, tags, features}:
|
matchesVersion = requiredVersion: version:
|
||||||
catAttrs "default" (filter (submodule:
|
if requiredVersion != null then
|
||||||
(submodule.name == null || submodule.name == name) &&
|
if hasPrefix "~" requiredVersion
|
||||||
|
then (builtins.match (removePrefix "~" requiredVersion) version) != null
|
||||||
|
else requiredVersion == version
|
||||||
|
else true;
|
||||||
|
|
||||||
|
getDefaults = {name, version, tags, features}:
|
||||||
|
catAttrs "default" (filter (submoduleDefault:
|
||||||
|
(submoduleDefault.name == null || submoduleDefault.name == name) &&
|
||||||
|
(matchesVersion submoduleDefault.version version) &&
|
||||||
(
|
(
|
||||||
(length submodule.tags == 0) ||
|
(length submoduleDefault.tags == 0) ||
|
||||||
(length (intersectLists submodule.tags tags)) > 0
|
(length (intersectLists submoduleDefault.tags tags)) > 0
|
||||||
) &&
|
) &&
|
||||||
(
|
(
|
||||||
(length submodule.features == 0) ||
|
(length submoduleDefault.features == 0) ||
|
||||||
(length (intersectLists submodule.features features)) > 0
|
(length (intersectLists submoduleDefault.features features)) > 0
|
||||||
)
|
)
|
||||||
) config.submodules.defaults);
|
) config.submodules.defaults);
|
||||||
|
|
||||||
|
|
@ -26,11 +34,7 @@ let
|
||||||
findSubmodule = {name, version ? null, latest ? true}: let
|
findSubmodule = {name, version ? null, latest ? true}: let
|
||||||
matchingSubmodules = filter (el:
|
matchingSubmodules = filter (el:
|
||||||
el.definition.name == name &&
|
el.definition.name == name &&
|
||||||
(if version != null then
|
(matchesVersion version el.definition.version)
|
||||||
if hasPrefix "~" version
|
|
||||||
then (builtins.match (removePrefix "~" version) el.definition.version) != null
|
|
||||||
else el.definition.version == version
|
|
||||||
else true)
|
|
||||||
) cfg.imports;
|
) cfg.imports;
|
||||||
|
|
||||||
versionSortedSubmodules = sort (s1: s2:
|
versionSortedSubmodules = sort (s1: s2:
|
||||||
|
|
@ -72,13 +76,22 @@ in {
|
||||||
type = types.listOf (types.submodule ({config, ...}: {
|
type = types.listOf (types.submodule ({config, ...}: {
|
||||||
options = {
|
options = {
|
||||||
name = mkOption {
|
name = mkOption {
|
||||||
description = "Name of the submodule to apply defaults to";
|
description = "Name of the submodule to apply defaults for";
|
||||||
|
type = types.nullOr types.str;
|
||||||
|
default = null;
|
||||||
|
};
|
||||||
|
|
||||||
|
version = mkOption {
|
||||||
|
description = ''
|
||||||
|
Version of submodule to apply defaults for. If version starts with
|
||||||
|
"~" it is threated as regex pattern for example "~1.0.*
|
||||||
|
'';
|
||||||
type = types.nullOr types.str;
|
type = types.nullOr types.str;
|
||||||
default = null;
|
default = null;
|
||||||
};
|
};
|
||||||
|
|
||||||
tags = mkOption {
|
tags = mkOption {
|
||||||
description = "List of tags to apply defaults to";
|
description = "List of tags to apply defaults for";
|
||||||
type = types.listOf types.str;
|
type = types.listOf types.str;
|
||||||
default = [];
|
default = [];
|
||||||
};
|
};
|
||||||
|
|
@ -181,6 +194,7 @@ in {
|
||||||
# submodule defaults
|
# submodule defaults
|
||||||
defaults = getDefaults {
|
defaults = getDefaults {
|
||||||
name = submoduleDefinition.name;
|
name = submoduleDefinition.name;
|
||||||
|
version = submoduleDefinition.version;
|
||||||
tags = submoduleDefinition.tags;
|
tags = submoduleDefinition.tags;
|
||||||
features = submodule.features;
|
features = submodule.features;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ let
|
||||||
instance3 = config.submodules.instances.instance3;
|
instance3 = config.submodules.instances.instance3;
|
||||||
instance4 = config.submodules.instances.instance4;
|
instance4 = config.submodules.instances.instance4;
|
||||||
instance5 = config.submodules.instances.instance5;
|
instance5 = config.submodules.instances.instance5;
|
||||||
|
versioned-submodule = config.submodules.instances.versioned-submodule;
|
||||||
|
|
||||||
submodule = {name, ...}: {
|
submodule = {name, ...}: {
|
||||||
imports = [ kubenix.modules.submodule ];
|
imports = [ kubenix.modules.submodule ];
|
||||||
|
|
@ -53,6 +54,9 @@ in {
|
||||||
} {
|
} {
|
||||||
message = "should apply defaults by custom condition";
|
message = "should apply defaults by custom condition";
|
||||||
assertion = instance5.config.submodule.args.defaultValue == "my-custom-value";
|
assertion = instance5.config.submodule.args.defaultValue == "my-custom-value";
|
||||||
|
} {
|
||||||
|
message = "should apply defaults to versioned submodule";
|
||||||
|
assertion = versioned-submodule.config.submodule.args.defaultValue == "versioned-submodule";
|
||||||
}];
|
}];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -90,6 +94,13 @@ in {
|
||||||
};
|
};
|
||||||
submodule.args.value = "custom-value";
|
submodule.args.value = "custom-value";
|
||||||
}];
|
}];
|
||||||
|
} {
|
||||||
|
modules = [submodule {
|
||||||
|
submodule = {
|
||||||
|
name = "versioned-submodule";
|
||||||
|
version = "2.0.0";
|
||||||
|
};
|
||||||
|
}];
|
||||||
}];
|
}];
|
||||||
|
|
||||||
submodules.defaults = [{
|
submodules.defaults = [{
|
||||||
|
|
@ -107,6 +118,10 @@ in {
|
||||||
default = {config, ...}: {
|
default = {config, ...}: {
|
||||||
submodule.args.defaultValue = mkIf (config.submodule.args.value == "custom-value") "my-custom-value";
|
submodule.args.defaultValue = mkIf (config.submodule.args.value == "custom-value") "my-custom-value";
|
||||||
};
|
};
|
||||||
|
} {
|
||||||
|
name = "versioned-submodule";
|
||||||
|
version = "2.0.0";
|
||||||
|
default.submodule.args.value = mkDefault "versioned";
|
||||||
}];
|
}];
|
||||||
|
|
||||||
submodules.instances.instance1.submodule = "submodule1";
|
submodules.instances.instance1.submodule = "submodule1";
|
||||||
|
|
@ -117,4 +132,8 @@ in {
|
||||||
};
|
};
|
||||||
submodules.instances.instance4.submodule = "submodule4";
|
submodules.instances.instance4.submodule = "submodule4";
|
||||||
submodules.instances.instance5.submodule = "submodule5";
|
submodules.instances.instance5.submodule = "submodule5";
|
||||||
|
submodules.instances.versioned-submodule = {
|
||||||
|
submodule = "versioned-submodule";
|
||||||
|
args.defaultValue = "versioned-submodule";
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue