【问题标题】:airflow pass parameter from cli来自cli的气流传递参数
【发布时间】:2017-06-05 06:51:36
【问题描述】:

有没有办法将参数传递给:

airflow trigger_dag dag_name {param}

?

我有一个监视文件目录的脚本 - 当文件移动到目标目录时,我想触发 dag 作为参数传递文件路径。

【问题讨论】:

    标签: airflow apache-airflow airflow-scheduler


    【解决方案1】:

    你可以这样传递:

    airflow trigger_dag --conf {"file_variable": "/path/to/file"} dag_id
    

    然后在您的 dag 中,您可以使用以下模板访问此变量:

    {{ dag_run.conf.file_variable }}
    

    如果这不起作用,分享一个简单版本的 dag 可能有助于获得更好的答案。

    【讨论】:

    • 如果你不想使用模板怎么办...?
    • @melchoir55 我在非模板案例上玩了一些技巧。在 DAG 定义文件 param = "{{dag_run.conf.get('file_variable')}}" 的顶部设置一个全局变量,例如 param。然后您就可以在文件中的任何位置使用param 变量。
    【解决方案2】:

    是的,你可以。你的 Dag 应该有这样的 Dag 和 Bask Task:

    from airflow.operators.bash_operators import BashOperator
    
    args = {'start_date':datetime.now(),
            'owner':'airflow',}
    dag = DAG(
          dag_id='param_dag', 
          default_args=args,
          schedule_interval=None)
    
    bash_task=BashOperator(
         task_id="bash_task" 
         bash_command= 'bash ~/path/bashscript.sh {{ dag_run.conf["parameter"] if dag_run else "" }} ', 
        //bashscript your script you want to run and the dag_run.conf will hold the parameter you want to pass
         dag=dag)
    

    现在在你的命令行输入命令:

     airflow trigger_dag dag_id --conf '{"parameter":"~/path" }'
    

    【讨论】:

    • 我的任务是 PythonOperator,而不是 BashOperator
    • @bsd 示例与PythonOperator
    猜你喜欢
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 2021-05-08
    相关资源
    最近更新 更多