Create and use report processors to generate insightful information or alerts from Puppet reports. You can write your own report processor in Ruby and include it in a Puppet module. Puppet uses the processor to send report data to the service in the format you defined.
A report processor must follow these rules:
- The processor name must be a valid Ruby symbol that starts with a letter and contains only alphanumeric characters.
- The processor must be in its own Ruby file,
<PROCESSOR_NAME>.rb
, and stored inside the Puppet module directorylib/puppet/reports/
- The processor code
must start with
require 'puppet'
- The processor code
must call the method
Puppet::Reports.register_report(:NAME)
This method takes the name of the report as a symbol, and a mandatory block of code with no arguments that contains:- A Markdown-formatted string describing the processor, passed
to the
desc(<DESCRIPTION>)
method. - An implementation of a method named
process
that contains the report processor's main functionality.
- A Markdown-formatted string describing the processor, passed
to the
Puppet lets the process
method access a self
object, which will be a Puppet::Transaction::Report
object describing a Puppet run.
The processor can access report data by calling accessor methods on
self
, and it can forward that data to any
service you configure in the report processor. It can also call self.to_yaml
to dump the entire report to YAML.
Note that the YAML output isn't a safe, well-defined data format — it's a
serialized object.
Example report processor
To use this report processor, include it in the comma-separated list of
processors in the Puppet master's reports
setting in puppet.conf
: reports = store,myreport
.
# Located in /etc/puppetlabs/puppet/modules/myreport/lib/puppet/reports/myreport.rb.
require 'puppet'
# If necessary, require any other Ruby libraries for this report here.
Puppet::Reports.register_report(:myreport) do
desc "Process reports via the fictional my_cool_cmdb API."
# Declare and configure any settings here. We'll pretend this connects to our API.
my_api = MY_COOL_CMD
# Define and configure the report processor.
def process
# Do something that sets up the API we're sending the report to here.
# For instance, let's check on the node's status using the report object (self):
if self.status != nil then
status = self.status
else
status = 'undefined'
end
# Next, let's do something if the status equals 'failed'.
if status == 'failed' then
# Finally, dump the report object to YAML and post it using the API object:
my_api.post(self.to_yaml)
end
end
end
reports
setting in puppet.conf
:reports = store,myreport
For more examples using this API, see the built-in reports' source code or one of these custom reports created by a member of the Puppet community:
These community reports aren't provided or supported by Puppet, Inc.