diff --git a/jenkins_jobs/registry.py b/jenkins_jobs/registry.py index a107078ae..4b4099631 100644 --- a/jenkins_jobs/registry.py +++ b/jenkins_jobs/registry.py @@ -23,6 +23,7 @@ import types from jenkins_jobs.errors import JenkinsJobsException from jenkins_jobs.formatter import deep_format +from jenkins_jobs.local_yaml import Jinja2Loader __all__ = [ "ModuleRegistry" @@ -160,9 +161,10 @@ class ModuleRegistry(object): if isinstance(component, dict): # The component is a singleton dictionary of name: dict(args) name, component_data = next(iter(component.items())) - if template_data: + if template_data or isinstance(component_data, Jinja2Loader): # Template data contains values that should be interpolated - # into the component definition + # into the component definition. To handle Jinja2 templates + # that don't contain any variables, we also deep format those. try: component_data = deep_format( component_data, template_data, diff --git a/tests/yamlparser/fixtures/jinja-string02.xml b/tests/yamlparser/fixtures/jinja-string02.xml new file mode 100644 index 000000000..c61fef927 --- /dev/null +++ b/tests/yamlparser/fixtures/jinja-string02.xml @@ -0,0 +1,19 @@ + + + + <!-- Managed by Jenkins Job Builder --> + false + false + false + false + true + + + + + 123 + + + + + diff --git a/tests/yamlparser/fixtures/jinja-string02.yaml b/tests/yamlparser/fixtures/jinja-string02.yaml new file mode 100644 index 000000000..e487ac8be --- /dev/null +++ b/tests/yamlparser/fixtures/jinja-string02.yaml @@ -0,0 +1,4 @@ +- job: + name: test-job + builders: + - shell: !j2: "{% for x in [1, 2, 3] %}{{ x }}{% endfor %}" diff --git a/tests/yamlparser/fixtures/jinja03.xml b/tests/yamlparser/fixtures/jinja03.xml new file mode 100644 index 000000000..b2ca95fd6 --- /dev/null +++ b/tests/yamlparser/fixtures/jinja03.xml @@ -0,0 +1,22 @@ + + + + <!-- Managed by Jenkins Job Builder --> + false + false + false + false + true + + + + + +1 +2 +3 + + + + + diff --git a/tests/yamlparser/fixtures/jinja03.yaml b/tests/yamlparser/fixtures/jinja03.yaml new file mode 100644 index 000000000..6392074fb --- /dev/null +++ b/tests/yamlparser/fixtures/jinja03.yaml @@ -0,0 +1,5 @@ +- job: + name: test-job + builders: + - shell: + !include-jinja2: jinja03.yaml.inc diff --git a/tests/yamlparser/fixtures/jinja03.yaml.inc b/tests/yamlparser/fixtures/jinja03.yaml.inc new file mode 100644 index 000000000..ff2096f50 --- /dev/null +++ b/tests/yamlparser/fixtures/jinja03.yaml.inc @@ -0,0 +1,3 @@ +{% for x in [1, 2, 3] %} +{{ x }} +{%- endfor %}