This reverts commit afbd4a984d.
The old configuration cannot be updated like this:
eve] error:
[eve] … while calling the 'head' builtin
[eve] at /nix/store/5b0hl2dnvr1sawqlkwmsnaiyqz00d34h-source/lib/attrsets.nix:1575:11:
[eve] 1574| || pred here (elemAt values 1) (head values) then
[eve] 1575| head values
[eve] | ^
[eve] 1576| else
[eve]
[eve] … while evaluating the attribute 'value'
[eve] at /nix/store/5b0hl2dnvr1sawqlkwmsnaiyqz00d34h-source/lib/modules.nix:809:9:
[eve] 808| in warnDeprecation opt //
[eve] 809| { value = builtins.addErrorContext "while evaluating the option `${showOption loc}':" value;
[eve] | ^
[eve] 810| inherit (res.defsFinal') highestPrio;
[eve]
[eve] … while evaluating the option `system.build.toplevel':
[eve]
[eve] … while evaluating definitions from `/nix/store/5b0hl2dnvr1sawqlkwmsnaiyqz00d34h-source/nixos/modules/system/activation/top-level.nix':
[eve]
[eve] … while evaluating the option `assertions':
[eve]
[eve] … while evaluating definitions from `/nix/store/5b0hl2dnvr1sawqlkwmsnaiyqz00d34h-source/nixos/modules/system/boot/systemd.nix':
[eve]
[eve] … while evaluating the option `systemd.services':
[eve]
[eve] … while evaluating definitions from `/nix/store/kpzcdgndym0qm1w490mjvk9c2qmz03h5-source/nixosModules/clanCore/zerotier':
[eve]
[eve] … while evaluating the option `clan.core.networking.zerotier.networkId':
[eve]
[eve] (stack trace truncated; use '--show-trace' to show the full, detailed trace)
[eve]
[eve] error: A definition for option `clan.core.networking.zerotier.networkId' is not of type `null or string'. Definition values:
[eve] - In `/nix/store/kpzcdgndym0qm1w490mjvk9c2qmz03h5-source/nixosModules/clanCore/networking.nix':
[eve] {
[eve] _type = "override";
[eve] content = "267efd4a15b69623";
[eve] priorit
74 lines
2.5 KiB
Nix
74 lines
2.5 KiB
Nix
{
|
|
lib,
|
|
config,
|
|
pkgs,
|
|
...
|
|
}:
|
|
let
|
|
clanDir = config.clan.core.clanDir;
|
|
machineDir = clanDir + "/machines/";
|
|
machinesFileSet = builtins.readDir machineDir;
|
|
machines = lib.mapAttrsToList (name: _: name) machinesFileSet;
|
|
|
|
zerotierNetworkIdPath = machines: machineDir + machines + "/facts/zerotier-network-id";
|
|
networkIdsUnchecked = builtins.map (
|
|
machine:
|
|
let
|
|
fullPath = zerotierNetworkIdPath machine;
|
|
in
|
|
if builtins.pathExists fullPath then builtins.readFile fullPath else null
|
|
) machines;
|
|
networkIds = lib.filter (machine: machine != null) networkIdsUnchecked;
|
|
networkId = if builtins.length networkIds == 0 then null else builtins.elemAt networkIds 0;
|
|
in
|
|
#TODO:trace on multiple found network-ids
|
|
#TODO:trace on no single found networkId
|
|
{
|
|
options.clan.zerotier-static-peers = {
|
|
excludeHosts = lib.mkOption {
|
|
type = lib.types.listOf lib.types.str;
|
|
default = [ config.clan.core.machineName ];
|
|
description = "Hosts that should be excluded";
|
|
};
|
|
};
|
|
|
|
config.systemd.services.zerotier-static-peers-autoaccept =
|
|
let
|
|
zerotierIpMachinePath = machines: machineDir + machines + "/facts/zerotier-ip";
|
|
networkIpsUnchecked = builtins.map (
|
|
machine:
|
|
let
|
|
fullPath = zerotierIpMachinePath machine;
|
|
in
|
|
if builtins.pathExists fullPath then machine else null
|
|
) machines;
|
|
networkIps = lib.filter (machine: machine != null) networkIpsUnchecked;
|
|
machinesWithIp = lib.filterAttrs (name: _: (lib.elem name networkIps)) machinesFileSet;
|
|
filteredMachines = lib.filterAttrs (
|
|
name: _: !(lib.elem name config.clan.zerotier-static-peers.excludeHosts)
|
|
) machinesWithIp;
|
|
hosts = lib.mapAttrsToList (host: _: host) (
|
|
lib.mapAttrs' (
|
|
machine: _:
|
|
let
|
|
fullPath = zerotierIpMachinePath machine;
|
|
in
|
|
lib.nameValuePair (builtins.readFile fullPath) [ machine ]
|
|
) filteredMachines
|
|
);
|
|
in
|
|
lib.mkIf (config.clan.networking.zerotier.controller.enable) {
|
|
wantedBy = [ "multi-user.target" ];
|
|
after = [ "zerotierone.service" ];
|
|
path = [ config.clan.core.clanPkgs.zerotierone ];
|
|
serviceConfig.ExecStart = pkgs.writeScript "static-zerotier-peers-autoaccept" ''
|
|
#!/bin/sh
|
|
${lib.concatMapStringsSep "\n" (host: ''
|
|
${config.clan.core.clanPkgs.zerotier-members}/bin/zerotier-members allow --member-ip ${host}
|
|
'') hosts}
|
|
'';
|
|
};
|
|
|
|
config.clan.networking.zerotier.networkId = lib.mkDefault networkId;
|
|
}
|