diff --git a/changelogs/fragments/46743-fix-native-jinja-newlines.yaml b/changelogs/fragments/46743-fix-native-jinja-newlines.yaml new file mode 100644 index 00000000000..350914c6797 --- /dev/null +++ b/changelogs/fragments/46743-fix-native-jinja-newlines.yaml @@ -0,0 +1,2 @@ +bugfixes: + - templar - Do not strip new lines in native jinja - https://github.com/ansible/ansible/issues/46743 diff --git a/lib/ansible/template/__init__.py b/lib/ansible/template/__init__.py index 03d19511bd6..adb9618690e 100644 --- a/lib/ansible/template/__init__.py +++ b/lib/ansible/template/__init__.py @@ -621,10 +621,7 @@ class Templar: # For preserving the number of input newlines in the output (used # later in this method) - if not USE_JINJA2_NATIVE: - data_newlines = _count_newlines_from_end(data) - else: - data_newlines = None + data_newlines = _count_newlines_from_end(data) if fail_on_undefined is None: fail_on_undefined = self._fail_on_undefined_errors @@ -690,7 +687,7 @@ class Templar: display.debug("failing because of a type error, template data is: %s" % to_native(data)) raise AnsibleError("Unexpected templating type error occurred on (%s): %s" % (to_native(data), to_native(te))) - if USE_JINJA2_NATIVE: + if USE_JINJA2_NATIVE and not isinstance(res, string_types): return res if preserve_trailing_newlines: diff --git a/test/integration/targets/jinja2_native_types/runtests.yml b/test/integration/targets/jinja2_native_types/runtests.yml index 2e665da4f3d..9c61e699477 100644 --- a/test/integration/targets/jinja2_native_types/runtests.yml +++ b/test/integration/targets/jinja2_native_types/runtests.yml @@ -46,4 +46,5 @@ - import_tasks: test_dunder.yml - import_tasks: test_types.yml - import_tasks: test_none.yml + - import_tasks: test_template.yml when: is_native diff --git a/test/integration/targets/jinja2_native_types/test_template.yml b/test/integration/targets/jinja2_native_types/test_template.yml new file mode 100644 index 00000000000..0896ac14356 --- /dev/null +++ b/test/integration/targets/jinja2_native_types/test_template.yml @@ -0,0 +1,27 @@ +- block: + - name: Template file with newlines + template: + src: test_template_newlines.j2 + dest: test_template_newlines.res + + - name: Dump template file + stat: + path: test_template_newlines.j2 + get_checksum: yes + register: template_stat + + - name: Dump result file + stat: + path: test_template_newlines.res + get_checksum: yes + register: result_stat + + - name: Check that number of newlines from original template are preserved + assert: + that: + - template_stat.stat.checksum == result_stat.stat.checksum + always: + - name: Clean up + file: + path: test_template_newlines.res + state: absent diff --git a/test/integration/targets/jinja2_native_types/test_template_newlines.j2 b/test/integration/targets/jinja2_native_types/test_template_newlines.j2 new file mode 100644 index 00000000000..ca887efa8c2 --- /dev/null +++ b/test/integration/targets/jinja2_native_types/test_template_newlines.j2 @@ -0,0 +1,4 @@ +First line. + + +