mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Use the original host rather than the serialized one when processing results
Fixes #13526 Fixes #13564 Fixes #13566
This commit is contained in:
parent
d203438a2c
commit
fcc9258b74
1 changed files with 18 additions and 7 deletions
|
@ -185,10 +185,20 @@ class StrategyBase:
|
|||
result = self._final_q.get()
|
||||
display.debug("got result from result worker: %s" % ([text_type(x) for x in result],))
|
||||
|
||||
# helper method, used to find the original host from the one
|
||||
# returned in the result/message, which has been serialized and
|
||||
# thus had some information stripped from it to speed up the
|
||||
# serialization process
|
||||
def get_original_host(host):
|
||||
if host.name in self._inventory._hosts_cache:
|
||||
return self._inventory._hosts_cache[host.name]
|
||||
else:
|
||||
return self._inventory.get_host(host.name)
|
||||
|
||||
# all host status messages contain 2 entries: (msg, task_result)
|
||||
if result[0] in ('host_task_ok', 'host_task_failed', 'host_task_skipped', 'host_unreachable'):
|
||||
task_result = result[1]
|
||||
host = task_result._host
|
||||
host = get_original_host(task_result._host)
|
||||
task = task_result._task
|
||||
if result[0] == 'host_task_failed' or task_result.is_failed():
|
||||
if not task.ignore_errors:
|
||||
|
@ -244,7 +254,7 @@ class StrategyBase:
|
|||
self._add_host(new_host_info, iterator)
|
||||
|
||||
elif result[0] == 'add_group':
|
||||
host = result[1]
|
||||
host = get_original_host(result[1])
|
||||
result_item = result[2]
|
||||
self._add_group(host, result_item)
|
||||
|
||||
|
@ -252,19 +262,20 @@ class StrategyBase:
|
|||
task_result = result[1]
|
||||
handler_name = result[2]
|
||||
|
||||
original_task = iterator.get_original_task(task_result._host, task_result._task)
|
||||
original_host = get_original_host(task_result._host)
|
||||
original_task = iterator.get_original_task(original_host, task_result._task)
|
||||
if handler_name not in self._notified_handlers:
|
||||
self._notified_handlers[handler_name] = []
|
||||
|
||||
if task_result._host not in self._notified_handlers[handler_name]:
|
||||
self._notified_handlers[handler_name].append(task_result._host)
|
||||
if original_host not in self._notified_handlers[handler_name]:
|
||||
self._notified_handlers[handler_name].append(original_host)
|
||||
display.vv("NOTIFIED HANDLER %s" % (handler_name,))
|
||||
|
||||
elif result[0] == 'register_host_var':
|
||||
# essentially the same as 'set_host_var' below, however we
|
||||
# never follow the delegate_to value for registered vars and
|
||||
# the variable goes in the fact_cache
|
||||
host = result[1]
|
||||
host = get_original_host(result[1])
|
||||
task = result[2]
|
||||
var_value = wrap_var(result[3])
|
||||
var_name = task.register
|
||||
|
@ -278,7 +289,7 @@ class StrategyBase:
|
|||
self._variable_manager.set_nonpersistent_facts(target_host, {var_name: var_value})
|
||||
|
||||
elif result[0] in ('set_host_var', 'set_host_facts'):
|
||||
host = result[1]
|
||||
host = get_original_host(result[1])
|
||||
task = result[2]
|
||||
item = result[3]
|
||||
|
||||
|
|
Loading…
Reference in a new issue