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:

Reply via email to