Break this out into a reusable function and document regex shortcomings.
This commit is contained in:
parent
49bd8b0b35
commit
38abd5e20e
2 changed files with 36 additions and 21 deletions
|
@ -23,6 +23,7 @@ from ansible.inventory.group import Group
|
|||
from ansible.inventory.expand_hosts import detect_range
|
||||
from ansible.inventory.expand_hosts import expand_hostname_range
|
||||
from ansible import errors
|
||||
import ansible.utils as utils
|
||||
import shlex
|
||||
import re
|
||||
import ast
|
||||
|
@ -68,27 +69,7 @@ class InventoryParser(object):
|
|||
|
||||
# Split off any comments that are not contained in a variable.
|
||||
if "#" in line:
|
||||
split_line = line.split("#")
|
||||
instances = len(split_line) - 1
|
||||
if instances > 0:
|
||||
marker = 0
|
||||
while marker < instances:
|
||||
if ("=\"" in split_line[marker] and "\"" in split_line[marker + 1]) or (
|
||||
"='" in split_line[marker] and "'" in split_line[marker + 1]):
|
||||
marker += 1
|
||||
else:
|
||||
if marker == 0:
|
||||
line = split_line[marker]
|
||||
else:
|
||||
# We have multiple fragments that we need to combine back together.
|
||||
# rekram is us reversing that work we did with marker.
|
||||
rekram = 0
|
||||
new_line = split_line[rekram]
|
||||
while marker > rekram:
|
||||
rekram += 1
|
||||
new_line = new_line + "#" + split_line[rekram]
|
||||
line = new_line
|
||||
break
|
||||
line = utils.split_unquoted_hash(line)
|
||||
|
||||
# Clean up the end of the line.
|
||||
line = line.strip()
|
||||
|
|
|
@ -1071,3 +1071,37 @@ def random_password(length=20, chars=C.DEFAULT_PASSWORD_CHARS):
|
|||
password.append(new_char)
|
||||
|
||||
return ''.join(password)
|
||||
|
||||
|
||||
def split_unquoted_hash(line):
|
||||
'''
|
||||
Carve off comments from a line which are not contained in quotes and a part of an assignment.
|
||||
'''
|
||||
|
||||
# We would really like to have this using a regex to make it less code. For instance:
|
||||
# line = re.split('(?<!=["|\'].*)#(?!.*?["|\']).*', line)[0]
|
||||
# this has the problem that it comes back with a "sre_constants.error: look-behind requires fixed-width pattern"
|
||||
|
||||
if "#" in line:
|
||||
split_line = line.split("#")
|
||||
instances = len(split_line) - 1
|
||||
if instances > 0:
|
||||
marker = 0
|
||||
while marker < instances:
|
||||
if ("=\"" in split_line[marker] and "\"" in split_line[marker + 1]) or (
|
||||
"='" in split_line[marker] and "'" in split_line[marker + 1]):
|
||||
marker += 1
|
||||
else:
|
||||
if marker == 0:
|
||||
line = split_line[marker]
|
||||
else:
|
||||
# We have multiple fragments that we need to combine back together.
|
||||
# rekram is us reversing that work we did with marker.
|
||||
rekram = 0
|
||||
new_line = split_line[rekram]
|
||||
while marker > rekram:
|
||||
rekram += 1
|
||||
new_line = new_line + "#" + split_line[rekram]
|
||||
line = new_line
|
||||
break
|
||||
return line
|
Loading…
Reference in a new issue