概要
echo>:
とsh>: echo
の挙動の違いについてです。
digdagのバージョンはv0.9.37です。
詳細
- シークレットの変換
- dockerコンテナでの実行
はsh>: echo
のみで可能です。
io.digdag.core.workflow.EchoOperatorFactory
とio.digdag.core.workflow.ShOperatorFactory
の実装を見てもらえればすぐにわかると思います。
ShOperatorFactoryでそれぞれの処理を行なっている該当箇所は以下です。
●シークレット変換
String command = UserSecretTemplate.of(params.get("_command", String.class))
.format(context.getSecrets());
●コンテナ実行
Process p = exec.start(workspace.getPath(), request, pb);
※execはCommandExecutorで、実装はDockerCommandExecutorです。
確認
では実際に動かして試してみましょう。
(1)シークレットの変換
{ "secret_key": "abcde" }
+task1:
echo>: ${secret:secret_key}
+task2:
sh>: echo ${secret:secret_key}
digdag secrets --local --set @secret.json
digdag run sample.dig --session "2019-06-30 12:00:00"
実行結果
2019-07-01 12:12:11 +0900 [INFO] (0017@[0:default]+sample+task1): echo>: ${secret:secret_key}
${secret:secret_key}
2019-07-01 12:12:11 +0900 [INFO] (0017@[0:default]+sample+task2): sh>: echo ${secret:secret_key}
abcde
sh>: echo
の場合だけ変換されていることが確認出来ます。
(2)dockerコンテナでの実行
_export:
docker:
image: alpine:3.7
+task1:
echo>: hoge
+task2:
sh>: echo hoge
※ローカルにalpine:3.7のイメージが存在しない状態で実行
digdag run sample2.dig --session "2019-06-30 12:00:00"
実行結果
2019-07-01 12:12:11 +0900 [INFO] (0017@[0:default]+sample2+task1): echo>: hoge
hoge
2019-07-01 12:12:11 +0900 [INFO] (0017@[0:default]+sample2+task2): sh>: echo hoge
Unable to find image 'alpine:3.7' locally
3.7: Pulling from library/alpine
5d20c808ce19: Pulling fs layer
5d20c808ce19: Verifying Checksum
5d20c808ce19: Download complete
5d20c808ce19: Pull complete
Digest: sha256:8421d9a84432575381bfabd248f1eb56f3aa21d9d7cd2511583c68c9b7511d10
Status: Downloaded newer image for alpine:3.7
hoge
sh>: echo
の場合だけイメージがダウンロードされているので、DockerCommandExecutorのstartメソッドでコンテナで実行する分岐に入っていることがわかります。
まとめ
ローカルでシークレットで設定した値の確認したい場合なんかはsh>: echo
を使えば良さそうですね。