inventory: better error message if tags are not found
This commit is contained in:
committed by
Johannes Kirschbauer
parent
2eeab7f556
commit
7c83c89643
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user