diff --git a/lib/ansible/inventory/__init__.py b/lib/ansible/inventory/__init__.py index 830d74c01ef..64bae5d815e 100644 --- a/lib/ansible/inventory/__init__.py +++ b/lib/ansible/inventory/__init__.py @@ -235,6 +235,10 @@ class Inventory(object): a tuple of (start, stop) or None """ + # Do not parse regexes for enumeration info + if pattern.startswith('~'): + return (pattern, None) + # The regex used to match on the range, which can be [x] or [x-y]. pattern_re = re.compile("^(.*)\[([-]?[0-9]+)(?:(?:-)([0-9]+))?\](.*)$") m = pattern_re.match(pattern) diff --git a/test/units/TestInventory.py b/test/units/TestInventory.py index e8f85adbd4a..65da05dba3c 100644 --- a/test/units/TestInventory.py +++ b/test/units/TestInventory.py @@ -274,6 +274,14 @@ class TestInventory(unittest.TestCase): print "EXPECTED=%s" % sorted(expected_hosts) assert sorted(hosts) == sorted(expected_hosts) + def test_regex_grouping(self): + inventory = self.simple_inventory() + hosts = inventory.list_hosts("~(cer[a-z]|berc)(erus00[13])") + expected_hosts = ['cerberus001', 'cerberus003'] + print "HOSTS=%s" % sorted(hosts) + print "EXPECTED=%s" % sorted(expected_hosts) + assert sorted(hosts) == sorted(expected_hosts) + def test_complex_enumeration(self):