Anyone else feel free to step in and correct me, but here's how I see it...
2008/11/24 kevin <[EMAIL PROTECTED]>
>
> Ok, I've been reading and I have some questions about best practices:
>
> I understand that modules are to be self contained blocks that i can
> just drop in. Using best practices, how does this fit into the naming
> scheme?
>
> Classes are singletons. I think i understand this. I've been
> defining classes in /etc/puppet/classes, but then how does this relate
> to any modules i might want to use?
>
So, the idea behind a module really relates more to organization than
anything else. Generally speaking, modules contain classes. But back to
your question. The fact you're defining classes in /etc/puppet/classes only
relates to any modules you might want to use if you define a class that has
the same name as a class defined in a module, inwhich case you'd have a
naming conflict.
> what is the difference between
> class::whateverthismethodlikethingisinpuppetsyntax and class? ie:
>
> class apache {
> #
> }
>
> class apache::wtf {
> #
> }
>
Effectively everything. 'class' vs 'class:foo' are two different classes.
The idea is 'class::foo' is a subclass of 'class', however there isn't
anything besides sanity that enforces this. if you wanted class
'apache::wtf' to setup NIS+ and class 'apache' sets up a TFTP server, then
that's your deal. Generally speaking you'd set that relationship up to be
subclassed like the below contrived example:
class apache {
package { 'apache':
ensure => 'installed',
}
service { 'apache':
ensure => 'running',
}
file { "/etc/apache/httpd.conf":
source => 'puppet:///apache/normal.conf',
}
}
class apache::wtf inherits apache {
File["/etc/apache/httpd.conf"] {
source => 'puppet:///apache/wtf.conf',
}
}
Some syntax might be wrong, its monday and a short week in the states so I'm
a bit checked out. In any event you'd have a node that includes
'apache:wtf', which inherits 'apache' so you get all the work you did in
that class as well, with the override of httpd.conf
also, classes are not methods...
>
> What is the actual function of site.pp? I had thought it was the
> entry point for puppetmasterd. so how would I include a module in a
> site?
>
> site.pp is included whenever a client requests a configuration. Generally
speaking you'd have your node definitions in there (or in nodes.pp, or in an
external node tool). I also use it to set defaults for types, eg setting a
path for Exec, setting ensure => installed for Package, etc (but I'm also
very lazy).
As for including a module from site.pp, you'd just say 'include mymodule'.
This does require some plumbing: in your puppet.conf under the
[puppetmaster] section add something like[1]:
modulepath = /var/lib/puppet/modules
Then just copy the module to that directory. For example if you had the
module 'foo' you would end up with something like:
/var/lib/puppet/modules/foo/manifests/init.pp
/var/lib/puppet/modules/foo/manifests/subclass.pp
/var/lib/puppet/modules/foo/files/myfile.txt
/var/lib/puppet/modules/foo/files/otherfile.txt
/var/lib/puppet/modules/foo/templates/example.erb
Puppet will 'magically' take care of
.r'
[1]: http://reductivelabs.com/trac/puppet/wiki/ModuleOrganisation
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---