diff --git a/airflow/providers/cncf/kubernetes/operators/pod.py b/airflow/providers/cncf/kubernetes/operators/pod.py index 70f8bc2252bfb..f8ced353fc229 100644 --- a/airflow/providers/cncf/kubernetes/operators/pod.py +++ b/airflow/providers/cncf/kubernetes/operators/pod.py @@ -226,6 +226,7 @@ class KubernetesPodOperator(BaseOperator): "volumes", "volume_mounts", "cluster_context", + "configmaps", ) template_fields_renderers = {"env_vars": "py"} @@ -307,8 +308,9 @@ def __init__( 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 [] @@ -405,11 +407,13 @@ def _render_nested_template_fields( 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 690dece9534c9..4c40ccbacfb59 100644 --- a/tests/providers/cncf/kubernetes/operators/test_pod.py +++ b/tests/providers/cncf/kubernetes/operators/test_pod.py @@ -151,6 +151,15 @@ def test_templates(self, create_task_instance_of_operator): 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 @@ def test_templates(self, create_task_instance_of_operator): 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: