On 03.12.2009 23:29, Chris F wrote:
> I want to do the following
>
> declare variable:
>
> $usernames = [ "chris", "bob", "tim" ]
>
> How would I iterate over it to create something like:
>
> user { "$username":
>             home =>  "/home/$username",
>          }
>
> Also is it possible to create a more complex structure with $UID and
> $Shell
>
> I'm thinking of something like this:
>
> $users        = [ "chris": {
>                                  UID   =>  800,
>                                  Shell =>  "/usr/bin/bash",
>                         },
>                           "bob": {
>                                   UID   =>  801,
>                                   Shell =>  "/usr/bin/zsh",
>                         }, ]
>    
This is kind of close to the user defintion. You may define multiple 
resources of the same type somewhat like that 
(http://reductivelabs.com/trac/puppet/wiki/LanguageTutorial#resource-collections)




> Then I can reference via
> foreach $user $users {
> user { "$user":
>             home =>  "/home/$user",
>             UID    =>  $user=>UID,
>             Shell  =>  $user=>Shell,
>          }
> }
>    
As far as I know puppet does not have iterative statements (except for 
templates which are a diffrent topic).
You could create a define, which receives your parameters and builds 
other resources, and use the above semantics (from the link)

ie
define user_home($user,$UID, $Shell)
{
     user { $user:
         home => "/home/${user}",
         uid    => $UID,
         shell    => $Shell,
}

and use it as


user_home
{
     "user1":
         blah;
     "user2":
         blah;
}
> Again this is only pseudocode, but I'm wondering if puppet has this
> kind of functionality or if there's another way to do this that
> haven't found.
>
> Also I want to iterate over an array of names to create individual
> files:
>
> $usernames = [ "bob", "tim" ]
>
> foreach $username $usernames {
> file { "/etc/httpd/conf.d/${username}-www.conf
>           ensure  =>  present,
>          owner   =>  "root",
>          group   =>  "root",
>          mode    =>   "644",
>          notify  =>  Service["httpd"],
>          content =>  $environment ? {
>              production  =>  template("services/www/prod-www.conf.erb"),
>              staging     =>  template("services/www/stg-www.conf.erb"),
>              development =>  template("services/www/dev-www.conf.erb"),
>          }
> }
>
> With $username in various point in the template.
>
> Are either of these possible?  Can anyone suggest a better way?
>
> I know for the file I can iterate with the template and create one
> large conf file, but I'd rather keep the conf files separate based on
> user.
>
> Thanks
>
> Chris
>
> --
>
> You received this message because you are subscribed to the Google Groups 
> "Puppet Users" group.
> To post to this group, send email to puppet-us...@googlegroups.com.
> To unsubscribe from this group, send email to 
> puppet-users+unsubscr...@googlegroups.com.
> For more options, visit this group at 
> http://groups.google.com/group/puppet-users?hl=en.
>
>
>    
Cheers,
     Silviu

--

You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To post to this group, send email to puppet-us...@googlegroups.com.
To unsubscribe from this group, send email to 
puppet-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/puppet-users?hl=en.


Reply via email to