aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIsmaël Bouya <ismael.bouya@normalesup.org>2018-11-11 10:16:55 +0100
committerIsmaël Bouya <ismael.bouya@normalesup.org>2018-11-11 10:16:55 +0100
commit97e618665a5df3c5c209620ea1c8cd36d9747ae3 (patch)
treeab2fe4892240a056bf2166a3e1d13cb0dddd8b5a
parent42c7bdd646cc90d156a2f02176a539540ffaaf48 (diff)
downloadPuppet-97e618665a5df3c5c209620ea1c8cd36d9747ae3.tar.gz
Puppet-97e618665a5df3c5c209620ea1c8cd36d9747ae3.tar.zst
Puppet-97e618665a5df3c5c209620ea1c8cd36d9747ae3.zip
Store only changed reports
-rw-r--r--modules/base_installation/lib/puppet/reports/store_changed.rb72
-rw-r--r--modules/base_installation/templates/puppet/puppet.conf.erb2
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 @@
1require 'puppet'
2require 'fileutils'
3require 'puppet/util'
4
5SEPARATOR = [Regexp.escape(File::SEPARATOR.to_s), Regexp.escape(File::ALT_SEPARATOR.to_s)].join
6
7Puppet::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
71end
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