Brian Ferris schrieb:
> I have a list of databases and a list of users.  I want to to grant
> privileges on each database to each user, for a total of # databases x
> # users.  I'd rather not write out the grant snippet for each unique
> combination, but rather define the databases as an array of values
> along with the users as an array of values, and then iterate over
> their cross-product.  However, I'm finding this tricky to do in
> Puppet.
> 
> The main way to perform iteration in Puppet seems to be the Array as
> $name trick:
> 
> file { ['a','b','c']: ... } is expanded to file {'a':..}, file
> {'b': ...}, file {'c': ...}
> 
> I'm not sure how I can make this trick worth with a cross-product of
> two arrays.  Something like:
> 
> define outer_loop($inner_values) {
>   inner_loop { $inner_values:
>     outer_value => $name
>   }
> }
> 
> define inner_loop($outer_value) {
>   # perform op on ${outer_value} + ${name}
> }
> 
> Doesn't work, because the call to inner_loop in each iteration of the
> array results in duplicate definition instantiations.  I know I'm not
> supposed to think of definitions as functions, but is there some way
> of getting the desired before I'm looking for?


This is one of the applications of my prefix_with function:

http://github.com/DavidS/puppet-common/blob/de7690c4e76ddd7c1f01d81fe92c75771da47c51/plugins/puppet/parser/functions/prefix_with.rb


 >
 > define outer_loop($inner_values) {
 >   inner_loop { prefix_with("${name}/", $inner_values):
 >     outer_value => $name
 >   }
 > }
 >
 > define inner_loop($outer_value) {
 >   # perform op on ${outer_value} + ${name}
 > }
 >

On the downside, you will have to use something like regsubst(0.24.8+) 
or gsub(common module) to get the original value back.

On the upside, this creates unique and more descriptive names.



Regards, DavidS


-- 
dasz.at OG              Tel: +43 (0)664 2602670     Web: http://dasz.at
Klosterneuburg                                         UID: ATU64260999

        FB-Nr.: FN 309285 g          FB-Gericht: LG Korneuburg

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Puppet Users" 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-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to