Uh oh!
There was an error while loading. Please reload this page.
fix(chart): requests-proxy honours a pinned digest for imagePullPolicy (#552) - #570
Merged
Merged
Conversation
#552) requests-proxy hardcoded `imagePullPolicy: Always` while its image line already read `images.requestsProxy.digest` — so a pinned digest was ignored for the pull policy and every restart re-pulled the image even when it was already cached. Make it digest-aware, matching jobs-manager / pods-monitor / resource-monitor: digest set -> repo@digest + IfNotPresent (restart-safe offline) digest empty -> repo:tag + Always (unchanged default) +2 helm-unittest cases (default -> Always; digest -> repo@digest + IfNotPresent). Chart 1.9.11 -> 1.9.12 (chart-content change requires a version bump). Scope: this is the narrow, unambiguous part of #552. The broader control-plane offline-restart update-model change (jobs-manager/pods-monitor rely on Always for the image-refresh CronJob; resource-monitor too) is a deliberate design decision tracked in #569. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
shujaatTracebloc
marked this pull request as ready for review
August 4, 2026 07:51
shujaatTracebloc
requested review from
aptracebloc
and removed request for
saadqbalAugust 4, 2026 07:56
aptracebloc
approved these changes
Aug 4, 2026
aptracebloc
left a comment
Contributor
There was a problem hiding this comment.
@shujaatTracebloc — Approved. Clean parity fix. What I verified:
- ✅ requests-proxy was the sole outlier. The other first-party floating-tag deployments already use the identical
{{ if digest }}IfNotPresent{{ else }}Always{{ end }}idiom — jobs-manager (.Values.images.jobsManager.digest), pods-monitor, and resource-monitor all match. This brings requests-proxy into line. The two hardcoded-IfNotPresenttemplates (egress-proxy/squid, mysql-client) are correctly-pinned third-party images, not the same bug — so no other deployment carries this latent issue. - ✅ Live-settable, not inert —
images.requestsProxy.digestis invalues.schema.jsonand the unittest'sset:exercises it end-to-end (rendersrepo@digest+IfNotPresent); thedig "requestsProxy" "digest" ""accessor is the safest null-nav form. - ✅ Chart version bumped 1.9.11 → 1.9.12 (correct Helm convention), and both branches (tag→Always, digest→IfNotPresent) are pinned by the new helm-unittest cases (CI-run).
- No R8 manifest concern — this is chart territory, not the installer sub-scripts.
(Verification note: my local helm template --show-only didn't emit — a missing-value/path quirk, not a fix defect, since the template is ungated and the unittest renders it cleanly. Relied on the source-parity check + the CI unittest cases + the schema check.)
⚪ Nits (non-blocking)
- The chart now has three idioms for the same digest null-navigation:
dig …(this PR, safest), resource-monitor'sdefault (dict)chaining, and jobs-manager's direct.Values.images.jobsManager.digest(which would error ifimages.jobsManagerwere absent). Not this PR's problem — it picked the safest — but they'd read more consistently converged. - Worth flagging for context: requests-proxy runs the jobs-manager image (shared, different command) pinned via its own
requestsProxy.digestkey, so it can be pinned independently ofjobsManager.digest— and the fix correctly honors the proxy's own key.
Minimal, correct, closes a real "re-pull on every restart / not offline-safe when pinned" gap. Touches your code-owned client/templates/, so Asad's code-owner review is the backstop; this is the second set of eyes.
🤖 Generated with Claude Code
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What & why
Narrow, safe part of #552 (control-plane restart resilience).
requests-proxyhardcodedimagePullPolicy: Alwayseven though its image line already readimages.requestsProxy.digest— so a pinned digest was silently ignored for the pull policy, and every pod restart re-pulled the image even when it was already cached in containerd. That's the same offline-restart fragility class as the incident, and it's an outright inconsistency bug (the other control-plane deployments are already digest-aware).Change
client/templates/requests-proxy-deployment.yaml— pull policy now mirrors jobs-manager / pods-monitor / resource-monitor:images.requestsProxy.digestset →repo@digest+IfNotPresent(restart-safe offline)images.requestsProxy.digestempty (default) →repo:tag+Always(unchanged default behaviour)Verified by render: default →
docker.io/tracebloc/jobs-manager:prod+Always; with a digest →…@sha256:…+IfNotPresent.Tests
client/tests/requests_proxy_test.yaml— +2 helm-unittest cases: default floats on the tag withAlways; a set digest rendersrepo@digest+IfNotPresent. Suite green (13/13).client/Chart.yaml1.9.11 → 1.9.12 (chart-content change requires a bump).Scope
This is deliberately only the requests-proxy bug. The broader offline-restart update-model change for the always-running images —
jobs-manager/pods-monitorare updated by the image-refresh CronJob viarollout restart, which relies onAlways, andresource-monitorisn't refreshed at all — is a real design decision (digest-pin à laingestor.prodDigest, vs. digest-on-update in image-refresh) and is tracked in #569.Part of #552.
Note
Low Risk
Narrow Helm template fix with unchanged default behaviour when no digest is set; covered by new unit tests.
Overview
requests-proxy no longer hardcodes
imagePullPolicy: Alwayswhenimages.requestsProxy.digestis set. Pull policy now matches jobs-manager, pods-monitor, and resource-monitor: pinned digest →repo@digest+IfNotPresent(restart without registry); no digest → tag +Always(unchanged default).Helm unittest adds two cases for default vs digest-pinned rendering. Chart version 1.9.11 → 1.9.12.
Reviewed by Cursor Bugbot for commit 97611fa. Bugbot is set up for automated code reviews on this repo. Configure here.