LoginSignup
9
4

More than 5 years have passed since last update.

digdagの変数はoverrideできる

Last updated at Posted at 2018-01-25

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できる
  • また、スコープは当該タスクとそのサブタスク内

細かいことですがスコープを理解していることでワークフローをより簡潔にかくことができそうです。

9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4