diff --git a/inventory_plugins/reconstructed.py b/inventory_plugins/reconstructed.py index 0e8df73..4754091 100644 --- a/inventory_plugins/reconstructed.py +++ b/inventory_plugins/reconstructed.py @@ -622,33 +622,37 @@ class RciBlock(RcInstruction): or self._always is None or self._locals is None ) - merged_vars = merged_vars.copy() - script_vars = script_vars.copy() - self._templar.available_variables = merged_vars + mv_copy = merged_vars.copy() + sv_copy = script_vars.copy() + self._templar.available_variables = mv_copy for key, value in self._locals.items(): result = self._templar.template(value) - script_vars[key] = result - merged_vars[key] = result + sv_copy[key] = result + mv_copy[key] = result self._display.vvv("- set block-local %s to %s" % (key, result)) try: try: self._display.vvv("- running 'block' instructions") return self.run_block( - self._block, host_name, merged_vars, host_vars, script_vars + self._block, host_name, mv_copy, host_vars, sv_copy ) except AnsibleError as e: if not self._rescue: self._display.vvv("- block failed") raise self._display.vvv("- block failed, running 'rescue' instructions") - script_vars["reconstructed_error"] = str(e) - merged_vars["reconstructed_error"] = str(e) + sv_copy["reconstructed_error"] = str(e) + mv_copy["reconstructed_error"] = str(e) return self.run_block( - self._rescue, host_name, merged_vars, host_vars, script_vars + self._rescue, host_name, mv_copy, host_vars, sv_copy ) finally: self._display.vvv("- block exited, running 'always' instructions") - self.run_block(self._always, host_name, merged_vars, host_vars, script_vars) + self.run_block(self._always, host_name, mv_copy, host_vars, sv_copy) + # Reset merged vars, as the host vars may have changed. + merged_vars.clear() + merged_vars.update(host_vars) + merged_vars.update(script_vars) def run_block(self, block, host_name, merged_vars, host_vars, script_vars): for instruction in block: