🤖 Generated by the Daily AI Assistant
Part of #1932. Follow-up child from the Tenant-abstraction ADR (docs/tenant-abstraction.md).
Problem
The KRO Tenant RGD emits only the ghcr-auth ExternalSecret. Tenants that need additional secrets (e.g. wedding-app's object-store / db-backup credentials) still hand-write their own ExternalSecret manifests — exactly the boilerplate the abstraction exists to remove.
Proposed direction
Add a typed, optional secrets list to the Tenant schema so a tenant declares the OpenBao/store keys it needs and the RGD renders the corresponding ExternalSecret(s). Preserve the isolation posture verbatim (same store, refresh interval, RBAC). Render-diff vs the current hand-written instances to prove behaviour-preservation.
Rough size
S–M — schema field + RGD template addition + a render-diff parity check against an existing tenant that carries extra secrets.
Acceptance criteria
- Optional
secrets input on the Tenant schema (typed; empty ⇒ only ghcr-auth, unchanged).
- RGD renders one
ExternalSecret per declared entry, matching the current hand-written shape.
- A tenant migrated to the new field render-diffs clean vs its pre-change manifests.
Part of #1932. Follow-up child from the Tenant-abstraction ADR (
docs/tenant-abstraction.md).Problem
The KRO
TenantRGD emits only theghcr-authExternalSecret. Tenants that need additional secrets (e.g.wedding-app's object-store / db-backup credentials) still hand-write their ownExternalSecretmanifests — exactly the boilerplate the abstraction exists to remove.Proposed direction
Add a typed, optional
secretslist to theTenantschema so a tenant declares the OpenBao/store keys it needs and the RGD renders the correspondingExternalSecret(s). Preserve the isolation posture verbatim (same store, refresh interval, RBAC). Render-diff vs the current hand-written instances to prove behaviour-preservation.Rough size
S–M — schema field + RGD template addition + a render-diff parity check against an existing tenant that carries extra secrets.
Acceptance criteria
secretsinput on theTenantschema (typed; empty ⇒ onlyghcr-auth, unchanged).ExternalSecretper declared entry, matching the current hand-written shape.