diff --git a/lib/ansible/utils/template.py b/lib/ansible/utils/template.py index cc1dc7fdeba..4f1e56c7d3b 100644 --- a/lib/ansible/utils/template.py +++ b/lib/ansible/utils/template.py @@ -322,7 +322,7 @@ def template_from_string(basedir, data, vars, fail_on_undefined=False): def my_finalize(thing): return thing if thing is not None else '' - environment = jinja2.Environment(trim_blocks=True, undefined=StrictUndefined, extensions=_get_extensions(), finalize=my_finalize) + environment = jinja2.Environment(trim_blocks=True, keep_trailing_newline=True, undefined=StrictUndefined, extensions=_get_extensions(), finalize=my_finalize) environment.filters.update(_get_filters()) environment.template_class = J2Template diff --git a/test/integration/roles/test_template/tasks/main.yml b/test/integration/roles/test_template/tasks/main.yml index 4784dc6ac82..8dcb0b47cf1 100644 --- a/test/integration/roles/test_template/tasks/main.yml +++ b/test/integration/roles/test_template/tasks/main.yml @@ -63,4 +63,10 @@ assert: that: - "file_result.changed != True" - + +# VERIFY STRING TEMPLATE PRESERVES NEWLINE + +- name: ensure template strings preserve newline + assert: + that: + - "newline_no_template_string == newline_template_string" diff --git a/test/integration/roles/test_template/vars/main.yml b/test/integration/roles/test_template/vars/main.yml index 1e8f64ccf44..88503a22cab 100644 --- a/test/integration/roles/test_template/vars/main.yml +++ b/test/integration/roles/test_template/vars/main.yml @@ -1 +1,3 @@ templated_var: templated_var_loaded +newline_template_string: "Hello {{ 'World' }}\n" +newline_no_template_string: "Hello World\n"