以下のようなprojectを作る。
$ tree
.
└── test.dig
あらかじめserverを起動しておく。
$ digdag server --memory
2017-07-21 15:26:52 +0900: Digdag v0.9.13
2017-07-21 15:26:53 +0900 [INFO] (main): secret encryption engine: disabled
2017-07-21 15:26:54 +0900 [INFO] (main): XNIO version 3.3.6.Final
2017-07-21 15:26:54 +0900 [INFO] (main): XNIO NIO Implementation Version 3.3.6.Final
2017-07-21 15:26:54 +0900 [INFO] (main): Starting server on 127.0.0.1:65432
2017-07-21 15:26:54 +0900 [INFO] (main): Bound on 127.0.0.1:65432 (api)
schedule:
を指定しないworkflowの場合
timezone: Asia/Tokyo
_export:
A: 1000
B: 2000
+echo_A:
echo>: ${A}
+echo_B:
echo>: ${B}
test-projectとしてpushする。
$ digdag push test-project
2017-07-21 15:43:41 +0900: Digdag v0.9.13
Creating .digdag/tmp/archive-227388074632667374.tar.gz...
Archiving test.dig
Workflows:
test.dig
Uploaded:
id: 1
name: test-project
revision: 875fbaa9-eddd-4ae7-a424-76d591655b87
archive type: db
project created at: 2017-07-21T06:43:43Z
revision updated at: 2017-07-21T06:43:43Z
Use `digdag workflows` to show all workflows.
workflow一覧を見てみる。
test-projectがproject名、testがworkflow名(.digファイルの名前と同じ)である。
$ digdag workflows
2017-07-21 15:45:04 +0900: Digdag v0.9.13
test-project
test
Use `digdag workflows <project-name> <name>` to show details.
schedule一覧を見てみる。
登録が無い。
$ digdag schedules
2017-07-21 15:45:23 +0900: Digdag v0.9.13
Schedules:
0 entries.
Use `digdag workflows [project-name] [workflow-name]` to show workflow details.
--session hourly
としてstartしてみる。
$ digdag start test-project test --session hourly
2017-07-21 15:45:54 +0900: Digdag v0.9.13
Started a session attempt:
session id: 1
attempt id: 1
uuid: 5e3ee879-d376-404f-81af-ab67c53d7e93
project: test-project
workflow: test
session time: 2017-07-21 15:00:00 +0900
retry attempt name:
params: {}
created at: 2017-07-21 15:45:55 +0900
* Use `digdag session 1` to show session status.
* Use `digdag task 1` and `digdag log 1` to show task status and logs.
serverの出力は以下。
2017-07-21 15:45:56 +0900 [INFO] (0057@[0:test-project]+test+echo_A): echo>: 1000
1000
2017-07-21 15:45:57 +0900 [INFO] (0057@[0:test-project]+test+echo_B): echo>: 2000
2000
再度実行しても、当時間のsessionが既に存在するためスキップされる。
$ digdag start test-project test --session hourly
2017-07-21 15:47:11 +0900: Digdag v0.9.13
error: A session for the requested session_time already exists (session_id=1, attempt_id=1, session_time=2017-07-21T15:00+09:00)
hint: use `digdag retry 1 --latest-revision --all` command to run the session again for the samesession_time
start --session hourly
したことでscheduleに登録されるのか?と思いつつ
再度schedule一覧を見てみるが、やはり登録は無い。
$ digdag schedules
2017-07-21 15:50:05 +0900: Digdag v0.9.13
Schedules:
0 entries.
Use `digdag workflows [project-name] [workflow-name]` to show workflow details.
結論
schedule一覧に載せるためにはschedule:
をworkflow(=.digファイル)に指定する必要がある。
schedule:
無しでpushしても定期実行はできない。
schedule:
を指定したworkflowの場合
$ cat test.dig
timezone: Asia/Tokyo
schedule:
hourly>: 55:00
_export:
A: 1000
B: 2000
+echo_A:
echo>: ${A}
+echo_B:
echo>: ${B}
pushする。
$ digdag push test-project
2017-07-21 15:54:28 +0900: Digdag v0.9.13
Creating .digdag/tmp/archive-2310627203464168029.tar.gz...
Archiving test.dig
Workflows:
test.dig
Uploaded:
id: 1
name: test-project
revision: 002718e7-4a55-4e08-8f06-de4854d0ad70
archive type: db
project created at: 2017-07-21T06:54:30Z
revision updated at: 2017-07-21T06:54:30Z
Use `digdag workflows` to show all workflows.
schedule一覧を見てみると、登録がある。
毎時55分に実行されるよう指定したので次回実行は15:55になっている。
$ digdag schedules
2017-07-21 15:54:34 +0900: Digdag v0.9.13
Schedules:
id: 1
project: test-project
workflow: test
disabled at:
next session time: 2017-07-21 15:00:00 +0900
next scheduled to run at: 2017-07-21 15:55:00 +0900 (in 25s)
1 entries.
Use `digdag workflows [project-name] [workflow-name]` to show workflow details.
15:55になったら自動で実行される。
2017-07-21 15:55:00 +0900 [INFO] (scheduler-0): Starting a new session project id=1 workflow name=test session_time=2017-07-21T15:00:00+09:00
2017-07-21 15:55:02 +0900 [INFO] (0050@[0:test-project]+test+echo_A): echo>: 1000
1000
2017-07-21 15:55:02 +0900 [INFO] (0050@[0:test-project]+test+echo_B): echo>: 2000
2000
再度schedule一覧を見てみると、次回実行が16:55に更新されている。
$ digdag schedules
2017-07-21 15:55:06 +0900: Digdag v0.9.13
Schedules:
id: 1
project: test-project
workflow: test
disabled at:
next session time: 2017-07-21 16:00:00 +0900
next scheduled to run at: 2017-07-21 16:55:00 +0900 (in 59m 52s)
1 entries.
Use `digdag workflows [project-name] [workflow-name]` to show workflow details.
結論
schedule:
をworkflowに指定するとpushするだけでschedule一覧に登録される。
schedule:
を指定しているが-p
でパラメータ指定が必要な場合。
$ cat test.dig
timezone: Asia/Tokyo
schedule:
hourly>: 05:00
_export:
A: 1000
B: 2000
+echo_A:
echo>: ${A}
+echo_B:
echo>: ${B}
+echo_C:
echo>: ${C}
pushする。
$ digdag push test-project
2017-07-21 16:06:49 +0900: Digdag v0.9.13
Creating .digdag/tmp/archive-644867903567847050.tar.gz...
Archiving test.dig
Workflows:
test.dig
Uploaded:
id: 1
name: test-project
revision: 14a36033-9bf5-48f3-a932-2a98b92fa40d
archive type: db
project created at: 2017-07-21T07:06:51Z
revision updated at: 2017-07-21T07:06:51Z
Use `digdag workflows` to show all workflows.
scheduleに登録がある。次回実行は16:05にセットされている。
$ digdag schedules
2017-07-21 16:06:54 +0900: Digdag v0.9.13
Schedules:
id: 1
project: test-project
workflow: test
disabled at:
next session time: 2017-07-21 16:00:00 +0900
next scheduled to run at: 2017-07-21 16:08:00 +0900 (in 1m 4s)
1 entries.
Use `digdag workflows [project-name] [workflow-name]` to show workflow details.
しかし-p C=3000
できないので定期実行はコケる。
2017-07-21 16:08:02 +0900 [INFO] (0050@[0:test-project]+test+echo_A): echo>: 1000
1000
2017-07-21 16:08:02 +0900 [INFO] (0050@[0:test-project]+test+echo_B): echo>: 2000
2000
2017-07-21 16:08:02 +0900 [ERROR] (0050@[0:test-project]+test+C): Configuration error at task +test+C: Failed to evaluate a variable ${C} (ReferenceError: "C" is not defined) (config)
2017-07-21 16:08:03 +0900 [INFO] (0050@[0:test-project]+test^failure-alert): type: notify
しかもretryしようとしてもretryコマンドは-p
を受け付けないのでやはりコケる。
$ digdag retry 1 --latest-revision --resume -p C=3000
2017-07-21 16:10:22 +0900: Digdag v0.9.13
Started a session attempt:
session id: 1
attempt id: 4
uuid: 3a81c73c-08cb-493b-8842-26a9c6595367
project: test-project
workflow: test
session time: 2017-07-21 16:00:00 +0900
retry attempt name: c4389ddd-97ac-408e-8f53-926115368cb0
params: {"last_session_time":"2017-07-21T15:00:00+09:00","next_session_time":"2017-07-21T17:00:00+09:00"}
created at: 2017-07-21 16:10:23 +0900
* Use `digdag session 1` to show session status.
* Use `digdag task 4` and `digdag log 4` to show task status and logs.
2017-07-21 16:10:13 +0900 [INFO] (XNIO-1 task-13): Starting a new session project id=1 workflow name=test session_time=2017-07-21T16:00:00+09:00
2017-07-21 16:10:14 +0900 [ERROR] (0069@[0:test-project]+test+C): Configuration error at task +test+C: Failed to evaluate a variable ${C} (ReferenceError: "C" is not defined) (config)
2017-07-21 16:10:23 +0900 [INFO] (XNIO-1 task-17): Starting a new session project id=1 workflow name=test session_time=2017-07-21T16:00:00+09:00
2017-07-21 16:10:23 +0900 [ERROR] (0069@[0:test-project]+test+C): Configuration error at task +test+C: Failed to evaluate a variable ${C} (ReferenceError: "C" is not defined) (config)
既存のsessionを消すためにserverを再起動して再度pushする。
hourly>: 20:00
に変更。
$ digdag push test-project
2017-07-21 16:18:50 +0900: Digdag v0.9.13
Creating .digdag/tmp/archive-5989548799081272140.tar.gz...
Archiving test.dig
Workflows:
test.dig
Uploaded:
id: 1
name: test-project
revision: 9d7c1996-00f8-4e96-b2b8-564bb3439c2f
archive type: db
project created at: 2017-07-21T07:18:52Z
revision updated at: 2017-07-21T07:18:52Z
Use `digdag workflows` to show all workflows.
次回実行は16:20にセットされている。
$ digdag schedules
2017-07-21 16:18:55 +0900: Digdag v0.9.13
Schedules:
id: 1
project: test-project
workflow: test
disabled at:
next session time: 2017-07-21 16:00:00 +0900
next scheduled to run at: 2017-07-21 16:20:00 +0900 (in 1m 3s)
1 entries.
Use `digdag workflows [project-name] [workflow-name]` to show workflow details.
ここで、定期実行を待たずに-p
でパラメータを指定してstartしてみる。
するとエラー無く実行され、paramsの情報が入ったsessionが作成される。
$ digdag start test-project test --session hourly -p C=3000
2017-07-21 16:19:26 +0900: Digdag v0.9.13
Started a session attempt:
session id: 1
attempt id: 1
uuid: 184cd3b0-4fd1-4b7e-bd80-10078b2724ad
project: test-project
workflow: test
session time: 2017-07-21 16:00:00 +0900
retry attempt name:
params: {"C":"3000","last_session_time":"2017-07-21T15:00:00+09:00","next_session_time":"2017-07-21T17:00:00+09:00"}
created at: 2017-07-21 16:19:28 +0900
* Use `digdag session 1` to show session status.
* Use `digdag task 1` and `digdag log 1` to show task status and logs.
2017-07-21 16:19:28 +0900 [INFO] (XNIO-1 task-9): Starting a new session project id=1 workflow name=test session_time=2017-07-21T16:00:00+09:00
2017-07-21 16:19:29 +0900 [INFO] (0055@[0:test-project]+test+echo_A): echo>: 1000
1000
2017-07-21 16:19:30 +0900 [INFO] (0055@[0:test-project]+test+echo_B): echo>: 2000
2000
2017-07-21 16:19:30 +0900 [INFO] (0055@[0:test-project]+test+C): echo>: 3000
3000
ただし、-p
で渡す値を変えてもsessionが存在すると言われ、実行できない。
$ digdag start test-project test --session hourly -p C=4000
2017-07-21 16:24:48 +0900: Digdag v0.9.13
error: A session for the requested session_time already exists (session_id=1, attempt_id=1, session_time=2017-07-21T16:00+09:00)
hint: use `digdag retry 1 --latest-revision --all` command to run the session again for the same session_time
結論
-
-p
でパラメータの指定が必要なworkflowはpushするだけでは定期実行されず、startコマンドで-p
を指定する必要がある。 - ただし、
-p
で渡す値を変えて別々のsessionのような扱いにすることはできない。
所感
はじめは-p
で渡す値を変え、それぞれを別々のworkflowのような扱いで定期実行させようとしていたが、-p
で渡す値を変えても作成されるsessionは1つなので無理だということがわかった。
-p
や-P
は.digに直接定義するのが憚られるもの(例えばawsのsecret access keyのような機密情報的なもの)をコマンドラインorファイルから渡すようにするためのものなのかな。
-p
なしだとpushするだけでscheduleに登録されるので、-p
なしでworkflowを作成できると楽そうだ。