feat(submodules): pass instance name directly

This commit is contained in:
Jaka Hudoklin 2019-02-17 19:43:04 +01:00
parent b4c4f17cc9
commit 4d08da78e0
No known key found for this signature in database
GPG key ID: 916062A1C4748647
2 changed files with 24 additions and 14 deletions

View file

@ -19,7 +19,6 @@ let
modules = opts' ++ map (def: { _file = def.file; imports = [(coerce def.value)]; }) defs; modules = opts' ++ map (def: { _file = def.file; imports = [(coerce def.value)]; }) defs;
in (evalModules { in (evalModules {
inherit modules specialArgs; inherit modules specialArgs;
args.name = last loc;
prefix = loc; prefix = loc;
}).config; }).config;
getSubOptions = prefix: (evalModules getSubOptions = prefix: (evalModules
@ -203,9 +202,7 @@ in {
description = "Submodule instance ${config.name} for ${submoduleDefinition.name}:${submoduleDefinition.version} config"; description = "Submodule instance ${config.name} for ${submoduleDefinition.name}:${submoduleDefinition.version} config";
type = submoduleWithSpecialArgs ({...}: { type = submoduleWithSpecialArgs ({...}: {
imports = submodule.modules ++ cfg.defaults ++ [submoduleOptions ./submodules.nix]; imports = submodule.modules ++ cfg.defaults ++ [submoduleOptions ./submodules.nix];
_module.args.submodule = { _module.args.name = config.name;
name = config.name;
};
}) specialArgs; }) specialArgs;
default = {}; default = {};
}; };

View file

@ -1,8 +1,10 @@
{ config, lib, kubenix, ... }: { name, config, lib, kubenix, ... }:
with lib; with lib;
{ let
cfg = config.submodules.instances.instance;
in {
imports = [ imports = [
kubenix.submodules kubenix.submodules
]; ];
@ -12,30 +14,41 @@ with lib;
description = "Simple k8s submodule test"; description = "Simple k8s submodule test";
assertions = [{ assertions = [{
message = "Submodule name is set"; message = "Submodule name is set";
assertion = config.submodules.instances.empty.name == "empty"; assertion = cfg.name == "instance";
} { } {
message = "Submodule version is set"; message = "Submodule version is set";
assertion = config.submodules.instances.empty.version == null; assertion = cfg.version == null;
} { } {
message = "Submodule config has submodule definition"; message = "Submodule config has submodule definition";
assertion = config.submodules.instances.empty.config.submodule.name == "empty"; assertion = cfg.config.submodule.name == "submodule";
} { } {
message = "Should have argument set"; message = "Should have argument set";
assertion = config.submodules.instances.empty.config.args.value == "test"; assertion = cfg.config.args.value == "test";
} {
message = "Should have submodule name set";
assertion = cfg.config.args.name == "instance";
}]; }];
}; };
submodules.imports = [{ submodules.imports = [{
module = { module = {name, ...}: {
config.submodule.name = "empty"; config.submodule.name = "submodule";
options.args.value = mkOption { options.args.value = mkOption {
description = "Submodule argument"; description = "Submodule argument";
type = types.str; type = types.str;
}; };
options.args.name = mkOption {
description = "Submodule name";
type = types.str;
default = name;
};
}; };
}]; }];
submodules.instances.empty = { submodules.instances.instance = {
config.args.value = "test"; submodule = "submodule";
config = {name, ...}: {
config.args.value = "test";
};
}; };
} }