我设置了两个DAG,我们称第一个为编排器,第二个为工作器。 Orchestrator的工作是从API检索一个列表,并对该列表中的每个元素使用一些参数触发工作程序DAG。
我将两个工作流程分开的原因是我希望只重播失败的“工作”工作流程(如果一个工作流程失败,我不想重播所有工作程序实例)。
我能够使事情正常进行,但是现在我看到了监视的难度,因为我的task_id对所有人来说都是相同的,所以我决定基于“ orchestrator”工作流程从API检索的值来获得动态task_id
但是,我无法从运算符外部的dag_run对象中检索值。基本上,我想这样做:
with models.DAG('specific_workflow', schedule_interval=None, default_args=default_dag_args) as dag:
name = context['dag_run'].name
hello_world = BashOperator(task_id='hello_{}'.format(name), bash_command="echo Hello {{ dag_run.conf.name }}", dag=dag)
bye = BashOperator(task_id='bye_{}'.format(name), bash_command="echo Goodbye {{ dag_run.conf.name }}", dag=dag)
hello_world >> bye
但是我无法定义此“上下文”对象。但是,我可以从运算符(例如PythonOperator和BashOperator)访问它。
是否可以在运算符之外检索dag_run对象?
答案 0 :(得分:0)
我认为目前尚不容易。例如,作为工作程序运行过程的一部分,除了在哪里可以找到DAG之外,没有提供任何TaskInstance上下文的情况下检索DAG:https://github.com/apache/incubator-airflow/blob/f18e2550543e455c9701af0995bc393ee6a97b47/airflow/bin/cli.py#L353
DAG的run_id
是存储此信息的好地方。