Repository navigation
Closed
Labels
area: platformPlatform, deployment, cluster, or runtime concern.Platform, deployment, cluster, or runtime concern.priority: P1High; important and should be handled in the current iteration.High; important and should be handled in the current iteration.status: blockedCannot move forward until an external dependency is resolved.Cannot move forward until an external dependency is resolved.type: choreMaintenance work without intended behavior change.Maintenance work without intended behavior change.
Description
Parent
Rewrite the spec and the compiler in place, release 1.0.0, and hand over every Project
What to build
The secrets Project leaves fleet-infra and is delivered from the estate repository, in the order #381 sets.
Add the Vault Secrets Operator to the estate's secrets file. Vault moves from data-system to secrets-system by raft snapshot and restore in a planned window, not as a Move (decided 2026-10-27). Reloader, the Vault Agent injector, the Vault CSI provider and cert-manager retire first (#381). The vault serving statement leaves the handover ledger.
The estate-side changes are recorded in the estate repository's HANDOVER.md.
Acceptance criteria
- The render's diff against the Project's hand-written objects in fleet-infra is clean, or each difference is explained.
- The Project's Reconcile Units report Ready.
- A consumer-visible value checks out: A Secret VSO syncs refreshes after its value changes in Vault, and every Project's policy job succeeds.
- One change flips the handover ledger entry and deletes the hand-written objects, the descriptor and the drift-check entry.
Blocked by
Metadata
Metadata
Assignees
Labels
area: platformPlatform, deployment, cluster, or runtime concern.Platform, deployment, cluster, or runtime concern.priority: P1High; important and should be handled in the current iteration.High; important and should be handled in the current iteration.status: blockedCannot move forward until an external dependency is resolved.Cannot move forward until an external dependency is resolved.type: choreMaintenance work without intended behavior change.Maintenance work without intended behavior change.
Activity
ExtraToast commentedon Oct 27, 2026
Resume here
ExtraToast commentedon Oct 29, 2026
#380 is closed: delivery,
_canaryand_estateare on the 1.0 contract (evidence in #380 (comment)).ExtraToast commentedon Oct 29, 2026
Prepared: secrets handover, every change a draft
Nothing is merged, and Vault was only read (
vault status,/v1/sys/health, the cluster). The window is the maintainer's. The runbook is JorisJonkers-dev/estate#262'sdocs/runbooks/secrets-handover.md.Merge order
bootstrap-auth.sh;VaultSealedwatchessecrets-system(stacked on #574)vaultserving statement out, VSO in the secrets file)Vault is down from the seal (step 5) to the unseal of the restored one (step 8): about 35 minutes; the window is booked at two hours. The old Vault stays sealed and untouched for seven days as the rollback.
Validation
deploy-kit 1.2.0 (
toolkit.yml): CI's validate, every release-matrix entry (secrets with its config and env) and a local compose (composed 20 artifacts, secrets among them) all accept. The restore was rehearsed in Docker under the rendered posture: 1.21.2 snapshot into 1.21.4, temporary init,restore -forceseals it, the original key unseals it, one raft voter,node-idkept across a restart. It also found that a restore needs a writable/tmp, now declared.Open blockers
fileson a live raft volume until Back Vault up with a raft snapshot: an engine whose method is consistent #734, and fleet-infra's raft snapshot job breaks at the flip; D5 Vault's own configuration (bootstrap-auth.sh) has no home after S2 (Declare the Secret Store's own configuration: auth methods, engines, connections and transit keys #736); D6 the Platform document has nopriority, so Vault renders withoutplatform-data; D7 the LAN tier's wildcard (valid to 2026-12-16) has no issuer once cert-manager goes.VaultSealedmust readsecrets-systemwherever the rule lives at the window (S2 carries it), and the estate'sops/unseal-vault.sh(estate#212) must reach the new Vault.Filed
feat(secrets): hand the secrets Project over to the estate path (#262)
ExtraToast commentedon Nov 1, 2026
Secrets is on the estate path: Vault moved into
secrets-systemby raft snapshot and restore, with the Vault Secrets Operator beside it. The handover ledger is removed: no Project is left on the old path.secrets-system.apps-secretsReady; every policy job succeeds; every dynamic credential renewed and its Process reads its database; Vault is scraped and reports unsealed; people sign in by OIDC; a Secret VSO syncs gained a value written to Vault, and lost it on the rollback.Found in the window, each worked around and filed: a dependency cycle between the secrets and edge units (#780), VSO lacking
deletecollectionon Secrets (#781) and lease access for its leader election (#782), and kube-state-metrics labels not honoured, which had silenced VaultSealed (#783). Two hand-applied grants stand until #781 and #782 land.Left: the seven-day hold, then change C (the old Vault, VSO and their claims), and
bootstrap/retire.shfor the old path's roles.ExtraToast commentedon Nov 1, 2026
After the proofs: the old path's VaultStaticSecrets that log in through
vso-system/default(Garage's keys,hermes-credentials,observability/postgres-backup) did not sync under the new VSO. A VaultAuth in the operator's own namespace is open to every namespace only for that operator; to the VSO insecrets-systemit is an ordinary one. The VaultAuth was patched by hand to admit the three namespaces and name its owndefaultconnection, and all ten synced. The runbook's step 10 should carry this; it lasts until those leftovers move or retire.