43 lines
988 B
Nix
43 lines
988 B
Nix
{ lib }:
|
|
let
|
|
endpointOptions = {
|
|
address = lib.mkOption {
|
|
type = lib.types.str;
|
|
example = "10.23.20.126";
|
|
description = "Expected IP address assigned outside NixOS for this network endpoint.";
|
|
};
|
|
};
|
|
|
|
endpointType = lib.types.submodule {
|
|
options = endpointOptions;
|
|
};
|
|
|
|
endpointFields = endpoint: {
|
|
inherit (endpoint) address;
|
|
};
|
|
|
|
collectFleetEndpoints =
|
|
hosts:
|
|
lib.concatMapAttrs (
|
|
hostName: host:
|
|
let
|
|
cfg = host.config.modules.network;
|
|
hostEndpoint = lib.optionalAttrs (cfg.endpoint.address != null) {
|
|
${hostName} = endpointFields cfg.endpoint;
|
|
};
|
|
guestEndpoints = lib.mapAttrs' (
|
|
endpointName: endpoint: lib.nameValuePair "${hostName}-${endpointName}" (endpointFields endpoint)
|
|
) cfg.endpoints;
|
|
in
|
|
hostEndpoint // guestEndpoints
|
|
) hosts;
|
|
in
|
|
{
|
|
inherit
|
|
collectFleetEndpoints
|
|
endpointFields
|
|
endpointOptions
|
|
endpointType
|
|
;
|
|
}
|