summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam Doran <sdoran@redhat.com>2020-05-27 22:54:38 +0200
committerGitHub <noreply@github.com>2020-05-27 22:54:38 +0200
commitd7618712fd13804de07dacf06c64e7ac34c395fc (patch)
tree96d7fb2ae3b7d2f02dc2ccc771018f46e3164d9a
parentUpdate default-test-container to version 1.14. (diff)
downloadansible-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.yaml4
-rw-r--r--lib/ansible/modules/blockinfile.py2
-rw-r--r--test/integration/targets/blockinfile/tasks/main.yml32
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'