This is an automated email from the ASF dual-hosted git repository.
husseinawala pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new 43d192543e Template field support for configmaps in the
KubernetesPodOperator (#36922)
43d192543e is described below
commit 43d192543ee2faff8954b5052c9a68494ef79867
Author: vizeit <[email protected]>
AuthorDate: Sat Jan 20 09:28:27 2024 -0800
Template field support for configmaps in the KubernetesPodOperator (#36922)
* 36888 Template field support for configmaps
* 36888 Add newsfragment - correct format
* 36888 Template field support for configmaps
* 36888 Add newsfragment - correct format
* Remove newsfragment
---------
Co-authored-by: Elad Kalif <[email protected]>
---
airflow/providers/cncf/kubernetes/operators/pod.py | 10 +++++++---
tests/providers/cncf/kubernetes/operators/test_pod.py | 12 ++++++++++++
2 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/airflow/providers/cncf/kubernetes/operators/pod.py
b/airflow/providers/cncf/kubernetes/operators/pod.py
index 0a06ea6ec6..4caa37b6ef 100644
--- a/airflow/providers/cncf/kubernetes/operators/pod.py
+++ b/airflow/providers/cncf/kubernetes/operators/pod.py
@@ -230,6 +230,7 @@ class KubernetesPodOperator(BaseOperator):
"volumes",
"volume_mounts",
"cluster_context",
+ "configmaps",
)
template_fields_renderers = {"env_vars": "py"}
@@ -312,8 +313,9 @@ class KubernetesPodOperator(BaseOperator):
if pod_runtime_info_envs:
self.env_vars.extend([convert_pod_runtime_info_env(p) for p in
pod_runtime_info_envs])
self.env_from = env_from or []
- if configmaps:
- self.env_from.extend([convert_configmap(c) for c in configmaps])
+ self.configmaps = configmaps
+ if self.configmaps:
+ self.env_from.extend([convert_configmap(c) for c in
self.configmaps])
self.ports = [convert_port(p) for p in ports] if ports else []
self.volume_mounts = [convert_volume_mount(v) for v in volume_mounts]
if volume_mounts else []
self.volumes = [convert_volume(volume) for volume in volumes] if
volumes else []
@@ -411,11 +413,13 @@ class KubernetesPodOperator(BaseOperator):
elif isinstance(content, k8s.V1ResourceRequirements):
template_fields = ("limits", "requests")
elif isinstance(content, k8s.V1Volume):
- template_fields = ("name", "persistent_volume_claim")
+ template_fields = ("name", "persistent_volume_claim",
"config_map")
elif isinstance(content, k8s.V1VolumeMount):
template_fields = ("name", "sub_path")
elif isinstance(content, k8s.V1PersistentVolumeClaimVolumeSource):
template_fields = ("claim_name",)
+ elif isinstance(content, k8s.V1ConfigMapVolumeSource):
+ template_fields = ("name",)
else:
template_fields = None
diff --git a/tests/providers/cncf/kubernetes/operators/test_pod.py
b/tests/providers/cncf/kubernetes/operators/test_pod.py
index a737e06cbe..5da60fabfa 100644
--- a/tests/providers/cncf/kubernetes/operators/test_pod.py
+++ b/tests/providers/cncf/kubernetes/operators/test_pod.py
@@ -151,6 +151,15 @@ class TestKubernetesPodOperator:
cmds="{{ dag.dag_id }}",
image="{{ dag.dag_id }}",
annotations={"dag-id": "{{ dag.dag_id }}"},
+ configmaps=["{{ dag.dag_id }}"],
+ volumes=[
+ k8s.V1Volume(
+ name="{{ dag.dag_id }}",
+ config_map=k8s.V1ConfigMapVolumeSource(
+ name="{{ dag.dag_id }}",
items=[k8s.V1KeyToPath(key="key", path="path")]
+ ),
+ )
+ ],
)
rendered = ti.render_templates()
@@ -170,6 +179,9 @@ class TestKubernetesPodOperator:
assert dag_id == ti.task.arguments
assert dag_id == ti.task.env_vars[0]
assert dag_id == rendered.annotations["dag-id"]
+ assert dag_id == ti.task.configmaps[0]
+ assert dag_id == rendered.volumes[0].name
+ assert dag_id == rendered.volumes[0].config_map.name
def run_pod(self, operator: KubernetesPodOperator, map_index: int = -1) ->
k8s.V1Pod:
with self.dag_maker(dag_id="dag") as dag: