Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions chart/newsfragments/69776.bugfix.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Support image digest in the worker pod template image (``images.pod_template.digest``)
9 changes: 8 additions & 1 deletion chart/templates/_helpers.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -372,7 +372,14 @@ If release name contains chart name it will be used as a full name.
{{- end }}

{{- define "pod_template_image" -}}
{{- printf "%s:%s" (.Values.images.pod_template.repository | default .Values.defaultAirflowRepository) (.Values.images.pod_template.tag | default .Values.defaultAirflowTag) }}
{{- $repository := .Values.images.pod_template.repository | default .Values.defaultAirflowRepository -}}
{{- $tag := .Values.images.pod_template.tag | default .Values.defaultAirflowTag -}}
{{- $digest := .Values.images.pod_template.digest | default .Values.defaultAirflowDigest -}}
{{- if $digest }}
{{- printf "%s@%s" $repository $digest -}}
{{- else }}
{{- printf "%s:%s" $repository $tag -}}
{{- end }}
{{- end }}

{{/* This helper is used for airflow containers that do not need the users code */}}
Expand Down
33 changes: 33 additions & 0 deletions chart/tests/helm_tests/airflow_aux/test_pod_template_file.py
Original file line number Diff line number Diff line change
Expand Up @@ -356,6 +356,39 @@ def test_should_set_a_custom_image_in_pod_template(self):
assert jmespath.search("spec.containers[0].imagePullPolicy", docs[0]) == "Always"
assert jmespath.search("spec.containers[0].name", docs[0]) == "base"

@pytest.mark.parametrize(
("expected_image", "tag", "digest"),
[
("dummy_image:user-tag", "user-tag", None),
("dummy_image@user-digest", None, "user-digest"),
("dummy_image@user-digest", "user-tag", "user-digest"),
],
)
def test_should_use_correct_pod_template_image(self, expected_image, tag, digest):
docs = render_chart(
values={
"images": {
"pod_template": {"repository": "dummy_image", "tag": tag, "digest": digest},
},
},
show_only=["templates/pod-template-file.yaml"],
chart_dir=self.temp_chart_dir,
)

assert jmespath.search("spec.containers[0].image", docs[0]) == expected_image

def test_should_use_default_airflow_digest_in_pod_template(self):
docs = render_chart(
values={
"defaultAirflowRepository": "test-repo",
"defaultAirflowDigest": "user-digest",
},
show_only=["templates/pod-template-file.yaml"],
chart_dir=self.temp_chart_dir,
)

assert jmespath.search("spec.containers[0].image", docs[0]) == "test-repo@user-digest"

def test_mount_airflow_cfg(self):
docs = render_chart(
show_only=["templates/pod-template-file.yaml"],
Expand Down
8 changes: 8 additions & 0 deletions chart/values.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -801,6 +801,14 @@
],
"default": null
},
"digest": {
"description": "The pod_template image digest. If set, it will override the tag. If ``config.kubernetes_executor.worker_container_repository`` and ``config.kubernetes_executor.worker_container_tag`` are set, the k8s executor will use those instead.",
"type": [
"string",
"null"
],
"default": null
},
"pullPolicy": {
"description": "The pod_template image pull policy.",
"type": "string",
Expand Down
2 changes: 2 additions & 0 deletions chart/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,8 @@ images:
# `config.kubernetes_executor.worker_container_tag` must be not set .
repository: ~
tag: ~
# Specifying digest takes precedence over tag.
digest: ~
pullPolicy: IfNotPresent
flower:
repository: ~
Expand Down