On Tue, Apr 26, 2011 at 6:52 AM, Tony G. <[email protected]> wrote:
>
>
> On Tue, Apr 26, 2011 at 8:22 AM, Felix Frank
> <[email protected]> wrote:
>>
>> Hi,
>>
>> On 04/22/2011 06:48 PM, Tony G. wrote:
>> > Hi all,
>> >
>> > Found a situation on which all classes inside a directory are ignored,
>> > this when the directory name is the same as a module name.
>> >
>> > err: Could not retrieve catalog from remote server: Error 400 on SERVER:
>> > Could not find class bar at
>> > /opt/puppet/test/nodes/gnucloud.tonyskapunk.net.pp:2 on node
>> > gnucloud.tonyskapunk.net <http://gnucloud.tonyskapunk.net>
>> >
>> > Basically I have on site.pp an import of multiple classes inside a
>> > directory with import "foo/*" and also a module called "foo"
>>
>> this is a strange requirement indeed. Can you shed any light on why you
>> want such a structure? It sounds undesirable, even though it should
>> still work.
>
> The idea behind this is to use modules as generic as possible to be
> implemented by any other class, in this case directory 'foo' will contain
> classes with specific modules, e.g. a server class which implements http,
> mysql, and so.
>>
>> > Running debug on the master I see only the module is imported, this
>> > looks like a ruby thing, but since I'm not good at ruby I better ask,
>> > why is being ignored?
>> >
>> > debug: importing '/opt/puppet/test/modules/foo/manifests/init.pp' in
>> > environment test
>> >
>> > Details:
>> > Server/Client: 2.6.7
>> > Node has: import bar
>> > bar is a class inside "foo" directory that is imported in site.pp
>>
>> This should be "include bar" then.
>>
> Correct it was a typo, I'm using "include bar"
>
>>
>> Import is a feature that should be considered deprecated.
>> Try and organize everything into modules and exploit the autoloader,
>> i.e. make another module "foo_module" with all the classes currently in
>> disorganized .pp-files in your manifests/foo/ directory and only do
>>
>> include foo_module::bar
>>
>> without any import statements. There is less pain (and better
>> performance I feel) down that road.
>>
> Agree, I should take advantage of autoloader, but how people handle those
> classes where the implementation of multiple modules are required?
> My concept of modules(including structure) is a source of generic reusable
> classes by other specific classes that will be placed somewhere and thus
> imported at some point.

The classes are loaded from modules in modulepath in the order of
their precedence.

So modulepath=/path/a:/path/b

If you have module foo in both /path/a/foo and /path/b/foo, include
foo will load the module in /path/a and ignore /path/b.

> I'm curious about the performance part but mainly on how puppet and/or ruby
> is loading those classes, as it seems to me like is ignoring my classes
> inside the directory once a module with the same name is loaded.

So if you want to take advantage of this behavior, put your class in a
module, and put that module in a module path that have
precedence/priority over the other modules with the same name.

Thanks,

Nan

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-users?hl=en.

Reply via email to