diff options
-rw-r--r-- | modules/base_installation/lib/puppet/reports/store_changed.rb | 72 | ||||
-rw-r--r-- | modules/base_installation/templates/puppet/puppet.conf.erb | 2 |
2 files changed, 73 insertions, 1 deletions
diff --git a/modules/base_installation/lib/puppet/reports/store_changed.rb b/modules/base_installation/lib/puppet/reports/store_changed.rb new file mode 100644 index 0000000..bb39beb --- /dev/null +++ b/modules/base_installation/lib/puppet/reports/store_changed.rb | |||
@@ -0,0 +1,72 @@ | |||
1 | require 'puppet' | ||
2 | require 'fileutils' | ||
3 | require 'puppet/util' | ||
4 | |||
5 | SEPARATOR = [Regexp.escape(File::SEPARATOR.to_s), Regexp.escape(File::ALT_SEPARATOR.to_s)].join | ||
6 | |||
7 | Puppet::Reports.register_report(:store_changed) do | ||
8 | desc "Store the yaml report on disk. Each host sends its report as a YAML dump | ||
9 | and this just stores the file on disk, in the `reportdir` directory. | ||
10 | |||
11 | These files collect quickly -- one every half hour -- so it is a good idea | ||
12 | to perform some maintenance on them if you use this report (it's the only | ||
13 | default report)." | ||
14 | |||
15 | def process | ||
16 | validate_host(host) | ||
17 | if status == "unchanged" | ||
18 | return | ||
19 | end | ||
20 | |||
21 | dir = File.join(Puppet[:reportdir], host) | ||
22 | |||
23 | if ! Puppet::FileSystem.exist?(dir) | ||
24 | FileUtils.mkdir_p(dir) | ||
25 | FileUtils.chmod_R(0750, dir) | ||
26 | end | ||
27 | |||
28 | # Now store the report. | ||
29 | now = Time.now.gmtime | ||
30 | name = %w{year month day hour min}.collect do |method| | ||
31 | # Make sure we're at least two digits everywhere | ||
32 | "%02d" % now.send(method).to_s | ||
33 | end.join("") + ".yaml" | ||
34 | |||
35 | file = File.join(dir, name) | ||
36 | |||
37 | begin | ||
38 | Puppet::Util.replace_file(file, 0640) do |fh| | ||
39 | fh.print to_yaml | ||
40 | end | ||
41 | rescue => detail | ||
42 | Puppet.log_exception(detail, "Could not write report for #{host} at #{file}: #{detail}") | ||
43 | end | ||
44 | |||
45 | # Only testing cares about the return value | ||
46 | file | ||
47 | end | ||
48 | |||
49 | # removes all reports for a given host? | ||
50 | def self.destroy(host) | ||
51 | validate_host(host) | ||
52 | |||
53 | dir = File.join(Puppet[:reportdir], host) | ||
54 | |||
55 | if Puppet::FileSystem.exist?(dir) | ||
56 | Dir.entries(dir).each do |file| | ||
57 | next if ['.','..'].include?(file) | ||
58 | file = File.join(dir, file) | ||
59 | Puppet::FileSystem.unlink(file) if File.file?(file) | ||
60 | end | ||
61 | Dir.rmdir(dir) | ||
62 | end | ||
63 | end | ||
64 | |||
65 | def validate_host(host) | ||
66 | if host =~ Regexp.union(/[#{SEPARATOR}]/, /\A\.\.?\Z/) | ||
67 | raise ArgumentError, _("Invalid node name %{host}") % { host: host.inspect } | ||
68 | end | ||
69 | end | ||
70 | module_function :validate_host | ||
71 | end | ||
72 | |||
diff --git a/modules/base_installation/templates/puppet/puppet.conf.erb b/modules/base_installation/templates/puppet/puppet.conf.erb index 38a0c1b..4277714 100644 --- a/modules/base_installation/templates/puppet/puppet.conf.erb +++ b/modules/base_installation/templates/puppet/puppet.conf.erb | |||
@@ -1,6 +1,6 @@ | |||
1 | [main] | 1 | [main] |
2 | <% | 2 | <% |
3 | reports = ["store", "cat_files"] | 3 | reports = ["store_changed", "cat_files"] |
4 | if @xmpp.count > 0 | 4 | if @xmpp.count > 0 |
5 | reports << "xmpp" | 5 | reports << "xmpp" |
6 | end | 6 | end |