diff options
author | Sam Doran <sdoran@redhat.com> | 2020-05-27 22:54:38 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-27 22:54:38 +0200 |
commit | d7618712fd13804de07dacf06c64e7ac34c395fc (patch) | |
tree | 96d7fb2ae3b7d2f02dc2ccc771018f46e3164d9a | |
parent | Update default-test-container to version 1.14. (diff) | |
download | ansible-d7618712fd13804de07dacf06c64e7ac34c395fc.tar.xz ansible-d7618712fd13804de07dacf06c64e7ac34c395fc.zip |
blockinfile - fix line end regression (#69734)
PR #66461 introduced a regression that resulted in an in correct block in the file
if the block to be inserted did not end with a line separator. Fix this bug and add
tests to cover this scenario.
-rw-r--r-- | changelogs/fragments/blockinfile-line-ending-fix.yaml | 4 | ||||
-rw-r--r-- | lib/ansible/modules/blockinfile.py | 2 | ||||
-rw-r--r-- | test/integration/targets/blockinfile/tasks/main.yml | 32 |
3 files changed, 38 insertions, 0 deletions
diff --git a/changelogs/fragments/blockinfile-line-ending-fix.yaml b/changelogs/fragments/blockinfile-line-ending-fix.yaml new file mode 100644 index 0000000000..57c680cf7e --- /dev/null +++ b/changelogs/fragments/blockinfile-line-ending-fix.yaml @@ -0,0 +1,4 @@ +bugfixes: + - > + blockinfile - fix regression that results in incorrect block in file when the + block to be inserted does not end in a line separator (https://github.com/ansible/ansible/pull/69734) diff --git a/lib/ansible/modules/blockinfile.py b/lib/ansible/modules/blockinfile.py index f11d7f8eeb..f5b422c6bb 100644 --- a/lib/ansible/modules/blockinfile.py +++ b/lib/ansible/modules/blockinfile.py @@ -272,6 +272,8 @@ def main(): # Escape sequences like '\n' need to be handled in Ansible 1.x if module.ansible_version.startswith('1.'): block = re.sub('', block, '') + if not block.endswith(b(os.linesep)): + block += b(os.linesep) blocklines = [marker0] + block.splitlines(True) + [marker1] else: blocklines = [] diff --git a/test/integration/targets/blockinfile/tasks/main.yml b/test/integration/targets/blockinfile/tasks/main.yml index 5accf5b587..ffcfd18d3e 100644 --- a/test/integration/targets/blockinfile/tasks/main.yml +++ b/test/integration/targets/blockinfile/tasks/main.yml @@ -137,3 +137,35 @@ - 'blockinfile_test2 is changed' - 'blockinfile_test2.msg == "Block inserted"' - 'blockinfile_test2_grep.stdout == "6"' + + +- name: Add block without trailing line separator + blockinfile: + path: "{{ output_dir_test }}/chomped_block_test.txt" + create: yes + content: |- + one + two + three + register: chomptest1 + +- name: Add block without trailing line separator again + blockinfile: + path: "{{ output_dir_test }}/chomped_block_test.txt" + content: |- + one + two + three + register: chomptest2 + +- name: Check output file + stat: + path: "{{ output_dir_test }}/chomped_block_test.txt" + register: chomptest_file + +- name: Ensure chomptest results are correct + assert: + that: + - chomptest1 is changed + - chomptest2 is not changed + - chomptest_file.stat.checksum == '50d49f528a5f7147c7029ed6220c326b1ee2c4ae' |