diff options
author | Ricky Zhou <ricky@fedoraproject.org> | 2011-06-28 11:01:35 -0400 |
---|---|---|
committer | Ricky Zhou <ricky@fedoraproject.org> | 2011-08-31 11:15:50 -0400 |
commit | 6527e6c84ff19a4961e820bfa585960703cddac6 (patch) | |
tree | 0f91638eb381480e850f79b859df319aa7a28aae | |
parent | 98db04eb290ad7767cbc6da43c0ab94971f0d8ef (diff) | |
download | puppet-ticket/master/8119.tar.gz puppet-ticket/master/8119.tar.xz puppet-ticket/master/8119.zip |
Write to a temporary file and move when storing reports.ticket/master/8119
-rw-r--r-- | lib/puppet/reports/store.rb | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/lib/puppet/reports/store.rb b/lib/puppet/reports/store.rb index 997206ec4..2eb99d0d4 100644 --- a/lib/puppet/reports/store.rb +++ b/lib/puppet/reports/store.rb @@ -1,4 +1,6 @@ require 'puppet' +require 'fileutils' +require 'tempfile' Puppet::Reports.register_report(:store) do desc "Store the yaml report on disk. Each host sends its report as a YAML dump @@ -27,12 +29,14 @@ Puppet::Reports.register_report(:store) do "%02d" % now.send(method).to_s end.join("") + ".yaml" - file = File.join(dir, name) + filename = File.join(dir, name) + f = Tempfile.new(name, dir) begin - File.open(file, "w", 0640) do |f| - f.print to_yaml - end + f.print to_yaml + f.chmod(0640) + f.close + FileUtils.mv(f.path, filename) rescue => detail puts detail.backtrace if Puppet[:trace] Puppet.warning "Could not write report for #{client} at #{file}: #{detail}" |