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
pull/53643/head
Sloane Hertel 6 years ago committed by Brian Coca
parent 32c337ee39
commit 4172d68dc3

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

@ -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:

Loading…
Cancel
Save