diff options
-rw-r--r-- | jenkins_jobs/formatter.py | 6 | ||||
-rw-r--r-- | tests/yamlparser/fixtures/jinja-string04.xml | 19 | ||||
-rw-r--r-- | tests/yamlparser/fixtures/jinja-string04.yaml | 40 |
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><!-- Managed by Jenkins Job Builder --></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" |