digdagで変数を_export
で定義した時、局所的に変数を上書きしたい場合があると思います。
上書きするときの変数のスコープについて軽く調べたので共有します。
変数を上書きするdigdagの例
variable_override_test.dig
timezone: Asia/Tokyo
_export:
var1: hoge
+setup:
echo>: start ${session_time}
+test1:
echo>: var is ${var1}
+test2:
_export:
var1: fuga
echo>: overrided var is ${var1}
+test3:
echo>: var is ${var1}
+test4:
_export:
var1: fuga
+sub4:
echo>: overrided var(in subtask) is ${var1}
+teardown:
echo>: finish ${session_time}
実行結果は以下の通り
$ digdag run variable_override_test.dig
2018-01-25 19:26:51 +0900: Digdag v0.9.20
2018-01-25 19:26:52 +0900 [WARN] (main): Using a new session time 2018-01-25T00:00:00+09:00.
2018-01-25 19:26:52 +0900 [INFO] (main): Using session /Users/200291/playground/digdag_test/variable_override_test/.digdag/status/20180125T000000+0900.
2018-01-25 19:26:52 +0900 [INFO] (main): Starting a new session project id=1 workflow name=variable_override_test session_time=2018-01-25T00:00:00+09:00
2018-01-25 19:26:53 +0900 [INFO] (0018@[0:default]+variable_override_test+setup): echo>: start 2018-01-25T00:00:00+09:00
start 2018-01-25T00:00:00+09:00
2018-01-25 19:26:53 +0900 [INFO] (0018@[0:default]+variable_override_test+test1): echo>: var is hoge
var is hoge
2018-01-25 19:26:54 +0900 [INFO] (0018@[0:default]+variable_override_test+test2): echo>: overrided var is fuga
overrided var is fuga
2018-01-25 19:26:54 +0900 [INFO] (0018@[0:default]+variable_override_test+test3): echo>: var is hoge
var is hoge
2018-01-25 19:26:54 +0900 [INFO] (0018@[0:default]+variable_override_test+test4+sub4): echo>: overrided var(in subtask) is fuga
overrided var(in subtask) is fuga
2018-01-25 19:26:54 +0900 [INFO] (0018@[0:default]+variable_override_test+teardown): echo>: finish 2018-01-25T00:00:00+09:00
finish 2018-01-25T00:00:00+09:00
Success. Task state is saved at /Users/200291/playground/digdag_test/variable_override_test/.digdag/status/20180125T000000+0900 directory.
* Use --session <daily | hourly | "yyyy-MM-dd[ HH:mm:ss]"> to not reuse the last session time.
* Use --rerun, --start +NAME, or --goal +NAME argument to rerun skipped tasks.
まとめ
上記実行結果を表にまとめました
test名 | テストしたいこと | 結果 |
---|---|---|
test1 | グローバルに定義したvar1 の確認 |
hoge (そのまま) |
test2 | タスク内で定義しなおしたvar1 の確認 |
fuga (overrideされている) |
test3 |
var1 をoverrideしたタスクの後の別タスクでの確認 |
hoge (そのまま) |
test4 | タスクでvar1 を定義し直した時、そのサブタスク内での確認 |
fuga (overrideされている) |
-
digdag
では変数をoverrideできる - また、スコープは当該タスクとそのサブタスク内
細かいことですがスコープを理解していることでワークフローをより簡潔にかくことができそうです。