In the message dated: Tue, 27 Sep 2016 13:38:16 -0400,
The pithy ruminations from Christopher Wood on
<Re: [Puppet Users] Moment of duhh.... Trying to wrap my head around some condi
tion statements.> were:
=> This is one of the first custom facts I wrote, you would likely want to improve on it based on the guide. However it has worked for us for a few years now. Enjoy?
=>
=> This lives in inventory/lib/facter/hpsrl.rb.
=>
=>
=> if FileTest.exists?("/usr/sbin/dmidecode")
=>
=> # Add remove things to query here
=> query = {
=> 'HP ProLiant System/Rack Locator' => [
=> 'Rack Name:',
=> 'Enclosure Name:',
=> 'Enclosure Model:',
=> 'Enclosure Serial:',
=> 'Enclosure Bays:',
=> 'Server Bay:',
=> 'Bays Filled:',
=> ]
=> }
=>
=> # Run dmidecode only once
=> output=%x{/usr/sbin/dmidecode 2>/dev/null}
=>
=> query.each_pair do |key,v|
=> v.each do |value|
=> output.split("Handle").each do |line|
=> if line =~ /#{key}/ and line =~ /#{value} (\w.*)\n*./
=> result = $1
=> result = result.gsub(/ *$/, '').gsub(/^ */, '')
=> Facter.add(value.chomp(':').gsub(/ /, '_')) do
=> confine :kernel => :linux
=> setcode do
=> result
=> end
I don't really (or, "really don't") do Ruby, but it looks to me like
that sets the facts using the original case of the data returned from
dmidecode. Maybe this is OK when creating facts by calling Facter.add(),
and maybe this is OK for certain versions of puppet.
I'm using puppet 3.8, and setting facts via a shell script that returns
strings (see below for a heavily abridged example). In this case, the
variable names _must_ begin with a lower-case letter.
https://tickets.puppetlabs.com/browse/FACT-777
---------------------------------------------
#! /bin/bash
#
# return hardware "facts" for use by facter & puppet
#
# since these facts are specific to particular modules (ie. setting IPMI parameters),
# we choose to store the script that generates the facts with the module that consumes
# those facts, as in:
#
# $PUPPETHOME/environments/computenode/modules/ipmi/facts.d/ipmi_facts
which dmidecode 1> /dev/null 2>&1
if [ $? != 0 ] ; then
echo dmidecode=MISSING
exit
else
echo dmidecode=INSTALLED
fi
# Does this machine have an IPMI device?
dmidecode | grep -q ^IPMI
if [ $? = 0 ] ; then
if [ -c /dev/ipmi0 ] ; then
ipmi=true
fi
fi
---------------------------------------------
=> end
=> end
=> end
=> end
=> end
=> end
=>
=>
--
Mark