diff --git a/cloudinit/templater.py b/cloudinit/templater.py index 1e147d4ab64..d8af5096062 100644 --- a/cloudinit/templater.py +++ b/cloudinit/templater.py @@ -104,7 +104,10 @@ def jinja_render(content, params): add = "\n" if content.endswith("\n") else "" return ( JTemplate( - content, undefined=UndefinedJinjaVariable, trim_blocks=True + content, + undefined=UndefinedJinjaVariable, + trim_blocks=True, + extensions=["jinja2.ext.do"], ).render(**params) + add ) diff --git a/tests/unittests/test_templating.py b/tests/unittests/test_templating.py index c1fec27c434..3a0195bf292 100644 --- a/tests/unittests/test_templating.py +++ b/tests/unittests/test_templating.py @@ -184,5 +184,19 @@ def test_jinja_warns_on_missing_dep_and_uses_basic_renderer(self): self.logs.getvalue(), ) + def test_jinja_do_extension_render_to_string(self): + """Test jinja render_to_string using do extension.""" + expected_result = "[1, 2, 3]" + jinja_template = ( + "{% set r = [] %} {% set input = [1,2,3] %} " + "{% for i in input %} {% do r.append(i) %} {% endfor %} {{r}}" + ) + self.assertEqual( + templater.render_string( + self.add_header("jinja", jinja_template), {} + ).strip(), + expected_result, + ) + # vi: ts=4 expandtab diff --git a/tools/.github-cla-signers b/tools/.github-cla-signers index 0567a89dfc3..1aaae7f9a9f 100644 --- a/tools/.github-cla-signers +++ b/tools/.github-cla-signers @@ -79,6 +79,7 @@ steverweber t-8ch TheRealFalcon taoyama +thetoolsmith timothegenzmer tnt-dev tomponline