From 9d09b077a33c1324d53f2725fcf61b529deafb4b Mon Sep 17 00:00:00 2001 From: Dominic Cleal Date: Sat, 6 Aug 2011 17:46:20 +0100 Subject: (#8808) Fail Augeas resource when unable to save changes Raise a failure when Augeas changes cannot be saved (due to invalid layout of the tree, permissions etc). Fixes a regression. --- lib/puppet/provider/augeas/augeas.rb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'lib/puppet') diff --git a/lib/puppet/provider/augeas/augeas.rb b/lib/puppet/provider/augeas/augeas.rb index 95142568e..eb9c69ac8 100644 --- a/lib/puppet/provider/augeas/augeas.rb +++ b/lib/puppet/provider/augeas/augeas.rb @@ -290,8 +290,10 @@ Puppet::Type.type(:augeas).provide(:augeas) do set_augeas_save_mode(SAVE_NEWFILE) do_execute_changes save_result = @aug.save + fail("Save failed with return code #{save_result}") unless save_result + saved_files = @aug.match("/augeas/events/saved") - if save_result and saved_files.size > 0 + if saved_files.size > 0 root = resource[:root].sub(/^\/$/, "") saved_files.each do |key| saved_file = @aug.get(key).to_s.sub(/^\/files/, root) @@ -305,13 +307,13 @@ Puppet::Type.type(:augeas).provide(:augeas) do debug("Files changed, should execute") return_value = true else - debug("Skipping because no files were changed or save failed") + debug("Skipping because no files were changed") return_value = false end end end ensure - if not return_value or resource.noop? + if not return_value or resource.noop? or not save_result close_augeas end end -- cgit From 000b8fef6a33e5c9f56c0801523de15a0e5bc30b Mon Sep 17 00:00:00 2001 From: Dominic Cleal Date: Sun, 7 Aug 2011 09:55:09 +0100 Subject: (#5606) Print Augeas' /augeas//error info to debug on save failure When saving fails, the contents of /augeas//error (for put_failed) are printed to the debug log. Should help users track down the issue without needing to replicate it with augtool. --- lib/puppet/provider/augeas/augeas.rb | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'lib/puppet') diff --git a/lib/puppet/provider/augeas/augeas.rb b/lib/puppet/provider/augeas/augeas.rb index eb9c69ac8..76c7e7717 100644 --- a/lib/puppet/provider/augeas/augeas.rb +++ b/lib/puppet/provider/augeas/augeas.rb @@ -259,6 +259,18 @@ Puppet::Type.type(:augeas).provide(:augeas) do @aug.set("/augeas/save", mode) end + def print_put_errors + errors = @aug.match("/augeas//error[. = 'put_failed']") + debug("Put failed on one or more files, output from /augeas//error:") unless errors.empty? + errors.each do |errnode| + @aug.match("#{errnode}/*").each do |subnode| + sublabel = subnode.split("/")[-1] + subvalue = @aug.get(subnode) + debug("#{sublabel} = #{subvalue}") + end + end + end + # Determines if augeas acutally needs to run. def need_to_run? force = resource[:force] @@ -290,7 +302,10 @@ Puppet::Type.type(:augeas).provide(:augeas) do set_augeas_save_mode(SAVE_NEWFILE) do_execute_changes save_result = @aug.save - fail("Save failed with return code #{save_result}") unless save_result + unless save_result + print_put_errors + fail("Save failed with return code #{save_result}, see debug") + end saved_files = @aug.match("/augeas/events/saved") if saved_files.size > 0 @@ -339,8 +354,10 @@ Puppet::Type.type(:augeas).provide(:augeas) do debug("No saved files, re-executing augeas") set_augeas_save_mode(SAVE_OVERWRITE) if get_augeas_version >= "0.3.6" do_execute_changes - success = @aug.save - fail("Save failed with return code #{success}") if success != true + unless @aug.save + print_put_errors + fail("Save failed with return code #{success}, see debug") + end end ensure close_augeas -- cgit