Hi John et al.
Thanks for this example. It's much clear for me now.

Thanks


On Tue, Apr 14, 2015 at 11:36 PM, jcbollinger <[email protected]> wrote:
>
>
> On Tuesday, April 14, 2015 at 12:55:47 AM UTC-5, Alfredo De Luca wrote:
>>
>> Hi all.
>> It might be a simple question for you.
>>
>> In hiera I have the followings
>>
>> protest::logdir: '/tmp/'
>> protest::logfile: fred
>> protest::text: 'ok ok was here'
>>
>> and the class is
>>
>> class protest (
>>   $logdir         = $protest::params::logdir,
>>   $logfile        = $protest::params::logfile,
>>   $text           = $protest::params::text
>> ) inherits protest::params {
>>
>>   $myfile = "$logdir$logfile"
>>   file { $myfile:
>>         ensure => file,
>>         content => inline_template("<%= text %>\n"),
>>         }
>> }
>>
>> and all works fine but I am struggling to use the class from hiera like
>> below
>>
>>
>> protest:
>>   file1:
>>     logdir: '/tmp/'
>>     logfile: fred1
>>     text: 'Alfredo1 was here'
>> protest:
>>   file2:
>>     logdir: '/tmp/'
>>     logfile: fred2
>>     text: 'Alfredo2 was here'
>>
>>
>> What do I need to modify in the class in order to use it like that?
>
>
>
> It depends on what you mean by "like that".  In the first place, you cannot
> have duplicate keys in hiera, and cannot have the same class appearing more
> than once in any node's catalog.  In the second place, the Hiera keys used
> with automated binding of class parameter values are determined by the class
> and parameter names; you are not at liberty to choose arbitrary names.
>
> If your objective is to manage multiple files via class 'protest', then you
> could rewrite it something like this (requires the future parser and the
> "stdlib" module; untested):
>
> class protest (
>   $files           = [],
>   $default_logdir = $protest::params::logdir,
>   $default_logfile = $protest::params::logfile,
>   $default_text   = $protest::params::text
> ) inherits protest::params {
>   # need to generate full file names from (dir, name) pairs
>   # it's helpful to also fill in default values here
>   $full_filedata = $files.map() |$filedata| {
>     {
>       path => join([
>         (haskey($filedata, 'logdir') ? { true => $filedata['logdir'],
> default => $default_logdir}),
>         (haskey($filedata, 'logfile') ? { true => $filedata['logfile'],
> default => $default_logfile})
>       ], ''),
>       text => (haskey($filedata, 'text') ? { true => $filedata['text'],
> default => $default_text})
>     }
>   }
>
>   $full_filedata.each() |$file| {
>     file { $file['path']:
>       ensure => 'file',
>       # no need for an inline template just to interpolate a variable's
> value:
>       content => "${file['text']}\n",
>     }
>   }
> }
>
>
> The data to go with this would need to be structured like so:
>
> protest::files:
>   - logdir: '/tmp/'
>     logfile: fred1
>     text: 'Alfredo1 was here'
>   - logdir: '/tmp/'
>     logfile: fred2
>     text: 'Alfredo2 was here'
> protest::default_logdir: '/tmp/'
> protest::default_file: 'log'
> protest::default_text: ''
>
> This example goes to considerable effort to preserve the multiple levels of
> default values afforded by your original code, but it may be that that is
> unneeded, in which case the class could be simplified, and maybe the data,
> too.
>
> On the other hand, this class does no data validation whatever.  A robust
> implementation would check the input data and fail with a meaningful
> diagnostic in the even that the data were not structured correctly or had
> inappropriate values.
>
>
> John
>
> --
> 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 [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/puppet-users/38404ec6-1921-4a9c-b43f-f4d96ece56f1%40googlegroups.com.
>
> For more options, visit https://groups.google.com/d/optout.



-- 
Alfredo

-- 
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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-users/CAAWpFTG5xC_%3Dk9XzyNKAOBK03ADuN-XUxZmLDti9-6h_NOKgvQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to