Airflow 1.x中TriggerDagRunOperator传递{{ds}}为conf参数未渲染怎么解决
问题根因
- Airflow 1.x 中,
TriggerDagRunOperator的python_callable内部的普通字符串不属于Operator的默认模板渲染字段范围,你写的"{{ds}}"不会被自动解析为实际日期,只会作为字面量传递给下游DAG。
解决方案
直接从fn_day函数的context参数中获取已经渲染完成的日期值,无需使用模板字符串。
修改后的DAG1代码:
from airflow.operators import TriggerDagRunOperator def fn_day(context, dagrun_order): # 直接从上下文取渲染好的ds值,不需要写模板语法 dagrun_order.payload = {"day": context['ds']} return dagrun_order trig = TriggerDagRunOperator( trigger_dag_id="ssh", task_id='trig', python_callable=fn_day, provide_context=True, # 必须配置该参数,确保上下文信息能正常传入函数 dag=dag)
补充说明
你当前DAG2的写法无需修改,SSHOperator的command字段默认支持Jinja模板渲染,{{dag_run.conf['day']}}可以正常读取到DAG1传递的实际日期值。如果需要传递其他Airflow内置模板变量(比如{{ prev_ds }}、{{ execution_date }}等),都可以直接从context字典中取对应键的实际值,不需要在payload中写模板字符串。
内容的提问来源于stack exchange,提问作者d-_-b
相关产品推荐
相关产品推荐

