Using array iteration in templates
In the previous example we saw that you can use Ruby to interpolate different values in templates depending on the result of an expression. But you're not limited to getting one value at a time. You can put lots of them in a Puppet array and then have the template generate some content for each element of the array, using a loop.
How to do it…
Follow these steps to build an example of iterating over arrays:
Modify your
manifests/nodes.pp
file as follows:node 'cookbook' { $ipaddresses = ['192.168.0.1', '158.43.128.1', '10.0.75.207' ] file { '/tmp/addresslist.txt': content => template('admin/addresslist.erb') } }
Create the file
modules/admin/templates/addresslist.erb
with the following contents:<% @ipaddresses.each do |ip| -%> IP address <%= ip %> is present. <% end -%>
Run Puppet:
ubuntu@cookbook:~/puppet$ papply Notice: /Stage[main]//Node[cookbook]/File[/tmp/addresslist.txt]/ensure: defined...