On Thursday, August 27, 2015 at 7:59:28 AM UTC-5, Peter Huene wrote:
>
>
> On Wed, Aug 26, 2015 at 11:50 PM, Francis Chan <poi...@gmail.com 
> <javascript:>> wrote:
>
>> I'm using the something like this since I want all of class bar to be 
>> applied before any class foo:
>>
>> # init.pp for module bar
>> class bar( $var = "hello" )
>> {
>> }
>>
>>
>> # something.pp in module foo
>> class foo::something {
>>     require bar
>> }
>>
>>
> Instead of using the `require` function, try using the "resource-like" 
> declaration syntax:
>
>

Oh, goodness No!  Avoid resource-like class declarations wherever possible, 
and *always* avoid using them to declare public classes of any module.  
Although resource-like syntax does provide for specifying parameters at the 
point of declaration, it introduces both an evaluation-order dependency and 
a potential declaration conflict.

The best way to provide class parameter values, especially for public 
classes, is via Puppet's automatic data binding feature.  If you're using 
an ENC, then providing class parameters via ENC is also a reasonable 
alternative.  The manual discusses class declarations 
<https://docs.puppetlabs.com/puppet/3/reference/lang_classes.html#declaring-classes>
 
and the include-like (which includes 'require') vs. resource-like styles.  
Do not overlook the best-practices callout in that section.  There are 
cases where using resource-like syntax makes sense, but simply wanting to 
provide non-default parameter values is in no way good justification.

Automated data binding relies on Hiera.  A full run-down on Hiera use is a 
little out of scope here, but basically, when you declare any class, using 
either style, Puppet will perform a Hiera lookup for each class parameter 
that is not assigned a value in the declaration (for include-like syntax, 
that's all of them).  It uses keys of the form 
"full::class::name::parameter", and if that key is present then its value 
is used as the value for the class parameter.  In your example, then, you 
would arrange for Hiera to provide a value for key "bar::var".


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 puppet-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-users/de5c352d-bf15-49df-a5b3-d51745a4894d%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to