2.8: Clear 'connection related' plugin vars for next loop iteration (#59024) v2 (#59510)

* Clear 'connection related' plugin vars for next loop iteration (#59024)

Fixes #58876

(cherry picked from commit a752e2a467)

* Preserve original variables when using a loop (#59426)

Fixes #59414

(cherry picked from commit 1010363c0b)
This commit is contained in:
Martin Krizek 2019-07-29 23:48:31 +02:00 committed by Toshio Kuratomi
parent a06b3a5174
commit ed027203c6
3 changed files with 31 additions and 0 deletions

View file

@ -0,0 +1,2 @@
bugfixes:
- Do not re-use remote_user from previous loop iteration (https://github.com/ansible/ansible/issues/58876)

View file

@ -410,6 +410,20 @@ class TaskExecutor:
results.append(res)
del task_vars[loop_var]
# clear 'connection related' plugin variables for next iteration
if self._connection:
clear_plugins = {
'connection': self._connection._load_name,
'shell': self._connection._shell._load_name
}
if self._connection.become:
clear_plugins['become'] = self._connection.become._load_name
for plugin_type, plugin_name in iteritems(clear_plugins):
for var in C.config.get_plugin_vars(plugin_type, plugin_name):
if var in task_vars and var not in self._job_vars:
del task_vars[var]
self._task.no_log = no_log
return results

View file

@ -344,3 +344,18 @@
loop_var: "{{ loop_var_name }}"
vars:
loop_var_name: templated_loop_var_name
# https://github.com/ansible/ansible/issues/59414
- name: Test preserving original connection related vars
debug:
var: ansible_remote_tmp
vars:
ansible_remote_tmp: /tmp/test1
with_items:
- 1
- 2
register: loop_out
- assert:
that:
- loop_out['results'][1]['ansible_remote_tmp'] == '/tmp/test1'