centralize operator redis onto a shared OpenBao-brokered valkey #1124

Closed
kiara wants to merge 24 commits from kiara/fediversity:central-valkey into main
Owner

Replace the per-app local redis (mastodon/pixelfed/peertube running their
own createLocally redis over a unix socket) with a single shared valkey
node in the hosting-provider group, served through a new redis contract and
an external provider.

Per-tenant auth is delegated to OpenBao's valkey-database secrets engine:
the valkey node holds only one admin ACL user, and OpenBao mints a per-tenant
static role (stable username = namespace, rotated password, ACL keyspace
scoped to ~<namespace>:*). The openbao agent renders the rotated password to
a file the app reads, so valkey never learns tenant passwords and onboarding a
tenant needs no valkey redeploy.

The valkey-database plugin static role only rotates the password of a
pre-existing ACL user (rotation_statements with ACL SETUSER is rejected),
so the engine pre-creates the scoped user via valkey-cli ACL SETUSER then a
rotate-only static role.

Consumers flip to remote TCP+auth only when the external provider is routed,
keeping the inert createLocally baseline for the single-app service tests.
The per-app redis streamingBackup requests and dead restic redis entries are
dropped; on-node RDB/AOF persistence is configured and offsite backup deferred
to operator-side garage (#911).

test-valkey-service exercises the real production credential path end to end:
the engine mints and rotates the tenant's password, the openbao agent renders
it via extraTemplates, and a client authenticates as the per-tenant ACL user,
is denied outside its keyspace, and reconnects after a forced rotation.

TLS to valkey is deferred (plaintext, consistent both sides); OpenBao's PKI
secrets engine is the preferred future alternative to self-signed certs.

follow-ups:

  • restore redis backups (#1154)
  • make api use redis as cache (#1154, or defer caching to nix)
  • rotate valkey credentials by openbao database secrets engine (#1154)
  • re-evaluate external provider (-> #1152)
Replace the per-app local redis (mastodon/pixelfed/peertube running their own `createLocally` redis over a unix socket) with a single shared `valkey` node in the hosting-provider group, served through a new `redis` contract and an `external` provider. Per-tenant auth is delegated to OpenBao's `valkey-database` secrets engine: the valkey node holds only one admin ACL user, and OpenBao mints a per-tenant static role (stable username = namespace, rotated password, ACL keyspace scoped to `~<namespace>:*`). The openbao agent renders the rotated password to a file the app reads, so valkey never learns tenant passwords and onboarding a tenant needs no valkey redeploy. The valkey-database plugin static role only rotates the password of a pre-existing ACL user (`rotation_statements` with `ACL SETUSER` is rejected), so the engine pre-creates the scoped user via `valkey-cli ACL SETUSER` then a rotate-only static role. Consumers flip to remote TCP+auth only when the `external` provider is routed, keeping the inert `createLocally` baseline for the single-app service tests. The per-app redis `streamingBackup` requests and dead restic redis entries are dropped; on-node RDB/AOF persistence is configured and offsite backup deferred to operator-side garage (#911). `test-valkey-service` exercises the real production credential path end to end: the engine mints and rotates the tenant's password, the openbao agent renders it via `extraTemplates`, and a client authenticates as the per-tenant ACL user, is denied outside its keyspace, and reconnects after a forced rotation. TLS to valkey is deferred (plaintext, consistent both sides); OpenBao's PKI secrets engine is the preferred future alternative to self-signed certs. follow-ups: - restore redis backups (#1154) - make api use redis as cache (#1154, or defer caching to nix) - rotate valkey credentials by openbao database secrets engine (#1154) - re-evaluate external provider (-> #1152)
@ -350,4 +409,0 @@
restoreCmd = ''
tee /var/lib/redis-mastodon/dump.rdb > /dev/null
'';
};
Author
Owner

for backups this is still pending on #911.

for backups this is still pending on #911.
kiara marked this conversation as resolved
kiara force-pushed central-valkey from 5d4c7a53db
Some checks failed
checks-api-python-tests / api-python-tests (pull_request) Successful in 6s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 15s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 15s
devShells-default / default (pull_request) Successful in 20s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 16s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 16s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 22s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 22s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 31s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 13s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 11s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 14s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 14s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 13s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 36s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 39s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 12s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 12s
checks-api-http / api-http (pull_request) Successful in 50s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 22s
nix-unit-lib-function / lib-function (pull_request) Successful in 21s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 12s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 12s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 20s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 9s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 13s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 14s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 29s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 17s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 16s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 22s
nixosConfigurations-operator-garage / operator-garage (pull_request) Successful in 15s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 18s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 37s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 13s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 24s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 11s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 12s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 12s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 11s
checks-api-asyncapi-validate / api-asyncapi-validate (pull_request) Successful in 8s
checks-api-docs / api-docs (pull_request) Successful in 10s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 28s
Nix flake completeness check / _complete (pull_request) Failing after 31s
checks-api-openapi-validate / api-openapi-validate (pull_request) Successful in 6s
checks-asyncapi-docs / asyncapi-docs (pull_request) Successful in 6s
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 9s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 10s
checks-panel-basic / panel-basic (pull_request) Successful in 1m36s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 12s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 9s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 9s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 9s
checks-contracts-ldap-hardcoded / contracts-ldap-hardcoded (pull_request) Successful in 9s
checks-apps-api / apps-api (pull_request) Has been cancelled
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 10s
checks-contracts-s3-hardcoded / contracts-s3-hardcoded (pull_request) Has been cancelled
checks-contracts-smtp-hardcoded / contracts-smtp-hardcoded (pull_request) Has been cancelled
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Has been cancelled
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Has been cancelled
checks-apps-tf / apps-tf (pull_request) Has been cancelled
checks-apps-tf-incus / apps-tf-incus (pull_request) Has been cancelled
checks-contracts-redis-external / contracts-redis-external (pull_request) Has been cancelled
checks-contracts-sso-hardcoded / contracts-sso-hardcoded (pull_request) Has been cancelled
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Has been cancelled
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Has been cancelled
checks-core-docs / core-docs (pull_request) Has been cancelled
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Has been cancelled
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Has been cancelled
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Has been cancelled
checks-panel-docs / panel-docs (pull_request) Has been cancelled
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Has been cancelled
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Has been cancelled
checks-test-otel-wiring / test-otel-wiring (pull_request) Has been cancelled
checks-test-valkey-service / test-valkey-service (pull_request) Has been cancelled
checks-treefmt / treefmt (pull_request) Has been cancelled
checks-integrations-openbao-pki / integrations-openbao-pki (pull_request) Has been cancelled
flake-show / apps-ssh (pull_request) Has been cancelled
checks-integrations-spire-openbao / integrations-spire-openbao (pull_request) Successful in 21s
to 6203e682c5
Some checks failed
checks-api-python-tests / api-python-tests (pull_request) Successful in 7s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 20s
devShells-default / default (pull_request) Successful in 25s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 23s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 24s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 27s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 24s
checks-api-asyncapi-validate / api-asyncapi-validate (pull_request) Successful in 11s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 9s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 19s
checks-api-docs / api-docs (pull_request) Successful in 13s
Nix flake completeness check / _complete (pull_request) Failing after 46s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 13s
checks-api-http / api-http (pull_request) Successful in 57s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 22s
checks-api-openapi-validate / api-openapi-validate (pull_request) Successful in 7s
checks-asyncapi-docs / asyncapi-docs (pull_request) Successful in 6s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 21s
checks-integrations-openbao-pki / integrations-openbao-pki (pull_request) Successful in 59s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 13s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 13s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 14s
nix-unit-lib-function / lib-function (pull_request) Successful in 9s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 15s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 7s
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 12s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 15s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 14s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 13s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 15s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 20s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 20s
nixosConfigurations-operator-garage / operator-garage (pull_request) Successful in 16s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 15s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 15s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 12s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 22s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 15s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 13s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 23s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 11s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 11s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 12s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 13s
checks-contracts-ldap-hardcoded / contracts-ldap-hardcoded (pull_request) Successful in 10s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 11s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 28s
checks-contracts-s3-hardcoded / contracts-s3-hardcoded (pull_request) Successful in 10s
checks-contracts-smtp-hardcoded / contracts-smtp-hardcoded (pull_request) Successful in 9s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 10s
checks-contracts-redis-external / contracts-redis-external (pull_request) Successful in 40s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 9s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 9s
checks-contracts-sso-hardcoded / contracts-sso-hardcoded (pull_request) Successful in 10s
checks-panel-docs / panel-docs (pull_request) Successful in 7s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 9s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 10s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 10s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 10s
checks-treefmt / treefmt (pull_request) Successful in 10s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 3m46s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 44s
flake-show / flake-show (pull_request) Successful in 4m8s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 3m18s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 9m16s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Successful in 10m3s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 9m16s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 11m11s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 13m27s
checks-apps-tf-incus / apps-tf-incus (pull_request) Has been cancelled
checks-apps-tf / apps-tf (pull_request) Has been cancelled
checks-apps-api / apps-api (pull_request) Has been cancelled
checks-core-docs / core-docs (pull_request) Has been cancelled
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Has been cancelled
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Has been cancelled
2026-06-24 16:52:58 +02:00
Compare
kiara force-pushed central-valkey from 6203e682c5
Some checks failed
checks-api-python-tests / api-python-tests (pull_request) Successful in 7s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 20s
devShells-default / default (pull_request) Successful in 25s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 23s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 24s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 27s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 24s
checks-api-asyncapi-validate / api-asyncapi-validate (pull_request) Successful in 11s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 9s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 19s
checks-api-docs / api-docs (pull_request) Successful in 13s
Nix flake completeness check / _complete (pull_request) Failing after 46s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 13s
checks-api-http / api-http (pull_request) Successful in 57s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 22s
checks-api-openapi-validate / api-openapi-validate (pull_request) Successful in 7s
checks-asyncapi-docs / asyncapi-docs (pull_request) Successful in 6s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 21s
checks-integrations-openbao-pki / integrations-openbao-pki (pull_request) Successful in 59s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 13s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 13s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 14s
nix-unit-lib-function / lib-function (pull_request) Successful in 9s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 15s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 7s
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 12s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 15s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 14s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 13s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 15s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 20s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 20s
nixosConfigurations-operator-garage / operator-garage (pull_request) Successful in 16s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 15s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 15s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 12s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 22s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 15s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 13s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 23s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 11s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 11s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 12s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 13s
checks-contracts-ldap-hardcoded / contracts-ldap-hardcoded (pull_request) Successful in 10s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 11s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 28s
checks-contracts-s3-hardcoded / contracts-s3-hardcoded (pull_request) Successful in 10s
checks-contracts-smtp-hardcoded / contracts-smtp-hardcoded (pull_request) Successful in 9s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 10s
checks-contracts-redis-external / contracts-redis-external (pull_request) Successful in 40s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 9s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 9s
checks-contracts-sso-hardcoded / contracts-sso-hardcoded (pull_request) Successful in 10s
checks-panel-docs / panel-docs (pull_request) Successful in 7s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 9s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 10s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 10s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 10s
checks-treefmt / treefmt (pull_request) Successful in 10s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 3m46s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 44s
flake-show / flake-show (pull_request) Successful in 4m8s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 3m18s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 9m16s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Successful in 10m3s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 9m16s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 11m11s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 13m27s
checks-apps-tf-incus / apps-tf-incus (pull_request) Has been cancelled
checks-apps-tf / apps-tf (pull_request) Has been cancelled
checks-apps-api / apps-api (pull_request) Has been cancelled
checks-core-docs / core-docs (pull_request) Has been cancelled
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Has been cancelled
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Has been cancelled
to 79602c12e3
All checks were successful
checks-api-asyncapi-validate / api-asyncapi-validate (pull_request) Successful in 7s
checks-api-python-tests / api-python-tests (pull_request) Successful in 8s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 15s
checks-integrations-openbao-pki / integrations-openbao-pki (pull_request) Successful in 18s
devShells-default / default (pull_request) Successful in 22s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 19s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 20s
checks-api-docs / api-docs (pull_request) Successful in 17s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 25s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 21s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 32s
checks-api-openapi-validate / api-openapi-validate (pull_request) Successful in 7s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 10s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 16s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 34s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 17s
checks-asyncapi-docs / asyncapi-docs (pull_request) Successful in 7s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 23s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 40s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 14s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 47s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 45s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 13s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 21s
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 11s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 13s
nix-unit-lib-function / lib-function (pull_request) Successful in 18s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 13s
checks-api-http / api-http (pull_request) Successful in 58s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 13s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 8s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 14s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 20s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 14s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 14s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 16s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 22s
nixosConfigurations-operator-garage / operator-garage (pull_request) Successful in 16s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 23s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 18s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 13s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 16s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 26s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 40s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 14s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 14s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 13s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 13s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 12s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 10s
Nix flake completeness check / _complete (pull_request) Successful in 1m58s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 10s
checks-contracts-ldap-hardcoded / contracts-ldap-hardcoded (pull_request) Successful in 10s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 10s
checks-contracts-redis-external / contracts-redis-external (pull_request) Successful in 9s
checks-contracts-s3-hardcoded / contracts-s3-hardcoded (pull_request) Successful in 9s
checks-contracts-smtp-hardcoded / contracts-smtp-hardcoded (pull_request) Successful in 9s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 9s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 9s
checks-contracts-sso-hardcoded / contracts-sso-hardcoded (pull_request) Successful in 10s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 9s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 9s
checks-panel-docs / panel-docs (pull_request) Successful in 7s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 9s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 9s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 11s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 9s
checks-treefmt / treefmt (pull_request) Successful in 10s
flake-show / flake-show (pull_request) Successful in 4m1s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Successful in 5m54s
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Successful in 7m59s
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Successful in 12m52s
checks-apps-api / apps-api (pull_request) Successful in 44m12s
checks-apps-tf-incus / apps-tf-incus (pull_request) Successful in 45m45s
checks-apps-tf / apps-tf (pull_request) Successful in 1h5m6s
checks-core-docs / core-docs (pull_request) Successful in 6m14s
2026-06-24 17:08:36 +02:00
Compare
kiara force-pushed central-valkey from e662bf49ff
All checks were successful
checks-api-asyncapi-validate / api-asyncapi-validate (pull_request) Successful in 7s
checks-api-python-tests / api-python-tests (pull_request) Successful in 6s
checks-integrations-openbao-pki / integrations-openbao-pki (pull_request) Successful in 18s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 18s
checks-api-docs / api-docs (pull_request) Successful in 18s
devShells-default / default (pull_request) Successful in 23s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 22s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 21s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 26s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 32s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 23s
checks-api-openapi-validate / api-openapi-validate (pull_request) Successful in 8s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 11s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 15s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 37s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 23s
checks-asyncapi-docs / asyncapi-docs (pull_request) Successful in 8s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 14s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 40s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 16s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 14s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 48s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 12s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 20s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 47s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 49s
checks-api-http / api-http (pull_request) Successful in 54s
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 12s
nix-unit-lib-function / lib-function (pull_request) Successful in 19s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 14s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 13s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 8s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 20s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 14s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 14s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 15s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 16s
nixosConfigurations-operator-garage / operator-garage (pull_request) Successful in 16s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 25s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 15s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 19s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 27s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 16s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 24s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 13s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 14s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 12s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 11s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 11s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 10s
Nix flake completeness check / _complete (pull_request) Successful in 1m58s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 10s
checks-contracts-ldap-hardcoded / contracts-ldap-hardcoded (pull_request) Successful in 9s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 9s
checks-contracts-redis-external / contracts-redis-external (pull_request) Successful in 9s
checks-contracts-s3-hardcoded / contracts-s3-hardcoded (pull_request) Successful in 9s
checks-contracts-smtp-hardcoded / contracts-smtp-hardcoded (pull_request) Successful in 9s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 9s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 9s
checks-contracts-sso-hardcoded / contracts-sso-hardcoded (pull_request) Successful in 10s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 9s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 9s
checks-panel-docs / panel-docs (pull_request) Successful in 7s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 9s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 10s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 10s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 9s
checks-treefmt / treefmt (pull_request) Successful in 10s
flake-show / flake-show (pull_request) Successful in 3m54s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Successful in 5m40s
checks-core-docs / core-docs (pull_request) Successful in 7m0s
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Successful in 7m58s
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Successful in 12m57s
checks-apps-api / apps-api (pull_request) Successful in 42m14s
checks-apps-tf-incus / apps-tf-incus (pull_request) Successful in 44m18s
checks-apps-tf / apps-tf (pull_request) Successful in 52m20s
to b5d7fe2b07
Some checks failed
checks-api-asyncapi-validate / api-asyncapi-validate (pull_request) Successful in 7s
checks-api-python-tests / api-python-tests (pull_request) Successful in 7s
checks-integrations-openbao-pki / integrations-openbao-pki (pull_request) Successful in 16s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 17s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 18s
checks-api-docs / api-docs (pull_request) Successful in 18s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 27s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 20s
devShells-default / default (pull_request) Successful in 28s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 21s
checks-api-openapi-validate / api-openapi-validate (pull_request) Successful in 9s
nixosConfigurations-hosting-provider-garage / hosting-provider-garage (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 14s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 35s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 24s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 10s
checks-asyncapi-docs / asyncapi-docs (pull_request) Successful in 6s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 13s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 45s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 16s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 13s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 47s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 41s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 20s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 13s
checks-api-http / api-http (pull_request) Successful in 56s
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 11s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 8s
nix-unit-lib-function / lib-function (pull_request) Successful in 19s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 13s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 12s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 19s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 13s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 13s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 12s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 13s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 14s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 14s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 17s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 17s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 20s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 19s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 23s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 18s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 27s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 14s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 13s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 12s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 11s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 10s
Nix flake completeness check / _complete (pull_request) Successful in 1m52s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 9s
checks-contracts-ldap-hardcoded / contracts-ldap-hardcoded (pull_request) Successful in 9s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 9s
checks-contracts-redis-external / contracts-redis-external (pull_request) Successful in 9s
checks-contracts-s3-hardcoded / contracts-s3-hardcoded (pull_request) Successful in 8s
checks-contracts-smtp-hardcoded / contracts-smtp-hardcoded (pull_request) Successful in 9s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 9s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 9s
checks-contracts-sso-hardcoded / contracts-sso-hardcoded (pull_request) Successful in 9s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 9s
checks-panel-docs / panel-docs (pull_request) Successful in 7s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 9s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 9s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 9s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 9s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 10s
checks-treefmt / treefmt (pull_request) Successful in 10s
flake-show / flake-show (pull_request) Successful in 4m0s
checks-core-docs / core-docs (pull_request) Successful in 6m55s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 9m7s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Successful in 9m15s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 11m27s
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Successful in 17m19s
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Successful in 22m16s
checks-apps-api / apps-api (pull_request) Successful in 53m0s
checks-apps-tf-incus / apps-tf-incus (pull_request) Successful in 54m19s
checks-apps-tf / apps-tf (pull_request) Failing after 1h29m59s
2026-06-25 19:45:18 +02:00
Compare
checks: restore local-garage path for apps-tf/apps-tf-incus
All checks were successful
checks-api-asyncapi-validate / api-asyncapi-validate (pull_request) Successful in 6s
checks-api-python-tests / api-python-tests (pull_request) Successful in 6s
checks-integrations-openbao-pki / integrations-openbao-pki (pull_request) Successful in 15s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 18s
checks-api-docs / api-docs (pull_request) Successful in 14s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 21s
devShells-default / default (pull_request) Successful in 24s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 23s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 32s
checks-api-openapi-validate / api-openapi-validate (pull_request) Successful in 10s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 25s
nixosConfigurations-hosting-provider-garage / hosting-provider-garage (pull_request) Successful in 17s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 12s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 35s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 24s
checks-asyncapi-docs / asyncapi-docs (pull_request) Successful in 9s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 15s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 42s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 16s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 47s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 15s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 44s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 49s
checks-api-http / api-http (pull_request) Successful in 54s
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 11s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 13s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 13s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 21s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 14s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 22s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 13s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 16s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 14s
nix-unit-lib-function / lib-function (pull_request) Successful in 8s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 9s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 14s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 7s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 14s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 14s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 17s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 15s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 13s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 13s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 13s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 20s
checks-integrations-spire-openbao / integrations-spire-openbao (pull_request) Successful in 1m34s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 13s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 12s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 22s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 16s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 11s
Nix flake completeness check / _complete (pull_request) Successful in 1m54s
checks-contracts-ldap-hardcoded / contracts-ldap-hardcoded (pull_request) Successful in 9s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 9s
checks-contracts-redis-external / contracts-redis-external (pull_request) Successful in 9s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 10s
checks-contracts-smtp-hardcoded / contracts-smtp-hardcoded (pull_request) Successful in 9s
checks-contracts-s3-hardcoded / contracts-s3-hardcoded (pull_request) Successful in 9s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 9s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 9s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 10s
checks-contracts-sso-hardcoded / contracts-sso-hardcoded (pull_request) Successful in 10s
checks-panel-docs / panel-docs (pull_request) Successful in 7s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 9s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 9s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 9s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 9s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 10s
checks-treefmt / treefmt (pull_request) Successful in 10s
flake-show / flake-show (pull_request) Successful in 4m5s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Successful in 5m46s
checks-core-docs / core-docs (pull_request) Successful in 7m3s
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Successful in 7m53s
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Successful in 13m4s
checks-apps-api / apps-api (pull_request) Successful in 52m26s
checks-apps-tf / apps-tf (pull_request) Successful in 54m5s
checks-apps-tf-incus / apps-tf-incus (pull_request) Successful in 54m42s
checks-apps-panel / apps-panel (pull_request) Successful in 58m42s
9471c986a7
The centralized-only garage policy in `hosts-common.nix` (`hosting-provider`
apex + `tenant = group`, both `mkDefault`) dropped the local-identity path
that the incus tests rely on via the shared `incusModel`. `apps-tf`'s
pixelfed then requested a `<group>-pixelfed` bucket at the centralized apex
that the co-located local `garage` ancilliary never creates, so its S3 setup
stalled and nginx never served :443 (1800s timeout).

Override `external.garage` back to the local identity path in `incusModel`,
mirroring the single-app `test-*-service` checks: `tenant = ""` keeps
bucket/key names un-prefixed and `domain` points at the node's own
`garage.localhost`.

Verified: `apps-tf` green on fediversity-ci (1208.77s, pixelfed reaches :443).

Assisted-by: Claude:claude-opus-4-8
add per-tenant offsite valkey cache backup via the operator TF graph
All checks were successful
checks-api-asyncapi-validate / api-asyncapi-validate (pull_request) Successful in 6s
checks-api-python-tests / api-python-tests (pull_request) Successful in 6s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 13s
checks-integrations-openbao-pki / integrations-openbao-pki (pull_request) Successful in 16s
checks-api-docs / api-docs (pull_request) Successful in 13s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 17s
checks-integrations-spire-openbao / integrations-spire-openbao (pull_request) Successful in 21s
devShells-default / default (pull_request) Successful in 24s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 23s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 30s
checks-api-openapi-validate / api-openapi-validate (pull_request) Successful in 8s
nixosConfigurations-hosting-provider-garage / hosting-provider-garage (pull_request) Successful in 17s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 19s
checks-asyncapi-docs / asyncapi-docs (pull_request) Successful in 8s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 16s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 11s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 37s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 25s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 16s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 43s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 21s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 13s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 46s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 46s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 44s
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 11s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 12s
checks-api-http / api-http (pull_request) Successful in 56s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 12s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 12s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 21s
nix-unit-lib-function / lib-function (pull_request) Successful in 19s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 14s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 14s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 14s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 14s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 20s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 9s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 14s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 14s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 14s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 15s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 14s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 18s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 21s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 15s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 15s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 19s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 14s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 13s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 25s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 12s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 10s
Nix flake completeness check / _complete (pull_request) Successful in 1m57s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 9s
checks-contracts-ldap-hardcoded / contracts-ldap-hardcoded (pull_request) Successful in 9s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 10s
checks-contracts-redis-external / contracts-redis-external (pull_request) Successful in 9s
checks-contracts-s3-hardcoded / contracts-s3-hardcoded (pull_request) Successful in 9s
checks-contracts-smtp-hardcoded / contracts-smtp-hardcoded (pull_request) Successful in 9s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 9s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 9s
checks-contracts-sso-hardcoded / contracts-sso-hardcoded (pull_request) Successful in 9s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 9s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 9s
checks-panel-docs / panel-docs (pull_request) Successful in 7s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 9s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 9s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 10s
checks-treefmt / treefmt (pull_request) Successful in 10s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 45s
flake-show / flake-show (pull_request) Successful in 4m0s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Successful in 5m45s
checks-core-docs / core-docs (pull_request) Successful in 7m3s
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Successful in 7m54s
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Successful in 12m53s
checks-apps-api / apps-api (pull_request) Successful in 43m2s
checks-apps-tf-incus / apps-tf-incus (pull_request) Successful in 44m57s
checks-apps-panel / apps-panel (pull_request) Successful in 49m11s
checks-apps-tf / apps-tf (pull_request) Successful in 53m25s
cdf155dc8a
#1124 centralized operator redis onto one shared, tenant-blind valkey node
and dropped the per-app offsite cache backup in the process (app DB backups
via `streamingBackup`/restic are untouched). Restore the cache half, mirroring
how the rest of the branch handles per-tenant, privileged, node-isn't-redeployed
operations: the deployer records intent + credentials in the operator TF graph,
the shared node consumes them off-store and acts tenant-by-tenant.

There is no global tenant roster (each operator's TF apply knows only its own
namespaces), so the node cannot pull the active set. Instead the operator graph
PUSHES, per namespace it owns, a backup descriptor + offsite S3 creds into the
node's tmpfs and an idempotent `systemctl enable --now valkey-backup@<ns>.timer`;
on destroy it disables the timer and removes the files. Creds travel over
`incus file push -` stdin (never on a command line) and the node consumes them
via `LoadCredential` keyed on `%i`, so the node holds no cross-tenant token.

The node ships only a generic, tenant-blind `valkey-backup@` service+timer
template (zero tenant names in the store); `ConditionPathExists` on the pushed
descriptor makes a stale enable inert. The dump is keyspace-scoped
(`SCAN MATCH '<ns>:*'` + per-key `DUMP`/`PTTL`) so a single operator's bucket
never receives a co-tenant's cache, streamed into `restic backup --stdin`.

Design reasoning (rejected approaches, the admin+MATCH vs ACL-user credential
trade-off, restic-swappability, and the retention/restore-drill TODO) lives in
the `valkey-backup.py` docstring and the `valkey-backup@` unit comments.

Assisted-by: Claude:claude-opus-4-8
rename ambiguous tenant to namespace for the shared-node keyspace
Some checks failed
checks-api-python-tests / api-python-tests (pull_request) Successful in 7s
checks-api-asyncapi-validate / api-asyncapi-validate (pull_request) Successful in 7s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 20s
devShells-default / default (pull_request) Successful in 24s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 22s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 22s
checks-api-docs / api-docs (pull_request) Successful in 19s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 24s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 33s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 11s
checks-api-openapi-validate / api-openapi-validate (pull_request) Successful in 7s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 36s
nixosConfigurations-hosting-provider-garage / hosting-provider-garage (pull_request) Successful in 13s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 41s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 15s
checks-asyncapi-docs / asyncapi-docs (pull_request) Successful in 8s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 47s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 18s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 15s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 46s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 48s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 13s
checks-api-http / api-http (pull_request) Successful in 55s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 13s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 21s
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 11s
checks-integrations-openbao-pki / integrations-openbao-pki (pull_request) Successful in 1m0s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 14s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 15s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 9s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 14s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 14s
nix-unit-lib-function / lib-function (pull_request) Successful in 7s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 13s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 12s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 21s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 14s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 8s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 17s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 13s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 14s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 12s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 12s
checks-integrations-spire-openbao / integrations-spire-openbao (pull_request) Successful in 1m31s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 11s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 19s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 11s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 17s
Nix flake completeness check / _complete (pull_request) Successful in 1m53s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 9s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 14s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 9s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 29s
checks-contracts-ldap-hardcoded / contracts-ldap-hardcoded (pull_request) Successful in 9s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 9s
checks-contracts-redis-external / contracts-redis-external (pull_request) Successful in 9s
checks-contracts-s3-hardcoded / contracts-s3-hardcoded (pull_request) Successful in 9s
checks-contracts-smtp-hardcoded / contracts-smtp-hardcoded (pull_request) Successful in 9s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 9s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 9s
checks-contracts-sso-hardcoded / contracts-sso-hardcoded (pull_request) Successful in 10s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 9s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 9s
checks-panel-docs / panel-docs (pull_request) Successful in 7s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 9s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 8s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 10s
checks-treefmt / treefmt (pull_request) Successful in 10s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 43s
flake-show / flake-show (pull_request) Successful in 3m58s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Successful in 5m44s
checks-core-docs / core-docs (pull_request) Successful in 7m0s
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Successful in 7m57s
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Successful in 12m52s
checks-apps-api / apps-api (pull_request) Has been cancelled
checks-apps-tf-incus / apps-tf-incus (pull_request) Has been cancelled
checks-apps-tf / apps-tf (pull_request) Has been cancelled
checks-apps-panel / apps-panel (pull_request) Has been cancelled
4dc87865db
`tenant` was overloaded: the garage resource used it for the OPERATOR
(`tenant = group`, prefix `<operator>-<name>`), while the valkey/redis
path used it for the keyspace PARTITION (the `<namespace>:*` ACL scope,
`redisTenants`, the operator-TF `tenants` var) -- bare app names today.
The two senses were only safe to conflate because there is one static
operator group.

Reserve `tenant` for the operator (the isolation unit), and rename the
partition sense to `namespace` throughout:

- TF operator graph: `var.tenants` -> `var.namespaces`,
  `tenant_rotation_period` -> `namespace_rotation_period`, and the
  per-namespace resource addresses (`redisacl_user.namespace`,
  `garage_bucket.namespace{,_backups}`, `garage_key.namespace*`,
  `vault_kv_secret_v2.namespace_*`, `null_resource.namespace_valkey_backup_timer`).
- effects: the `tf-incus-operator-hosts` option `tenants` -> `namespaces`
  (and its `TF_VAR_namespaces` env key + `namespacesMap`).
- setups: `redisTenants` -> `redisNamespaces`, the `tf-incus-operator-hosts.nix`
  `namespaces` arg, and the consuming `namespaces = redisNamespaces`.
- valkey/openbao/redis modules + tests + `valkey-backup.py`/`-timer.sh`:
  prose `per-tenant`/`tenant-blind`/`co-tenant` -> per-namespace etc.,
  and `tenantPasswordFile` -> `namespacePasswordFile`.

The garage resource's `tenant` option (= operator prefix),
`garageTenantPrefix`, `garage_tenant_prefix`, `tenant = group`/`""`, and
"multi-tenant" (= multi-operator) are left intact: those are now the
consistent operator-sense uses.

Pure rename: no behavior change. `redisNamespaces`/`var.namespaces` still
hold bare app names (the under-keying fix is a separate commit).

Assisted-by: Claude:claude-opus-4-8
fold operator id into valkey namespace to match garage prefixing
All checks were successful
checks-api-python-tests / api-python-tests (pull_request) Successful in 6s
checks-api-asyncapi-validate / api-asyncapi-validate (pull_request) Successful in 7s
checks-integrations-openbao-pki / integrations-openbao-pki (pull_request) Successful in 16s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 17s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 21s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 20s
checks-integrations-spire-openbao / integrations-spire-openbao (pull_request) Successful in 23s
checks-api-docs / api-docs (pull_request) Successful in 17s
devShells-default / default (pull_request) Successful in 24s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 23s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 31s
checks-api-openapi-validate / api-openapi-validate (pull_request) Successful in 7s
nixosConfigurations-hosting-provider-garage / hosting-provider-garage (pull_request) Successful in 15s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 36s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 15s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 11s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 40s
checks-asyncapi-docs / asyncapi-docs (pull_request) Successful in 7s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 24s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 18s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 20s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 13s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 48s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 48s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 12s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 47s
checks-api-http / api-http (pull_request) Successful in 55s
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 10s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 14s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 12s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 13s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 20s
nix-unit-lib-function / lib-function (pull_request) Successful in 19s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 13s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 13s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 21s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 13s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 14s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 8s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 13s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 13s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 16s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 14s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 14s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 20s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 15s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 18s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 15s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 19s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 26s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 13s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 10s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 10s
Nix flake completeness check / _complete (pull_request) Successful in 1m53s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 9s
checks-contracts-ldap-hardcoded / contracts-ldap-hardcoded (pull_request) Successful in 9s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 9s
checks-contracts-redis-external / contracts-redis-external (pull_request) Successful in 9s
checks-contracts-s3-hardcoded / contracts-s3-hardcoded (pull_request) Successful in 9s
checks-contracts-smtp-hardcoded / contracts-smtp-hardcoded (pull_request) Successful in 9s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 9s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 9s
checks-contracts-sso-hardcoded / contracts-sso-hardcoded (pull_request) Successful in 9s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 9s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 9s
checks-panel-docs / panel-docs (pull_request) Successful in 7s
flake-show / flake-show (pull_request) Successful in 3m54s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 9s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 9s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 10s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 9s
checks-treefmt / treefmt (pull_request) Successful in 10s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Successful in 5m46s
checks-core-docs / core-docs (pull_request) Successful in 7m4s
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Successful in 8m3s
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Successful in 12m50s
checks-apps-api / apps-api (pull_request) Successful in 43m40s
checks-apps-tf-incus / apps-tf-incus (pull_request) Successful in 45m23s
checks-apps-panel / apps-panel (pull_request) Successful in 49m17s
checks-apps-tf / apps-tf (pull_request) Successful in 54m7s
b958ad5336
Two operators' same-named apps (both `mastodon`) computed the same bare
`mastodon` valkey namespace, so they minted the same `~mastodon:*` ACL
user and OpenBao static role on the shared cache node -- a latent
cross-operator credential + keyspace leak the single static operator
group hid.

Fold the operator id into every redis namespace as `<group>-<app>`,
reusing the same `group` value garage already prefixes its buckets/keys
with, so both shared nodes key identically off one source:

- consumer side: the `redis` resource gains a `namespacePrefix` policy
  option (`mkDefault group` in `hosts-common`), applied in `apply` to
  every request's logical `namespace` before routing/result resolution,
  so the ACL username, password render path, and contract result all
  agree on `<group>-<app>`. Empty prefix (the local/test path) is
  identity, mirroring garage's `tenant = ""`.
- mint side: the operator TF graph folds the operator id (now the
  generalized `operator_prefix` var, renamed from the garage-specific
  `garage_tenant_prefix` since it keys both nodes) onto the valkey ACL
  user + static role + backup descriptor via a `namespace_name` local,
  matching how it already prefixes garage buckets/keys. `var.namespaces`
  stays the bare app set (garage applies its own prefix on top), so the
  two minting loops do not double-prefix.

`contracts-redis-external` and `test-valkey-service` stay green
(empty-prefix identity path unchanged); `apps-api`/`apps-tf` exercise
the real `<group>-<app>` mint on CI.

Assisted-by: Claude:claude-opus-4-8
Replace the shared-valkey-node ACL key-scope model (`~<namespace>:*`),
which real applications cannot satisfy and which cannot separate two
operators' same-named apps, with one valkey instance per namespace.
Isolation becomes physical: one valkey process per `<group>-<app>`
namespace, each on a deterministic hashed port
(`6400 + sha256(namespace) mod 1000`), so no port registry is needed.

The valkey module moves to `src/applications/shared/valkey/`, imported by
both the hosting-provider and operator groups; each group hosts only its
own namespaces' instances. The central OpenBao valkey-database engine
stays in the hosting-provider group and configures, per namespace, one
`database/config/valkey-<namespace>` connection (as the fixed bootstrap
`default` user) plus one `database/static-roles/<namespace>` rotating the
constant `app` consumer user. The redis result gains a `namespace` field
so consumers render from `database/static-creds/<namespace>` now that the
username is constant.

Per-namespace minting is fully declarative, so the operator TF graph's
redis provisioning (the `redisacl` provider, its static role, and the
deferred valkey-backup machinery) is dropped along with the npins pin.

Assisted-by: Claude:claude-opus-4-8
wire cross-group SPIRE auth for operator valkey -> central OpenBao KV
Some checks failed
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 19s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 23s
checks-api-asyncapi-validate / api-asyncapi-validate (pull_request) Successful in 26s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 23s
checks-api-python-tests / api-python-tests (pull_request) Successful in 32s
devShells-default / default (pull_request) Successful in 37s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 15s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 40s
checks-api-docs / api-docs (pull_request) Successful in 12s
nixosConfigurations-hosting-provider-garage / hosting-provider-garage (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 14s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 17s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 9s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 46s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 49s
checks-api-openapi-validate / api-openapi-validate (pull_request) Successful in 7s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 50s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 12s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 12s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 11s
checks-integrations-openbao-pki / integrations-openbao-pki (pull_request) Successful in 56s
checks-api-http / api-http (pull_request) Successful in 1m0s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 13s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 11s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 12s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 13s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 20s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 12s
checks-asyncapi-docs / asyncapi-docs (pull_request) Successful in 23s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 13s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 8s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 21s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 13s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 12s
nix-unit-lib-function / lib-function (pull_request) Successful in 8s
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 12s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 16s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 14s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 12s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 7s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 11s
checks-integrations-spire-openbao / integrations-spire-openbao (pull_request) Successful in 1m34s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 11s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 11s
nixosConfigurations-operator-valkey / operator-valkey (pull_request) Successful in 9s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 18s
nix-unit-resources-redis-port / resources-redis-port (pull_request) Successful in 7s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 16s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 13s
Nix flake completeness check / _complete (pull_request) Successful in 2m3s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 9s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 13s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 28s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 9s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 9s
checks-contracts-ldap-hardcoded / contracts-ldap-hardcoded (pull_request) Successful in 9s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 9s
checks-contracts-s3-hardcoded / contracts-s3-hardcoded (pull_request) Successful in 9s
checks-contracts-redis-external / contracts-redis-external (pull_request) Failing after 16s
checks-contracts-smtp-hardcoded / contracts-smtp-hardcoded (pull_request) Successful in 9s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 9s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 9s
checks-contracts-sso-hardcoded / contracts-sso-hardcoded (pull_request) Successful in 10s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 9s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 9s
checks-panel-docs / panel-docs (pull_request) Successful in 7s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 9s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 9s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 10s
checks-treefmt / treefmt (pull_request) Successful in 10s
flake-show / flake-show (pull_request) Successful in 3m57s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 45s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Successful in 9m10s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 9m45s
checks-apps-tf-incus / apps-tf-incus (pull_request) Has been cancelled
checks-apps-tf / apps-tf (pull_request) Has been cancelled
checks-apps-api / apps-api (pull_request) Has been cancelled
checks-apps-panel / apps-panel (pull_request) Has been cancelled
checks-core-docs / core-docs (pull_request) Has been cancelled
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Has been cancelled
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Has been cancelled
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Has been cancelled
1f4fc2f73e
The central OpenBao valkey-database engine (hosting-provider group) reads
each namespace's bootstrap password from `vars/secret/valkey-<namespace>`
to connect as the instance's `default` user. For an operator-group
namespace the password is generated on the operator's own valkey node, so
that node must write it cross-group into the central OpenBao KV.

Register every writing valkey node as a cert-auth consumer host keyed by a
group-qualified `valkeyHostName` (`<group>-valkey`), since both groups name
the node `valkey` and a bare key would collide. Each writer is granted KV
write on exactly the `valkey-<namespace>` instances it owns.

Derive these writer hosts INSIDE the openbao module from the
`valkeyNamespaces` roster the setup already threads, rather than poking
`consumerHosts` from the setup. A wholesale `consumerHosts` assignment from
the setup discards the module's rich default (the static S3/SSO/LDAP hosts
`mastodon-s3`, `authelia-sso`, ...), an `attrsOf` default being the
zero-definition fallback, not a merge base. In-module derivation keeps the
default intact while still emitting a `host-<group>-valkey` policy +
`auth/cert/certs/<group>-valkey` role per writing node.

The cross-group trust-bundle federation and the operator valkey node's EK
registration under its `<group>-valkey` SPIFFE id remain out-of-band
deployment-overlay concerns, the same path as `caBundlePath` /
`consumerHostHashes`. CI exercises the engine with the dev root token.

Assisted-by: Claude:claude-opus-4-8
fix ruff F541 in redis behaviorTest wrong-password subtest
All checks were successful
checks-api-python-tests / api-python-tests (pull_request) Successful in 7s
checks-api-asyncapi-validate / api-asyncapi-validate (pull_request) Successful in 7s
checks-integrations-openbao-pki / integrations-openbao-pki (pull_request) Successful in 18s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 17s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 20s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 20s
checks-integrations-spire-openbao / integrations-spire-openbao (pull_request) Successful in 25s
checks-api-docs / api-docs (pull_request) Successful in 18s
devShells-default / default (pull_request) Successful in 24s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 23s
checks-api-openapi-validate / api-openapi-validate (pull_request) Successful in 7s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-garage / hosting-provider-garage (pull_request) Successful in 17s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 36s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 10s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 23s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 42s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 19s
checks-asyncapi-docs / asyncapi-docs (pull_request) Successful in 9s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 16s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 47s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 22s
checks-api-http / api-http (pull_request) Successful in 51s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 49s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 47s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 13s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 13s
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 11s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 13s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 14s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 21s
nix-unit-lib-function / lib-function (pull_request) Successful in 19s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 13s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 13s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 14s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 7s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 14s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 22s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 13s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 14s
nix-unit-resources-redis-port / resources-redis-port (pull_request) Successful in 7s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 15s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 18s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 13s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 20s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 12s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 12s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 15s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 21s
nixosConfigurations-operator-valkey / operator-valkey (pull_request) Successful in 11s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 11s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 16s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 10s
Nix flake completeness check / _complete (pull_request) Successful in 1m49s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 10s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 9s
checks-contracts-ldap-hardcoded / contracts-ldap-hardcoded (pull_request) Successful in 9s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 9s
checks-contracts-s3-hardcoded / contracts-s3-hardcoded (pull_request) Successful in 9s
checks-contracts-smtp-hardcoded / contracts-smtp-hardcoded (pull_request) Successful in 10s
checks-contracts-redis-external / contracts-redis-external (pull_request) Successful in 33s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 9s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 9s
checks-contracts-sso-hardcoded / contracts-sso-hardcoded (pull_request) Successful in 9s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 9s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 9s
checks-panel-docs / panel-docs (pull_request) Successful in 7s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 9s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 9s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 10s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 9s
checks-treefmt / treefmt (pull_request) Successful in 10s
flake-show / flake-show (pull_request) Successful in 4m4s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Successful in 5m34s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 8m49s
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Successful in 14m43s
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Successful in 19m52s
checks-apps-api / apps-api (pull_request) Successful in 43m50s
checks-apps-tf-incus / apps-tf-incus (pull_request) Successful in 45m26s
checks-apps-panel / apps-panel (pull_request) Successful in 49m29s
checks-apps-tf / apps-tf (pull_request) Successful in 54m28s
checks-core-docs / core-docs (pull_request) Successful in 6m36s
75121b7a28
The `valkey-cli ... --pass wrongpassword PING` line interpolates only Nix
`${cli}`/`${userArg}`, leaving no Python `{}` placeholder, so the rendered
test script tripped ruff `F541` (f-string without placeholders) and failed
the `nixos-test-driver` lint step. Drop the stray `f` prefix.

Assisted-by: Claude:claude-opus-4-8
kiara changed title from WIP: centralize operator redis onto a shared OpenBao-brokered valkey to centralize operator redis onto a shared OpenBao-brokered valkey 2026-06-27 01:11:28 +02:00
@ -0,0 +5,4 @@
}:
{
applications.valkey = {
description = "The group's valkey cache node (the `external` redis provider's daemon): one `valkey@<namespace>` instance per redis-routed application in its group, each on its own namespace-derived port. Isolation is physical (one process per namespace). Each instance's bootstrap password is generated here; the central OpenBao valkey-database engine rotates the per-instance `app` user.";
Author
Owner

why external provider if this is explicitly duplicated across groups so as to make sure it would not need to facilitate such out-of-band interactions?

why external provider if this is explicitly duplicated across groups so as to make sure it would not need to facilitate such out-of-band interactions?
@ -0,0 +51,4 @@
qemuNodeMemory = 2048;
requiredMemory =
lib.throwIf (2560 < qemuNodeMemory)
Author
Owner

why compare static values?

why compare static values?
kiara marked this conversation as resolved
@ -0,0 +36,4 @@
## `ssl` cross-node-trust machinery (`security.pki.certificateFiles`).
##
## FUTURE: self-signed is a stop-gap. Prefer OpenBao's PKI secrets engine as a
## proper internal CA once that is stood up.
Author
Owner

weren't they since #1119?

weren't they since #1119?
kiara marked this conversation as resolved
@ -21,0 +25,4 @@
# preferred future CA). When on, the engine connects over TLS and trusts the
# valkey cert via `valkeyCaCert`.
valkeyTls = config.services.openbao-spire-auth.valkeyTls;
valkeyCaCert = config.services.openbao-spire-auth.valkeyCaCert;
Author
Owner

might it have made sense here to use contracts?

might it have made sense here to use contracts?
kiara marked this conversation as resolved
@ -340,1 +411,4 @@
contracts.streamingBackup.defaultProviderName = "restic";
# The redis cache moved to the shared valkey node (persisted there
# via RDB/AOF; offsite backup deferred to operator-side garage /
# #911), so it is no longer backed up per-app here -- only postgres.
Author
Owner

TODO look into if we can do better here (can that valkey node handle this already? garage i thought we felt we might not need operator-side?)

TODO look into if we can do better here (can that valkey node handle this already? garage i thought we felt we might not need operator-side?)
kiara marked this conversation as resolved
@ -165,3 +165,3 @@
# raise Exception("cannot detect the uploaded image on mastodon page.")
for db in ["redis", "postgres"]:
for db in ["postgres"]:
Author
Owner

had this been handled elsewhere yet? and if so, do we feel confident it works for this application?

had this been handled elsewhere yet? and if so, do we feel confident it works for this application?
@ -88,4 +91,0 @@
};
# Use self-signed certs in tests; the `ssl` resource's `applicationSide`
# (wired in `hosts-common.nix`) owns the provider and nginx cert/key.
environments.garage.resources."tls".ssl.routing.contracts.ssl.defaultProviderName = "self-signed";
Author
Owner

did we no longer need something like this?

did we no longer need something like this?
kiara marked this conversation as resolved
@ -0,0 +31,4 @@
"mastodon"
"peertube"
"pixelfed"
];
Author
Owner

this seems prone to going out of sync in case of newly added operator applications, raising questions on to what extent this test might serve as a canary there in its current form

this seems prone to going out of sync in case of newly added operator applications, raising questions on to what extent this test might serve as a canary there in its current form
kiara marked this conversation as resolved
@ -0,0 +4,4 @@
## *outside* any single operator's knowledge (in the hosting-provider group, like
## openbao), so from an operator's vantage point the cache is an external service
## it is merely pointed at. This provider holds none of the daemon: it is a pure
## cross-node function of static facts.
Author
Owner

i thought we moved valkey to shared so we could settle for regular contract providers to transmit info? is this used in the sense of 'not node-local', or could (/ should) we not have the provider instantiate config on its node for some reason? or did we never have a need to for this particular provider (or even this contract in general)?

i thought we moved valkey to `shared` so we could settle for regular contract providers to transmit info? is this used in the sense of 'not node-local', or could (/ should) we not have the provider instantiate `config` on its node for some reason? or did we never have a need to for this particular provider (or even this contract in general)?
@ -0,0 +89,4 @@
"uni-mastodon" = 7012;
"uni-peertube" = 6906;
"uni-pixelfed" = 7251;
};
Author
Owner

why is a test concern in the implementation

why is a test concern in the implementation
kiara marked this conversation as resolved
# Conflicts:
#	checks/default.nix
#	src/applications/operator/pixelfed/default.nix
#	src/effects/default.nix
#	src/resources/garage/default.nix
#	src/setups/hosts-common.nix
Match the #1126 naming convention where reference contract providers are
named after their backing implementation (`dex`/`minio`/`openldap`/
`opensmtpd`). The redis contract's reference provider stands up real valkey
servers in-test, so name it `valkey`.

Renames the testing module (`testing.hardcoded-redis` -> `testing.valkey`,
provider name, `valkey-testing-credentials` activation script,
`/run/valkey-testing` credentials dir), the behavior test
(`checks/contracts/redis/external.nix` -> `valkey.nix`, `name = "valkey"`),
and the check (`contracts-redis-external` -> `contracts-redis-valkey`).
Regenerates the workflow and drops the stale `checks-contracts-redis-external`
one. Updates the `port.nix`/`port-test.nix` comment references.

Assisted-by: Claude:claude-opus-4-8
# Conflicts:
#	src/applications/operator/mastodon/default.nix
#	src/applications/operator/mastodon/test.nix
#	src/applications/operator/peertube/default.nix
#	src/applications/operator/peertube/test.nix
#	src/applications/operator/pixelfed/default.nix
#	src/applications/operator/pixelfed/test.nix
#	src/resources/generateFiles/test.nix
Addresses the port test/impl review cluster on #1124:

- Move `knownVectors` out of the implementation (`port.nix`) into the test
  (`port-test.nix`) -- a known-answer fixture is a test concern, not impl.

- Derive the operator app namespace set in `port-test.nix` from the data model
  (operator group machines that have an `applications/operator/<node>` module)
  instead of a hand-listed array, so the collision-free / in-range checks stay
  a live canary: a newly added operator application is covered automatically and
  the `valkey` provider placeholder node is excluded.

- Document why the static known-answer vectors exist: they are the cross-copy
  drift guard between `port.nix`'s `portOf` and the inline copy in the contracts
  bundle's reference `valkey` provider. The bundle is self-contained and must
  not import from `src/`, so the two copies cannot share a source; the vectors
  pin both, and the bundle-side comment now points back at the test that does so.

Assisted-by: Claude:claude-opus-4-8
review: correct stale TLS + redis-backup comments on central-valkey
Some checks failed
checks-api-asyncapi-validate / api-asyncapi-validate (pull_request) Successful in 21s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 23s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 23s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 24s
checks-api-python-tests / api-python-tests (pull_request) Successful in 32s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 31s
checks-api-docs / api-docs (pull_request) Successful in 12s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 39s
devShells-default / default (pull_request) Successful in 41s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 42s
nixosConfigurations-hosting-provider-garage / hosting-provider-garage (pull_request) Successful in 15s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 17s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 15s
checks-api-openapi-validate / api-openapi-validate (pull_request) Successful in 10s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 17s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 9s
checks-integrations-openbao-pki / integrations-openbao-pki (pull_request) Successful in 56s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 12s
checks-api-http / api-http (pull_request) Successful in 57s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 12s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 12s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 12s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 13s
checks-asyncapi-docs / asyncapi-docs (pull_request) Successful in 24s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 14s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 14s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 14s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 21s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 14s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 23s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 13s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 9s
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 12s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 13s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 17s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 14s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 13s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 8s
checks-integrations-spire-openbao / integrations-spire-openbao (pull_request) Successful in 1m33s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 13s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 12s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 11s
nix-unit-lib-function / lib-function (pull_request) Successful in 20s
nixosConfigurations-operator-valkey / operator-valkey (pull_request) Successful in 11s
nix-unit-resources-garage-forward-compat / resources-garage-forward-compat (pull_request) Successful in 7s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 20s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 15s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 19s
nix-unit-resources-redis-port / resources-redis-port (pull_request) Successful in 7s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 11s
Nix flake completeness check / _complete (pull_request) Successful in 2m12s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 15s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 9s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 10s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 31s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 9s
checks-contracts-ldap-openldap / contracts-ldap-openldap (pull_request) Successful in 9s
checks-contracts-oidc-dex / contracts-oidc-dex (pull_request) Successful in 9s
checks-contracts-s3-minio / contracts-s3-minio (pull_request) Successful in 9s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 9s
checks-contracts-smtp-opensmtpd / contracts-smtp-opensmtpd (pull_request) Successful in 10s
checks-contracts-redis-valkey / contracts-redis-valkey (pull_request) Successful in 39s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 10s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 9s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 11s
checks-panel-docs / panel-docs (pull_request) Successful in 8s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 3m44s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 9s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 9s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 10s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 9s
checks-treefmt / treefmt (pull_request) Successful in 10s
flake-show / flake-show (pull_request) Successful in 4m22s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Successful in 5m55s
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Successful in 8m3s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 9m11s
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Successful in 13m2s
checks-test-peertube-service / test-peertube-service (pull_request) Failing after 31m55s
checks-apps-api / apps-api (pull_request) Successful in 53m15s
checks-apps-tf-incus / apps-tf-incus (pull_request) Successful in 55m49s
checks-apps-panel / apps-panel (pull_request) Successful in 59m40s
checks-apps-tf / apps-tf (pull_request) Successful in 1h5m36s
checks-core-docs / core-docs (pull_request) Has been cancelled
b1acbb807b
Documentation-only pass addressing the #34 review cluster on PR #1124; no
behavior changes.

valkey TLS (comments re #1119): the valkey node header and the OpenBao engine's
`valkeyTls`/`valkeyCaCert` comments described `self-signed` as the path and PKI
as a vague future. `openbao-pki` is now stood up (#1119), so reframe it as the
intended provider and spell out the concrete porting difference (eval-time
store-path leaf baked cross-node under self-signed vs runtime `/run` cert + CA
anchor + issue-oneshot-before-valkey under PKI). TLS itself stays unwired
(`fediversity.valkey.tls` defaults null -> management-network plaintext); wiring
it is a follow-up.

redis offsite backup (mastodon/peertube/pixelfed): the per-app comments claimed
the cache backup either "lands on the shared garage" (it does not) or is
"deferred to operator-side garage / #911" (garage is already centralized here).
Correct both: the per-namespace re-architecture dropped the operator TF graph's
redis arm and the TF-push valkey-backup machinery with it, so offsite cache
backup is a deferred open item; only the durable postgres/mariadb data is backed
up (and that lands on the now-shared garage). Note the narrowed test backup loop
(`["postgres"]` / `["mariadb"]`) is intentional, not accidental, and kept as a
loop so re-adding a database is a one-token change.

Also drop the stale "Mirrors the garage environment" reference in the operator
service tests' co-located authelia comment: there is no separate `garage`
environment anymore (garage co-locates on the app node), so point at the actual
co-located environments instead.

Assisted-by: Claude:claude-opus-4-8
valkey: wire openbao-pki TLS (TLS-only) + per-namespace RDB offsite backup
All checks were successful
checks-api-python-tests / api-python-tests (pull_request) Successful in 7s
checks-api-asyncapi-validate / api-asyncapi-validate (pull_request) Successful in 7s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 19s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 23s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 22s
checks-api-docs / api-docs (pull_request) Successful in 18s
devShells-default / default (pull_request) Successful in 26s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 24s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 33s
checks-api-openapi-validate / api-openapi-validate (pull_request) Successful in 6s
nixosConfigurations-hosting-provider-garage / hosting-provider-garage (pull_request) Successful in 13s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 36s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 8s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 15s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 42s
checks-asyncapi-docs / asyncapi-docs (pull_request) Successful in 10s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 18s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 17s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 49s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 48s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 12s
checks-api-http / api-http (pull_request) Successful in 55s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 12s
checks-integrations-openbao-pki / integrations-openbao-pki (pull_request) Successful in 56s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 19s
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 11s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 13s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 13s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 8s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 14s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 13s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 15s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 14s
nix-unit-lib-function / lib-function (pull_request) Successful in 8s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 15s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 15s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 22s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 14s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 18s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 14s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 9s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 17s
checks-integrations-spire-openbao / integrations-spire-openbao (pull_request) Successful in 1m31s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 14s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 14s
nix-unit-resources-garage-forward-compat / resources-garage-forward-compat (pull_request) Successful in 7s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 11s
nixosConfigurations-operator-valkey / operator-valkey (pull_request) Successful in 11s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 19s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 10s
nix-unit-resources-redis-port / resources-redis-port (pull_request) Successful in 6s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 10s
Nix flake completeness check / _complete (pull_request) Successful in 1m56s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 20s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 30s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 9s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 14s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 10s
checks-contracts-ldap-openldap / contracts-ldap-openldap (pull_request) Successful in 9s
checks-contracts-oidc-dex / contracts-oidc-dex (pull_request) Successful in 9s
checks-contracts-redis-valkey / contracts-redis-valkey (pull_request) Successful in 9s
checks-contracts-s3-minio / contracts-s3-minio (pull_request) Successful in 9s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 9s
checks-contracts-smtp-opensmtpd / contracts-smtp-opensmtpd (pull_request) Successful in 8s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 9s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 9s
checks-panel-docs / panel-docs (pull_request) Successful in 7s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 9s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 9s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 9s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 3m23s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 10s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 9s
checks-treefmt / treefmt (pull_request) Successful in 10s
flake-show / flake-show (pull_request) Successful in 4m11s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Successful in 5m47s
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Successful in 8m3s
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Successful in 12m58s
checks-apps-api / apps-api (pull_request) Successful in 42m23s
checks-apps-tf-incus / apps-tf-incus (pull_request) Successful in 44m29s
checks-apps-panel / apps-panel (pull_request) Successful in 48m55s
checks-apps-tf / apps-tf (pull_request) Successful in 52m1s
checks-core-docs / core-docs (pull_request) Successful in 6m28s
c671600655
Address the underlying concerns behind review comments 15934/15949 (valkey
TLS should use the `openbao-pki` provider stood up in #1119, not self-signed)
and the deferred offsite cache backup, rather than only correcting the stale
comments.

TLS, end-to-end and TLS-only:
- The valkey node routes its domain to the `openbao-pki` ssl provider directly
  (no nginx vhost -- valkey speaks the binary protocol, so the `applicationSide`
  path that always builds a vhost is unusable). It gets a runtime
  `/run/openbao-pki/<domain>/{cert,key}.pem` cert via the per-domain issuing
  oneshot, threaded into `fediversity.valkey.tls`. The listener is TLS-only:
  the plain port is closed (`port 0`), only `tls-port` serves, and instances
  order after the issuing service.
- The OpenBao rotation engine connects over TLS (`valkeyTls` now defaults true)
  and verifies against the private PKI CA anchor (`valkeyCaCert`).
- All three consumers connect over TLS: mastodon via an openbao-agent-rendered
  `REDIS_URL=rediss://...` env file (redis-rb hardcodes the `redis://` scheme
  when assembling from host/port, so a full URL is the only TLS path); peertube
  via `redis.enable_tls` + `tls_settings.ca`; pixelfed via `REDIS_SCHEME=tls`.
- Cross-group CA trust: the operator group has no OpenBao node, so its valkey
  cert is issued by the central hosting-provider PKI -- both groups' certs
  chain to the same CA, so a single anchor trusts all.

Offsite backup, now in-group:
- With garage and valkey both in the hosting-provider group, the per-namespace
  cache backup no longer needs a cross-group TF push. The valkey node ships its
  `dump.rdb` (RDB only; AOF is on-node crash-recovery, redundant offsite) to a
  dedicated `<namespace>-cache-backups` garage bucket via the `fileBackup`
  contract (restic provider). A `BGSAVE` hook takes a fresh snapshot before
  each run; the S3 credentials are delivered by the node's openbao-agent from
  the KV paths the operator TF graph publishes.
- The operator TF graph mints the `<namespace>-cache-backups` bucket/key and
  publishes its S3 credentials to OpenBao KV.

Assisted-by: Claude:claude-opus-4-8
Author
Owner

superseded by #1132 + #1141

superseded by #1132 + #1141
kiara closed this pull request 2026-06-29 10:01:36 +02:00
All checks were successful
checks-api-python-tests / api-python-tests (pull_request) Successful in 7s
checks-api-asyncapi-validate / api-asyncapi-validate (pull_request) Successful in 7s
nixosConfigurations-dev-forgejo-runner / dev-forgejo-runner (pull_request) Successful in 19s
nixosConfigurations-dev-forgejo / dev-forgejo (pull_request) Successful in 23s
nixosConfigurations-hosting-provider-api / hosting-provider-api (pull_request) Successful in 22s
checks-api-docs / api-docs (pull_request) Successful in 18s
devShells-default / default (pull_request) Successful in 26s
nixosConfigurations-hosting-provider-authelia / hosting-provider-authelia (pull_request) Successful in 24s
checks-deployment-nixos-hosts / deployment-nixos-hosts (pull_request) Successful in 33s
checks-api-openapi-validate / api-openapi-validate (pull_request) Successful in 6s
nixosConfigurations-hosting-provider-garage / hosting-provider-garage (pull_request) Successful in 13s
checks-test-netbox-service / test-netbox-service (pull_request) Successful in 36s
nix-unit-contracts-lib / contracts-lib (pull_request) Successful in 8s
nixosConfigurations-hosting-provider-incus / hosting-provider-incus (pull_request) Successful in 15s
checks-integrations-octodns / integrations-octodns (pull_request) Successful in 42s
checks-asyncapi-docs / asyncapi-docs (pull_request) Successful in 10s
nixosConfigurations-hosting-provider-lldap / hosting-provider-lldap (pull_request) Successful in 18s
nixosConfigurations-hosting-provider-monitoring / hosting-provider-monitoring (pull_request) Successful in 17s
checks-test-mastodon-service / test-mastodon-service (pull_request) Successful in 49s
checks-test-pixelfed-service / test-pixelfed-service (pull_request) Successful in 48s
nixosConfigurations-hosting-provider-netbox / hosting-provider-netbox (pull_request) Successful in 12s
checks-api-http / api-http (pull_request) Successful in 55s
nixosConfigurations-hosting-provider-openbao / hosting-provider-openbao (pull_request) Successful in 12s
checks-integrations-openbao-pki / integrations-openbao-pki (pull_request) Successful in 56s
nix-unit-effects-common-lib / effects-common-lib (pull_request) Successful in 19s
checks-contracts-chaining / contracts-chaining (pull_request) Successful in 11s
nixosConfigurations-hosting-provider-panel / hosting-provider-panel (pull_request) Successful in 13s
nixosConfigurations-hosting-provider-otel-collector / hosting-provider-otel-collector (pull_request) Successful in 13s
nix-unit-lib-data-model / lib-data-model (pull_request) Successful in 8s
nixosConfigurations-hosting-provider-spire / hosting-provider-spire (pull_request) Successful in 14s
nixosConfigurations-hosting-provider-terraform-backend / hosting-provider-terraform-backend (pull_request) Successful in 13s
nixosConfigurations-hosting-provider-valkey / hosting-provider-valkey (pull_request) Successful in 15s
checks-contracts-cross-node / contracts-cross-node (pull_request) Successful in 14s
nix-unit-lib-function / lib-function (pull_request) Successful in 8s
nixosConfigurations-hosting-provider-windmill / hosting-provider-windmill (pull_request) Successful in 15s
nixosConfigurations-operator-authelia / operator-authelia (pull_request) Successful in 15s
nix-unit-effects-tf-common-conversion / effects-tf-common-conversion (pull_request) Successful in 22s
nixosConfigurations-operator-lldap / operator-lldap (pull_request) Successful in 14s
nixosConfigurations-operator-combined / operator-combined (pull_request) Successful in 18s
nixosConfigurations-operator-mastodon / operator-mastodon (pull_request) Successful in 14s
nix-unit-lib-lib / lib-lib (pull_request) Successful in 9s
checks-contracts-filebackup-hardcoded-file-backup / contracts-filebackup-hardcoded-file-backup (pull_request) Successful in 17s
checks-integrations-spire-openbao / integrations-spire-openbao (pull_request) Successful in 1m31s
nixosConfigurations-operator-peertube / operator-peertube (pull_request) Successful in 14s
nixosConfigurations-operator-pixelfed / operator-pixelfed (pull_request) Successful in 14s
nix-unit-resources-garage-forward-compat / resources-garage-forward-compat (pull_request) Successful in 7s
nixosConfigurations-operator-smtp / operator-smtp (pull_request) Successful in 11s
nixosConfigurations-operator-valkey / operator-valkey (pull_request) Successful in 11s
nix-unit-lib-renames-for-source / lib-renames-for-source (pull_request) Successful in 19s
checks-contracts-filesecrets-hardcoded-secret / contracts-filesecrets-hardcoded-secret (pull_request) Successful in 10s
nix-unit-resources-redis-port / resources-redis-port (pull_request) Successful in 6s
checks-contracts-generatefiles-vars-openbao / contracts-generatefiles-vars-openbao (pull_request) Successful in 10s
Nix flake completeness check / _complete (pull_request) Successful in 1m56s
nix-unit-resources-otel / resources-otel (pull_request) Successful in 20s
nix-unit-resources-generateFiles / resources-generateFiles (pull_request) Successful in 30s
checks-contracts-generatefiles-vars / contracts-generatefiles-vars (pull_request) Successful in 9s
nix-unit-resources-secrets / resources-secrets (pull_request) Successful in 14s
checks-contracts-ldap-lldap / contracts-ldap-lldap (pull_request) Successful in 10s
checks-contracts-ldap-openldap / contracts-ldap-openldap (pull_request) Successful in 9s
checks-contracts-oidc-dex / contracts-oidc-dex (pull_request) Successful in 9s
checks-contracts-redis-valkey / contracts-redis-valkey (pull_request) Successful in 9s
checks-contracts-s3-minio / contracts-s3-minio (pull_request) Successful in 9s
checks-contracts-smtp-maddy / contracts-smtp-maddy (pull_request) Successful in 9s
checks-contracts-smtp-opensmtpd / contracts-smtp-opensmtpd (pull_request) Successful in 8s
checks-contracts-ssl-self-signed / contracts-ssl-self-signed (pull_request) Successful in 9s
checks-contracts-streamingbackup-hardcoded / contracts-streamingbackup-hardcoded (pull_request) Successful in 9s
checks-panel-docs / panel-docs (pull_request) Successful in 7s
checks-contracts-systemd-openbaod / contracts-systemd-openbaod (pull_request) Successful in 9s
checks-resources-secrets-agenix / resources-secrets-agenix (pull_request) Successful in 9s
checks-test-monitoring-storage / test-monitoring-storage (pull_request) Successful in 9s
checks-test-peertube-service / test-peertube-service (pull_request) Successful in 3m23s
checks-test-otel-wiring / test-otel-wiring (pull_request) Successful in 10s
checks-test-valkey-service / test-valkey-service (pull_request) Successful in 9s
checks-treefmt / treefmt (pull_request) Successful in 10s
flake-show / flake-show (pull_request) Successful in 4m11s
checks-deployment-tf-incus-hosts / deployment-tf-incus-hosts (pull_request) Successful in 5m47s
checks-deployment-tf-hosts / deployment-tf-hosts (pull_request) Successful in 8m3s
checks-deployment-ssh-hosts / deployment-ssh-hosts (pull_request) Successful in 12m58s
checks-apps-api / apps-api (pull_request) Successful in 42m23s
checks-apps-tf-incus / apps-tf-incus (pull_request) Successful in 44m29s
checks-apps-panel / apps-panel (pull_request) Successful in 48m55s
checks-apps-tf / apps-tf (pull_request) Successful in 52m1s
checks-core-docs / core-docs (pull_request) Successful in 6m28s

Pull request closed

Sign in to join this conversation.
No reviewers
fediversity/developers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
fediversity/fediversity!1124
No description provided.