- Mastering Puppet 5
- Ryan Russell Yates Jason Southgate
- 227字
- 2021-07-16 17:46:14
Custom functions
This is where custom facts allow us to run arbitrary code on the client side. Custom functions are a server-side technology that assist you in the compilation of a catalog. Functions are executed on the Puppet server. Puppet already includes several functions that are built-in, and additional ones are contained in Puppet Forge modules, particularly the stdlib module (see https://forge.puppet.com/puppetlabs/stdlib).
There are, in fact, three possible ways to create custom functions, although you are unlikely to use the first two, so I will just leave you with some links to the Puppet documentation for those options:
- You could write the function in Puppet DSL (see https://puppet.com/docs/puppet/5.3/lang_write_functions_in_puppet.html), although you'll be unable to take advantage of the more powerful Ruby API.
- You could write the function in the legacy Ruby functions API (see https://puppet.com/docs/puppet/5.3/functions_legacy.html), although this is to be avoided unless you must specifically support Puppet 3.
- You could write the function in the modern Ruby function API. This is what we'll concentrate on for the remainder of this section.
The best way to create and distribute a new custom function is to place it in a module, in the puppet/functions/<modulename> subdirectory of the lib directory, and it will then be distributed via pluginsync, as shown in the following code:
#<modulepath>/lib/puppet/functions/mymodule/myfunction.rb
Puppet::Functions.create_function(:'mymodule::myfunction') do
dispatch :up do
param 'String', :a_string
end
def up(a_string)
a_string.upcase
end
end