Follow-up to the plumbing removal: docs/swarm/README.md gets the biggest rewrite (drops the whole "Fingerprint format" section, fixes the runtime-effects list, the WireGuard config example + "what the mesh does" bullet), docs/gateway.md and hive-gateway/options.nix drop 4 "needs no certFingerprint" mentions, swarm-peers-removed.nix's migration-warning text no longer tells an upgrading operator to carry a field over that no longer exists, swarm.nix/swarm-wireguard.nix/ swarm-controller.nix/swarm-controller's main.rs get comment fixes where they described the now-removed HYPERHIVE_PEERS shape. Also caught one more stale "peer hives" mention in docs/web-ui/README.md's SW4RM tab description that the first pass on this issue missed.
68 lines
2.7 KiB
Nix
68 lines
2.7 KiB
Nix
# Migration shim for `services.hyperhive.swarm.peers`, replaced by the
|
||
# `swarm.hives` directory in ./swarm.nix.
|
||
#
|
||
# ⚠️ This could not be a `mkRenamedOptionModule`. `hives` is not `peers`
|
||
# under a new name, it is **`peers` ∪ {self}**: the set gains a member no
|
||
# existing config has ever written down, because a host's own identity
|
||
# lived in *other* options entirely. A rename migrates a name and a
|
||
# default can re-root a meaning; neither can conjure a new member.
|
||
#
|
||
# The whole module is self-contained and deletable — one file to remove
|
||
# when the deprecation window closes, with nothing else referring to it.
|
||
#
|
||
# Deliberately a warning rather than a hard failure, with the loudness
|
||
# coming from elsewhere: a config that set only `peers` leaves `hives`
|
||
# empty, so the self-entry assertion in ./swarm.nix fails the build
|
||
# anyway. The warning is what explains it; the assertion is what stops
|
||
# it.
|
||
{
|
||
lib,
|
||
config,
|
||
...
|
||
}:
|
||
let
|
||
peers = config.services.hyperhive.swarm.peers;
|
||
withCaCert = lib.attrNames (lib.filterAttrs (_: p: p ? caCert && p.caCert != null) peers);
|
||
in
|
||
{
|
||
options.services.hyperhive.swarm.peers = lib.mkOption {
|
||
type = lib.types.attrsOf lib.types.anything;
|
||
default = { };
|
||
visible = false;
|
||
internal = true;
|
||
description = ''
|
||
Removed — use `services.hyperhive.swarm.hives` instead, which
|
||
describes every hive in the swarm including this one. Kept only so
|
||
an existing definition produces a warning that says where to move
|
||
it, rather than an "option does not exist" error that says nothing.
|
||
'';
|
||
};
|
||
|
||
config.warnings =
|
||
lib.optional (peers != { }) ''
|
||
services.hyperhive.swarm.peers is removed and ignored. Move these
|
||
entries to services.hyperhive.swarm.hives, keyed by hive NAME
|
||
rather than domain, and add an entry for this hive itself
|
||
(services.hyperhive.hiveName) — `hives` is the swarm's full
|
||
directory, identical on every host.
|
||
|
||
services.hyperhive.swarm.hives.<name> = {
|
||
domain = "<the old attrset key>";
|
||
# wireguard* carries over unchanged
|
||
};
|
||
|
||
Still set: ${lib.concatStringsSep ", " (lib.attrNames peers)}
|
||
''
|
||
++ lib.optional (withCaCert != [ ]) ''
|
||
services.hyperhive.swarm.peers.<hive>.caCert is removed and
|
||
ignored, and has no replacement in services.hyperhive.swarm.hives.
|
||
|
||
Trust inside a swarm now derives from the swarm root CA
|
||
(services.hyperhive.swarm.ca — see docs/swarm/ca.md): every hive
|
||
under it chains to it, so a per-hive CA is dead weight. What this
|
||
genuinely drops is trusting a hive whose root this swarm does NOT
|
||
own — another swarm's, or one keeping its own CA.
|
||
|
||
Still set on: ${lib.concatStringsSep ", " withCaCert}
|
||
'';
|
||
}
|