Skip to content

Hand over secrets to the estate path #663

Closed

Description

@ExtraToast

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

Activity

  1. added
    type: choreMaintenance work without intended behavior change.
    area: platformPlatform, deployment, cluster, or runtime concern.
    priority: P1High; important and should be handled in the current iteration.
    status: blockedCannot move forward until an external dependency is resolved.
    on Oct 27, 2026
  2. ExtraToast commented on Oct 27, 2026

    @ExtraToast
    ContributorAuthor

    Resume here

  3. ExtraToast commented on Oct 29, 2026

    @ExtraToast
    ContributorAuthor

    #380 is closed: delivery, _canary and _estate are on the 1.0 contract (evidence in #380 (comment)).

  4. ExtraToast commented on Oct 29, 2026

    @ExtraToast
    ContributorAuthor

    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's docs/runbooks/secrets-handover.md.

    Merge order

    # PR when
    R1 JorisJonkers-dev/fleet-infra#570: retire the Vault CSI provider any time before the window. Nothing uses it (no CSIDriver, no SecretProviderClass, no csi volume)
    R2 JorisJonkers-dev/fleet-infra#571: retire the Vault Agent injector and the sample reader (stacked on #570) before the window, once Postgres and RabbitMQ (fleet-infra#538) and agents-api (fleet-infra#531) have left. Its test fails until then
    R3 JorisJonkers-dev/fleet-infra#572: retire Reloader before the window, once the agents handover drops hermes, its one user. Its test fails until then
    R4 JorisJonkers-dev/fleet-infra#573: retire cert-manager after the edge handover (#662) and decision D7
    S1 JorisJonkers-dev/fleet-infra#574: orphan Vault and VSO (marks, both HelmReleases suspended) window step 1, after R1 and R2 are live
    S2 JorisJonkers-dev/fleet-infra#575: drop Vault, VSO and bootstrap-auth.sh; VaultSealed watches secrets-system (stacked on #574) window step 2, after D5
    B JorisJonkers-dev/estate#262: the flip (ledger, vault serving statement out, VSO in the secrets file) window step 3, merged before the seal
    P the estate release PR release-please opens for B window step 6, after the old VSO is stopped and the old Vault snapshotted and sealed

    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 -force seals it, the original key unseals it, one raft voter, node-id kept across a restart. It also found that a restore needs a writable /tmp, now declared.

    Open blockers

    Filed

  5. ExtraToast commented on Nov 1, 2026

    @ExtraToast
    ContributorAuthor

    Secrets is on the estate path: Vault moved into secrets-system by raft snapshot and restore, with the Vault Secrets Operator beside it. The handover ledger is removed: no Project is left on the old path.

    Found in the window, each worked around and filed: a dependency cycle between the secrets and edge units (#780), VSO lacking deletecollection on 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.sh for the old path's roles.

  6. ExtraToast commented on Nov 1, 2026

    @ExtraToast
    ContributorAuthor

    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 in secrets-system it is an ordinary one. The VaultAuth was patched by hand to admit the three namespaces and name its own default connection, and all ten synced. The runbook's step 10 should carry this; it lasts until those leftovers move or retire.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: platformPlatform, deployment, cluster, or runtime concern.priority: P1High; important and should be handled in the current iteration.status: blockedCannot move forward until an external dependency is resolved.type: choreMaintenance work without intended behavior change.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions