properly track delegated host in loops

ansible_host can be pulled from inventory and not match inventory_hostname,
this can "loose" vars to a new host named by ansible_host vs the delegated host
fixes #25770
This commit is contained in:
Brian Coca 2017-06-19 17:03:28 -04:00 committed by Brian Coca
parent b6ee9163e3
commit 9d8721dbde
3 changed files with 4 additions and 3 deletions

View file

@ -628,7 +628,7 @@ class TaskExecutor:
delegated_vars = variables.get('ansible_delegated_vars', dict()).get(self._task.delegate_to, dict()).copy()
if len(delegated_vars) > 0:
result["_ansible_delegated_vars"] = dict()
for k in ('ansible_host', ):
for k in ('ansible_delegated_host', 'ansible_host' ):
result["_ansible_delegated_vars"][k] = delegated_vars.get(k)
# and return

View file

@ -245,7 +245,7 @@ class StrategyBase:
return host_list
def get_delegated_hosts(self, result, task):
host_name = result.get('_ansible_delegated_vars', {}).get('ansible_host', None)
host_name = result.get('_ansible_delegated_vars', {}).get('ansible_delegated_host', None)
if host_name is not None:
actual_host = self._inventory.get_host(host_name)
if actual_host is None:

View file

@ -524,7 +524,8 @@ class VariableManager:
new_port = 5986
new_delegated_host_vars = dict(
ansible_host=delegated_host_name,
ansible_delegated_host=delegated_host_name,
ansible_host=delegated_host_name, # not redundant as other sources can change ansible_host
ansible_port=new_port,
ansible_user=C.DEFAULT_REMOTE_USER,
ansible_connection=C.DEFAULT_TRANSPORT,