docs(openbao): correct the handover README, and prove the Retain guarantee #754
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/openbao-platform-readme"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What
Corrects two factual errors in the
openbao-platformREADME from PR #750, and replaces its one open assumption with a proof.Error 1: the wrong dependents
The README said that deleting the
OpenBaoConnectionwould mean "every other CR here loses the connection it points at."That is wrong. The other nine CRs carry an inline
openbaoRef.connection.addressand never name that record:The real dependents sit outside this directory, in a different API group, and reach it by name over two hops:
Five live pipelines across four tenant namespaces:
forgejo-db-user,n8n-secrets,hydra-secrets,kratos-secrets,outline-database. The hazard is real, but it is larger than described and in a different place. platform-seanfarm #684 fixes the cause by setting thatObjecttoOrphan.Error 2: the wrong GC mechanism
The README said Crossplane tracks the composed resources "through
spec.resourceRefs, not throughownerReferences." The live objects say otherwise:They are collected by ordinary Kubernetes GC. That is better news than what was written, because it means
--cascade=orphanor stripping theownerReferencesis enough to decouple them.The assumption, now proven
The README previously said to confirm what the operator does to OpenBao-side state on CR deletion, and not to assume. Confirmed by reading the deployed code rather than testing against production.
openbao-operatorv0.12.32 pinslibseanfarm-operatorv0.4.13. Inreconcile/harness.go:401:Retainskips the entire remote-delete block. TheUnmountSecretscall that destroys the transit mount and the cosign signing keys lives inside it (openbaotransitbackend_impl.go:152), so it is unreachable underRetain. The accessor returnsspec.deletionPolicywith no defaulting, and all nine live CRs carryRetain.Consequence: retiring the XR removes those nine Kubernetes objects and Flux recreates them, while both PKI mounts, the intermediate CA, the three issuing roles, the transit mount and its three keys are untouched. No functional outage, only a window with no drift correction.
The README now records the file and line, and says to re-verify if the operator version changes, because the guarantee is a property of that code path and not of the CRD.
Tests
tests/check.shexits 0.https://claude.ai/code/session_01GfkEuwuvGSqGyXVuxwT7PA