refactor(3202): the gateway takes contributed dns names
Adds `services.hyperhive.gateway.localNames` (internal): hostnames the hive resolver answers with the bridge IP, contributed by the modules that own them. The service says which name, the gateway says where it points — the same split `lib.tlsFor` already makes. No behaviour change yet: the list is empty until the service modules contribute in the following commits. The assertion is not defensive padding. Duplicate `address=` rules do not make dnsmasq complain; it resolves them by precedence, so a name claimed twice silently stops being served by one of its claimants. That failure mode only becomes reachable because contribution is now open, so it gets closed in the same commit that opens it.
This commit is contained in:
parent
b4e56b964f
commit
991cd24fc8
3 changed files with 55 additions and 1 deletions
|
|
@ -125,6 +125,25 @@ in
|
|||
Let's Encrypt needs a contact address for the ACME account.
|
||||
'';
|
||||
}
|
||||
{
|
||||
# Two modules claiming one hostname is a real possibility now
|
||||
# that each service contributes its own name, and dnsmasq would
|
||||
# not complain: duplicate `address=` rules resolve by precedence,
|
||||
# so the loser simply stops being served with no error anywhere.
|
||||
# Fail the build instead — a name is owned by exactly one module.
|
||||
assertion = lib.length (lib.unique cfg.localNames) == lib.length cfg.localNames;
|
||||
message = ''
|
||||
services.hyperhive.gateway.localNames contains a duplicate:
|
||||
${lib.concatStringsSep ", " (
|
||||
lib.unique (lib.filter (n: lib.count (m: m == n) cfg.localNames > 1) cfg.localNames)
|
||||
)}
|
||||
|
||||
Each hostname the hive resolver answers for is contributed by
|
||||
exactly one module. Two modules claiming the same name means
|
||||
two services believe they serve it — resolve which one does
|
||||
rather than letting dnsmasq pick.
|
||||
'';
|
||||
}
|
||||
];
|
||||
|
||||
# Ensure the gateway state dirs exist at host boot, before anything
|
||||
|
|
@ -353,6 +372,7 @@ in
|
|||
services.dnsmasq = import ./dnsmasq.nix {
|
||||
inherit
|
||||
lib
|
||||
cfg
|
||||
networkCfg
|
||||
forgeCfg
|
||||
matrixCfg
|
||||
|
|
|
|||
Loading…
Reference in a new issue