PR #9758 made REDIS_DB_HOST explicit in the pusher env list with a
configMapKeyRef. Earlier chart values removed the historical explicit
secretKeyRef while introducing envFrom for the backend ConfigMap. A live
Deployment that still has the old named env item can therefore differ from the
Helm release manifest.
Kubernetes strategically merges containers[].env by name and merges the
nested valueFrom map by field. A regular upgrade that adds only
configMapKeyRef to the historical Secret-backed item preserves
secretKeyRef; API validation then rejects the resulting item because
valueFrom has both sources. This is a rollout-contract failure, not evidence
of an outage while the previous Deployment remains available.
The dev pusher values retain secretKeyRef: null next to the ConfigMap source.
That declaratively clears the legacy field in the strategic merge patch. A
fresh dev install has only the ConfigMap source; an upgrade from the historical
Secret-backed item clears that source before Deployment validation.
REDIS_DB_PASSWORD remains an explicit Secret key. The existing rolling
strategy (maxUnavailable: 0, maxSurge: 1) is unchanged. Production is not
changed by this dev repair; it requires its own reviewed transition after the
read-only gate below.
Production has the same historical chart transition, so it may carry the same legacy risk. Do not deploy merely because this repair merged. Before a future prod pusher deployment, an operator must read-only verify all of the following without reading Secret values:
- Inspect the live
prod-omi-pusherREDIS_DB_HOSTenv item'svalueFromobject and the Helm release manifest to determine whether either still has the historicalsecretKeyRef. - Check only key presence for
REDIS_DB_HOSTinprod-omi-backend-configandREDIS_DB_PASSWORDinprod-omi-backend-secrets; do not print their values. - Render the repair revision and confirm the host is
configMapKeyRef: prod-omi-backend-config/REDIS_DB_HOST, the legacysecretKeyRefis null, and the password issecretKeyRef: prod-omi-backend-secrets/REDIS_DB_PASSWORD. - Confirm the live Deployment still uses the normal rolling-update strategy
before using the ordinary Helm upgrade. Do not use
--forceor a manual patch as a transition workaround.
The regression fixture in
backend/tests/unit/test_verify_pusher_config_references.py executes the
historical named-env strategic merge locally: the unguarded manifest produces
both sources, while this repair leaves only the ConfigMap source.