diff --git a/digdag-core/src/main/java/io/digdag/core/agent/ConfigEvalEngine.java b/digdag-core/src/main/java/io/digdag/core/agent/ConfigEvalEngine.java index 820818e3f5..ddaa4d81ba 100644 --- a/digdag-core/src/main/java/io/digdag/core/agent/ConfigEvalEngine.java +++ b/digdag-core/src/main/java/io/digdag/core/agent/ConfigEvalEngine.java @@ -192,7 +192,7 @@ else if (value.isArray()) { else if (value.isTextual()) { // eval using template engine String code = value.textValue(); - evaluated = evalValue(built, code); + evaluated = evalValueRecursive(built, code); } else { evaluated = value; @@ -217,7 +217,7 @@ else if (value.isArray()) { else if (value.isTextual()) { // eval using template engine String code = value.textValue(); - evaluated = evalValue(local, code); + evaluated = evalValueRecursive(local, code); } else { evaluated = value; @@ -227,7 +227,7 @@ else if (value.isTextual()) { return built; } - private JsonNode evalValue(ObjectNode local, String code) + private JsonNode evalValueRecursive(ObjectNode local, String code) throws TemplateException { Config scopedParams = params.deepCopy(); @@ -236,7 +236,12 @@ private JsonNode evalValue(ObjectNode local, String code) } String resultText = null; if (isInvokeTemplateRequired(code)) { - resultText = evaluator.evaluate(code, scopedParams, jsonMapper); + String evalueted = evaluator.evaluate(code, scopedParams, jsonMapper); + while (!evalueted.equals(code) && isInvokeTemplateRequired(evalueted)) { + code = evalueted; + evalueted = evaluator.evaluate(evalueted, scopedParams, jsonMapper); + } + resultText = evalueted; } else { resultText = code; diff --git a/digdag-core/src/test/resources/io/digdag/core/agent/eval/basic.dig b/digdag-core/src/test/resources/io/digdag/core/agent/eval/basic.dig index 44b521236d..5abe731452 100644 --- a/digdag-core/src/test/resources/io/digdag/core/agent/eval/basic.dig +++ b/digdag-core/src/test/resources/io/digdag/core/agent/eval/basic.dig @@ -2,5 +2,5 @@ a: ${timezone} b: ${a} c: ${a}${b} nested: - value: v + value: ${c} ref: ${nested.value} diff --git a/digdag-core/src/test/resources/io/digdag/core/agent/eval/basic_expected.dig b/digdag-core/src/test/resources/io/digdag/core/agent/eval/basic_expected.dig index 764f720227..04402de180 100644 --- a/digdag-core/src/test/resources/io/digdag/core/agent/eval/basic_expected.dig +++ b/digdag-core/src/test/resources/io/digdag/core/agent/eval/basic_expected.dig @@ -2,5 +2,5 @@ a: UTC b: UTC c: UTCUTC nested: - value: v -ref: v + value: UTCUTC +ref: UTCUTC