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 puppet-users@googlegroups.com
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