inventory: better error message if tags are not found

This commit is contained in:
Jörg Thalheim
2024-07-15 17:38:00 +02:00
committed by Johannes Kirschbauer
parent 2eeab7f556
commit 7c83c89643

View File

@@ -7,7 +7,7 @@ let
resolveTags = resolveTags =
# Inventory, { machines :: [string], tags :: [string] } # Inventory, { machines :: [string], tags :: [string] }
inventory: members: { { serviceName, instanceName, roleName, inventory, members}: {
machines = machines =
members.machines or [ ] members.machines or [ ]
++ (builtins.foldl' ( ++ (builtins.foldl' (
@@ -24,7 +24,10 @@ let
); );
in in
if tagMembers == [ ] then if tagMembers == [ ] then
throw "Tag: '${tag}' not found. Available tags: ${builtins.toJSON (lib.unique availableTags)}" throw ''
inventory.services.${serviceName}.${instanceName}: - ${roleName} tags: no machine with '${tag}' found.
Available tags: ${builtins.toJSON (lib.unique availableTags)}
''
else else
acc ++ tagMembers acc ++ tagMembers
) [ ] members.tags or [ ]); ) [ ] members.tags or [ ]);
@@ -43,7 +46,7 @@ let
machineName: machineConfig: machineName: machineConfig:
lib.foldlAttrs ( lib.foldlAttrs (
# [ Modules ], String, { ${instance_name} :: ServiceConfig } # [ Modules ], String, { ${instance_name} :: ServiceConfig }
acc: moduleName: serviceConfigs: acc: serviceName: serviceConfigs:
acc acc
# Collect service config # Collect service config
++ (lib.foldlAttrs ( ++ (lib.foldlAttrs (
@@ -51,7 +54,9 @@ let
acc2: instanceName: serviceConfig: acc2: instanceName: serviceConfig:
let let
resolvedRoles = builtins.mapAttrs ( resolvedRoles = builtins.mapAttrs (
_roleName: members: resolveTags inventory members roleName: members: resolveTags {
inherit serviceName instanceName roleName inventory members;
}
) serviceConfig.roles; ) serviceConfig.roles;
isInService = builtins.any (members: builtins.elem machineName members.machines) ( isInService = builtins.any (members: builtins.elem machineName members.machines) (
@@ -82,7 +87,7 @@ let
roleModules = builtins.map ( roleModules = builtins.map (
role: role:
let let
path = "${clan-core.clanModules.${moduleName}}/roles/${role}.nix"; path = "${clan-core.clanModules.${serviceName}}/roles/${role}.nix";
in in
if builtins.pathExists path then if builtins.pathExists path then
path path
@@ -103,8 +108,8 @@ let
acc2 acc2
++ [ ++ [
{ {
imports = [ clan-core.clanModules.${moduleName} ] ++ roleModules ++ customImports; imports = [ clan-core.clanModules.${serviceName} ] ++ roleModules ++ customImports;
config.clan.${moduleName} = lib.mkMerge ( config.clan.${serviceName} = lib.mkMerge (
[ [
globalConfig globalConfig
machineServiceConfig machineServiceConfig
@@ -113,7 +118,7 @@ let
); );
} }
{ {
config.clan.inventory.services.${moduleName}.${instanceName} = { config.clan.inventory.services.${serviceName}.${instanceName} = {
roles = resolvedRoles; roles = resolvedRoles;
# TODO: Add inverseRoles to the service config if needed # TODO: Add inverseRoles to the service config if needed
# inherit inverseRoles; # inherit inverseRoles;