From b12f1f2cb896da305436916b1bfec8af77c93300 Mon Sep 17 00:00:00 2001 From: raphaelauv Date: Wed, 16 Nov 2022 18:23:43 +0100 Subject: [PATCH 1/2] [FEATURE] KPO - volume nested template fields --- .../kubernetes/operators/kubernetes_pod.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/airflow/providers/cncf/kubernetes/operators/kubernetes_pod.py b/airflow/providers/cncf/kubernetes/operators/kubernetes_pod.py index c1735158ec1ec..77377bc60c88c 100644 --- a/airflow/providers/cncf/kubernetes/operators/kubernetes_pod.py +++ b/airflow/providers/cncf/kubernetes/operators/kubernetes_pod.py @@ -186,6 +186,8 @@ class KubernetesPodOperator(BaseOperator): "pod_template_file", "namespace", "container_resources", + "volumes", + "volume_mounts", ) template_fields_renderers = {"env_vars": "py"} @@ -326,6 +328,23 @@ def _render_nested_template_fields( self._do_render_template_fields(content, ("limits", "requests"), context, jinja_env, seen_oids) return + if id(content) not in seen_oids and isinstance(content, k8s.V1Volume): + seen_oids.add(id(content)) + self._do_render_template_fields( + content, ("name", "persistent_volume_claim"), context, jinja_env, seen_oids + ) + return + + if id(content) not in seen_oids and isinstance(content, k8s.V1VolumeMount): + seen_oids.add(id(content)) + self._do_render_template_fields(content, ("name",), context, jinja_env, seen_oids) + return + + if id(content) not in seen_oids and isinstance(content, k8s.V1PersistentVolumeClaimVolumeSource): + seen_oids.add(id(content)) + self._do_render_template_fields(content, ("claim_name",), context, jinja_env, seen_oids) + return + super()._render_nested_template_fields(content, context, jinja_env, seen_oids) @staticmethod From ef3df1c7880c28db5d02ad1297750bb67b3ec133 Mon Sep 17 00:00:00 2001 From: raphaelauv Date: Thu, 24 Nov 2022 14:46:30 +0100 Subject: [PATCH 2/2] review --- .../kubernetes/operators/kubernetes_pod.py | 44 +++++++++---------- 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/airflow/providers/cncf/kubernetes/operators/kubernetes_pod.py b/airflow/providers/cncf/kubernetes/operators/kubernetes_pod.py index 77377bc60c88c..a9fb42774d8cf 100644 --- a/airflow/providers/cncf/kubernetes/operators/kubernetes_pod.py +++ b/airflow/providers/cncf/kubernetes/operators/kubernetes_pod.py @@ -318,32 +318,28 @@ def _render_nested_template_fields( jinja_env: jinja2.Environment, seen_oids: set, ) -> None: - if id(content) not in seen_oids and isinstance(content, k8s.V1EnvVar): - seen_oids.add(id(content)) - self._do_render_template_fields(content, ("value", "name"), context, jinja_env, seen_oids) - return - - if id(content) not in seen_oids and isinstance(content, k8s.V1ResourceRequirements): - seen_oids.add(id(content)) - self._do_render_template_fields(content, ("limits", "requests"), context, jinja_env, seen_oids) - return - - if id(content) not in seen_oids and isinstance(content, k8s.V1Volume): - seen_oids.add(id(content)) - self._do_render_template_fields( - content, ("name", "persistent_volume_claim"), context, jinja_env, seen_oids - ) - return + if id(content) not in seen_oids: + template_fields: tuple | None = None + + if isinstance(content, k8s.V1EnvVar): + template_fields = ("value", "name") + + if isinstance(content, k8s.V1ResourceRequirements): + template_fields = ("limits", "requests") + + if isinstance(content, k8s.V1Volume): + template_fields = ("name", "persistent_volume_claim") + + if isinstance(content, k8s.V1VolumeMount): + template_fields = ("name",) - if id(content) not in seen_oids and isinstance(content, k8s.V1VolumeMount): - seen_oids.add(id(content)) - self._do_render_template_fields(content, ("name",), context, jinja_env, seen_oids) - return + if isinstance(content, k8s.V1PersistentVolumeClaimVolumeSource): + template_fields = ("claim_name",) - if id(content) not in seen_oids and isinstance(content, k8s.V1PersistentVolumeClaimVolumeSource): - seen_oids.add(id(content)) - self._do_render_template_fields(content, ("claim_name",), context, jinja_env, seen_oids) - return + if template_fields: + seen_oids.add(id(content)) + self._do_render_template_fields(content, template_fields, context, jinja_env, seen_oids) + return super()._render_nested_template_fields(content, context, jinja_env, seen_oids)