[英]Airflow - TriggerDagRunOperator - Call same DAG with different Conf
I've one dynamic DAG (dag_1) that is orchestrated by another DAG (dag_0) using TriggerDagRunOperator.我有一个动态 DAG (dag_1),它由另一个 DAG (dag_0) 使用 TriggerDagRunOperator 编排。
The dag_1 is a very simple script: `from datetime import datetime from airflow.models import DAG from airflow.operators.python_operator import PythonOperator dag_1 是一个非常简单的脚本:`from datetime import datetime from airflow.models import DAG from airflow.operators.python_operator import PythonOperator
default_args = {
'provide_context': True,
}
default_args = {
'provide_context': True,
}
def get_list(**context):
p_list = ['a','b','c']
res = context["dag_run"].conf['message']
p_list.append(res)
return p_list
def get_list(**context):
p_list = ['a','b','c']
res = context["dag_run"].conf['message']
p_list.append(res)
return p_list
with DAG(
dag_id='dag_1',
schedule_interval='@once',
start_date=datetime(2022, 3, 1)
, default_args=default_args
) as dag:
data_list = PythonOperator(
task_id='get_lists',
python_callable=get_list,
dag=dag)
for i in get_list():
bash_task = BashOperator(task_id='bash_task_{}'.format(i), bash_command="echo 'command executed {}'.format(i)")
with DAG(
dag_id='dag_1',
schedule_interval='@once',
start_date=datetime(2022, 3, 1)
, default_args=default_args
) as dag:
data_list = PythonOperator(
task_id='get_lists',
python_callable=get_list,
dag=dag)
for i in get_list():
bash_task = BashOperator(task_id='bash_task_{}'.format(i), bash_command="echo 'command executed {}'.format(i)")
And my dag_0 that will run orchestrate the dag_1 based on the parameters passed:
`from airflow.operators.trigger_dagrun import TriggerDagRunOperator
from datetime import datetime
from airflow import DAG
And my dag_0 that will run orchestrate the dag_1 based on the parameters passed:
`from airflow.operators.trigger_dagrun import TriggerDagRunOperator
from datetime import datetime
from airflow import DAG
dag = DAG(
'dag_0',
description='create the table structure',
schedule_interval='@once',
catchup=False,
max_active_runs=1,
start_date=datetime(2022, 3, 1)
)
dag = DAG(
'dag_0',
description='create the table structure',
schedule_interval='@once',
catchup=False,
max_active_runs=1,
start_date=datetime(2022, 3, 1)
)
trigger_step = TriggerDagRunOperator(
task_id="trigger_step",
trigger_dag_id="dag_1",
conf={"message": "Hello Word 1"},
dag=dag
)
trigger_step = TriggerDagRunOperator(
task_id="trigger_step",
trigger_dag_id="dag_1",
conf={"message": "Hello Word 1"},
dag=dag
)
trigger_step2 = TriggerDagRunOperator(
task_id="trigger_step2",
trigger_dag_id="dag_1",
conf={"message": "Hello Word 2"},
dag=dag
)
trigger_step2 = TriggerDagRunOperator(
task_id="trigger_step2",
trigger_dag_id="dag_1",
conf={"message": "Hello Word 2"},
dag=dag
)
trigger_step >> trigger_step2`
If I run this without the need to pass the PythonOperator to a list, it works fine by when I put that part "for i in get_list()" on first script I got: res = context["dag_run"].conf['message'] KeyError: 'dag_run'
如果我在不需要将 PythonOperator 传递给列表的情况下运行它,当我将那部分“for i in get_list()”放在我得到的第一个脚本上时它工作正常:
res = context["dag_run"].conf['message'] KeyError: 'dag_run'
What I am doing wrong?我做错了什么?
Try the below.试试下面的。 I think because that
dag_run
object is created at run time.我认为是因为
dag_run
object 是在运行时创建的。
def get_list(dag_run=None,**context):
p_list = ['a','b','c']
res = dag_run.conf.get('message')
p_list.append(res)
return p_list
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.