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..774bd2e740 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 @@ -187,22 +187,23 @@ else if (value.isObject()) { evaluated = evalObjectRecursive((ObjectNode) value); } else if (value.isArray()) { - evaluated = evalArrayRecursive(built, (ArrayNode) value); + evaluated = evalArrayRecursive((ArrayNode) value); } else if (value.isTextual()) { // eval using template engine String code = value.textValue(); - evaluated = evalValue(built, code); + evaluated = evalValue(code); } else { evaluated = value; } built.set(pair.getKey(), evaluated); + params.set(pair.getKey(), evaluated); } return built; } - private ArrayNode evalArrayRecursive(ObjectNode local, ArrayNode array) + private ArrayNode evalArrayRecursive(ArrayNode array) throws TemplateException { ArrayNode built = array.arrayNode(); @@ -212,12 +213,12 @@ private ArrayNode evalArrayRecursive(ObjectNode local, ArrayNode array) evaluated = evalObjectRecursive((ObjectNode) value); } else if (value.isArray()) { - evaluated = evalArrayRecursive(local, (ArrayNode) value); + evaluated = evalArrayRecursive((ArrayNode) value); } else if (value.isTextual()) { // eval using template engine String code = value.textValue(); - evaluated = evalValue(local, code); + evaluated = evalValue(code); } else { evaluated = value; @@ -227,16 +228,12 @@ else if (value.isTextual()) { return built; } - private JsonNode evalValue(ObjectNode local, String code) + private JsonNode evalValue(String code) throws TemplateException { - Config scopedParams = params.deepCopy(); - for (Map.Entry pair : ImmutableList.copyOf(local.fields())) { - scopedParams.set(pair.getKey(), pair.getValue()); - } String resultText = null; if (isInvokeTemplateRequired(code)) { - resultText = evaluator.evaluate(code, scopedParams, jsonMapper); + resultText = evaluator.evaluate(code, params, jsonMapper); } 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