Watch
0
0
Fork
You've already forked hyperhive
0
hyperhive/nix/host-modules
Repository files (latest commit first)
Filename Latest commit message Latest commit date
atlas be7eaa8181 refresh-consumer: compare mtimes locale-independently so an unchanged secret doesn't restart its unit
`refresh_unit` read the credential file's mtime with
`stat -c %.6Y | tr -d .`. coreutils prints that fraction with the
locale's decimal separator, so on a host whose locale uses a comma
(muede-lpt2: `1791232888,193159`) `tr` stripped nothing, the `-le`
against the unit's start errored, the "unchanged" early return was
skipped, and every run try-restarted the consumer. Every unit on a
store-refresh timer was restarted every ~10 minutes; for
`swarm-bao-ci-runner` that is `gitea-runner-swarm`, which killed every
CI job running at the time.

The mtime is now read with `date -r … +%s%6N`, the same digit-only
format the start time already used (`date -d … +%s%6N` on systemd's
fixed English timestamp), so neither side has a separator for a locale
to change.

A value that still does not read as digits — an unparsable start time,
a missing file — now restarts nothing and logs at `err`. Skipping on
doubt rather than restarting on doubt: the file's mtime is kept, so a
genuinely changed credential still restarts its consumer on the first
run that can read both times, whereas restarting on doubt restarts it
on every run, which is this bug. Both reads also fall back to empty
instead of aborting the caller's `set -e` script.

`script-test-refresh-consumer` runs the rendered helper under
`de_DE.UTF-8` against a stub `systemctl`, and checks first that `stat`
really prints a comma there. The helper on main fails 14 of its
assertions.

