diff --git a/library/files/lineinfile b/library/files/lineinfile index 73c9e88cb8c..bdc7b51ed90 100644 --- a/library/files/lineinfile +++ b/library/files/lineinfile @@ -350,9 +350,8 @@ def main(): if ins_bef is None and ins_aft is None: ins_aft = 'EOF' - # Replace the newline character with an actual newline. Don't replace - # escaped \\n, hence sub and not str.replace. - line = re.sub(r'\n', os.linesep, params['line']) + # Replace the newline character with an actual newline. + line = params['line'].decode('string_escape') present(module, dest, params['regexp'], line, ins_aft, ins_bef, create, backup, backrefs) diff --git a/test/integration/roles/test_lineinfile/tasks/main.yml b/test/integration/roles/test_lineinfile/tasks/main.yml index f59979473b9..b8974b7edca 100644 --- a/test/integration/roles/test_lineinfile/tasks/main.yml +++ b/test/integration/roles/test_lineinfile/tasks/main.yml @@ -209,3 +209,21 @@ that: - "result.stat.md5 == 'fef1d487711facfd7aa2c87d788c19d9'" + +- name: insert a multiple lines at the end of the file + lineinfile: dest={{output_dir}}/test.txt state=present line="This is a line\nwith \\\n character" insertafter="EOF" + register: result + +- name: assert that the multiple lines was inserted + assert: + that: + - "result.changed == true" + - "result.msg == 'line added'" + +- stat: path={{output_dir}}/test.txt + register: result + +- name: assert test md5 matches after insert the multiple lines + assert: + that: + - "result.stat.md5 == 'c2510d5bc8fdef8e752b8f8e74c784c2'"