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,
}



