Puppet templates
Puppet uses ERB as its templating language. This document will give a brief intro to ERB and list some common patterns/tips/tricks for using templates with our module/hiera setup.
Template files should be stored in the templates
directory of a Puppet module, which allows the template function to locate them. For example, the file referenced by template("pmmodule_example/mytemplate.erb")
is located at pmodule_example/templates/mytemplate.erb
.
ERB syntax
For a quick syntax description look at the official docs here:
http://docs.puppetlabs.com/guides/templating.html#erb-template-syntax
This page also includes most of the stuff below and is a good source of template documentation.
Note the different uses of tags, as listed here:
http://docs.puppetlabs.com/guides/templating.html#tags
The <%=
form is the most used, and also note the <%-
and -%>
tags for supressing line breaks.
Example with patterns
Here is a simple example with trac configuration template:
http://docs.puppetlabs.com/guides/templating.html#using-templates
The content
option points to the template function, evaluating the template and using the result as the content of the file.
Using simple variables
As seen in the Trac example above, variables are used with a @
prefix:
The value is <%= @myvar %>.
Looping arrays
Assuming you have an array as $values
you could loop the values like so:
<% @values.each do |val| -%>
Some stuff with <%= val %>
<% end -%>
Note the closing -%>
tag to prevent the line with just code to produce a blank line.
Using hashes
Hashes can be iterated similar to arrays, or just by keys or values. Assuming a hash as $hash
:
<% @hash.each do |key, val| -%>
Some stuff with key <%= key %> has value <%= val %>
<% end -%>
Only keys:
<% @hash.keys.each do |key| -%>
Some stuff with key <%= key %>
<% end -%>
Only values:
<% @hash.values.each do |val| -%>
Some stuff with <%= val %>
<% end -%>
Conditionals
Example if statement to conditionaly put a line in a /etc/network/interfaces
-file:
<% if broadcast != "NONE" %> broadcast <%= broadcast %> <% end %>
All ruby conditionals can of course be used.
More information
In addition to the official docs/ruby docs the best option might be to study templates allready written as part of our puppet modules: