digdagでファイルシステム上のファイルをチェックして if> operator につなげるサンプル
既存システムとの連携などが、ファイルシステム上のファイルの有無による「フラグファイル」で行われることがままあります。
ファイルの存在のチェックし、その結果をdigdagの if> operator でやってみたという小ネタです。
Document - if>: Conditional execution
ファイル構成はシンプルに以下。
- isfile.dig
- bin/init.py
- bin/check_file.py
digファイル
digファイルでは
- チェックするファイルのパス
flg_file_pathを設定し - python オペレータでファイルチェックの結果をTrue or False で返す
bin.check_file.CheckFile.check_fileを呼び出します
_export:
flg_file_path: /tmp/flg
+check:
py>: bin.check_file.CheckFile.check_file
+judge:
if>: ${check_result}
_do:
+exists:
echo>: The file exists!
_else_do:
+nothing:
echo>: The file does not exist.
Python
ファイルをチェックし、結果を返すPythonです。とてもシンプル。
以下の1行がほぼ全てです。
"check_result": os.path.isfile(digdag.env.params['flg_file_path']) }
digdag.env.store で check_result 変数に os.path.isfile の結果を返しています。
# -*- coding: utf-8 -*-
import digdag
import os
class CheckFile(object):
def check_file(self, check_result=""):
digdag.env.store(
{
"check_result": os.path.isfile(digdag.env.params['flg_file_path'])
}
)
実行例
ファイルがある場合は “The file exists!” が表示されます。
bash-3.2$ digdag run --rerun isfile.dig
2020-07-31 22:54:45 +0900: Digdag v0.9.42
2020-07-31 22:54:47 +0900 [WARN] (main): Reusing the last session time 2020-07-31T00:00:00+00:00.
2020-07-31 22:54:47 +0900 [INFO] (main): Using session /Users/morihaya/work/testdig/.digdag/status/20200731T000000+0000.
2020-07-31 22:54:47 +0900 [INFO] (main): Starting a new session project id=1 workflow name=isfile session_time=2020-07-31T00:00:00+00:00
2020-07-31 22:54:48 +0900 [INFO] (0017@[0:default]+isfile+check): py>: bin.check_file.CheckFile.check_file
2020-07-31 22:54:49 +0900 [INFO] (0017@[0:default]+isfile+judge): if>: true
2020-07-31 22:54:49 +0900 [INFO] (0017@[0:default]+isfile+judge^sub+exists): echo>: The file exists!
The file exists!
ファイルがない場合は “The file does not exist.” が表示されます。
bash-3.2$ digdag run --rerun isfile.dig
2020-07-31 22:56:01 +0900: Digdag v0.9.42
2020-07-31 22:56:04 +0900 [WARN] (main): Reusing the last session time 2020-07-31T00:00:00+00:00.
2020-07-31 22:56:04 +0900 [INFO] (main): Using session /Users/morihaya/work/testdig/.digdag/status/20200731T000000+0000.
2020-07-31 22:56:04 +0900 [INFO] (main): Starting a new session project id=1 workflow name=isfile session_time=2020-07-31T00:00:00+00:00
2020-07-31 22:56:06 +0900 [INFO] (0017@[0:default]+isfile+check): py>: bin.check_file.CheckFile.check_file
2020-07-31 22:56:07 +0900 [INFO] (0017@[0:default]+isfile+judge): if>: false
2020-07-31 22:56:07 +0900 [INFO] (0017@[0:default]+isfile+judge^sub+nothing): echo>: The file does not exist.
The file does not exist.