Fix quoting issues in lineinfile for individual single-quotes

Fixes #8806
This commit is contained in:
James Cammarata 2014-09-11 16:27:10 -05:00
parent 1c3039f079
commit dc9482d548
2 changed files with 25 additions and 2 deletions

View file

@ -369,14 +369,19 @@ def main():
# so we need to know if we should specifically unquote it. # so we need to know if we should specifically unquote it.
should_unquote = not is_quoted(line) should_unquote = not is_quoted(line)
# always add one layer of quotes
line = "'%s'" % line
# Replace escape sequences like '\n' while being sure # Replace escape sequences like '\n' while being sure
# not to replace octal escape sequences (\ooo) since they # not to replace octal escape sequences (\ooo) since they
# match the backref syntax. # match the backref syntax.
if backrefs: if backrefs:
line = re.sub(r'(\\[0-9]{1,3})', r'\\\1', line) line = re.sub(r'(\\[0-9]{1,3})', r'\\\1', line)
line = module.safe_eval(pipes.quote(line)) line = module.safe_eval(line)
# Now remove quotes around the string, if needed # Now remove quotes around the string, if needed after
# removing the layer we added above
line = unquote(line)
if should_unquote: if should_unquote:
line = unquote(line) line = unquote(line)

View file

@ -337,4 +337,22 @@
that: that:
- "result.stat.md5 == '29f349baf1b9c6703beeb346fe8dc669'" - "result.stat.md5 == '29f349baf1b9c6703beeb346fe8dc669'"
- name: insert a line into the quoted file with a single quote
lineinfile: dest={{output_dir}}/test_quoting.txt line="import g'"
register: result
- name: assert that the quoted file was changed
assert:
that:
- result.changed
- name: stat the quote test file
stat: path={{output_dir}}/test_quoting.txt
register: result
- name: assert test md5 matches after backref line was replaced
assert:
that:
- "result.stat.md5 == 'fbe9c4ba2490f70eb1974ce31ec4a39f'"
################################################################### ###################################################################