depot/cluster/lib/services.nix

50 lines
1.6 KiB
Nix
Raw Permalink Normal View History

2022-06-23 21:13:28 +03:00
{ config, lib, ... }:
with lib;
let
getHostConfigurations = hostName: svcName: svcConfig: let
serviceConfigs =
lib.mapAttrsToList (groupName: _: svcConfig.nixos.${groupName})
(lib.filterAttrs (_: lib.elem hostName) svcConfig.nodes);
2022-06-23 21:13:28 +03:00
secretsConfig = let
secrets = lib.filterAttrs (_: secret: lib.any (node: node == hostName) secret.nodes) svcConfig.secrets;
in {
age.secrets = lib.mapAttrs' (secretName: secretConfig: {
name = "cluster-${svcName}-${secretName}";
value = {
inherit (secretConfig) path mode owner group;
file = ../secrets/${svcName}-${secretName}${lib.optionalString (!secretConfig.shared) "-${hostName}"}.age;
};
}) secrets;
systemd.services = lib.mkMerge (lib.mapAttrsToList (secretName: secretConfig: lib.genAttrs secretConfig.services (systemdServiceName: {
restartTriggers = [ "${../secrets/${svcName}-${secretName}${lib.optionalString (!secretConfig.shared) "-${hostName}"}.age}" ];
})) secrets);
};
in serviceConfigs ++ [
secretsConfig
];
2023-08-31 01:55:45 +03:00
introspectionModule._module.args.cluster = {
inherit (config) vars;
inherit config;
};
2022-06-23 21:13:28 +03:00
in
{
options.services = mkOption {
description = "Cluster services.";
2023-08-31 01:55:45 +03:00
type = with types; attrsOf (submodule ./service-module.nix);
2022-06-23 21:13:28 +03:00
default = {};
};
2023-08-31 01:55:45 +03:00
config.out = {
injectNixosConfigForServices = services: hostName: (lib.flatten (lib.mapAttrsToList (getHostConfigurations hostName) (lib.getAttrs services config.services))) ++ [
introspectionModule
];
injectNixosConfig = config.out.injectNixosConfigForServices (lib.attrNames config.services);
};
2022-06-23 21:13:28 +03:00
}