diff options
author | James Cammarata <jimi@sngx.net> | 2014-08-14 12:13:40 -0500 |
---|---|---|
committer | James Cammarata <jimi@sngx.net> | 2014-08-14 15:04:31 -0500 |
commit | 9f9e9759907ab4932dc975f146c6c1fb9c16895a (patch) | |
tree | ad649f3810cd5063cf4868a9b8f4fc4093f6a343 | |
parent | d9fb94378c2845877fcac4392397a6606b44b832 (diff) | |
download | ansible-9f9e9759907ab4932dc975f146c6c1fb9c16895a.tar.gz |
Fix host pattern matching and enhance error detection
Fixes #8614
-rw-r--r-- | lib/ansible/inventory/__init__.py | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/lib/ansible/inventory/__init__.py b/lib/ansible/inventory/__init__.py index 49724c3cb7..5e9226b425 100644 --- a/lib/ansible/inventory/__init__.py +++ b/lib/ansible/inventory/__init__.py @@ -150,17 +150,24 @@ class Inventory(object): def _match(self, str, pattern_str): - if pattern_str.startswith('~'): - return re.search(pattern_str[1:], str) - else: - return fnmatch.fnmatch(str, pattern_str) + try: + if pattern_str.startswith('~'): + return re.search(pattern_str[1:], str) + else: + return fnmatch.fnmatch(str, pattern_str) + except Exception, e: + raise errors.AnsibleError('invalid host pattern: %s' % pattern_str) def _match_list(self, items, item_attr, pattern_str): results = [] - if not pattern_str.startswith('~'): - pattern = re.compile(fnmatch.translate(pattern_str)) - else: - pattern = re.compile(pattern_str[1:]) + try: + if not pattern_str.startswith('~'): + pattern = re.compile('^' + fnmatch.translate(pattern_str)) + else: + pattern = re.compile(pattern_str[1:]) + except Exception, e: + raise errors.AnsibleError('invalid host pattern: %s' % pattern_str) + for item in items: if pattern.search(getattr(item, item_attr)): results.append(item) |