diff --git a/lib/ansible/runner/__init__.py b/lib/ansible/runner/__init__.py index e556081dc2..401116388f 100644 --- a/lib/ansible/runner/__init__.py +++ b/lib/ansible/runner/__init__.py @@ -381,28 +381,23 @@ class Runner(object): return ReturnData(host=host, result=result) conn = None - actual_host = host - actual_port = port + actual_host = inject.get('ansible_ssh_host', host) + actual_port = inject.get('ansible_ssh_port', port) + + # the delegated host may have different SSH port configured, etc + # and we need to transfer those, and only those, variables + delegate_to = inject.get('delegate_to', None) + if delegate_to is not None: + delegate_to = utils.template(self.basedir, delegate_to, inject) + delegate_info = inject['hostvars'][delegate_to] + actual_host = delegate_info.get('ansible_ssh_host', delegate_to) + actual_port = delegate_info.get('ansible_ssh_port', port) + try: - alternative_host = inject.get('ansible_ssh_host', None) - if alternative_host is not None: - actual_host = alternative_host - - delegate_to = inject.get('delegate_to', None) - - # the delegated host may have different SSH port configured, etc - # and we need to transfer those, and only those, variables - - if delegate_to is not None: - delegate_to = utils.template(self.basedir, delegate_to, inject) - actual_host = inject['hostvars'][delegate_to].get('ansible_ssh_host', delegate_to) - actual_port = inject['hostvars'][delegate_to].get('ansible_ssh_port', port) - # connect conn = self.connector.connect(actual_host, actual_port) - - if delegate_to is not None or alternative_host is not None: - conn._delegate_for = host + if delegate_to: + conn.delegate = host except errors.AnsibleConnectionFailed, e: result = dict(failed=True, msg="FAILED: %s" % str(e)) diff --git a/lib/ansible/runner/return_data.py b/lib/ansible/runner/return_data.py index 9fdc77b967..92dc6e2604 100644 --- a/lib/ansible/runner/return_data.py +++ b/lib/ansible/runner/return_data.py @@ -26,11 +26,12 @@ class ReturnData(object): # which host is this ReturnData about? if conn is not None: - delegate_for = getattr(conn, '_delegate_for', None) - if delegate_for: - self.host = delegate_for - else: - self.host = conn.host + self.host = conn.host + delegate = getattr(conn, 'delegate', None) + if delegate is not None: + self.host = delegate + + else: self.host = host @@ -40,6 +41,7 @@ class ReturnData(object): if type(self.result) in [ str, unicode ]: self.result = utils.parse_json(self.result) + if self.host is None: raise Exception("host not set") if type(self.result) != dict: