基于从 Master dag 传递的消息的气流动态 dag 创建

时间:2021-07-02 09:24:26

标签: python airflow google-cloud-composer orchestration

所以我想创建一个基于从前一个 dag 传递的消息创建动态任务的 dag。 前任:- 我有一个主 dag 和一个从 dag。 从 master dag,我传递了一个国家列表,例如:[us,uk,fr] 到 slave dag 我想阅读此消息并在 slave dag 中创建三个任务。

enter image description here

通过将这些国家/地区的列表保存在变量中并将其放入 dag 定义中(如下面的代码),我能够使用以下代码实现此目的。

with airflow.DAG(
        'slave_dag',
        'catchup=False',
        default_args=default_args,
        schedule_interval=None) as dag:

start= python_operator.PythonOperator(
            task_id = 'start',
            python_callable = start,
            retries = 1,
            provide_context = True,
            xcom_push=True
        )   
        
        params = Variable.get('countries')
        params=params.replace("'","")
        params = json.loads(params)

        for region in params['region']:

        region_task = TriggerDagRunOperator(
            task_id=f"{region}",
            trigger_dag_id="another_dag", 
            params= {'condition_param': True,'marketplace': region},
            python_callable=trigger_dag,
            retries=1,
            retry_delay = datetime.timedelta(minutes=5)
        )
        
        start.set_downstream(region_task)

但我不想要这个,我不能将它保存在变量中,因为许多 master dag 可以调用同一个奴隶并通过不同的国家。所以如果两个master同时更新变量就会有问题。所以我需要从 master dag 获取值。我们通常使用这个context['dag_run'].conf['message']

访问python函数中master dag中传递的值

但我无法在 dag 定义中访问它。有没有办法实现这一目标?或任何其他我可以创建此 dag 的方式。

0 个答案:

没有答案