mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-06-28 03:00:23 -07:00
Made groups.groupname and group_names variables accessible in playbooks.
This commit is contained in:
parent
0709c48f64
commit
20fc6a29d3
2 changed files with 16 additions and 6 deletions
|
@ -35,7 +35,7 @@ class Inventory(object):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__slots__ = [ 'host_list', 'groups', '_restriction', '_also_restriction', '_subset', '_is_script',
|
__slots__ = [ 'host_list', 'groups', '_restriction', '_also_restriction', '_subset', '_is_script',
|
||||||
'parser', '_vars_per_host', '_vars_per_group', '_hosts_cache' ]
|
'parser', '_vars_per_host', '_vars_per_group', '_hosts_cache', '_groups_list' ]
|
||||||
|
|
||||||
def __init__(self, host_list=C.DEFAULT_HOST_LIST):
|
def __init__(self, host_list=C.DEFAULT_HOST_LIST):
|
||||||
|
|
||||||
|
@ -49,6 +49,7 @@ class Inventory(object):
|
||||||
self._vars_per_host = {}
|
self._vars_per_host = {}
|
||||||
self._vars_per_group = {}
|
self._vars_per_group = {}
|
||||||
self._hosts_cache = {}
|
self._hosts_cache = {}
|
||||||
|
self._groups_list = {}
|
||||||
|
|
||||||
# the inventory object holds a list of groups
|
# the inventory object holds a list of groups
|
||||||
self.groups = []
|
self.groups = []
|
||||||
|
@ -213,6 +214,17 @@ class Inventory(object):
|
||||||
continue
|
continue
|
||||||
return results
|
return results
|
||||||
|
|
||||||
|
def groups_list(self):
|
||||||
|
if not self._groups_list:
|
||||||
|
groups = {}
|
||||||
|
for g in self.groups:
|
||||||
|
groups[g.name] = [h.name for h in g.get_hosts()]
|
||||||
|
ancestors = g.get_ancestors()
|
||||||
|
for a in ancestors:
|
||||||
|
groups[a.name] = [h.name for h in a.get_hosts()]
|
||||||
|
self._groups_list = groups
|
||||||
|
return self._groups_list
|
||||||
|
|
||||||
def get_groups(self):
|
def get_groups(self):
|
||||||
return self.groups
|
return self.groups
|
||||||
|
|
||||||
|
|
|
@ -250,17 +250,15 @@ class Runner(object):
|
||||||
inject.update(self.module_vars)
|
inject.update(self.module_vars)
|
||||||
inject.update(self.setup_cache[host])
|
inject.update(self.setup_cache[host])
|
||||||
inject['hostvars'] = self.setup_cache
|
inject['hostvars'] = self.setup_cache
|
||||||
|
inject['group_names'] = host_variables.get('group_names', [])
|
||||||
|
inject['groups'] = self.inventory.groups_list()
|
||||||
|
|
||||||
# allow with_items to work in playbooks...
|
# allow with_items to work in playbooks...
|
||||||
# apt and yum are converted into a single call, others run in a loop
|
# apt and yum are converted into a single call, others run in a loop
|
||||||
|
|
||||||
items = self.module_vars.get('items', [])
|
items = self.module_vars.get('items', [])
|
||||||
if isinstance(items, basestring) and items.startswith("$"):
|
if isinstance(items, basestring) and items.startswith("$"):
|
||||||
items = items.replace("$","")
|
items = utils.varLookup(items, inject)
|
||||||
if items in inject:
|
|
||||||
items = inject[items]
|
|
||||||
else:
|
|
||||||
raise errors.AnsibleError("unbound variable in with_items: %s" % items)
|
|
||||||
if type(items) != list:
|
if type(items) != list:
|
||||||
raise errors.AnsibleError("with_items only takes a list: %s" % items)
|
raise errors.AnsibleError("with_items only takes a list: %s" % items)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue