Issue #11331 has been updated by Daniel Pittman. Status changed from Unreviewed to Needs Decision Assignee set to Randall Hansen
I am certain this is a duplicate of another ticket, but I can't locate it. This is a common, and fairly valid request, but I would strongly prefer something that modelled the semantics of creating, and applying, an anonymous define on an array instead of an explicit "loop" construct in the language. That "expansion" model rather than looping is more declarative, and more in keeping with the desires we have for the language long term. Randall, ultimately this is your baby, along with other DSL work. Can you take ownership of it and, ideally, merge it with the ticket I couldn't find? ---------------------------------------- Feature #11331: Add 'foreach' structure in manifests https://projects.puppetlabs.com/issues/11331 Author: Steve Shipway Status: Needs Decision Priority: Normal Assignee: Randall Hansen Category: language Target version: Affected Puppet version: Keywords: foreach language Branch: I doubt this would be simple to do, but it would be very useful to be able to do something like this: $variable = [ 'a', 'b', 'c' ] foreach $loop $variable { file { "/tmp/$loop": content=>"I am file $loop"; } } While it is already possible to use an array as a namevar to get something similar, it doesnt allow you to have calculated parameters as well. This would not be expected to break the declarative nature of puppet, though it would bring in a new variable scope in the loop. Using a define with an array for the namevar would work provided the top level could not be called multiple times. We want to have something like this: define firewall($users,$port) { iptables::open { $users: port=>$port; } } node foo { $webusers = [ 'fred', 'sid' ] $sshusers = [ 'fred', 'joe' ] firewall { port80: users=>$webusers, port=>80; } firewall { port22: users=>$sshusers, port=>22; } } This example would fail because the iptables::open define is called with user 'fred' two times (although with a different port parameter). If we could instead have a foreach iteration then something like this would be useable: define firewall($users,$port) { foreach $users { iptables::open { "$loop:$port": user=>$loop, port=>$port; } } } This would ensure a unique namevar for iptables::open. We would also be able to do things like initialise an array of users with different metadata parameters (eg, their full names pulled form LDAP) -- You have received this notification because you have either subscribed to it, or are involved in it. To change your notification preferences, please click here: http://projects.puppetlabs.com/my/account -- You received this message because you are subscribed to the Google Groups "Puppet Bugs" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/puppet-bugs?hl=en.
