You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by GitBox <gi...@apache.org> on 2022/08/19 14:12:15 UTC
[GitHub] [airflow] barrywhart opened a new issue, #25827: KubernetesPodOperator "env_vars" field is documented to be templated, but it doesn't work
barrywhart opened a new issue, #25827:
URL: https://github.com/apache/airflow/issues/25827
### Apache Airflow version
main (development)
### What happened
The KubernetesPodOperator `env_vars` field is [documented to be templated](https://github.com/apache/airflow/blob/main/airflow/providers/cncf/kubernetes/operators/kubernetes_pod.py#L99), but it doesn't work. If I pass a JSON string to the constructor, it throws an exception:
```
File "/opt/airflow/airflow/models/baseoperator.py", line 410, in apply_defaults
result = func(self, **kwargs, default_args=default_args)
File "/opt/airflow/airflow/providers/cncf/kubernetes/operators/kubernetes_pod.py", line 236, in __init__
self.env_vars = convert_env_vars(env_vars) if env_vars else []
File "/opt/airflow/airflow/providers/cncf/kubernetes/backcompat/backwards_compat_converters.py", line 105, in convert_env_vars
raise AirflowException(f"Expected dict or list, got {type(env_vars)}")
airflow.exceptions.AirflowException: Expected dict or list, got <class 'str'>
```
### What you think should happen instead
If it receives a string, the constructor should convert it to Python (probably using `ast.literal_eval()`).
### How to reproduce
I've written a test to demonstrate the behavior. It could be added to `kubernetes_tests/test_kubernetes_pod_operator.py`.
```
def test_env_vars_are_templatized(self):
# WHEN
env_vars = """
[
{
"name": "ENV1",
"value": "val1",
"value_from": null
},
{
"name": "ENV2",
"value": "val2",
"value_from": null
},
{
"name": "ENV3",
"value": null,
"value_from": {
"config_map_key_ref": null,
"field_ref": {
"api_version": null,
"field_path": "status.podIP"
},
"resource_field_ref": null,
"secret_key_ref": null
}
}
]
"""
k = KubernetesPodOperator(
namespace='default',
image="ubuntu:16.04",
cmds=["bash", "-cx"],
arguments=["echo 10"],
env_vars=env_vars,
labels={"foo": "bar"},
name="test-" + str(random.randint(0, 1000000)),
task_id="task" + self.get_current_task_name(),
in_cluster=False,
do_xcom_push=False,
)
# THEN
context = create_context(k)
actual_pod = self.api_client.sanitize_for_serialization(k.build_pod_request_obj(context))
self.expected_pod['spec']['containers'][0]['env'] = [
{'name': 'ENV1', 'value': 'val1'},
{'name': 'ENV2', 'value': 'val2'},
{'name': 'ENV3', 'valueFrom': {'fieldRef': {'fieldPath': 'status.podIP'}}},
]
assert self.expected_pod == actual_pod
```
### Operating System
Debian GNU/Linux 11 (bullseye) (I'm running the Breeze dev environment)
### Versions of Apache Airflow Providers
I'm using the Breeze development environment with the latest `main` code as of August 19, 2022:
```
commit 0254f30a5a90f0c3104782525fabdcfdc6d3b7df (HEAD -> main, origin/main, origin/HEAD)
Author: Ash Berlin-Taylor <as...@apache.org>
Date: Fri Aug 19 14:15:43 2022 +0100
Let timetables control generated run_ids. (#25795)
```
### Deployment
Other
### Deployment details
Breeze development environment
### Anything else
The problem happens every time.
I would like to submit a PR to address this issue. I would also like (**if it sounds reasonable -- please let me know**) to add similar templating support for these other fields:
* `resources`
* `tolerations`
### Are you willing to submit PR?
- [X] Yes I am willing to submit a PR!
### Code of Conduct
- [X] I agree to follow this project's [Code of Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [airflow] potiuk closed issue #25827: KubernetesPodOperator "env_vars" field is documented to be templated, but it doesn't work
Posted by GitBox <gi...@apache.org>.
potiuk closed issue #25827: KubernetesPodOperator "env_vars" field is documented to be templated, but it doesn't work
URL: https://github.com/apache/airflow/issues/25827
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org