deploy: move the SSO provider toggle
The largest of these moves: sixteen references spelled through `let` aliases across eight modules, plus eight more spelled as a path, plus five documentation pages. authelia is also the clearest case for why the two namespaces exist. `swarm.authelia.url` is needed by *every* hive in the swarm — it says where to send a browser to authenticate — while running the container is the business of exactly one host. The client half and the server half were sharing a namespace whose whole contract is "identical everywhere", and only one of them could honour it. `swarm.authelia.oidc.clients` stays where it is for the same reason: several modules register a client there, gated on authelia running here, and the registry itself is what the service *is* rather than a decision about this machine. One sweep note worth recording: a grep for `swarm.authelia.enable` misses `swarmCfg.authelia.enable`, because the prefix is whatever the reading file bound. Grepping the suffix `.authelia.enable` finds both, and found a reference in swarm.nix that the path-shaped pattern did not.
This commit is contained in:
parent
0b7357d4b8
commit
37ca7676d6
16 changed files with 77 additions and 50 deletions
|
|
@ -24,9 +24,13 @@ in
|
|||
description = ''
|
||||
Host the swarm's shared services on this hive. The services that
|
||||
exist once per swarm rather than once per hive and are *optional*
|
||||
— the matrix homeserver, the SSO provider — have their `enable`
|
||||
asserted from this, so a swarm's service host is declared in one
|
||||
place.
|
||||
— the matrix homeserver, the SSO provider, the queue, the metrics
|
||||
and log stores — have their toggle asserted from this, so a
|
||||
swarm's service host is declared in one place.
|
||||
|
||||
Those toggles live in two namespaces and the split is deliberate:
|
||||
{option}`services.hyperhive.deploy.*` for "does THIS host run it",
|
||||
`swarm.*.enable` for the ones not yet moved. See ./deploy.nix.
|
||||
|
||||
The forge is swarm-wide too but has nothing to assert: it is the
|
||||
canonical store for the meta flake and every agent's config repo,
|
||||
|
|
@ -46,7 +50,6 @@ in
|
|||
# operator who hasn't spoken, yields to one who has.
|
||||
config.services.hyperhive.swarm = {
|
||||
matrix.enable = lib.mkDefault swarmCfg.enableRequiredServices;
|
||||
authelia.enable = lib.mkDefault swarmCfg.enableRequiredServices;
|
||||
# The queue. Added later than the two above and missed at the time —
|
||||
# this file predates the `swarm-nats` container by nine days and had
|
||||
# not been revisited since, so its absence was sequence rather than
|
||||
|
|
@ -75,16 +78,26 @@ in
|
|||
# this is ./otel.nix's existing per-hive option).
|
||||
config.services.hyperhive.otel.enable = lib.mkDefault swarmCfg.enableRequiredServices;
|
||||
|
||||
# The rest of the shared services, deriving from the same switch as the
|
||||
# `swarm.*` ones above. They read differently only because "does THIS
|
||||
# host run it" lives in `deploy.*` (./deploy.nix) — `swarm.*` has to be
|
||||
# identical on every host, and these are exactly the values that must
|
||||
# differ.
|
||||
#
|
||||
# authelia: a swarm has one SSO provider, and this says it lives here.
|
||||
# With it off the hive is a *client* — `swarm.authelia.url` still points
|
||||
# at whoever runs it.
|
||||
config.services.hyperhive.deploy.authelia = lib.mkDefault swarmCfg.enableRequiredServices;
|
||||
|
||||
# The metrics pair, deriving together on purpose: a store with no UI is
|
||||
# unreadable and a UI with no store is empty, so there is no sensible
|
||||
# deployment that takes one and not the other from this switch. An
|
||||
# operator who wants exactly one still sets it directly, which
|
||||
# `mkDefault` allows.
|
||||
#
|
||||
# The log store derives from the same switch for the same reason as the
|
||||
# rest: a hive that is not the service host is a *client* of it, not a
|
||||
# second one.
|
||||
config.services.hyperhive.deploy.victoriametrics = lib.mkDefault swarmCfg.enableRequiredServices;
|
||||
config.services.hyperhive.deploy.victorialogs = lib.mkDefault swarmCfg.enableRequiredServices;
|
||||
config.services.hyperhive.deploy.grafana = lib.mkDefault swarmCfg.enableRequiredServices;
|
||||
|
||||
# The log store, from the same switch for the same reason as the rest: a
|
||||
# hive that is not the service host is a *client* of it, not a second one.
|
||||
config.services.hyperhive.deploy.victorialogs = lib.mkDefault swarmCfg.enableRequiredServices;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue