Allow escaped comments in inventory files.

pull/5989/head
Michael DeHaan 10 years ago
parent 4e8ed92130
commit 94a7fb60fe

@ -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
from ansible import utils
import shlex
import re
import ast
@ -65,7 +66,7 @@ class InventoryParser(object):
active_group_name = 'ungrouped'
for line in self.lines:
line = line.split("#")[0].strip()
line = utils.before_comment(line).strip()
if line.startswith("[") and line.endswith("]"):
active_group_name = line.replace("[","").replace("]","")
if line.find(":vars") != -1 or line.find(":children") != -1:

@ -1071,3 +1071,12 @@ def random_password(length=20, chars=C.DEFAULT_PASSWORD_CHARS):
password.append(new_char)
return ''.join(password)
def before_comment(msg):
''' what's the part of a string before a comment? '''
msg = msg.replace("\#","**NOT_A_COMMENT**")
msg = msg.split("#")[0]
msg = msg.replace("**NOT_A_COMMENT**","#")
return msg

@ -16,6 +16,29 @@ sys.setdefaultencoding("utf8")
class TestUtils(unittest.TestCase):
def test_before_comment(self):
''' see if we can detect the part of a string before a comment. Used by INI parser in inventory '''
input = "before # comment"
expected = "before "
actual = ansible.utils.before_comment(input)
assert expected == actual
input = "before \# not a comment"
expected = "before # not a comment"
actual = ansible.utils.before_comment(input)
assert expected == actual
input = ""
expected = ""
actual = ansible.utils.before_comment(input)
assert expected == actual
input = "#"
expected = ""
actual = ansible.utils.before_comment(input)
assert expected == actual
#####################################
### check_conditional tests

Loading…
Cancel
Save