mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
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 detect_range
|
||||||
from ansible.inventory.expand_hosts import expand_hostname_range
|
from ansible.inventory.expand_hosts import expand_hostname_range
|
||||||
from ansible import errors
|
from ansible import errors
|
||||||
|
import ansible.utils as utils
|
||||||
import shlex
|
import shlex
|
||||||
import re
|
import re
|
||||||
import ast
|
import ast
|
||||||
|
@ -68,27 +69,7 @@ class InventoryParser(object):
|
||||||
|
|
||||||
# Split off any comments that are not contained in a variable.
|
# Split off any comments that are not contained in a variable.
|
||||||
if "#" in line:
|
if "#" in line:
|
||||||
split_line = line.split("#")
|
line = utils.split_unquoted_hash(line)
|
||||||
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
|
|
||||||
|
|
||||||
# Clean up the end of the line.
|
# Clean up the end of the line.
|
||||||
line = line.strip()
|
line = line.strip()
|
||||||
|
|
|
@ -1071,3 +1071,37 @@ def random_password(length=20, chars=C.DEFAULT_PASSWORD_CHARS):
|
||||||
password.append(new_char)
|
password.append(new_char)
|
||||||
|
|
||||||
return ''.join(password)
|
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