52 lines
1.5 KiB
Nix
52 lines
1.5 KiB
Nix
{ config, lib, ... }:
|
|
let
|
|
clanDir = config.clan.core.clanDir;
|
|
machineDir = clanDir + "/machines/";
|
|
inherit (config.clan.core) machineName;
|
|
|
|
instances = config.clan.inventory.services.borgbackup;
|
|
|
|
# roles = { ${role_name} :: { machines :: [string] } }
|
|
|
|
allClients = lib.foldlAttrs (
|
|
acc: _instanceName: instanceConfig:
|
|
acc
|
|
++ (
|
|
if (builtins.elem machineName instanceConfig.roles.server.machines) then
|
|
instanceConfig.roles.client.machines
|
|
else
|
|
[ ]
|
|
)
|
|
) [ ] instances;
|
|
in
|
|
{
|
|
config.services.borgbackup.repos =
|
|
let
|
|
borgbackupIpMachinePath = machines: machineDir + machines + "/facts/borgbackup.ssh.pub";
|
|
machinesMaybeKey = builtins.map (
|
|
machine:
|
|
let
|
|
fullPath = borgbackupIpMachinePath machine;
|
|
in
|
|
if builtins.pathExists fullPath then
|
|
machine
|
|
else
|
|
lib.warn ''
|
|
Machine ${machine} does not have a borgbackup key at ${fullPath},
|
|
run `clan facts generate ${machine}` to generate it.
|
|
'' null
|
|
) allClients;
|
|
|
|
machinesWithKey = lib.filter (x: x != null) machinesMaybeKey;
|
|
|
|
hosts = builtins.map (machine: {
|
|
name = machine;
|
|
value = {
|
|
path = "/var/lib/borgbackup/${machine}";
|
|
authorizedKeys = [ (builtins.readFile (borgbackupIpMachinePath machine)) ];
|
|
};
|
|
}) machinesWithKey;
|
|
in
|
|
if (builtins.listToAttrs hosts) != [ ] then builtins.listToAttrs hosts else { };
|
|
}
|