feat(lib/inventory): fix arguments discrepancy on perInstance and perMachine
This commit is contained in:
@@ -317,20 +317,24 @@ in
|
|||||||
*/
|
*/
|
||||||
v: instanceName: machineName:
|
v: instanceName: machineName:
|
||||||
(lib.evalModules {
|
(lib.evalModules {
|
||||||
specialArgs = {
|
specialArgs =
|
||||||
inherit instanceName;
|
let
|
||||||
machine = {
|
|
||||||
name = machineName;
|
|
||||||
roles = applySettings instanceName config.instances.${instanceName};
|
roles = applySettings instanceName config.instances.${instanceName};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
inherit instanceName roles;
|
||||||
|
machine = {
|
||||||
|
name = machineName;
|
||||||
|
roles = lib.attrNames (lib.filterAttrs (_n: v: v.machines ? ${machineName}) roles);
|
||||||
|
};
|
||||||
|
settings = (
|
||||||
|
makeExtensibleConfig evalMachineSettings {
|
||||||
|
inherit roleName instanceName machineName;
|
||||||
|
settings =
|
||||||
|
config.instances.${instanceName}.roles.${roleName}.machines.${machineName}.settings or { };
|
||||||
|
}
|
||||||
|
);
|
||||||
};
|
};
|
||||||
settings = (
|
|
||||||
makeExtensibleConfig evalMachineSettings {
|
|
||||||
inherit roleName instanceName machineName;
|
|
||||||
settings =
|
|
||||||
config.instances.${instanceName}.roles.${roleName}.machines.${machineName}.settings or { };
|
|
||||||
}
|
|
||||||
);
|
|
||||||
};
|
|
||||||
modules = [ v ];
|
modules = [ v ];
|
||||||
}).config;
|
}).config;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -67,6 +67,7 @@ in
|
|||||||
# We might change the attribute name in the future
|
# We might change the attribute name in the future
|
||||||
expr = res.importedModulesEvaluated ? "self-simple-module";
|
expr = res.importedModulesEvaluated ? "self-simple-module";
|
||||||
expected = true;
|
expected = true;
|
||||||
|
inherit res;
|
||||||
};
|
};
|
||||||
|
|
||||||
# A module can be imported multiple times
|
# A module can be imported multiple times
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ let
|
|||||||
};
|
};
|
||||||
# Define two roles with unmergeable interfaces
|
# Define two roles with unmergeable interfaces
|
||||||
# Both define some 'timeout' but with completely different types.
|
# Both define some 'timeout' but with completely different types.
|
||||||
|
roles.controller = { };
|
||||||
roles.peer.interface =
|
roles.peer.interface =
|
||||||
{ lib, ... }:
|
{ lib, ... }:
|
||||||
{
|
{
|
||||||
@@ -23,6 +24,7 @@ let
|
|||||||
instanceName,
|
instanceName,
|
||||||
settings,
|
settings,
|
||||||
machine,
|
machine,
|
||||||
|
roles,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
@@ -35,7 +37,12 @@ let
|
|||||||
in
|
in
|
||||||
{
|
{
|
||||||
nixosModule = {
|
nixosModule = {
|
||||||
inherit instanceName settings machine;
|
inherit
|
||||||
|
instanceName
|
||||||
|
settings
|
||||||
|
machine
|
||||||
|
roles
|
||||||
|
;
|
||||||
|
|
||||||
# We are double vendoring the settings
|
# We are double vendoring the settings
|
||||||
# To test that we can do it indefinitely
|
# To test that we can do it indefinitely
|
||||||
@@ -64,6 +71,7 @@ let
|
|||||||
roles.peer = {
|
roles.peer = {
|
||||||
settings.timeout = "foo-peer";
|
settings.timeout = "foo-peer";
|
||||||
};
|
};
|
||||||
|
roles.controller.machines.jon = { };
|
||||||
};
|
};
|
||||||
instances."instance_bar" = {
|
instances."instance_bar" = {
|
||||||
module = {
|
module = {
|
||||||
@@ -73,6 +81,8 @@ let
|
|||||||
settings.timeout = "bar-peer-jon";
|
settings.timeout = "bar-peer-jon";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
# TODO: move this into a seperate test.
|
||||||
|
# Seperate out the check that this module is never imported
|
||||||
# import the module "B" (undefined)
|
# import the module "B" (undefined)
|
||||||
# All machines have this instance
|
# All machines have this instance
|
||||||
instances."instance_zaza" = {
|
instances."instance_zaza" = {
|
||||||
@@ -108,17 +118,9 @@ in
|
|||||||
# roles = peer
|
# roles = peer
|
||||||
# machines = jon
|
# machines = jon
|
||||||
settings = filterInternals res.importedModulesEvaluated.self-A.config.result.allRoles.peer.allInstances.instance_foo.allMachines.jon.nixosModule.settings;
|
settings = filterInternals res.importedModulesEvaluated.self-A.config.result.allRoles.peer.allInstances.instance_foo.allMachines.jon.nixosModule.settings;
|
||||||
machine = mapInternalsRecursive res.importedModulesEvaluated.self-A.config.result.allRoles.peer.allInstances.instance_foo.allMachines.jon.nixosModule.machine;
|
machine =
|
||||||
|
res.importedModulesEvaluated.self-A.config.result.allRoles.peer.allInstances.instance_foo.allMachines.jon.nixosModule.machine;
|
||||||
# hasRoleSettings =
|
roles = mapInternalsRecursive res.importedModulesEvaluated.self-A.config.result.allRoles.peer.allInstances.instance_foo.allMachines.jon.nixosModule.roles;
|
||||||
# res.importedModulesEvaluated.self-A.config.result.allMachines.jon.nixosModule.instance_foo.roles.peer ? settings;
|
|
||||||
|
|
||||||
# # settings are specific.
|
|
||||||
# # Below we access:
|
|
||||||
# # instance = instance_foo
|
|
||||||
# # roles = peer
|
|
||||||
# # machines = *
|
|
||||||
# specificRoleSettings = filterInternals res.importedModulesEvaluated.self-A.config.result.allMachines.jon.nixosModule.instance_foo.roles.peer.settings;
|
|
||||||
};
|
};
|
||||||
expected = {
|
expected = {
|
||||||
instanceName = "instance_foo";
|
instanceName = "instance_foo";
|
||||||
@@ -127,21 +129,37 @@ in
|
|||||||
};
|
};
|
||||||
machine = {
|
machine = {
|
||||||
name = "jon";
|
name = "jon";
|
||||||
roles = {
|
roles = [
|
||||||
peer = {
|
"controller"
|
||||||
machines = {
|
"peer"
|
||||||
jon = {
|
];
|
||||||
settings = {
|
};
|
||||||
__functor = "__functor";
|
roles = {
|
||||||
timeout = "foo-peer-jon";
|
controller = {
|
||||||
};
|
machines = {
|
||||||
|
jon = {
|
||||||
|
settings = {
|
||||||
|
__functor = "__functor";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
settings = {
|
};
|
||||||
__functor = "__functor";
|
settings = {
|
||||||
timeout = "foo-peer";
|
__functor = "__functor";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
peer = {
|
||||||
|
machines = {
|
||||||
|
jon = {
|
||||||
|
settings = {
|
||||||
|
__functor = "__functor";
|
||||||
|
timeout = "foo-peer-jon";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
settings = {
|
||||||
|
__functor = "__functor";
|
||||||
|
timeout = "foo-peer";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -26,9 +26,11 @@ let
|
|||||||
};
|
};
|
||||||
|
|
||||||
perMachine =
|
perMachine =
|
||||||
{ instances, ... }:
|
{ instances, machine, ... }:
|
||||||
{
|
{
|
||||||
nixosModule = instances;
|
nixosModule = {
|
||||||
|
inherit instances machine;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
machines = {
|
machines = {
|
||||||
@@ -71,9 +73,10 @@ in
|
|||||||
|
|
||||||
# settings should evaluate
|
# settings should evaluate
|
||||||
test_per_machine_receives_instance_settings = {
|
test_per_machine_receives_instance_settings = {
|
||||||
|
inherit res;
|
||||||
expr = {
|
expr = {
|
||||||
hasMachineSettings =
|
hasMachineSettings =
|
||||||
res.importedModulesEvaluated.self-A.config.result.allMachines.jon.nixosModule.instance_foo.roles.peer.machines.jon
|
res.importedModulesEvaluated.self-A.config.result.allMachines.jon.nixosModule.instances.instance_foo.roles.peer.machines.jon
|
||||||
? settings;
|
? settings;
|
||||||
|
|
||||||
# settings are specific.
|
# settings are specific.
|
||||||
@@ -81,10 +84,10 @@ in
|
|||||||
# instance = instance_foo
|
# instance = instance_foo
|
||||||
# roles = peer
|
# roles = peer
|
||||||
# machines = jon
|
# machines = jon
|
||||||
specificMachineSettings = filterInternals res.importedModulesEvaluated.self-A.config.result.allMachines.jon.nixosModule.instance_foo.roles.peer.machines.jon.settings;
|
specificMachineSettings = filterInternals res.importedModulesEvaluated.self-A.config.result.allMachines.jon.nixosModule.instances.instance_foo.roles.peer.machines.jon.settings;
|
||||||
|
|
||||||
hasRoleSettings =
|
hasRoleSettings =
|
||||||
res.importedModulesEvaluated.self-A.config.result.allMachines.jon.nixosModule.instance_foo.roles.peer
|
res.importedModulesEvaluated.self-A.config.result.allMachines.jon.nixosModule.instances.instance_foo.roles.peer
|
||||||
? settings;
|
? settings;
|
||||||
|
|
||||||
# settings are specific.
|
# settings are specific.
|
||||||
@@ -92,7 +95,7 @@ in
|
|||||||
# instance = instance_foo
|
# instance = instance_foo
|
||||||
# roles = peer
|
# roles = peer
|
||||||
# machines = *
|
# machines = *
|
||||||
specificRoleSettings = filterInternals res.importedModulesEvaluated.self-A.config.result.allMachines.jon.nixosModule.instance_foo.roles.peer.settings;
|
specificRoleSettings = filterInternals res.importedModulesEvaluated.self-A.config.result.allMachines.jon.nixosModule.instances.instance_foo.roles.peer.settings;
|
||||||
};
|
};
|
||||||
expected = {
|
expected = {
|
||||||
hasMachineSettings = true;
|
hasMachineSettings = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user