Fixes #5230
2026-10-13 17:00:56 +02:00
..
hive-c0re swarm-logs: authenticate as the agent with its own queue secret 2026-10-13 08:38:05 +02:00
hive-forge nix: re-run the host's store fetches on a ten-minute timer 2026-10-13 00:03:20 +02:00
hive-gateway swarm CA: describe the store's pki root as the only anchor in docs and comments 2026-10-05 21:17:10 +02:00
lib refresh-consumer: compare mtimes locale-independently so an unchanged secret doesn't restart its unit 2026-10-13 17:00:56 +02:00
swarm-grafana/dashboards swarm-grafana: drop stale windows from the subscription usage line, match sibling panel interval 2026-10-07 23:54:53 +02:00
bao-bootstrap-policy.hcl bao: disable the unused approle auth method, declaratively 2026-09-28 22:58:36 +02:00
default.nix swarm-logs-auth: check agent tokens on the log store's query route 2026-10-13 08:38:05 +02:00
deploy.nix nix: allSwarmServices turns on the review classifier 2026-10-12 13:11:21 +02:00
glue-bao-readers-policy-order.nix grafana: mint the admin password into the store and apply it on every start 2026-10-12 15:16:53 +02:00
glue-bao-tls.nix swarm-logs-auth: check agent tokens on the log store's query route 2026-10-13 08:38:05 +02:00
glue-bao-ui-oidc-client.nix bao: OIDC login to the browser UI via authelia, as a metadata-only viewer 2026-09-28 19:56:38 +02:00
glue-controller-bao-identity.nix nix: gate hive-c0re on deploy.hive-controller.enable, drop hyperhive.enable 2026-09-26 01:19:49 +02:00
glue-controller-oidc-client.nix swarm: OIDC clients registered wherever authelia runs; nats + matrix secrets from bao 2026-10-05 09:58:02 +02:00
glue-forge-oidc-client.nix nix: gate hive-c0re on deploy.hive-controller.enable, drop hyperhive.enable 2026-09-26 01:19:49 +02:00
glue-grafana-oidc-client.nix nix: gate hive-c0re on deploy.hive-controller.enable, drop hyperhive.enable 2026-09-26 01:19:49 +02:00
glue-hive-tls-bao-identity.nix hive-tls: the gateway leaf uses the services-issuer identity, not a hive's 2026-10-06 14:54:07 +02:00
glue-logs-auth-bao-identity.nix swarm-logs-auth: check agent tokens on the log store's query route 2026-10-13 08:38:05 +02:00
glue-matrix-ctl-bao-identity.nix swarm-nats, matrix: the queue's and matrix-ctl's store identity paths are their own, not the hive's 2026-10-06 12:04:48 +02:00
glue-matrix-oidc-client.nix swarm: OIDC clients registered wherever authelia runs; nats + matrix secrets from bao 2026-10-05 09:58:02 +02:00
glue-nats-auth-bao-identity.nix swarm-nats: the auth responder's store identity path is its own, not the hive's 2026-10-06 10:04:30 +02:00
glue-nats-bao-identity.nix swarm-nats, matrix: the queue's and matrix-ctl's store identity paths are their own, not the hive's 2026-10-06 12:04:48 +02:00
glue-nats-oidc-client.nix swarm: OIDC clients registered wherever authelia runs; nats + matrix secrets from bao 2026-10-05 09:58:02 +02:00
glue-queue-agent-credential.nix swarm-bao-pki: sign every other hive's three store leaves 2026-10-12 21:41:28 +02:00
glue-review-classifier-oidc-client.nix nix: run the review classifier in a container of its own when a host enables it 2026-10-12 13:11:21 +02:00
glue-secret-publisher-bao-identity.nix nix: gate hive-c0re on deploy.hive-controller.enable, drop hyperhive.enable 2026-09-26 01:19:49 +02:00
glue-swarm-bao-otel-oidc-client.nix ops: update option pointers after grafana/bao split 2026-10-01 09:53:04 +02:00
glue-swarm-otel-oidc-client.nix ops: update option pointers after otel split 2026-10-01 13:00:40 +02:00
hive-matrix-service.nix swarm-controller: revoke matrix admin from former operators 2026-10-05 12:39:02 +02:00
hive-matrix.nix nix: re-run the host's store fetches on a ten-minute timer 2026-10-13 00:03:20 +02:00
hive-network.nix swarm-ci-runner: run the forge CI runner as a swarm service 2026-10-05 13:55:37 +02:00
hive-priv.nix swarm-ci-runner: run the forge CI runner as a swarm service 2026-10-05 13:55:37 +02:00
hive-tls.nix hive-tls: the root fetch presents the hive identity, as on main 2026-10-06 14:54:07 +02:00
host-ca-removed.nix hive CA: catch a deleted CA file however its path is spelled 2026-10-05 21:17:10 +02:00
hyperhive.nix nix: finish the current-behaviour comment sweep in touched files 2026-10-05 09:58:57 +02:00
local-defaults.nix swarm-nats: take the callout issuer and user keys from the store 2026-10-06 14:53:33 +02:00
nats-callout-removed.nix nats-callout-removed: remove the container's OIDC secret copy here, ungated 2026-10-06 15:25:29 +02:00
otel.nix nix: re-run the host's store fetches on a ten-minute timer 2026-10-13 00:03:20 +02:00
stylix-theme.nix swarm-ui: apply the operator's stylix theme, same as the dashboard already does 2026-08-24 14:28:25 +02:00
swarm-authelia-service.nix swarmctl: log in with the operator's own SSO account and reach the controller through the swarm domain 2026-10-12 01:25:58 +02:00
swarm-authelia.nix swarmctl: log in with the operator's own SSO account and reach the controller through the swarm domain 2026-10-12 01:25:58 +02:00
swarm-bao-service.nix nix: split swarm-bao into service and deploy-mode files 2026-10-01 09:37:36 +02:00
swarm-bao.nix swarm-logs-auth: check agent tokens on the log store's query route 2026-10-13 08:38:05 +02:00
swarm-ci-runner.nix nix: re-run the host's store fetches on a ten-minute timer 2026-10-13 00:03:20 +02:00
swarm-controller.nix swarm-bao-forge-publisher starts on the deploy that adds it 2026-10-08 13:59:26 +02:00
swarm-grafana-service.nix nix: finish the "moved to" comment sweep 2026-10-05 09:59:02 +02:00
swarm-grafana.nix grafana: query VictoriaMetrics by its swarm domain 2026-10-13 08:08:17 +02:00
swarm-nats-service.nix nix: finish the "moved to" comment sweep 2026-10-05 09:59:02 +02:00
swarm-nats.nix nix: run the review classifier in a container of its own when a host enables it 2026-10-12 13:11:21 +02:00
swarm-otel-service.nix swarm-otel: name the port-collision assertion instead of pointing below 2026-10-05 19:22:55 +02:00
swarm-otel.nix nix: re-run the host's store fetches on a ten-minute timer 2026-10-13 00:03:20 +02:00
swarm-peers-removed.nix swarm CA: retire the host-held root CA, the store holds the only anchor 2026-10-05 21:17:10 +02:00
swarm-required-services.nix nix: allSwarmServices turns on the review classifier 2026-10-12 13:11:21 +02:00
swarm-review-classifier.nix nix: allSwarmServices turns on the review classifier 2026-10-12 13:11:21 +02:00
swarm-secret-publisher.nix nix: run the review classifier in a container of its own when a host enables it 2026-10-12 13:11:21 +02:00
swarm-snapshot-store.nix deploy: move the wireguard mesh out of the namespace hives read 2026-09-07 14:24:52 +02:00
swarm-ui.nix swarmctl: log in with the operator's own SSO account and reach the controller through the swarm domain 2026-10-12 01:25:58 +02:00
swarm-victorialogs-service.nix nix: split swarm-victorialogs into service and deploy-mode files 2026-10-01 10:03:55 +02:00
swarm-victorialogs.nix swarm-logs-auth: check agent tokens on the log store's query route 2026-10-13 08:38:05 +02:00
swarm-victoriametrics-service.nix nix: follow-ups from the service/deploy split 2026-10-05 19:12:46 +02:00
swarm-victoriametrics.nix swarm-victoriametrics: forward only the store's read API 2026-10-13 08:13:37 +02:00
swarm-wireguard.nix swarm options: no swarm.* value depends on a deploy option or this host's hive 2026-10-04 18:13:47 +02:00
swarm.nix swarm-logs-auth: check agent tokens on the log store's query route 2026-10-13 08:38:05 +02:00