Issue #2716 has been updated by Nigel Kersten.

Status changed from Needs Decision to Needs More Information

This actually needs more info. 

I'm totally sympathetic to both the requested feature, and the implications of 
having modules split across multiple modulepaths, as I don't believe that's 
going to end up in an easy to understand place for the average user.

----------------------------------------
Refactor #2716: Provide some way to override puppet classes
https://projects.puppetlabs.com/issues/2716

Author: Robin Bowes
Status: Needs More Information
Priority: Normal
Assignee: Nigel Kersten
Category: modules
Target version: 
Affected Puppet version: 
Keywords: 
Branch: 


I like to try and write generic puppet modules, ie. they are standalone as much 
as possible and should work in copied and pasted into another puppet 
environment. However, sometimes I may want to use a generic module but override 
the configuration.

I generally write my modules like this:

<pre>vsftpd
|-- files
|   `-- vsftpd.conf
`-- manifests
    |-- config.pp
    |-- init.pp
    |-- install.pp
    `-- service.pp</pre>

init.pp contains sometihng like this:

<pre>class vsftpd {
    require vsftpd::install, vsftpd::config, vsftpd::service
}</pre>

I had hoped that I could override classes by using modulepath like:

<pre>site/modules:generic/modules</pre>

I would put my generic modules in the generic/modules tree and over-ride 
specific class by putting them in the site/modules tree.

So, I created a vsftpd tree (as above) in generic/modules and created the 
following tree in site/modules:

<pre>vsftpd
`-- manifests
    `-- config.pp</pre>

I also added a module for my test node:

<pre>node
`-- manifests
    `-- a001.pp</pre>

a001.pp contains:

<pre>class node::a001 {
    include vsftpd
}</pre>

When I run puppetd --test on node a001, I get this error:

<pre># puppetd --test
info: Retrieving plugin
err: Could not retrieve catalog from remote server: Error 400 on SERVER: Could 
not find class vsftpd in namespaces node::a001 at 
/etc/puppet/site/modules/node/manifests/a001.pp:3 on node 
a001.private.statcounter.com
warning: Not using cache on failed catalog
err: Could not retrieve catalog; skipping run</pre>

It seems that puppet is finding site/modules/vsftpd and assuming that the 
vsftpd class is in site/modules/vsftpd/manifests/init.pp, which of course it 
isn't.

I suggest that puppet should look for <modulename>/manifests/init.pp (not just 
<modulename>) in each element of $modulepath before deciding that it can't find 
<modulename>. This would allow classes to be over-ridden.


-- 
You have received this notification because you have either subscribed to it, 
or are involved in it.
To change your notification preferences, please click here: 
http://projects.puppetlabs.com/my/account

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Bugs" 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-bugs?hl=en.

Reply via email to