mirror of
https://git.mediani.de/mirrors_public/oddlama_nixos-extra-modules.git
synced 2025-10-10 14:10:38 +02:00
perf: allow caching wireguard network information to significantly speed up evaluation
This commit is contained in:
parent
ba53e1a0be
commit
0de9c0751b
3 changed files with 27 additions and 8 deletions
|
@ -16,6 +16,7 @@ inputs: final: prev: let
|
|||
nameValuePair
|
||||
partition
|
||||
removeSuffix
|
||||
warn
|
||||
;
|
||||
|
||||
inherit
|
||||
|
@ -32,8 +33,8 @@ inputs: final: prev: let
|
|||
in {
|
||||
lib =
|
||||
prev.lib
|
||||
// {
|
||||
wireguard = userInputs: wgName: let
|
||||
// rec {
|
||||
wireguard.evaluateNetwork = userInputs: wgName: let
|
||||
inherit (userInputs.self) nodes;
|
||||
# Returns the given node's wireguard configuration of this network
|
||||
wgCfgOf = node: nodes.${node}.config.wireguard.${wgName};
|
||||
|
@ -220,5 +221,24 @@ in {
|
|||
wgQuickConfigScript
|
||||
;
|
||||
};
|
||||
|
||||
wireguard.createEvalCache = userInputs: wgNames:
|
||||
genAttrs wgNames (wireguard.evaluateNetwork userInputs);
|
||||
|
||||
wireguard.getNetwork = userInputs: wgName:
|
||||
userInputs.self.wireguardEvalCache.${wgName}
|
||||
or (
|
||||
warn ''
|
||||
The calculated information for the wireguard network "${wgName}" is not cached!
|
||||
This will siginificantly increase evaluation times. Please consider pre-evaluating
|
||||
this information by exposing it in your flake:
|
||||
|
||||
wireguardEvalCache.${wgName} = lib.wireguard.createEvalCache inputs [
|
||||
"${wgName}"
|
||||
# all other networks
|
||||
];
|
||||
|
||||
'' (wireguard.evaluateNetwork userInputs wgName)
|
||||
);
|
||||
};
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@ in {
|
|||
topology.networks = mkMerge (
|
||||
flip mapAttrsToList config.wireguard (
|
||||
wgName: _: let
|
||||
inherit (lib.wireguard inputs wgName) networkCidrs;
|
||||
inherit (lib.wireguard.getNetwork inputs wgName) networkCidrs;
|
||||
in {
|
||||
${networkId wgName} = {
|
||||
name = mkDefault "Wireguard network '${wgName}'";
|
||||
|
@ -47,7 +47,7 @@ in {
|
|||
flip mapAttrsToList config.wireguard (
|
||||
wgName: wgCfg: let
|
||||
inherit
|
||||
(lib.wireguard inputs wgName)
|
||||
(lib.wireguard.getNetwork inputs wgName)
|
||||
participatingServerNodes
|
||||
wgCfgOf
|
||||
;
|
||||
|
|
|
@ -28,7 +28,6 @@
|
|||
optionals
|
||||
stringLength
|
||||
types
|
||||
wireguard
|
||||
;
|
||||
|
||||
cfg = config.wireguard;
|
||||
|
@ -36,7 +35,7 @@
|
|||
|
||||
configForNetwork = wgName: wgCfg: let
|
||||
inherit
|
||||
(wireguard inputs wgName)
|
||||
(lib.wireguard.getNetwork inputs wgName)
|
||||
externalPeerName
|
||||
externalPeerNamesRaw
|
||||
networkCidrs
|
||||
|
@ -385,7 +384,7 @@ in {
|
|||
|
||||
ipv4 = mkOption {
|
||||
type = types.lazyOf types.net.ipv4;
|
||||
default = types.lazyValue (wireguard inputs name).assignedIpv4Addresses.${nodeName};
|
||||
default = types.lazyValue (lib.wireguard.getNetwork inputs name).assignedIpv4Addresses.${nodeName};
|
||||
description = ''
|
||||
The ipv4 address for this machine. If you do not set this explicitly,
|
||||
a semi-stable ipv4 address will be derived automatically based on the
|
||||
|
@ -397,7 +396,7 @@ in {
|
|||
|
||||
ipv6 = mkOption {
|
||||
type = types.lazyOf types.net.ipv6;
|
||||
default = types.lazyValue (wireguard inputs name).assignedIpv6Addresses.${nodeName};
|
||||
default = types.lazyValue (lib.wireguard.getNetwork inputs name).assignedIpv6Addresses.${nodeName};
|
||||
description = ''
|
||||
The ipv6 address for this machine. If you do not set this explicitly,
|
||||
a semi-stable ipv6 address will be derived automatically based on the
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue