Fetch vars for host directly when calculating the delegated user
This fixes the case in which the delegated to host may not be in the specified hosts list, in which cases facts/vars for the host were not available in the injected hostvars. This also fixes the inventory variable fetching function, so that an unknown host raises a proper error as opposed to a NoneType exception. Fixes #8224
This commit is contained in:
parent
2a0d18b092
commit
d19fe8d95d
2 changed files with 14 additions and 1 deletions
|
@ -437,7 +437,10 @@ class Inventory(object):
|
||||||
|
|
||||||
def get_variables(self, hostname, update_cached=False, vault_password=None):
|
def get_variables(self, hostname, update_cached=False, vault_password=None):
|
||||||
|
|
||||||
return self.get_host(hostname).get_variables()
|
host = self.get_host(hostname)
|
||||||
|
if not host:
|
||||||
|
raise Exception("host not found: %s" % hostname)
|
||||||
|
return host.get_variables()
|
||||||
|
|
||||||
def get_host_variables(self, hostname, update_cached=False, vault_password=None):
|
def get_host_variables(self, hostname, update_cached=False, vault_password=None):
|
||||||
|
|
||||||
|
|
|
@ -367,6 +367,16 @@ class Runner(object):
|
||||||
if inject['hostvars'][host].get('ansible_ssh_user'):
|
if inject['hostvars'][host].get('ansible_ssh_user'):
|
||||||
# user for delegate host in inventory
|
# user for delegate host in inventory
|
||||||
thisuser = inject['hostvars'][host].get('ansible_ssh_user')
|
thisuser = inject['hostvars'][host].get('ansible_ssh_user')
|
||||||
|
else:
|
||||||
|
# look up the variables for the host directly from inventory
|
||||||
|
try:
|
||||||
|
host_vars = self.inventory.get_variables(host, vault_password=self.vault_pass)
|
||||||
|
if 'ansible_ssh_user' in host_vars:
|
||||||
|
thisuser = host_vars['ansible_ssh_user']
|
||||||
|
except Exception, e:
|
||||||
|
# the hostname was not found in the inventory, so
|
||||||
|
# we just ignore this and try the next method
|
||||||
|
pass
|
||||||
|
|
||||||
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
|
||||||
|
|
Loading…
Reference in a new issue