diff --git a/lib/ansible/playbook/play_context.py b/lib/ansible/playbook/play_context.py index d8c1d4cfb9..8edaa12a03 100644 --- a/lib/ansible/playbook/play_context.py +++ b/lib/ansible/playbook/play_context.py @@ -316,6 +316,13 @@ class PlayContext(Base): # the host name in the delegated variable dictionary here delegated_host_name = templar.template(task.delegate_to) delegated_vars = variables.get('ansible_delegated_vars', dict()).get(delegated_host_name, dict()) + + delegated_transport = C.DEFAULT_TRANSPORT + for transport_var in MAGIC_VARIABLE_MAPPING.get('connection'): + if transport_var in delegated_vars: + delegated_transport = delegated_vars[transport_var] + break + # make sure this delegated_to host has something set for its remote # address, otherwise we default to connecting to it by name. This # may happen when users put an IP entry into their inventory, or if @@ -326,6 +333,15 @@ class PlayContext(Base): else: display.debug("no remote address found for delegated host %s\nusing its name, so success depends on DNS resolution" % delegated_host_name) delegated_vars['ansible_host'] = delegated_host_name + + for port_var in MAGIC_VARIABLE_MAPPING.get('port'): + if port_var in delegated_vars: + break + else: + if delegated_transport == 'winrm': + delegated_vars['ansible_port'] = 5986 + else: + delegated_vars['ansible_port'] = C.DEFAULT_REMOTE_PORT else: delegated_vars = dict() diff --git a/lib/ansible/vars/__init__.py b/lib/ansible/vars/__init__.py index 34ed3628d8..2c9d8aca33 100644 --- a/lib/ansible/vars/__init__.py +++ b/lib/ansible/vars/__init__.py @@ -444,8 +444,15 @@ class VariableManager: continue # a dictionary of variables to use if we have to create a new host below + # we set the default port based on the default transport here, to make sure + # we use the proper default for windows + new_port = C.DEFAULT_REMOTE_PORT + if C.DEFAULT_TRANSPORT == 'winrm': + new_port = 5986 + new_delegated_host_vars = dict( ansible_host=delegated_host_name, + ansible_port=new_port, ansible_user=C.DEFAULT_REMOTE_USER, ansible_connection=C.DEFAULT_TRANSPORT, )