Make sure we're using the original host when processing include results
Also fixes a bug where we were passing an incorrect number of parameters to _do_handler_run() when processing an include file in a handler task/block. Fixes #13560
This commit is contained in:
parent
857456ea5f
commit
15135f3c16
4 changed files with 29 additions and 8 deletions
|
@ -49,9 +49,15 @@ class IncludedFile:
|
|||
return "%s (%s): %s" % (self._filename, self._args, self._hosts)
|
||||
|
||||
@staticmethod
|
||||
def process_include_results(results, tqm, iterator, loader, variable_manager):
|
||||
def process_include_results(results, tqm, iterator, inventory, loader, variable_manager):
|
||||
included_files = []
|
||||
|
||||
def get_original_host(host):
|
||||
if host.name in inventory._hosts_cache:
|
||||
return inventory._hosts_cache[host.name]
|
||||
else:
|
||||
return inventory.get_host(host.name)
|
||||
|
||||
for res in results:
|
||||
|
||||
if res._task.action == 'include':
|
||||
|
@ -67,9 +73,10 @@ class IncludedFile:
|
|||
if 'skipped' in include_result and include_result['skipped'] or 'failed' in include_result:
|
||||
continue
|
||||
|
||||
original_task = iterator.get_original_task(res._host, res._task)
|
||||
original_host = get_original_host(res._host)
|
||||
original_task = iterator.get_original_task(original_host, res._task)
|
||||
|
||||
task_vars = variable_manager.get_vars(loader=loader, play=iterator._play, host=res._host, task=original_task)
|
||||
task_vars = variable_manager.get_vars(loader=loader, play=iterator._play, host=original_host, task=original_task)
|
||||
templar = Templar(loader=loader, variables=task_vars)
|
||||
|
||||
include_variables = include_result.get('include_variables', dict())
|
||||
|
@ -116,6 +123,6 @@ class IncludedFile:
|
|||
except ValueError:
|
||||
included_files.append(inc_file)
|
||||
|
||||
inc_file.add_host(res._host)
|
||||
inc_file.add_host(original_host)
|
||||
|
||||
return included_files
|
||||
|
|
|
@ -576,6 +576,7 @@ class StrategyBase:
|
|||
host_results,
|
||||
self._tqm,
|
||||
iterator=iterator,
|
||||
inventory=self._inventory,
|
||||
loader=self._loader,
|
||||
variable_manager=self._variable_manager
|
||||
)
|
||||
|
@ -594,6 +595,7 @@ class StrategyBase:
|
|||
for task in block.block:
|
||||
result = self._do_handler_run(
|
||||
handler=task,
|
||||
handler_name=None,
|
||||
iterator=iterator,
|
||||
play_context=play_context,
|
||||
notified_hosts=included_file._hosts[:],
|
||||
|
|
|
@ -139,8 +139,14 @@ class StrategyModule(StrategyBase):
|
|||
host_results.extend(results)
|
||||
|
||||
try:
|
||||
included_files = IncludedFile.process_include_results(host_results, self._tqm, iterator=iterator,
|
||||
loader=self._loader, variable_manager=self._variable_manager)
|
||||
included_files = IncludedFile.process_include_results(
|
||||
host_results,
|
||||
self._tqm,
|
||||
iterator=iterator,
|
||||
inventory=self._inventory,
|
||||
loader=self._loader,
|
||||
variable_manager=self._variable_manager
|
||||
)
|
||||
except AnsibleError as e:
|
||||
return False
|
||||
|
||||
|
|
|
@ -261,8 +261,14 @@ class StrategyModule(StrategyBase):
|
|||
break
|
||||
|
||||
try:
|
||||
included_files = IncludedFile.process_include_results(host_results, self._tqm,
|
||||
iterator=iterator, loader=self._loader, variable_manager=self._variable_manager)
|
||||
included_files = IncludedFile.process_include_results(
|
||||
host_results,
|
||||
self._tqm,
|
||||
iterator=iterator,
|
||||
inventory=self._inventory,
|
||||
loader=self._loader,
|
||||
variable_manager=self._variable_manager
|
||||
)
|
||||
except AnsibleError as e:
|
||||
return False
|
||||
|
||||
|
|
Loading…
Reference in a new issue