nix: run the forge on one host per swarm (deploy.forgejo.enable)
Every hive with hyperhive enabled ran its own hive-forge container, and its gateway answered forge.<swarm> with its own bridge IP, so on a multi-host swarm each hive talked to its own forge. deploy.forgejo.enable defaults to false and allSwarmServices sets it with mkDefault, like authelia and bao; singleHostSwarm gets it through that. The forge's OIDC client moves to a glue module gated on authelia, so a split authelia/forge swarm still registers it. CI now requires the forge on the same host, and the controller's forgeTokenFile defaults to null where the forge is not. Closes #4705 Refs #3782
This commit is contained in:
parent
21c17772b8
commit
978164dc53
15 changed files with 346 additions and 84 deletions
|
|
@ -502,16 +502,17 @@ in
|
|||
|
||||
forgeTokenFile = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.str;
|
||||
# The forge has no `enable` of its own to condition this on —
|
||||
# neither half of its split namespace carries one — and it deploys
|
||||
# unconditionally wherever the rest of the stack does, so its own
|
||||
# delivery path is simply the right default. The controller's units
|
||||
# are the thing that decides whether the file is ever read: they only
|
||||
# exist under `deploy.swarm-controller.enable`, and a host whose forge
|
||||
# lives elsewhere overrides this (or sets `null`) explicitly.
|
||||
default = deployCfg.forgejo.hostSwarmControllerTokenFile;
|
||||
# Forge's own delivery path when the forge runs here, since nothing
|
||||
# writes that path anywhere else. `null` otherwise, so a controller
|
||||
# away from the forge logs that it has no forge access instead of
|
||||
# waiting on a file that never appears. The controller's units are
|
||||
# the thing that decides whether the file is ever read: they only
|
||||
# exist under `deploy.swarm-controller.enable`.
|
||||
default = if deployCfg.forgejo.enable then deployCfg.forgejo.hostSwarmControllerTokenFile else null;
|
||||
defaultText = lib.literalExpression ''
|
||||
config.services.hyperhive.deploy.forgejo.hostSwarmControllerTokenFile
|
||||
if config.services.hyperhive.deploy.forgejo.enable
|
||||
then config.services.hyperhive.deploy.forgejo.hostSwarmControllerTokenFile
|
||||
else null
|
||||
'';
|
||||
example = "/var/lib/secrets/swarm-controller-forge.token";
|
||||
description = ''
|
||||
|
|
@ -520,11 +521,10 @@ in
|
|||
`forgejo-swarm-controller-account` + `hive-forge-swarm-controller-token`
|
||||
units, which mint and collect it onto forge's own host).
|
||||
|
||||
Defaults to forge's own delivery path (forge deploys
|
||||
unconditionally alongside the rest of the stack — see
|
||||
`hive-forge/default.nix`, it has no `enable` of its own).
|
||||
Override explicitly if forge's actual token file ends up
|
||||
somewhere else — copy it out of forge's
|
||||
Defaults to forge's own delivery path when
|
||||
{option}`services.hyperhive.deploy.forgejo.enable` is set on this
|
||||
host, and to `null` otherwise. Set it explicitly when the forge
|
||||
runs on another host — copy the token out of forge's
|
||||
{option}`services.hyperhive.deploy.forgejo.hostSwarmControllerTokenFile`
|
||||
with whatever secret management this deployment already uses,
|
||||
the same shape `swarm.nix`'s `clientSecretFile` documents for
|
||||
|
|
|
|||
Loading…
Reference in a new issue