Merge pull request 'Inventory: fixes' (#2104) from hsjobeki/clan-core:hsjobeki-main into main

This commit is contained in:
clan-bot
2024-09-15 14:09:21 +00:00
3 changed files with 88 additions and 62 deletions

View File

@@ -141,9 +141,9 @@ let
throw "Module doesn't have role: '${role}'. Path: ${path} not found." throw "Module doesn't have role: '${role}'. Path: ${path} not found."
) inverseRoles.${machineName} or [ ]; ) inverseRoles.${machineName} or [ ];
roleServiceConfigs = builtins.map ( roleServiceConfigs = builtins.filter (m: m != { }) (
role: serviceConfig.roles.${role}.config or { } builtins.map (role: serviceConfig.roles.${role}.config or { }) inverseRoles.${machineName} or [ ]
) inverseRoles.${machineName} or [ ]; );
customImports = map (s: "${directory}/${s}") ( customImports = map (s: "${directory}/${s}") (
globalImports ++ machineImports ++ roleServiceImports globalImports ++ machineImports ++ roleServiceImports
@@ -155,14 +155,19 @@ let
++ [ ++ [
{ {
imports = [ clan-core.clanModules.${serviceName} ] ++ roleModules ++ customImports; imports = [ clan-core.clanModules.${serviceName} ] ++ roleModules ++ customImports;
config.clan.${serviceName} = lib.mkMerge (
[
globalConfig
machineServiceConfig
]
++ roleServiceConfigs
);
} }
(lib.optionalAttrs (globalConfig != { } || machineServiceConfig != { } || roleServiceConfigs != [ ])
{
config.clan.${serviceName} = lib.mkMerge (
[
globalConfig
machineServiceConfig
]
++ roleServiceConfigs
);
}
)
{ {
config.clan.inventory.services.${serviceName}.${instanceName} = { config.clan.inventory.services.${serviceName}.${instanceName} = {
roles = resolvedRoles; roles = resolvedRoles;

View File

@@ -13,6 +13,20 @@ let
type = types.nullOr types.str; type = types.nullOr types.str;
}; };
}; };
metaOptionsWith = name: {
name = lib.mkOption {
type = types.str;
default = name;
};
description = lib.mkOption {
default = null;
type = types.nullOr types.str;
};
icon = lib.mkOption {
default = null;
type = types.nullOr types.str;
};
};
moduleConfig = lib.mkOption { moduleConfig = lib.mkOption {
default = { }; default = { };
@@ -64,26 +78,30 @@ in
machines = lib.mkOption { machines = lib.mkOption {
default = { }; default = { };
type = types.attrsOf ( type = types.attrsOf (
types.submodule { types.submodule (
options = { { name, ... }:
inherit (metaOptions) name description icon; {
tags = lib.mkOption { options = {
inherit (metaOptionsWith name) name description icon;
default = [ ]; tags = lib.mkOption {
apply = lib.unique;
type = types.listOf types.str; default = [ ];
apply = lib.unique;
type = types.listOf types.str;
};
system = lib.mkOption {
default = null;
type = types.nullOr types.str;
};
deploy.targetHost = lib.mkOption {
description = "Configuration for the deployment of the machine";
default = null;
type = types.nullOr types.str;
};
}; };
system = lib.mkOption { }
default = null; )
type = types.nullOr types.str;
};
deploy.targetHost = lib.mkOption {
description = "Configuration for the deployment of the machine";
default = null;
type = types.nullOr types.str;
};
};
}
); );
}; };
@@ -91,38 +109,41 @@ in
default = { }; default = { };
type = types.attrsOf ( type = types.attrsOf (
types.attrsOf ( types.attrsOf (
types.submodule { types.submodule (
options.meta = metaOptions; { name, ... }:
options.imports = importsOption; {
options.config = moduleConfig; options.meta = metaOptionsWith name;
options.machines = lib.mkOption { options.imports = importsOption;
default = { }; options.config = moduleConfig;
type = types.attrsOf ( options.machines = lib.mkOption {
types.submodule { default = { };
options.imports = importsOption; type = types.attrsOf (
options.config = moduleConfig; types.submodule {
} options.imports = importsOption;
); options.config = moduleConfig;
}; }
options.roles = lib.mkOption { );
default = { }; };
type = types.attrsOf ( options.roles = lib.mkOption {
types.submodule { default = { };
options.machines = lib.mkOption { type = types.attrsOf (
default = [ ]; types.submodule {
type = types.listOf types.str; options.machines = lib.mkOption {
}; default = [ ];
options.tags = lib.mkOption { type = types.listOf types.str;
default = [ ]; };
apply = lib.unique; options.tags = lib.mkOption {
type = types.listOf types.str; default = [ ];
}; apply = lib.unique;
options.config = moduleConfig; type = types.listOf types.str;
options.imports = importsOption; };
} options.config = moduleConfig;
); options.imports = importsOption;
}; }
} );
};
}
)
) )
); );
}; };

View File

@@ -117,8 +117,8 @@ in
not_used_machine = builtins.length configs.not_used_machine; not_used_machine = builtins.length configs.not_used_machine;
}; };
expected = { expected = {
client_1_machine = 4; client_1_machine = 5;
client_2_machine = 4; client_2_machine = 5;
not_used_machine = 2; not_used_machine = 2;
}; };
}; };