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公開前の動画