【digdag】shellでのネストされた変数の扱われ方


概要

_exportで入れ子の変数を定義した場合の扱われ方。
入れ子の変数を定義すると環境変数としてjsonのような文字列(例: {"b1":"foo","b2":"var"}
として格納されてしまい、大変扱いにくくなってしまう。

対策案

  • shellオペレータでなくpythonオペレータで処理を行う
  • そもそも入れ子の変数を避ける

これくらいしか思い浮かばなかったので、うまく例のfoovarを取り出す方法があればコメントで教えて下さい。

digファイル

+step:
  _export:
    a: hoge
    b:
      b1: foo
      b2: var
  sh> env

出力

ワークフローを実行すると以下の出力を得る。

a="hoge"
b={"b1":"foo","b2":"var"}

追記

@hiroysato さんに対策案をコメントいただきました!
ありがとうございます!

入れ子の変数が少ない場合は下記のやりかたでいい感じに取り出せそうです。

案1

実行時に${foo.bar}に値を埋め込む方法。

_export:
  foo:
    bar: 1234

+echo:
  sh>: "env FOO=${foo.bar} env"

案2

_envで環境変数に${foo.var}を埋め込む方法。

_export:
  foo:
    bar: 1234

+echo:
  sh>: "env"
  _env:
    FOO: ${foo.bar}

案3(shellで取り出す)

jqでjsonから要素を取り出す。

FOO=$( echo '{"b1":"foo","b2":"var"}' | jq -r .b1 ) ; echo $FOO
foo