在BashOperator dag

时间:2018-03-30 00:03:17

标签: docker airflow

我尝试使用以下Dag

安装python需求
import airflow
from datetime import datetime, timedelta
from airflow.operators.bash_operator import BashOperator
import logging


args = {
    'owner': 'airflow',
    'start_date': airflow.utils.dates.days_ago(1),
    'provide_context': True
}


dag = airflow.DAG(
    'set_up_python',
    schedule_interval="@once",
    default_args=args,
    max_active_runs=1)

t1 = BashOperator(
        task_id= 'echo_varconf_path',
        bash_command="echo {{ var.conf_path }}",
        dag=dag
   )

t2 = BashOperator(
        task_id= 'install_python_requirements',
        bash_command="pip install {{ var.conf_path }}/requirements.txt",
        dag=dag
   )

在我设置变量conf_path之前,我无法在bash命令中找到变量。在日志中,似乎忽略了{{var.conf_path}}部分:

  

[2018-03-29 23:56:25,858] {{base_task_runner.py:98}}信息 - 子任务:   [2018-03-29 23:56:25,858] {{bash_operator.py:88}}信息 - 正在运行   命令:pip install /requirements.txt [2018-03-29 23:56:25,866]   {{base_task_runner.py:98}} INFO - 子任务:[2018-03-29 23:56:25,866]   {{bash_operator.py:97}}信息 - 输出:[2018-03-29 23:56:26,688]   {{base_task_runner.py:98}} INFO - 子任务:[2018-03-29 23:56:26,687]   {{bash_operator.py:101}}信息 - 无效要求:   '/requirements.txt'

正如你在dag定义中看到的那样,我尝试在第一个任务中输出变量,这个变量的输出也是空的:

  

[2018-03-29 23:56:25,856] {{base_task_runner.py:98}} INFO - 子任务:   [2018-03-29 23:56:25,856] {{bash_operator.py:88}}信息 - 正在运行   命令:echo [2018-03-29 23:56:25,866] {{base_task_runner.py:98}}   信息 - 子任务:[2018-03-29 23:56:25,865] {{bash_operator.py:97}}信息    - 输出:

1 个答案:

答案 0 :(得分:1)

尝试使用{{ var.value.conf_path }} - 这可以让您转到模板上下文VariableAccessor中的here实例。