mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Allows delegate_to to use inventory host/port info.
This commit is contained in:
parent
8c3abe7e52
commit
a69e59ab2b
3 changed files with 23 additions and 5 deletions
|
@ -286,7 +286,7 @@ class Inventory(object):
|
||||||
|
|
||||||
host = self.get_host(hostname)
|
host = self.get_host(hostname)
|
||||||
if host is None:
|
if host is None:
|
||||||
raise Exception("host not found: %s" % hostname)
|
raise errors.AnsibleError("host not found: %s" % hostname)
|
||||||
return host.get_variables()
|
return host.get_variables()
|
||||||
|
|
||||||
def add_group(self, group):
|
def add_group(self, group):
|
||||||
|
|
|
@ -384,14 +384,32 @@ class Runner(object):
|
||||||
actual_host = host
|
actual_host = host
|
||||||
try:
|
try:
|
||||||
delegate_to = inject.get('delegate_to', None)
|
delegate_to = inject.get('delegate_to', None)
|
||||||
alternative_host = inject.get('ansible_ssh_host', 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:
|
if delegate_to is not None:
|
||||||
|
delegate_vars = {}
|
||||||
|
try:
|
||||||
|
delegate_vars = inject['hostvars'][delegate_to]
|
||||||
|
for (k,v) in delegate_vars.iteritems():
|
||||||
|
if k.startswith('ansible_ssh_'):
|
||||||
|
inject[k] = v
|
||||||
|
except errors.AnsibleError:
|
||||||
|
# host not listed in inventory, it's ok
|
||||||
|
pass
|
||||||
|
|
||||||
|
# the host record may just be an alias in case of tunnels
|
||||||
|
alternative_host = inject.get('ansible_ssh_host', None)
|
||||||
|
if delegate_to is not None and not alternative_host:
|
||||||
actual_host = delegate_to
|
actual_host = delegate_to
|
||||||
elif alternative_host is not None:
|
|
||||||
actual_host = alternative_host
|
# connect
|
||||||
conn = self.connector.connect(actual_host, port)
|
conn = self.connector.connect(actual_host, port)
|
||||||
|
|
||||||
if delegate_to is not None or alternative_host is not None:
|
if delegate_to is not None or alternative_host is not None:
|
||||||
conn._delegate_for = host
|
conn._delegate_for = host
|
||||||
|
|
||||||
except errors.AnsibleConnectionFailed, e:
|
except errors.AnsibleConnectionFailed, e:
|
||||||
result = dict(failed=True, msg="FAILED: %s" % str(e))
|
result = dict(failed=True, msg="FAILED: %s" % str(e))
|
||||||
return ReturnData(host=host, comm_ok=False, result=result)
|
return ReturnData(host=host, comm_ok=False, result=result)
|
||||||
|
|
|
@ -53,7 +53,7 @@ class Connection(object):
|
||||||
|
|
||||||
user = self.runner.remote_user
|
user = self.runner.remote_user
|
||||||
|
|
||||||
vvv("ESTABLISH CONNECTION FOR USER: %s" % user, host=self.host)
|
vvv("ESTABLISH CONNECTION FOR USER: %s on PORT %s TO %s" % (user, self.port, self.host), host=self.host)
|
||||||
|
|
||||||
ssh = paramiko.SSHClient()
|
ssh = paramiko.SSHClient()
|
||||||
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
||||||
|
|
Loading…
Reference in a new issue