How to use a template for configuration file in Puppet
The PuppetLabs docs on Using Puppet Templates has an example of an Apache configuration for a Trac site. This should be enough to get you started.
Per OP's request, here's a simple example. I'm using NTP rather than the Apache default config since that's a fairly large and complex file. NTP is much simpler.
Directory looks like this:
/etc/puppet/modules/ntp/manifests /templates
Partial contents /etc/puppet/modules/ntp/manifests/init.pp
(just the portion defining the template):
$ntp_server_suffix = ".ubuntu.pool.ntp.org"file { '/etc/ntp.conf': content => template('ntp/ntp.conf.erb'), owner => root, group => root, mode => 644,}
Contents of /etc/puppet/modules/ntp/templates/ntp.conf.erb
:
driftfile /var/lib/ntp/drift<% [1,2].each do |n| -%>server <%=n-%><%=@ntp_server_suffix%><% end -%>restrict -4 default kod notrap nomodify nopeer noqueryrestrict -6 default kod notrap nomodify nopeer noqueryrestrict 127.0.0.1
When run with puppet this will result in an /etc/ntp.conf
that looks like:
driftfile /var/lib/ntp/driftserver 1.ubuntu.pool.ntp.orgserver 2.ubuntu.pool.ntp.orgrestrict -4 default kod notrap nomodify nopeer noqueryrestrict -6 default kod notrap nomodify nopeer noqueryrestrict 127.0.0.1
This demonstrates a few different concepts:
- Variables defined in the puppet manifest (such as
$ntp_server_suffix
can be accessed as instance variables (@ntp_server_suffix
) in the template - Loops and other ruby code can be used in erb templates
- Code between
<%
and%>
is executed by ruby - Code between
<%=
and%>
is executed and output by ruby - Code between
<%=
and-%>
is executed and output by ruby and the trailing newline character is suppressed.
Hope this helps you understand templates.