如何在KubernetesPodOperator中用Jinja2生成正确格式的cmds?
问题描述
现有配置JSON:
{ "customer": "customer1", "region": "south" }
期望生成的命令参数格式为:
cmds: ["aws", "domain_name", "etl_name", "--customer", "customer1", "--region", "south"]
当前使用的Jinja2模板代码如下:
task1 = KubernetesPodOperator( image="....", env_vars={...}, cmds=["aws", "domain_name", "etl_name", """'--customer', '{{ dag_run.conf.customer }}', '--region', '{{ dag_run.conf.region }}'""" )
实际在Airflow中运行时,得到的参数是'--customer,' 'customer1,' '--region,' 'south',逗号被包含在了参数内容里,不符合预期。
解决方案
问题出在你把多个参数打包成了一个字符串,并且错误地用引号包裹了整个参数片段,导致Airflow将整个字符串作为单个参数解析,同时把字符串里的逗号也当成了参数的一部分。
正确的写法是将每个命令参数作为cmds列表的独立元素,不需要额外的引号包裹整个片段,直接逐个添加即可:
task1 = KubernetesPodOperator( image="....", env_vars={...}, cmds=[ "aws", "domain_name", "etl_name", "--customer", "{{ dag_run.conf.customer }}", "--region", "{{ dag_run.conf.region }}" ] )
这样Jinja2会正确渲染dag_run.conf中的变量,最终生成的cmds列表就是你预期的格式,每个参数都是独立的元素,不会出现逗号粘在参数后面的问题。
内容的提问来源于stack exchange,提问作者Jason LiLy
相关产品推荐
相关产品推荐

