From 38abd5e20ebf9d399c29d9434bb6ddfc3566ad5d Mon Sep 17 00:00:00 2001 From: Richard C Isaacson Date: Wed, 5 Mar 2014 10:50:58 -0600 Subject: [PATCH] Break this out into a reusable function and document regex shortcomings. --- lib/ansible/inventory/ini.py | 23 ++--------------------- lib/ansible/utils/__init__.py | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 21 deletions(-) diff --git a/lib/ansible/inventory/ini.py b/lib/ansible/inventory/ini.py index b26fb5a20f..29929672bb 100644 --- a/lib/ansible/inventory/ini.py +++ b/lib/ansible/inventory/ini.py @@ -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() diff --git a/lib/ansible/utils/__init__.py b/lib/ansible/utils/__init__.py index 02148faff0..996b457cb1 100644 --- a/lib/ansible/utils/__init__.py +++ b/lib/ansible/utils/__init__.py @@ -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('(? 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 \ No newline at end of file