Minor cleanup when reassigning play context to reused connections

* Relocate the assignment of the host address to the remote_addr field
  in the play context, which was only done when the connection was created
  (it's now done after the post_validate() is called on the play context)
* Make the assignment of the play context to the connection an else, since
  it's not required if the connection is not reused
This commit is contained in:
James Cammarata 2016-01-18 13:36:40 -05:00
parent bc1bcc3419
commit c42484a029

View file

@ -316,6 +316,11 @@ class TaskExecutor:
# do the same kind of post validation step on it here before we use it. # do the same kind of post validation step on it here before we use it.
self._play_context.post_validate(templar=templar) self._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 self._play_context.remote_addr:
self._play_context.remote_addr = self._host.address
# We also add "magic" variables back into the variables dict to make sure # We also add "magic" variables back into the variables dict to make sure
# a certain subset of variables exist. # a certain subset of variables exist.
self._play_context.update_vars(variables) self._play_context.update_vars(variables)
@ -365,9 +370,10 @@ class TaskExecutor:
if not self._connection or not getattr(self._connection, 'connected', False): if not self._connection or not getattr(self._connection, 'connected', False):
self._connection = self._get_connection(variables=variables, templar=templar) self._connection = self._get_connection(variables=variables, templar=templar)
self._connection.set_host_overrides(host=self._host) self._connection.set_host_overrides(host=self._host)
#If connection is reused, its _play_context is no longer valid and needs to be replaced else:
#This fixes issues with tasks running sudo in a loop and having the success_key incorrect in the second iteration # if connection is reused, its _play_context is no longer valid and needs
self._connection._play_context = self._play_context # to be replaced with the one templated above, in case other data changed
self._connection._play_context = self._play_context
self._handler = self._get_action_handler(connection=self._connection, templar=templar) self._handler = self._get_action_handler(connection=self._connection, templar=templar)
@ -547,9 +553,6 @@ class TaskExecutor:
correct connection object from the list of connection plugins correct connection object from the list of connection plugins
''' '''
if not self._play_context.remote_addr:
self._play_context.remote_addr = self._host.address
if self._task.delegate_to is not None: if self._task.delegate_to is not None:
# since we're delegating, we don't want to use interpreter values # since we're delegating, we don't want to use interpreter values
# which would have been set for the original target host # which would have been set for the original target host