On Wednesday, June 8, 2016 at 11:49:58 PM UTC-5, Harish Kothuri wrote:
>
> Hi,
>
> I have classA with parameter and i want to include this in another classB 
> . I expected to consider the default value defined in foreman for classA 
> but it's not happening. 
>
>
> class classA ($version)
> {
>
[...] 

> }
>
>
> class classB($variable)
> {
>
> *include classA   # throws error in this line "Must pass parameter to 
> Class [ClassA]*
> [...]
> }
>
>

The Foreman is providing you an opportunity to define a default for the 
class parameter *for its own purposes*.  This default applies when you 
assign a class to a node directly via The Foreman, but it is external to 
Puppet.  It does not apply when one class assigns another to the node.

You have three main options:

   1. In class B, use resource-like declaration of class A, in which you 
   explicitly specify a value for class A's parameter.
   2. Rely on automated data binding (i.e. Hiera) to specify a value for 
   class A's parameter.
   3. Specify your default value for the parameter in class A's definition.

In fact, those options are non-exclusive: you can use any combination.  
They are listed in priority order; the first one that provides a parameter 
value wins.  For classes assigned directly via The Foreman, any parameter 
assignments via The Foreman are roughly equivalent to option (1).  
Parameter value binding is evaluated on a per-parameter basis, so different 
parameters' values can be assigned via different options.

HOWEVER, if you have any classes that may be declared more than once then 
option (1) is largely off the table.  That option can be exercised at most 
once for any given class, and that must occur in the first-evaluated 
declaration of the class for a given catalog.  It can be difficult to 
control the order in which declarations are evaluated, so exercising option 
(1) safely can be tricky.

Inasmuch as you can have only one default value per parameter built into a 
class definition, and inasmuch as one prefers to avoid modifying 
third-party modules, option (3) has somewhat limited utility.  You cannot 
rely on it (exclusively) where you want a parameter to take different 
values in different cases, and if you do not like the value you get this 
way then your only means to change it is to modify the class definition.

That leaves option (2) as the only truly general-purpose approach.  
Automated data binding was one of the greatest advances in Puppet 3 -- 
learn it, live it, love it.


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/82e67d0b-d1d7-4418-80e8-679ff99cdcc4%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to