How to use a template for configuration file in Puppet How to use a template for configuration file in Puppet linux linux

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:

  1. Variables defined in the puppet manifest (such as $ntp_server_suffix can be accessed as instance variables (@ntp_server_suffix) in the template
  2. Loops and other ruby code can be used in erb templates
  3. Code between <% and %> is executed by ruby
  4. Code between <%= and %> is executed and output by ruby
  5. Code between <%= and -%> is executed and output by ruby and the trailing newline character is suppressed.

Hope this helps you understand templates.