bitnami retiro los tags semanticos minor (1.30/1.29/etc.) de Docker Hub
2026-05; solo quedan latest + digests. El InitContainer fallaba con
ImagePullBackOff en el smoke E2E DO (run 1511/1512 del tenant
91c93c9c060a48febb7874c87c1ce993).
Cambio:
- image: bitnami/kubectl:1.30 -> curlimages/curl:8.20.0 (Docker Official,
tag estable).
- comando: kubectl get secret -> curl REST API kubernetes.default.svc con
SA token + CA cert montados en /var/run/secrets/kubernetes.io/serviceaccount.
- Misma logica: 48 iteraciones x 5s = 240s busy-wait.
- El Role/RoleBinding (role-db-secret-reader.yaml) ya da el permiso get
secrets al SA — sin cambios RBAC necesarios.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Cierra GOLDEN-PATH-ADDONCLAIM-MISSING (P0 hands-off pipeline).
Cambios:
- helm/APP_NAME/templates/addonclaim.yaml (NEW): hook pre-install/pre-upgrade
weight -10, SIN delete-policy (sobrevive upgrades, evita disparar finalizer
cleanup-logical). Gated por .Values.database.enabled (default true).
- helm/APP_NAME/templates/role-db-secret-reader.yaml (NEW): Role + RoleBinding
weight -7 que permite al SA leer el Secret <release>-db-creds. Lo consume
el InitContainer wait-for-secret del Job Alembic.
- helm/APP_NAME/templates/job-alembic-upgrade.yaml: gated por
database.enabled, anade InitContainer wait-for-secret (48x5s=240s) que
espera a que addon-provisioner publique el Secret tras reconciliar el
AddonClaim. Absorbe la latencia del @kopf.timer (RECONCILE_INTERVAL 300s
+ initial_delay 60s) sin tocar el operator.
- helm/APP_NAME/values.yaml: bloque database completo (enabled, addonType,
databaseName, user.permissions, deletionPolicy Retain). Opt-out con
database.enabled=false + alembic.enabled=false.
- .gitea/workflows/APP_NAME-build.yaml: helm timeout 5m -> 7m (margen para
reconcile addon-provisioner + StatefulSet ready + DDL Job + Alembic).
- claim-mariadb.yaml (DELETED): obsoleto - estaba en la raiz del template
y nunca se renderizaba por helm. Reemplazado por addonclaim.yaml dentro
del chart helm.
- README.md: documenta nueva tabla de hook weights, opt-out database, y
trade-off del orphan AddonClaim post-uninstall (cleanup explicito).
Decision arquitectural: Opcion D modificada (Opus 4.6 consult).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Sincroniza desde el monorepo IDP la corrección del hook-order del ServiceAccount
(hook pre-install/pre-upgrade, weight -5) que destraba el helm install del
golden-path sin --no-hooks. Cierre del 4º gap del pipeline tenant hands-off:
el smoke E2E valida ahora la cadena completa (addon-provisioner materializa
MariaDB; AddonClaim publica DATABASE_URL en apps).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>