diff --git a/lib/ansible/inventory/__init__.py b/lib/ansible/inventory/__init__.py index 972042c9b1..7d279b7b4d 100644 --- a/lib/ansible/inventory/__init__.py +++ b/lib/ansible/inventory/__init__.py @@ -437,7 +437,10 @@ class Inventory(object): 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): diff --git a/lib/ansible/runner/__init__.py b/lib/ansible/runner/__init__.py index 831e5d10e2..41e5d6054d 100644 --- a/lib/ansible/runner/__init__.py +++ b/lib/ansible/runner/__init__.py @@ -367,6 +367,16 @@ class Runner(object): if inject['hostvars'][host].get('ansible_ssh_user'): # user for delegate host in inventory 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: # user defined by play/runner