bash – Airflow参数传递
如果可能的话,我有一个简单的工作,我想在Airflow流程下移动.就目前而言,我有一串bash脚本访问服务器并下载最新版本的文件,然后对该文件执行各种下游操作.
exec ./somescript.sh somefileurl 我想知道的是:每次我需要运行此过程时,如何将URL传递给此文件? 似乎如果我尝试将bash脚本作为bash命令运行,如下所示: download = BashOperator( task_id='download_release',bash_command='somescript.sh',# params={'URL': 'somefileurl'},dag=dag) 我无法传递bash脚本所需的一个参数.否则,如果我尝试将bash脚本作为bash命令发送,bash_command='./somescript.sh {{ URL }}',params={'URL': 'somefileurl'},dag=dag) 程序试图在临时目录的上下文中执行脚本时收到执行错误.这会破坏脚本,因为它需要访问位于同一目录中的某些凭据文件,并且我希望保持相对文件位置不变… 思考? 更新:什么对我有用 download = BashOperator( task_id='download_release',bash_command='cd {{ params.dir }} && ./somescript.sh {{ params.url }}',params={'url': 'somefileurl','dir': 'somedir'},dag=dag) 但是,我还没有实现任何参数传递. 解决方法
以下是将参数传递给BashOperator的示例:
templated_command = """ cd /working_directory somescript.sh {{ dag_run.conf['URL'] }} """ download = BashOperator( task_id='download_release',bash_command=templated_command,dag=dag) 有关此问题的讨论,请参阅passing parameters to externally trigged dag. Airflow有两个示例DAG,用于演示:example_trigger_controller_dag和example_trigger_target_dag.另请参阅Airflow api reference on macros. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |