LoginSignup
3
5

More than 5 years have passed since last update.

digdagの変数

Last updated at Posted at 2016-10-25
vartest.dig
_export:
  var_top: var_top_val

+tasktop1:
  _export:
    var_tasktop1: var_tasktop1_val

  +tasksub1:
    _export:
      var_tasksub1: var_tasksub1_val
    echo>: at tasksub1... ${var_top} ${var_tasktop1} ${var_tasksub1}

  +tasksub2:
    rb>: SetVar.setVar
    require: 'setvar'

  +tasksub3:
    echo>: at tasksub3... ${var_rb}

+tasktop2:
  echo>: at tasktop2... ${var_top} ${var_rb} # var_tasktop1/var_tasksub1を参照するとエラー

+tasktop3:
  _export:
    var_top: var_top_val_override # 値の上書き可能
    var_rb: ${var_rb}_override    # 値の参照・上書きすると変な循環状態になってしまうのでやめるべき(☆)

  +tasksub4:
    echo>: at tasksub4... ${var_top} ${var_rb}

  +tasksub5:
    sh>: echo at tasksub5... ${var_top} ${var_rb}

実は_exportなしでもサブタスクがなければ変数作れるが、マニュアルにそんな記述ないっぽいのでやめた方が良さそう

setvar.rb
require 'pp'

class SetVar
  def setVar
    pp Digdag.env.params
    Digdag.env.store(var_rb: 'var_rb_val')
  end
end

結果

2016-10-25 16:28:11 +0900: Digdag v0.8.17
2016-10-25 16:28:14 +0900 [WARN] (main): Using a new session time 2016-10-25T00:00:00+00:00.
2016-10-25 16:28:14 +0900 [INFO] (main): Using session /tmp/.digdag/status/20161025T000000+0000.
2016-10-25 16:28:14 +0900 [INFO] (main): Starting a new session project id=1 workflow name=vartest session_time=2016-10-25T00:00:00+00:00
2016-10-25 16:28:17 +0900 [INFO] (0016@+vartest+tasktop1+tasksub1): echo>: at tasksub1... var_top_val var_tasktop1_val var_tasksub1_val
at tasksub1... var_top_val var_tasktop1_val var_tasksub1_val
2016-10-25 16:28:18 +0900 [INFO] (0016@+vartest+tasktop1+tasksub2): rb>: SetVar.setVar
{"timezone"=>"UTC",
 "session_uuid"=>"fca5f15a-bb7e-459c-980d-1268162c42be",
 "session_time"=>"2016-10-25T00:00:00+00:00",
 "session_date"=>"2016-10-25",
 "session_date_compact"=>"20161025",
 "session_local_time"=>"2016-10-25 00:00:00",
 "session_tz_offset"=>"+0000",
 "session_unixtime"=>1477353600,
 "project_id"=>1,
 "var_top"=>"var_top_val",
 "var_tasktop1"=>"var_tasktop1_val",
 "rb>"=>"SetVar.setVar",
 "require"=>"setvar",
 "_type"=>"rb",
 "_command"=>"SetVar.setVar"}
2016-10-25 16:28:19 +0900 [INFO] (0016@+vartest+tasktop1+tasksub3): echo>: at tasksub3... var_rb_val
at tasksub3... var_rb_val
2016-10-25 16:28:20 +0900 [INFO] (0016@+vartest+tasktop2): echo>: at tasktop2... var_top_val var_rb_val
at tasktop2... var_top_val var_rb_val
2016-10-25 16:28:21 +0900 [INFO] (0016@+vartest+tasktop3+tasksub4): echo>: at tasksub4... var_top_val_override ${var_rb}_override_override
at tasksub4... var_top_val_override ${var_rb}_override_override
2016-10-25 16:28:22 +0900 [INFO] (0016@+vartest+tasktop3+tasksub5): sh>: echo at tasksub5... var_top_val_override ${var_rb}_override_override
at tasksub5... var_top_val_override ${var_rb}_override_override_override_override
Success. Task state is saved at /tmp/.digdag/status/20161025T000000+0000 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.

Digdag.env.store()した変数はトップレベルの_exportと同じスコープになる

☆が変な循環になって「\${var_rb}_override_override」とか「\${var_rb}_override_override_override_override」とかになってしまう
こういうことはしないようにしよう

参考:
http://docs.digdag.io/workflow_definition.html#defining-variables
https://youtu.be/OAaFr_CnXvk?t=832 ※digdag公開前の動画
https://youtu.be/OAaFr_CnXvk?t=1812 ※digdag公開前の動画

3
5
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
3
5