Skip to content

feat: add optional image.digest for content-addressed image pinning - #480

Open
Nofar-Sin wants to merge 2 commits into
qdrant:mainfrom
Nofar-Sin:feat/image-digest-support
Open

feat: add optional image.digest for content-addressed image pinning#480
Nofar-Sin wants to merge 2 commits into
qdrant:mainfrom
Nofar-Sin:feat/image-digest-support

Conversation

@Nofar-Sin

Copy link
Copy Markdown

Problem

Pinning the qdrant image by digest is currently impossible through values. The natural attempt —

image:
  tag: "v1.17.1@sha256:94728574965d17c6485dd361aa3c0818b325b9016dac5ea6afec7b4b2700865f"

— fails at template time, because statefulset.yaml runs semverCompare on image.tag to pick the readiness path (/readyz vs /), and the digest suffix is not a valid semver:

Error: template: qdrant/templates/statefulset.yaml:147: ... error calling semverCompare: Invalid Semantic Version

Digest pinning is required by supply-chain hardening baselines (tag-only pulls resolve at pull time and are not reproducible), so charts that validate the tag need a separate digest field.

Change

Add an optional image.digest (default "", no behavior change when unset). When set, it is appended to the image reference for both the init container and the main container:

docker.io/qdrant/qdrant:v1.18.2@sha256:9472…
docker.io/qdrant/qdrant:v1.18.2-unprivileged@sha256:…   # with useUnprivilegedImage

image.tag stays a plain semver, so the existing semverCompare readiness logic is untouched. In a tag@digest reference the runtime resolves by digest; the tag remains informational.

Documented caveat in values.yaml: with useUnprivilegedImage: true the digest must be the -unprivileged variant's digest.

Testing

  • helm lint clean
  • make test-unit (terratest suite) passes
  • Render matrix verified: digest unset (byte-identical to current output), digest set, digest + useUnprivilegedImage

Chart version bumped to 1.18.3 + CHANGELOG entry — happy to adjust if you version differently.

Nofar Sinder added 2 commits July 8, 2026 18:44
…inning

Pinning the qdrant image by digest is currently impossible via values:
the tag@sha256 form breaks the semverCompare readiness-path check in
statefulset.yaml, and there is no digest field. Add an optional
image.digest that is appended to the image reference (repo:tag@digest)
for both the init and main containers, keeping image.tag a plain semver
so existing version logic is untouched. No behavior change when unset.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant