1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00

use composed vars in constructed groups (#53152)

* changelog

* combine provided variables and host vars inside of constructing groups to take into account composed variables

let composed variables "win"

* fix whitespace

* Allow user to control hash behavior
This commit is contained in:
Sloane Hertel 2019-03-11 11:43:31 -05:00 committed by Brian Coca
parent 32c337ee39
commit 4172d68dc3
2 changed files with 5 additions and 0 deletions

View file

@ -0,0 +1,2 @@
bugfixes:
- inventory plugins - Fix creating groups from composed variables by getting the latest host variables

View file

@ -34,6 +34,7 @@ from ansible.module_utils.parsing.convert_bool import boolean
from ansible.module_utils.six import string_types from ansible.module_utils.six import string_types
from ansible.template import Templar from ansible.template import Templar
from ansible.utils.display import Display from ansible.utils.display import Display
from ansible.utils.vars import combine_vars
display = Display() display = Display()
@ -366,6 +367,7 @@ class Constructable(object):
''' helper to create complex groups for plugins based on jinja2 conditionals, hosts that meet the conditional are added to group''' ''' helper to create complex groups for plugins based on jinja2 conditionals, hosts that meet the conditional are added to group'''
# process each 'group entry' # process each 'group entry'
if groups and isinstance(groups, dict): if groups and isinstance(groups, dict):
variables = combine_vars(variables, self.inventory.get_host(host).get_vars())
self.templar.set_available_variables(variables) self.templar.set_available_variables(variables)
for group_name in groups: for group_name in groups:
conditional = "{%% if %s %%} True {%% else %%} False {%% endif %%}" % groups[group_name] conditional = "{%% if %s %%} True {%% else %%} False {%% endif %%}" % groups[group_name]
@ -389,6 +391,7 @@ class Constructable(object):
for keyed in keys: for keyed in keys:
if keyed and isinstance(keyed, dict): if keyed and isinstance(keyed, dict):
variables = combine_vars(variables, self.inventory.get_host(host).get_vars())
try: try:
key = self._compose(keyed.get('key'), variables) key = self._compose(keyed.get('key'), variables)
except Exception as e: except Exception as e: