Thanks for the hints, I’ll check what fits best.

Regards Thomas

> Am 03.03.2016 um 19:29 schrieb Henrik Lindberg 
> <henrik.lindb...@puppetlabs.com>:
> 
> On 02/03/16 11:26, Thomas Bendler wrote:
>> Hi @all,
>> 
>> I write a module that create local users on my boxes. Now I try to make
>> that module fully dynamic so that the user informations are passed to
>> the module as parameter like this:
>> 
>> class { 'local_users':
>>   user => [
>>     { 'john' => { name => 'John Doe', home => '/export/home/john' } },
>>     { 'jane' => { name => 'Jane Doe', home => '/export/home/jane' } }
>>   ]
>> }
>> 
> You could use a hash there directly instead of an array of hashes. The 'id' 
> (e.g. 'john', 'jane' has to be unique anyway.
> 
>> So far, so good. But now I would like to iterate through the user array
>> and create the user resource and I have no clue how this should be done
>> correctly. My approach is to call a define:
>> 
>> local_users::config::account { $local_users::user }
>> 
>> Which look like this:
>> 
>> define local_users::config::account (
>>   $id   = $title,
>>   $name = undef,
>>   $home = undef
>> ) {
>>   user { $id:
>>     ensure     => present,
>>       comment    => $name,
>>       home       => $home,
>>       managehome => true,
>>       password   => '!!';
>>   }
>> }
>> 
>> I guess the direction should be understandable, I would like to specify
>> the users and their attributes as a parameter. What I don't get so far
>> is, do I need one resource definition for each possible combination or
>> is there a way that only the parameter that contain values are used
>> within the resource type? Is the path in general the correct one that I
>> use or is there a better approach to get this done?
>> 
> 
> If you are on 3.x with future parser, or on 4.x you can iterate.
> 
> I made some simplifications here, everything is one hash, and
> I renamed 'name' to 'comment' so I could use the hash directly
> to set all attributes without having to first transform 'name'
> into 'comment'.
> 
> class { 'local_users':
>  user => {
>    'john' => { comment => 'John Doe', home => '/export/home/john' },
>    'jane' => { comment => 'Jane Doe', home => '/export/home/jane' }
>  }
> }
> 
> class local_users($users) {
>  $users.each |$id, $attributes | {
>    user { $id:
>      managehome => true,
>      password   => '!!',
>      *          => $attributes  # attributes from hash
>    }
>  }
> }
> 
> With typed parameter
> ----
> 
> To make it more robust you can also type the $users argument
> 
> class local_users(
>  Hash[String, Struct[{
>    name => String,
>    home => String}]
>  ] $users)
> {
>  $users.each |$id, $attributes | {
>    user { $id:
>      managehome => true,
>      password => '!!',
>      * => $attributes
>    }
>  }
> }
> 
> Hope that helps.
> 
> Regards
> - henrik
> 
> --
> 
> Visit my Blog "Puppet on the Edge"
> http://puppet-on-the-edge.blogspot.se/ 
> <http://puppet-on-the-edge.blogspot.se/>
> 
> --
> You received this message because you are subscribed to the Google Groups 
> "Puppet Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to puppet-users+unsubscr...@googlegroups.com 
> <mailto:puppet-users+unsubscr...@googlegroups.com>.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/puppet-users/56D88274.2010101%40puppetlabs.com
>  
> <https://groups.google.com/d/msgid/puppet-users/56D88274.2010101%40puppetlabs.com>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to puppet-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-users/C15FDCB5-3E68-4598-B4E8-055A509C31FA%40gmail.com.
For more options, visit https://groups.google.com/d/optout.

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail

Reply via email to