Also utilise the *.augnew file so that augeas is only run once if changes
are made.

Signed-off-by: Mike Knox <[email protected]>
---
Local-branch: feature/master/2728
 lib/puppet/provider/augeas/augeas.rb |   36 +++++++++++++++++++++++++++------
 1 files changed, 29 insertions(+), 7 deletions(-)

diff --git a/lib/puppet/provider/augeas/augeas.rb 
b/lib/puppet/provider/augeas/augeas.rb
index 5488c66..1e99f28 100644
--- a/lib/puppet/provider/augeas/augeas.rb
+++ b/lib/puppet/provider/augeas/augeas.rb
@@ -22,6 +22,7 @@ require 'strscan'
 
 Puppet::Type.type(:augeas).provide(:augeas) do
   include Puppet::Util
+  include Puppet::Util::Diff
 
   confine :true => Puppet.features.augeas?
 
@@ -29,6 +30,8 @@ Puppet::Type.type(:augeas).provide(:augeas) do
 
   SAVE_NOOP = "noop"
   SAVE_OVERWRITE = "overwrite"
+  SAVE_NEWFILE = "newfile"
+  SAVE_BACKUP = "backup"
 
   COMMANDS = {
     "set" => [ :path, :string ],
@@ -291,20 +294,29 @@ Puppet::Type.type(:augeas).provide(:augeas) do
         # actually do the save.
         if return_value and get_augeas_version >= "0.3.6"
           debug("Will attempt to save and only run if files changed")
-          set_augeas_save_mode(SAVE_NOOP)
+          set_augeas_save_mode(SAVE_NEWFILE)
           do_execute_changes
           save_result = @aug.save
-          saved_files = @aug.match("/augeas/events/saved")
+          saved_files = @aug.get("/augeas/events/saved")
           if save_result and not files_changed?
             debug("Skipping because no files were changed")
             return_value = false
           else
+            saved_files.each do |tmp_file|
+              saved_file = tmp_file.sub(/^\/files/, '')
+              info(diff(saved_file, saved_file + ".augnew"))
+              if Puppet[:noop]
+                File.delete(saved_file + ".augnew")
+              end
+            end
             debug("Files changed, should execute")
           end
         end
       end
     ensure
-      close_augeas
+      if Puppet[:noop]
+        close_augeas
+      end
     end
     return_value
   end
@@ -313,10 +325,20 @@ Puppet::Type.type(:augeas).provide(:augeas) do
     # Re-connect to augeas, and re-execute the changes
     begin
       open_augeas
-      set_augeas_save_mode(SAVE_OVERWRITE) if get_augeas_version >= "0.3.6"
-
-      do_execute_changes
-
+      saved_files = @aug.get("/augeas/events/saved")
+      if saved_files 
+        saved_files.each do |tmp_file|
+          saved_file = tmp_file.sub(/^\/files/, '')
+          if File.exists?(saved_file + ".augnew")
+            File.rename(saved_file + ".augnew", saved_file)
+            debug(saved_file + ".augnew moved to " + saved_file)
+          end
+        end
+      else
+        debug("No saved files, re-executing augeas")
+        set_augeas_save_mode(SAVE_OVERWRITE) if get_augeas_version >= "0.3.6"
+        do_execute_changes
+      end
       success = @aug.save
       fail("Save failed with return code #{success}") if success != true
     ensure
-- 
1.7.3.5

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en.

Reply via email to