Watch
0
0
Fork
You've already forked hyperhive
0

hive-forge: the controller-token mint writes straight to the store, and the on-disk token goes

`forgejo-swarm-controller-account`, in the forge's container, now puts
the swarm-controller's forge token into the swarm secret store itself,
under the forge publisher's leaf. The container already receives that
leaf as nspawn system credentials for its journal forwarder; the mint
loads the same three. The token reaches bao on stdin (`value=-`) and
the forge's API through a header file, never as an argument, and never
touches disk.

The mint's guard is a marker holding the published token's name, at
/var/lib/forgejo/swarm-controller-token-name, written last: after the
put, and after every other `swarm-controller-boot-*` token of the
account is revoked through forgejo's admin API, authenticated as the
new token. So a put that failed, or a marker lost while the store kept
an older token, leaves no live token behind once a mint completes. The
mint logs in to the store and checks that the account is a site admin
before it mints, so a store that is down or an account the admin API
would refuse mints nothing on each retry. Failures retry under
store-retry; forgejo does not wait for the mint. No bao read and no
grant change: the forge publisher keeps create/update on the token.

Removed: the host's `swarm-bao-forge-publisher` service and path unit,
which read the token file through the container's root, and their
entries in the store and policy ordering glue. The forge publisher's
policy unit stays; `swarm-bao-forge-oidc` still uses the leaf.

On deploy, an existing forge host has no marker, so the mint runs once:
it mints a new token, publishes it, revokes the old one, and deletes
the old /var/lib/forgejo/swarm-controller-token. The controller's next
forge call gets a 401, re-reads the store and carries on.
This commit is contained in:
atlas 2026-10-16 14:39:19 +02:00 • committed by mara
commit 141be16c6d
14 changed files with 294 additions and 261 deletions

View file

@ -123,11 +123,11 @@ let
&& centralToggleOff.services.hyperhive.swarm.forge.publicUrl == "https://forge.t.local";
}
{
# The controller's token publisher follows where the forge runs
# The controller's token mint follows where the forge runs
# (./forge-placement.nix), never the central toggle: a forge host with
# the toggle off still publishes it.
name = "the forge's controller-token publisher does not consult the central toggle";
ok = forgeHere.systemd.services ? swarm-bao-forge-publisher;
# the toggle off still mints and publishes it.
name = "the forge's controller-token mint does not consult the central toggle";
ok = forgeHere.containers.hive-forge.config.systemd.services ? forgejo-swarm-controller-account;
}
{
name = "a hive that does not host the swarm's shared services runs none of them";