# # 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) %>"), ',') Phasing out the need for use and abuse of the infamous inline_template in the partitions define given 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 :