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