Templates are written in a specialized templating
language that generates text from data. Use templates to manage the content of your Puppet configuration files via the
content attribute of the
file resource type.
- Embedded Puppet (EPP) uses Puppet expressions in special tags. EPP works with Puppet 4.0 and later, and with Puppet 3.5 through 3.8 with future parser enabled.
Embedded Ruby (ERB) uses Ruby code in tags, and requires some Ruby knowledge. ERB works with all Puppet versions.
When to use a template
Templates are more powerful than normal strings, and less powerful than modeling individual settings as resources. Whether to use a template is mainly a question of the complexity of the work you're performing.
When you're managing simple config files, a template generally isn't necessary because
strings in the Puppet language allow you to interpolate
variables and expressions into text. For short and simple config files, you can often
use a heredoc
and interpolate a few variables, or do something like
$my_array.join(', ') }.
Use a template if you’re doing complex transformations (especially iterating over collections) or working with very large config files.
Some situations, however, are too complex for a template to be effective. For example,
using several modules that each need to manage parts of the same config file is
impractical with either templates or interpolated strings. For shared configuration like
this, model each setting in the file as an individual resource, with either a custom
resource type or an Augeas, concat, or
resource. This approach is similar to how core resource types like