【发布时间】:2020-02-25 20:47:14
【问题描述】:
从 BashOperator 向外部 bash 脚本传递参数时遇到问题。 当我运行本地命令时,参数被正确替换:
log_cleanup = """ echo "{{ params.BASE_LOG_FOLDER }}" """
log_cleanup_task = BashOperator(
task_id='log_cleanup_task',
provide_context=True,
bash_command = log_cleanup,
params = {'BASE_LOG_FOLDER': "/var/opt"},
dag=dagInstance,
)
prints: "/var/opt" (without the double quotes)
但如果我调用外部 bash 脚本,则参数不会替换。
log_cleanup_task = BashOperator(
task_id='log_cleanup_task',
provide_context=True,
bash_command= str(DAGS_FOLDER)+"/scripts/log_cleanup.sh ",
params = {'BASE_LOG_FOLDER': "/var/opt" },
dag=dagInstance,
)
#log_cleanup.sh:
#! /usr/bin/bash
echo "{{ params.BASE_LOG_FOLDER }}"
prints: "{{ params.BASE_LOG_FOLDER }}" (without the double quotes)
在外部 bash 脚本中,我无法像在 DAG .py 脚本中存储语句时那样获取要替换的参数。
我是否必须将参数作为命令行参数传递? jinja 模板是否仅适用于 .py 文件?
【问题讨论】:
-
你使用什么 Airflow 版本?
-
气流 v.1.10.5
-
您能否在您的 Bash 脚本中尝试以下操作:
echo {{ params.BASE_LOG_FOLDER }}即删除它周围的引号 -
[2020-02-25 21:10:36,904] {bash_operator.py:128} INFO - {{ params.BASE_LOG_FOLDER }} -
现在检查。很快就会更新你
标签: bash parameters airflow