module Puppet::DataSync

Public Instance Methods

checksum_insync?(param, is, has_contents) { |is| ... } click to toggle source
   # File lib/puppet/type/file/data_sync.rb
24 def checksum_insync?(param, is, has_contents, &block)
25   resource = param.resource
26   if resource.should_be_file?
27     return false if is == :absent
28   else
29     if resource[:ensure] == :present && has_contents && (s = resource.stat)
30       #TRANSLATORS 'Ensure' is an attribute and ':present' is a value and should not be translated
31       resource.warning _("Ensure set to :present but file type is %{file_type} so no content will be synced") % { file_type: s.ftype}
32     end
33     return true
34   end
35 
36   return true if ! resource.replace?
37 
38   is_insync = yield(is)
39 
40   if show_diff?(!is_insync)
41     if param.sensitive
42       send resource[:loglevel], "[diff redacted]"
43     else
44       write_temporarily(param) do |path|
45         diff_output = diff(resource[:path], path)
46         if diff_output.encoding == Encoding::BINARY || !diff_output.valid_encoding?
47           diff_output = "Binary files #{resource[:path]} and #{path} differ"
48         end
49         send resource[:loglevel], "\n" + diff_output
50       end
51     end
52   end
53   is_insync
54 end
contents_sync(param) click to toggle source
   # File lib/puppet/type/file/data_sync.rb
91 def contents_sync(param)
92   return_event = param.resource.stat ? :file_changed : :file_created
93   resource.write(param)
94   return_event
95 end
date_matches?(checksum_type, current, desired) click to toggle source
   # File lib/puppet/type/file/data_sync.rb
60 def date_matches?(checksum_type, current, desired)
61   time_types = [:mtime, :ctime]
62   return false if !time_types.include?(checksum_type)
63   return false unless current && desired
64 
65   begin
66     if checksum?(current) || checksum?(desired)
67       raise if !time_types.include?(sumtype(current).to_sym) || !time_types.include?(sumtype(desired).to_sym)
68       current = sumdata(current)
69       desired = sumdata(desired)
70     end
71     DateTime.parse(current) >= DateTime.parse(desired)
72   rescue => detail
73     self.fail Puppet::Error, "Resource with checksum_type #{checksum_type} didn't contain a date in #{current} or #{desired}", detail.backtrace
74   end
75 end
retrieve_checksum(resource) click to toggle source
   # File lib/puppet/type/file/data_sync.rb
77 def retrieve_checksum(resource)
78   stat = resource.stat
79   return :absent unless stat
80   ftype = stat.ftype
81   # Don't even try to manage the content on directories or links
82   return nil if ["directory","link"].include?(ftype)
83 
84   begin
85     resource.parameter(:checksum).sum_file(resource[:path])
86   rescue => detail
87     raise Puppet::Error, "Could not read #{ftype} #{resource.title}: #{detail}", detail.backtrace
88   end
89 end
show_diff?(has_changes) click to toggle source
   # File lib/puppet/type/file/data_sync.rb
56 def show_diff?(has_changes)
57   has_changes && Puppet[:show_diff] && resource.show_diff?
58 end
write_temporarily(param) { |path| ... } click to toggle source
   # File lib/puppet/type/file/data_sync.rb
11 def write_temporarily(param)
12   tempfile = Tempfile.new("puppet-file")
13   tempfile.open
14 
15   param.write(tempfile)
16 
17   tempfile.close
18 
19   yield tempfile.path
20 ensure
21   tempfile.delete if tempfile
22 end