diff options
-rw-r--r-- | fact.rb | 63 |
1 files changed, 63 insertions, 0 deletions
@@ -0,0 +1,63 @@ +# +# 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 : |