summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--jenkins_jobs/formatter.py6
-rw-r--r--tests/yamlparser/fixtures/jinja-string04.xml19
-rw-r--r--tests/yamlparser/fixtures/jinja-string04.yaml40
3 files changed, 62 insertions, 3 deletions
diff --git a/jenkins_jobs/formatter.py b/jenkins_jobs/formatter.py
index 61596780..470646f0 100644
--- a/jenkins_jobs/formatter.py
+++ b/jenkins_jobs/formatter.py
@@ -59,9 +59,9 @@ def deep_format(obj, paramdict, allow_empty=False):
ret = type(obj)()
for item in obj:
try:
- ret[
- CustomFormatter(allow_empty).format(item, **paramdict)
- ] = deep_format(obj[item], paramdict, allow_empty)
+ ret[deep_format(item, paramdict, allow_empty)] = deep_format(
+ obj[item], paramdict, allow_empty
+ )
except KeyError as exc:
missing_key = exc.args[0]
desc = "%s parameter missing to format %s\nGiven:\n%s" % (
diff --git a/tests/yamlparser/fixtures/jinja-string04.xml b/tests/yamlparser/fixtures/jinja-string04.xml
new file mode 100644
index 00000000..c61fef92
--- /dev/null
+++ b/tests/yamlparser/fixtures/jinja-string04.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<project>
+ <actions/>
+ <description>&lt;!-- Managed by Jenkins Job Builder --&gt;</description>
+ <keepDependencies>false</keepDependencies>
+ <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
+ <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
+ <concurrentBuild>false</concurrentBuild>
+ <canRoam>true</canRoam>
+ <properties/>
+ <scm class="hudson.scm.NullSCM"/>
+ <builders>
+ <hudson.tasks.Shell>
+ <command>123</command>
+ </hudson.tasks.Shell>
+ </builders>
+ <publishers/>
+ <buildWrappers/>
+</project>
diff --git a/tests/yamlparser/fixtures/jinja-string04.yaml b/tests/yamlparser/fixtures/jinja-string04.yaml
new file mode 100644
index 00000000..436ed55a
--- /dev/null
+++ b/tests/yamlparser/fixtures/jinja-string04.yaml
@@ -0,0 +1,40 @@
+# Make sure Jinja subsittuions work from within "defaults"
+- defaults:
+ name: test-defaults
+ test_var:
+ !j2: "{% for x in [1, 2, 3] %}{{ x }}{% endfor %}"
+ use_test_builder: true
+ test_builder_name:
+ !j2: |
+ {% if use_test_builder -%}
+ test-shell-builder-alternate
+ {%- else -%}
+ test-shell-builder-default
+ {%- endif %}
+
+- project:
+ name: test-proj
+ jobs:
+ - test-jobs-{argument}:
+ argument:
+ - 1
+
+# This type of variable propagation only works in job templates.
+- job-template:
+ name: test-jobs-{argument}
+ defaults: test-defaults
+ builders:
+ # This fails because we only render the initial template, not the final template.
+ - "{test_builder_name}":
+ test_var: "{test_var}"
+
+- builder:
+ name: test-shell-builder-alternate
+ builders:
+ - shell: "{test_var}"
+
+
+- builder:
+ name: test-shell-builder-default
+ builders:
+ - shell: "default"