From ae38129735b3d6b0af953572cd6ad18b1fa5b584 Mon Sep 17 00:00:00 2001 From: Ricky Zhou Date: Tue, 28 Jun 2011 11:01:35 -0400 Subject: [PATCH] Write to a temporary file and move when storing reports. --- lib/puppet/reports/store.rb | 10 +++++++--- 1 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/puppet/reports/store.rb b/lib/puppet/reports/store.rb index 997206e..5195db1 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 @@ -29,10 +31,12 @@ Puppet::Reports.register_report(:store) do file = 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, file) rescue => detail puts detail.backtrace if Puppet[:trace] Puppet.warning "Could not write report for #{client} at #{file}: #{detail}" -- 1.7.6.2