|
|
@ -38,7 +38,7 @@ class Inventory(object):
|
|
|
|
|
|
|
|
|
|
|
|
__slots__ = [ 'host_list', 'groups', '_restriction', '_also_restriction', '_subset',
|
|
|
|
__slots__ = [ 'host_list', 'groups', '_restriction', '_also_restriction', '_subset',
|
|
|
|
'parser', '_vars_per_host', '_vars_per_group', '_hosts_cache', '_groups_list',
|
|
|
|
'parser', '_vars_per_host', '_vars_per_group', '_hosts_cache', '_groups_list',
|
|
|
|
'_pattern_hosts', '_vars_plugins', '_playbook_basedir']
|
|
|
|
'_pattern_cache', '_vars_plugins', '_playbook_basedir']
|
|
|
|
|
|
|
|
|
|
|
|
def __init__(self, host_list=C.DEFAULT_HOST_LIST):
|
|
|
|
def __init__(self, host_list=C.DEFAULT_HOST_LIST):
|
|
|
|
|
|
|
|
|
|
|
@ -53,7 +53,7 @@ class Inventory(object):
|
|
|
|
self._vars_per_group = {}
|
|
|
|
self._vars_per_group = {}
|
|
|
|
self._hosts_cache = {}
|
|
|
|
self._hosts_cache = {}
|
|
|
|
self._groups_list = {}
|
|
|
|
self._groups_list = {}
|
|
|
|
self._pattern_hosts = {}
|
|
|
|
self._pattern_cache = {}
|
|
|
|
|
|
|
|
|
|
|
|
# to be set by calling set_playbook_basedir by ansible-playbook
|
|
|
|
# to be set by calling set_playbook_basedir by ansible-playbook
|
|
|
|
self._playbook_basedir = None
|
|
|
|
self._playbook_basedir = None
|
|
|
@ -195,9 +195,14 @@ class Inventory(object):
|
|
|
|
take into account negative matches.
|
|
|
|
take into account negative matches.
|
|
|
|
"""
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if pattern in self._pattern_cache:
|
|
|
|
|
|
|
|
return self._pattern_cache[pattern]
|
|
|
|
|
|
|
|
|
|
|
|
(name, enumeration_details) = self._enumeration_info(pattern)
|
|
|
|
(name, enumeration_details) = self._enumeration_info(pattern)
|
|
|
|
hpat = self._hosts_in_unenumerated_pattern(name)
|
|
|
|
hpat = self._hosts_in_unenumerated_pattern(name)
|
|
|
|
return self._apply_ranges(pattern, hpat)
|
|
|
|
result = self._apply_ranges(pattern, hpat)
|
|
|
|
|
|
|
|
self._pattern_cache[pattern] = result
|
|
|
|
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
|
|
|
def _enumeration_info(self, pattern):
|
|
|
|
def _enumeration_info(self, pattern):
|
|
|
|
"""
|
|
|
|
"""
|
|
|
@ -255,7 +260,6 @@ class Inventory(object):
|
|
|
|
# ignore any negative checks here, this is handled elsewhere
|
|
|
|
# ignore any negative checks here, this is handled elsewhere
|
|
|
|
pattern = pattern.replace("!","").replace("&", "")
|
|
|
|
pattern = pattern.replace("!","").replace("&", "")
|
|
|
|
|
|
|
|
|
|
|
|
if pattern not in self._pattern_hosts:
|
|
|
|
|
|
|
|
results = []
|
|
|
|
results = []
|
|
|
|
groups = self.get_groups()
|
|
|
|
groups = self.get_groups()
|
|
|
|
for group in groups:
|
|
|
|
for group in groups:
|
|
|
@ -263,12 +267,11 @@ class Inventory(object):
|
|
|
|
if pattern == 'all' or self._match(group.name, pattern) or self._match(host.name, pattern):
|
|
|
|
if pattern == 'all' or self._match(group.name, pattern) or self._match(host.name, pattern):
|
|
|
|
if host not in results:
|
|
|
|
if host not in results:
|
|
|
|
results.append(host)
|
|
|
|
results.append(host)
|
|
|
|
self._pattern_hosts[pattern] = results
|
|
|
|
return results
|
|
|
|
return self._pattern_hosts[pattern]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def clear_pattern_cache(self):
|
|
|
|
def clear_pattern_cache(self):
|
|
|
|
''' called exclusively by the add_host plugin to allow patterns to be recalculated '''
|
|
|
|
''' called exclusively by the add_host plugin to allow patterns to be recalculated '''
|
|
|
|
self._pattern_hosts = {}
|
|
|
|
self._pattern_cache = {}
|
|
|
|
|
|
|
|
|
|
|
|
def groups_for_host(self, host):
|
|
|
|
def groups_for_host(self, host):
|
|
|
|
results = []
|
|
|
|
results = []
|
|
|
|