nix: run swarm-ui wherever swarm-controller runs
Remove deploy.swarm-ui.enable. Every reader (the swarm-ui vhost, the authelia operator rule for the swarm apex, hive-network's anyServiceEnabled) now reads deploy.swarm-controller.enable, and the controller's webhook public URL is gated on the swarm domain alone, since the vhost it names exists wherever the daemon does. Both spellings of the old switch (deploy.swarm-ui.enable and the already-renamed swarm.ui.enable) become mkRemovedOptionModule entries, so a host that still sets either fails evaluation with a message naming the controller toggle instead of silently changing. Ruling (mara, #3742): "swarm-ui always runs wherever controller runs". Part of #3742
This commit is contained in:
parent
70c13aee7a
commit
f9954b91b4
10 changed files with 83 additions and 59 deletions
|
|
@ -204,9 +204,9 @@ let
|
|||
};
|
||||
|
||||
# How the forge must address this controller to deliver a swarm-wide
|
||||
# webhook. Gated on the swarm UI being served *here*, because that module
|
||||
# is what declares the vhost and the `/webhook/forge/` location inside it:
|
||||
# absent, nothing outside this host can reach the endpoint.
|
||||
# webhook. ./swarm-ui.nix declares the vhost and the `/webhook/forge/`
|
||||
# location inside it on every host that runs this daemon, so the only gate
|
||||
# left is a swarm domain to name it by.
|
||||
#
|
||||
# 🔑 The gate is the point, not a detail. The daemon registers hooks only
|
||||
# when this is set, and a hook whose `target_url` nothing answers is worse
|
||||
|
|
@ -216,17 +216,15 @@ let
|
|||
# ⚠️ Correct ONLY while the vhost and this daemon share a host, and they do
|
||||
# by construction: the UI's `/api/` location proxies
|
||||
# `http://unix:<socketPath>`, a path that resolves nowhere else, and this
|
||||
# daemon binds no TCP address at all (see the header). `deploy.swarm-ui`
|
||||
# therefore is not a guess about *some* host publishing the endpoint — it is
|
||||
# the flag that declares that vhost, on the box holding the socket.
|
||||
# daemon binds no TCP address at all (see the header).
|
||||
#
|
||||
# ⇒ The day this daemon grows a TCP listener so another host can front it,
|
||||
# THIS LINE SILENTLY STOPS BEING RIGHT: the env goes unset on the controller
|
||||
# host, registration quietly does not happen, and nothing errors. That is
|
||||
# THIS LINE SILENTLY STOPS BEING RIGHT: hooks get registered against a vhost
|
||||
# that may no longer be the one fronting the daemon, and nothing errors. That is
|
||||
# the moment to add an explicit `publicUrl` option — not before, because
|
||||
# until then there is exactly one derivable answer and an option would only
|
||||
# be a second place to get it wrong.
|
||||
webhookEnv = lib.optionalAttrs (deployCfg.swarm-ui.enable && swarmDomain != null) {
|
||||
webhookEnv = lib.optionalAttrs (swarmDomain != null) {
|
||||
SWARM_CONTROLLER_PUBLIC_URL = "https://${swarmDomain}";
|
||||
};
|
||||
|
||||
|
|
@ -469,8 +467,8 @@ in
|
|||
`services.hyperhive.swarm.bao.ui.domain`, and the Matrix entry
|
||||
from `services.hyperhive.swarm.matrix.gatewayHost` when it is set,
|
||||
so they are present whichever host runs each service.
|
||||
`swarm-ui.nix` contributes its own API-docs entry wherever the
|
||||
swarm UI is enabled on this host.
|
||||
`swarm-ui.nix` contributes its own API-docs entry, since the
|
||||
swarm UI runs wherever the controller does.
|
||||
|
||||
Read only on the host that runs the controller.
|
||||
'';
|
||||
|
|
|
|||
Loading…
Reference in a new issue