-
v0.12.30 Stable
released this
2026-07-27 23:40:47 +00:00 | 14 commits to trunk since this releaseSecurity
- Require positive ownership evidence before adopting a destination Secret.
0.12.2x letdestination.overwriteadopt a Secret carrying a complete set of
operator ownership labels but a differentvso-ownerRefUID, treating a
missing ownerReference as proof the previous resource was gone. It is not —
ownerReferences are routinely absent after a--cascade=orphandelete, a
restore, or a write by a version that never set them — and the operator never
resolves the UID, so it cannot distinguish a replaced resource from a live
one. OneOpenBaoDynamicSecretcould therefore take a live destination away
from another, leaving the loser permanently Degraded with no path back. Any
operator ownership label that is not ours is now a refusal.
Fixed
- Adoption no longer erases a Secret's existing labels and annotations.
Taking over a destination's data was replacing its metadata wholesale,
discarding Helm release metadata, ArgoCD tracking annotations, and
last-applied-configuration, which silently detaches the object from whatever
manages it. Adoption now merges the configured labels/annotations over what is
already present. Secrets the resource already owns keep the previous
replace-from-empty behavior, so removing a label from
destination.labelsstill removes it from the Secret. - Adopting a pre-existing Secret is logged at
Inforather than passing
silently, since adoption installs an ownerReference that enrolls someone
else's object in this resource's garbage collection.
Fixed
- Bind the response-text error heuristics to the status code that can carry
them.normalizeOpenBaoAPIErrormatchedno default issuer,is sealed,
andstandbyanywhere in a server-supplied response body, at any status code.
These sentinels are not cosmetic:ErrNoDefaultIssuermakesGetRootCertand
GetIntermediateCAreport the certificate absent, which makes the controller
generate a new CA and invalidate every chain issued from the old one — so a
403 permission denied: no default issuer currently configuredwas enough to
trigger a CA regeneration. Likewise a 4xx body containingstandbyclassified
as server-not-ready and was retried as a dependency blip instead of surfacing
as the auth failure it was. Each heuristic is now paired with the status code
OpenBao actually uses (400 / 503 / 429-473); anything else keeps the generic
API kind. - Stop restarting workloads for a credential that did not change. The
ReReadOnRefreshrefresh horizon fed the rollout-restart decision directly, so
aallowStaticCredssecret whose password was unchanged rolling-restarted every
target on every refresh interval — the destination Secret is not even rewritten
in that case (the HMAC short-circuits), so a restarted pod re-read exactly what
it already had. Restarts are now driven by the credential actually changing, or
by a spec change that moves the destination or path. Where a re-mint does yield
new material the sync reports it and the restart still happens.
Included changes (v0.12.29 -> v0.12.30)
98db99e429bbfix(client): pair response-text heuristics with their status codes300bfd723c2bfix(secrets): require positive ownership evidence to adopt a destination
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Require positive ownership evidence before adopting a destination Secret.