[英]How Airflow DockerOperator send notification when Docker image creation error
我想在 Airflow DockerOperator 無法創建 Docker 映像時發送通知。 如果 DockerOperator 執行錯誤,可以使用on_failure_callback
發送通知。
更具體地說,我想捕獲 2 個錯誤。
from airflow import DAG
from datetime import datetime, timedelta
from airflow.providers.docker.operators.docker import DockerOperator
def send_slack():
print('send error message')
default_args = {
'on_failure_callback': send_slack,
}
with DAG(
dag_id='test_dag',
default_args=default_args,
schedule_interval='45 * * * *',
start_date=datetime(2021, 1, 1),
catchup=False,
dagrun_timeout=timedelta(minutes=420),
concurrency=1,
tags=['test']
) as dag:
t = DockerOperator(
task_id="test_operator",
container_name="test_container",
image=f"10.11.12.13/myapp:latest",
force_pull=False,
auto_remove=True,
command = " python my_test.py ",
docker_url="tcp://20.21.22.23:2375",
cpus=1,
mem_limit="1g",
mount_tmp_dir=False
)
t
if __name__ == "__main__":
dag.cli()
如果你想處理特定的錯誤,你需要查看 DockerOperator 的代碼並創建你自己的自定義操作符:
class MyCustomDockerOperator(DockerOperator):
... # here implement any customisations
您可以查看運算符的實現方式並覆蓋特定方法,捕獲特定異常並以您認為最適合您的方式處理它。
然后 - 在您的 DAG 中使用 MyCustomDockerOperator。 如果您想在多個 DAG 中使用它,您甚至可以將它添加到共享實用程序代碼中。
https://airflow.apache.org/docs/apache-airflow/stable/modules_management.html
根據Jarek的回答,我在下面實現了非常粗略的 CustomOperator。
class MyCustomDockerOperator(DockerOperator):
def execute(self, context) -> Option[str]:
try:
super().execute(context)
except AirflowException:
raise
except Exception as e:
raise AirflowException('something is wrong in creating docker image.') from e
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.