Toisinaan tulee tarve luoda useita samankaltaisia resursseja, joissa vain jonkin yksittäisen ominaisuuden arvo muuttuu. Esimerkiksi intranetin webbipalvelimeen voi joutua sallimaan yhteydet palomuurin läpi sekä sisäverkon että VPN:n osoiteavaruudesta. Vaikka Puppet ei suoraan tuekaan iteraatiota, sitä voi emuloida antamalla resurssin nimeksi ($title) listan merkkijonon sijaan.
Esimerkiksi Puppet-Finlandin webserver-moduulissa on parametrit $allow_address_ipv4 ja $allow_address_ipv6. Ne voivat saada arvokseen joko merkkijonon ('192.168.55.0/24') tai listan (['192.168.55.0/24', '10.69.0.0/16']):
class webserver::packetfilter ( $allow_address_ipv4, $allow_address_ipv6 ) inherits webserver::params
Kummankin parametrin arvo annetaan ::webserver::packetfilter::allow_ip -resurssin nimeksi ($title):
webserver::packetfilter::allow_ip { $allow_address_ipv4: provider => 'iptables' } webserver::packetfilter::allow_ip { $allow_address_ipv6: provider => 'ip6tables' }
Tämä aiheuttaa sen, että Puppet luo jokaista parametrina annetun listan alkiota kohden yhden annetun tyyppisen resurssin, jonka $title on listan alkion arvo. Webserver-moduulin tapauksessa kutakin alkiota kohden luodaan kaksi palomuurisääntöä:
define webserver::packetfilter::allow_ip ( $provider = 'iptables' ) { include ::webserver::params $allow_address = $title $source = $allow_address ? { 'any' => undef, default => $allow_address, } firewall { "003 accept http from ${allow_address}": provider => $provider, chain => 'INPUT', proto => 'tcp', source => $source, dport => 80, action => 'accept', } firewall { "004 accept https from ${allow_address}": provider => $provider, chain => 'INPUT', proto => 'tcp', source => $source, dport => 443, action => 'accept', } }
Vastaavaa tekniikkaa voi käyttää myös useamman sisäkkäisen hakemiston luomiseen - alla esimerkki Puppet-Finlandin firefox-moduulista:
file { [ $mozilla_dir, $firefox_dir, $profiles_dir, $profile_dir ]: ensure => directory, owner => $username, }