Merge pull request #2334 from pieska/upstream
allow use of backrefs in lineinfile
This commit is contained in:
commit
8e1ad723fd
1 changed files with 9 additions and 6 deletions
15
lineinfile
15
lineinfile
|
@ -55,7 +55,7 @@ options:
|
||||||
required: false
|
required: false
|
||||||
description:
|
description:
|
||||||
- Required for C(state=present). The line to insert/replace into the
|
- Required for C(state=present). The line to insert/replace into the
|
||||||
file. Must match the value given to I(regexp).
|
file. May contain backreferences.
|
||||||
insertafter:
|
insertafter:
|
||||||
required: false
|
required: false
|
||||||
default: EOF
|
default: EOF
|
||||||
|
@ -105,6 +105,8 @@ EXAMPLES = """
|
||||||
lineinfile: dest=/etc/services regexp="^# port for http" insertbefore="^www.*80/tcp" line="# port for http by default"
|
lineinfile: dest=/etc/services regexp="^# port for http" insertbefore="^www.*80/tcp" line="# port for http by default"
|
||||||
|
|
||||||
lineinfile: \\\"dest=/etc/sudoers state=present regexp='^%wheel' line ='%wheel ALL=(ALL) NOPASSWD: ALL'\\\"
|
lineinfile: \\\"dest=/etc/sudoers state=present regexp='^%wheel' line ='%wheel ALL=(ALL) NOPASSWD: ALL'\\\"
|
||||||
|
|
||||||
|
lineinfile dest=/tmp/grub.conf state=present regexp='^(splashimage=.*)$' line="#\\1"
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
@ -139,8 +141,6 @@ def present(module, dest, regexp, line, insertafter, insertbefore, create, backu
|
||||||
msg = ""
|
msg = ""
|
||||||
|
|
||||||
mre = re.compile(regexp)
|
mre = re.compile(regexp)
|
||||||
if not mre.search(line):
|
|
||||||
module.fail_json(msg="usage error: line= doesn't match regexp (%s)" % regexp)
|
|
||||||
|
|
||||||
if insertafter is not None and insertafter not in ('BOF', 'EOF'):
|
if insertafter is not None and insertafter not in ('BOF', 'EOF'):
|
||||||
insre = re.compile(insertafter)
|
insre = re.compile(insertafter)
|
||||||
|
@ -152,9 +152,12 @@ def present(module, dest, regexp, line, insertafter, insertbefore, create, backu
|
||||||
# index[0] is the line num where regexp has been found
|
# index[0] is the line num where regexp has been found
|
||||||
# index[1] is the line num where insertafter/inserbefore has been found
|
# index[1] is the line num where insertafter/inserbefore has been found
|
||||||
index = [-1, -1]
|
index = [-1, -1]
|
||||||
|
m = None
|
||||||
for lineno in range(0, len(lines)):
|
for lineno in range(0, len(lines)):
|
||||||
if mre.search(lines[lineno]):
|
match_found = mre.search(lines[lineno])
|
||||||
|
if match_found:
|
||||||
index[0] = lineno
|
index[0] = lineno
|
||||||
|
m = match_found
|
||||||
elif insre is not None and insre.search(lines[lineno]):
|
elif insre is not None and insre.search(lines[lineno]):
|
||||||
if insertafter:
|
if insertafter:
|
||||||
# + 1 for the next line
|
# + 1 for the next line
|
||||||
|
@ -165,11 +168,11 @@ def present(module, dest, regexp, line, insertafter, insertbefore, create, backu
|
||||||
|
|
||||||
# Regexp matched a line in the file
|
# Regexp matched a line in the file
|
||||||
if index[0] != -1:
|
if index[0] != -1:
|
||||||
if lines[index[0]] == line + os.linesep:
|
if lines[index[0]] == m.expand(line) + os.linesep:
|
||||||
msg = ''
|
msg = ''
|
||||||
changed = False
|
changed = False
|
||||||
else:
|
else:
|
||||||
lines[index[0]] = line + os.linesep
|
lines[index[0]] = m.expand(line) + os.linesep
|
||||||
msg = 'line replaced'
|
msg = 'line replaced'
|
||||||
changed = True
|
changed = True
|
||||||
# Add it to the beginning of the file
|
# Add it to the beginning of the file
|
||||||
|
|
Loading…
Reference in a new issue