触发不在Airflow中触发

时间:2017-02-22 00:35:42

标签: python airflow

我的Slack Operators都没有使用如下代码触发。无论成功与否,我都不会收到Slack通知。用户界面也没有显示任何进程已启动(图表显示正确的流程)。它成功完成了' run_this_first',并完成了所有10个迭代生成的Python操作符,默认情况下强制失败2个用于测试。

我尝试了各种不同的途径,但得到了相同的结果;它永远不会超越Python运算符。但是,如果我将任何Slack触发器设置为虚拟,它们都会运行。

from airflow import DAG
from airflow.utils.trigger_rule import TriggerRule
from airflow.operators import PythonOperator, BranchPythonOperator, DummyOperator

from airflow.operators.slack_operator import SlackAPIPostOperator
from datetime import datetime, timedelta
import pyodbc
from datetime import datetime
import os
import urllib.parse


default_args = {
    'owner': 'analytics',
    'depends_on_past': False,
    #'start_date': sixty_days_ago,
    'start_date': datetime(2017, 2, 16),
    'retries': 0,
    'retry_delay': timedelta(minutes=5),
}

dag = DAG(
    'Valet_Data',
    default_args=default_args,
    schedule_interval='*/5 * * * *',
    dagrun_timeout=timedelta(seconds=60))

def valet_function(locdata, ds, **kwargs):
    print(locdata)
    if locdata[0] < 100:
        print(intentional_fail)


fac = {
    'ABC': [123, 0, 'LOREM'],
    'BCD': [234, 11, 'IPSUM'],
    'CDE': [345, 22, 'LOREM'],
    'DEF': [456, 33, 'IPSUM'],
    'EFG': [678, 44, 'LOREM'],
    'FGH': [789, 55, 'IPSUM'],
    'GHI': [890, 66, 'LOREM'],
    'JKL': [901, 77, 'IPSUM'],
    'KLM': [12, 88, 'LOREM'],
    'LMN': [23, 99, 'IPSUM']
}

slack_success = SlackAPIPostOperator(
    task_id='slack_success',
    token='redacted',
    channel='#airflow',
    username='airflow',
    text="job {{ dag }} finished at {{ ts }} successfully 8)",
    dag=dag,
    trigger_rule=TriggerRule.ALL_SUCCESS,
    wait_for_downstream=True
)

run_this_first = DummyOperator(task_id='run_this_first', dag=dag)

join = DummyOperator(
    task_id='join',
    trigger_rule='one_success',
    dag=dag
)
join.set_downstream(slack_success)

for loc in fac:
    task = PythonOperator(
        task_id=loc,
        provide_context=True,
        python_callable=valet_function,
        op_kwargs={'locdata': fac[loc]},
        dag=dag)

    slack_fail = SlackAPIPostOperator(
        task_id='{0}_failure'.format(loc),
        token='redacted',
        channel='#airflow',
        username='airflow',
        text="job {{ task }} finished at {{ ts }} successfully 8)",
        dag=dag,
        trigger_rule=TriggerRule.ONE_FAILED
    )
    task.set_downstream(slack_fail)
    task.set_downstream(join)

    task.set_upstream(run_this_first)

0 个答案:

没有答案