Evaluating EPP templates
After you have an EPP template, you can pass it to a function that evaluates it and returns a final string. The actual template can be either a separate file or a string value.
Evaluating EPP templates that are in a template file
Put template files in the templates
directory of
a module. EPP files use the .epp
extension.
To use a EPP template file, evaluate it with the epp
function. For
example:
# epp(<FILE REFERENCE>, [<PARAMETER HASH>]) file { '/etc/ntp.conf': ensure => file, content => epp('ntp/ntp.conf.epp', {'service_name' => 'xntpd', 'iburst_enable' => true}), # Loads /etc/puppetlabs/code/environments/production/modules/ntp/templates/ntp.conf.epp }
The first argument to the function is the file reference: a string in the
form '<MODULE>/<FILE>'
, which
loads <FILE>
from <MODULE>
’s templates directory. For example, the
file reference ntp/ntp.conf.epp
loads the <MODULES DIRECTORY>/ntp/templates/ntp.conf.epp
file.
Some EPP templates declare parameters, and you can provide values for them by passing a
parameter hash to the epp
function.
The keys of the hash must be valid local variable names (minus the $
). Inside the template, Puppet creates variables with those names
and assign their values from the hash. For example, with a parameter hash of {'service_name' => 'xntpd', 'iburst_enable' => true}
, an EPP
template would receive variables called $service_name
and $iburst_enable
.
When structuring your parameter hash, remember:
- If a template declares any mandatory parameters, you must set values for them with a parameter hash.
- If a template declares any optional parameters, you can choose to provide values or let them use their defaults.
- If a template declares no parameters, you can pass any number of parameters with any names; otherwise, you can only choose from the parameters requested by the template.
Evaluating EPP template strings
If you have a string value that contains template content, you can evaluate it
with the inline_epp
function.
In older versions of Puppet, inline templates were mostly used to get around
limitations — tiny Ruby fragments were useful for
transforming and manipulating data before Puppet
had iteration
functions like map
or puppetlabs/stdlib functions like chomp
and keys
.
In modern versions of Puppet, inline templates are usable in some of the same situations
template files are. Because the heredoc syntax makes it easy to write large and
complicated strings in a manifest, you can use inline_epp
to reduce the number of files needed for a simple module that
manages a small config file.
For example:
$ntp_conf_template = @(END) ...template content goes here... END # inline_epp(<TEMPLATE STRING>, [<PARAMETER HASH>]) file { '/etc/ntp.conf': ensure => file, content => inline_epp($ntp_conf_template, {'service_name' => 'xntpd', 'iburst_enable' => true}), }
Some EPP templates declare parameters, and you can provide values for them by passing a
parameter hash to the epp
function.
The keys of the hash must be valid local variable names (minus
the $
). Inside the template, Puppet creates variables
with those names and assign their values from the hash. For example, with a parameter hash
of {'service_name' => 'xntpd', 'iburst_enable' =>
true}
, an EPP template would receive variables called $service_name
and $iburst_enable
.
When structuring your parameter hash, remember:
- If a template declares any mandatory parameters, you must set values for them with a parameter hash.
- If a template declares any optional parameters, you can choose to provide values or let them use their defaults.
- If a template declares no parameters, you can pass any number of parameters with any names; otherwise, you can only choose from the parameters requested by the template.