web-dev-qa-db-ja.com

エアフローのデフォルトon_failure_callback

DAGファイルで、on_failure_callback()関数を定義して、失敗した場合にSlackをポストします。

DAGの各演算子にon_failure_callback = on_failure_callback()を指定するとうまくいきます。

すべてのオペレーターへのディスパッチを自動化する方法はありますか(たとえば、default_argsまたはDAGオブジェクトを使用)。

13
Pierre CORBEL

私は最終的にそれを行う方法を見つけました。

On_failure_callbackをdefault_argsとして渡すことができます

class Foo:
  @staticmethod
  def get_default_args():
      """
      Return default args
      :return: default_args
      """

      default_args = {
          'on_failure_callback': Foo.on_failure_callback
      }

      return default_args

  @staticmethod
  def on_failure_callback(context):
     """
     Define the callback to post on Slack if a failure is detected in the Workflow
     :return: operator.execute
     """

     operator = SlackAPIPostOperator(
         task_id='failure',
         text=str(context['task_instance']),
         token=Variable.get("slack_access_token"),
         channel=Variable.get("slack_channel")
     )

     return operator.execute(context=context) 
19
Pierre CORBEL