summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRicky Zhou <ricky@fedoraproject.org>2011-06-28 11:01:35 -0400
committerRicky Zhou <ricky@fedoraproject.org>2011-08-31 11:15:50 -0400
commit6527e6c84ff19a4961e820bfa585960703cddac6 (patch)
tree0f91638eb381480e850f79b859df319aa7a28aae
parent98db04eb290ad7767cbc6da43c0ab94971f0d8ef (diff)
downloadpuppet-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.rb12
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}"