From 4cd87ec93ec1f5266e5afaaa8e6734d642284afe Mon Sep 17 00:00:00 2001 From: James Cammarata Date: Mon, 1 Dec 2014 21:25:35 -0600 Subject: [PATCH] Revise patch from earlier using even more variable sources for HostVars Superceeds e61e8a3 Fixes #9684 --- lib/ansible/runner/__init__.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/ansible/runner/__init__.py b/lib/ansible/runner/__init__.py index 0254449e7d4..f0de42764a2 100644 --- a/lib/ansible/runner/__init__.py +++ b/lib/ansible/runner/__init__.py @@ -667,8 +667,22 @@ class Runner(object): def _executor_internal(self, host, new_stdin): ''' executes any module one or more times ''' + # We build the proper injected dictionary for all future + # templating operations in this run inject = self.get_inject_vars(host) - hostvars = HostVars(utils.merge_hash(inject['combined_cache'], self.extra_vars), self.inventory, vault_password=self.vault_pass) + + # Then we selectively merge some variable dictionaries down to a + # single dictionary, used to template the HostVars for this host + temp_vars = self.inventory.get_variables(host, vault_password=self.vault_pass) + temp_vars = utils.merge_hash(temp_vars, inject['combined_cache']) + temp_vars = utils.merge_hash(temp_vars, self.play_vars) + temp_vars = utils.merge_hash(temp_vars, self.play_file_vars) + temp_vars = utils.merge_hash(temp_vars, self.extra_vars) + + hostvars = HostVars(temp_vars, self.inventory, vault_password=self.vault_pass) + + # and we save the HostVars in the injected dictionary so they + # may be referenced from playbooks/templates inject['hostvars'] = hostvars host_connection = inject.get('ansible_connection', self.transport)