On Tuesday, August 7, 2012 1:25:32 PM UTC-5, Douglas wrote:
>
> As usual, I'm confused about scope in puppet. This puppet 2.7.1. 
>
> In my classes below, the bottom class, company::web::content, requires 
> the file resource '/usr/local/company'. However, that resource is 
> defined two includes back in the class company::common. I always 
> thought this wasn't supposed to work, and that you could only access 
> the immediate scope, not the scope of stuff beyond this. It does work 
> however. Is it supposed to. Why? 
>

Yes, it is supposed to.  All classes and resources have global scope once 
they are declared.  The 'include' function does not introduce classes and 
their resources into the current, innermost scope -- it doesn't need to do 
so, and couldn't even if it wanted to do.  Instead, 'include' ensures that 
the specified class has been parsed and added to the catalog, which, as I 
said, puts them into the global scope.

The model pretty much has to work that way, because the physical resources 
of the target node all have global scope, too.

It is useful and appropriate for classes and definitions to 'include' (or 
'require') the classes on which they rely, provided that those classes are 
not parametrized (Puppet <= 2.7.x).  Aside from it's plain aggregation 
function, that way it's a lot easier to make classes independent of the 
order in which they are declared, plus it has documentary value.  Classes 
that 'include' all the classes on which they directly rely are more robust.

However, there is no requirement for a class to 'include' its 
dependencies.  If a class does not do so, then it simply relies on those 
dependencies to have been declared by some other class that was parsed 
before it.  Users of parametrized classes rely heavily on this, because 
parametrized classes can be declared only once, but they may need to be 
referenced by many other classes.


John

 

>
>
> class company::common { 
>     file { 
>         '/usr/local/company': 
>         .... 
>     } 
> } 
>
>
> class company::web::common { 
>     include company::common 
> } 
>
>
> class company::web::content { 
>     include company::web::common 
>
>     file { 
>         '/usr/local/company/www': 
>             require => File['/usr/local/company'] 
>     } 
> } 
>
> Doug. 
>

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/puppet-users/-/2i9JGMwdfdAJ.
To post to this group, send email to puppet-users@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