From 23fbe0ce8e942427ed602e90caa744f07f978d6c Mon Sep 17 00:00:00 2001 From: James Cassell Date: Mon, 18 Jun 2018 11:10:16 -0400 Subject: [PATCH] update play_context for reset_connection (#40866) steps taken from lib/ansible/executor/task_executor.py fixes: https://github.com/ansible/ansible/issues/27520 --- lib/ansible/plugins/strategy/__init__.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/lib/ansible/plugins/strategy/__init__.py b/lib/ansible/plugins/strategy/__init__.py index d115c88df65..f0c053cb94c 100644 --- a/lib/ansible/plugins/strategy/__init__.py +++ b/lib/ansible/plugins/strategy/__init__.py @@ -993,8 +993,30 @@ class StrategyBase: iterator._host_states[host.name].run_state = iterator.ITERATING_COMPLETE msg = "ending play" elif meta_action == 'reset_connection': + all_vars = self._variable_manager.get_vars(play=iterator._play, host=target_host, task=task) + templar = Templar(loader=self._loader, variables=all_vars) + + # apply the given task's information to the connection info, + # which may override some fields already set by the play or + # the options specified on the command line + play_context = play_context.set_task_and_variable_override(task=task, variables=all_vars, templar=templar) + + # fields set from the play/task may be based on variables, so we have to + # do the same kind of post validation step on it here before we use it. + play_context.post_validate(templar=templar) + + # now that the play context is finalized, if the remote_addr is not set + # default to using the host's address field as the remote address + if not play_context.remote_addr: + play_context.remote_addr = target_host.address + + # We also add "magic" variables back into the variables dict to make sure + # a certain subset of variables exist. + play_context.update_vars(all_vars) + if task.when: self._cond_not_supported_warn(meta_action) + if target_host in self._active_connections: connection = Connection(self._active_connections[target_host]) del self._active_connections[target_host]