64 lines
1.4 KiB
Ruby
64 lines
1.4 KiB
Ruby
|
#
|
||
|
# fact.rb
|
||
|
#
|
||
|
|
||
|
module Puppet::Parser::Functions
|
||
|
newfunction(:fact, :type => :rvalue, :doc => <<-EOS
|
||
|
This function will retrieve fact from Facter based on the fact name
|
||
|
and expose it for further use within Puppet manifest file ...
|
||
|
|
||
|
For example:
|
||
|
|
||
|
Given the following sample manifest:
|
||
|
|
||
|
define partitions {
|
||
|
$result = split(fact("partitions_${name}"), ',')
|
||
|
|
||
|
notice $result
|
||
|
|
||
|
partition { $result: }
|
||
|
}
|
||
|
|
||
|
define partition {
|
||
|
notice $name
|
||
|
}
|
||
|
|
||
|
$available_disks = split($disks, ',')
|
||
|
|
||
|
partitions { $available_disks: }
|
||
|
|
||
|
This will produce the following:
|
||
|
|
||
|
notice: Scope(Partitions[hda]): hda1 hda2
|
||
|
notice: Scope(Partition[hda1]): hda1
|
||
|
notice: Scope(Partition[hda2]): hda2
|
||
|
|
||
|
|
||
|
Which allows you to avoid resorting to the following:
|
||
|
|
||
|
$fact = "partitions_${name}"
|
||
|
$result = split(inline_template("<%= scope.lookupvar(fact) %>"), ',')
|
||
|
|
||
|
Taking out the need for using "inline_template" in the "partitions" define above.
|
||
|
EOS
|
||
|
) do |arguments|
|
||
|
|
||
|
raise(Puppet::ParseError, "Wrong number of arguments " +
|
||
|
"given (#{arguments.size} for 1)") if arguments.size < 1
|
||
|
|
||
|
fact = arguments[0]
|
||
|
|
||
|
raise(Puppet::ParseError, 'You must provide fact name') if fact.empty?
|
||
|
|
||
|
result = lookupvar(fact) # Get the value of interest from Facter ...
|
||
|
|
||
|
if not result or result.empty?
|
||
|
raise(Puppet::ParseError, "Unable to retrieve fact `#{fact}'")
|
||
|
end
|
||
|
|
||
|
return result
|
||
|
end
|
||
|
end
|
||
|
|
||
|
# vim: set ts=2 sw=2 et :
|