Fixes #5939 Allow for delegate hosts that are not in inventory

This commit is contained in:
James Tanner 2014-02-21 15:54:09 -05:00
parent d29da4cba1
commit 4af1d6098b

View file

@ -303,7 +303,7 @@ class Runner(object):
def _compute_delegate(self, host, password, remote_inject): def _compute_delegate(self, host, password, remote_inject):
""" Build a dictionary of all attributes for the delegate host """ """ Build a dictionary of all attributes for the delegate host """
delegate = {} delegate = {}
# allow ansible_ssh_host to be templated # allow ansible_ssh_host to be templated
@ -324,13 +324,19 @@ class Runner(object):
this_host = delegate['host'] this_host = delegate['host']
# get the vars for the delegate by it's name # get the vars for the delegate by it's name
this_info = delegate['inject']['hostvars'][this_host] if this_host in delegate['inject']['hostvars']:
this_info = delegate['inject']['hostvars'][this_host]
else:
# make sure the inject is empty for non-inventory hosts
this_info = {}
# get the real ssh_address for the delegate # get the real ssh_address for the delegate
delegate['ssh_host'] = this_info.get('ansible_ssh_host', delegate['host']) delegate['ssh_host'] = this_info.get('ansible_ssh_host', delegate['host'])
delegate['port'] = this_info.get('ansible_ssh_port', port) delegate['port'] = this_info.get('ansible_ssh_port', port)
delegate['user'] = self._compute_delegate_user(this_host, delegate['inject']) delegate['user'] = self._compute_delegate_user(this_host, delegate['inject'])
delegate['pass'] = this_info.get('ansible_ssh_pass', password) delegate['pass'] = this_info.get('ansible_ssh_pass', password)
delegate['private_key_file'] = this_info.get('ansible_ssh_private_key_file', delegate['private_key_file'] = this_info.get('ansible_ssh_private_key_file',
self.private_key_file) self.private_key_file)
@ -355,9 +361,11 @@ class Runner(object):
actual_user = inject.get('ansible_ssh_user', self.remote_user) actual_user = inject.get('ansible_ssh_user', self.remote_user)
thisuser = None thisuser = None
if inject['hostvars'][host].get('ansible_ssh_user'): if host in inject['hostvars']:
# user for delegate host in inventory if inject['hostvars'][host].get('ansible_ssh_user'):
thisuser = inject['hostvars'][host].get('ansible_ssh_user') # user for delegate host in inventory
thisuser = inject['hostvars'][host].get('ansible_ssh_user')
if thisuser is None and self.remote_user: if thisuser is None and self.remote_user:
# user defined by play/runner # user defined by play/runner
thisuser = self.remote_user thisuser = self.remote_user