On 1/22/2014 7:35 PM, Nathan Nobbe wrote:

I read Craig's article numerous times and have recently published an
article <http://quickshiftin.com/blog/2014/01/composition-in-puppet/> on
my thoughts. To summarize, I feel the big lesson from the article is
composition is needed to define reusable grouped module declarations
(aka /roles/). Whether or not you like the notion of the 2-layered
approach (roles /and/ profiles) is something else and a bit extra IMO.

That said I'm only managing tens of servers rather than hundreds or
thousands so far, but for me one layer to represent 'roles' has worked
great.

What it amounts to for me is a simple guideline - leverage inheritance
(or the hiera hierarchy) as much as possible and introduce composition
on a need-to basis. Composition is necessary though, unless all your
systems are identical.

Thanks again Craig for the article. Neat to find you on the google group!

-nathan

If I had the 20-30 hours to write a Puppet Conf presentation it would be called "The profile is the most important part of role/profile." :-)

In a simple system with a webserver and database, profiles don't appear to add much. However in a complex system where an Apache server could be a proxy, app server, ssl terminator, or other function the added layer is very necessary. In my system I have 25+ roles half of which use profile::apache to get vastly different configs. In each case profile::apache provides the entry point for the data Hiera provides based on Role.

Profile classes are where you get to be opinionated about your config. In my sample profile::apache class below my Apache module can remain generic and shareable while profile::apache pulls in things like collectd, logstash, etc that are specific to how *I* think any server with Apache should be installed.

You might also check out Craig's later presentation on role profile which provides a clearer picture than his earlier blog post. http://www.slideshare.net/PuppetLabs/roles-talk

Ramin

class profile::apache {

  include ::apache
  include profile::logstash
  include profile::sslcerts

  collectd::plugin { 'apache': }
  logrotate::simple { 'apache':}

  $mymods = hiera('apache::a2mods', {})
  create_resources('apache::a2mod', $mymods)

  $myvhosts = hiera('apache::vhosts', {})
  create_resources('apache::vhost', $myvhosts)

  Sslcerts::Cert<||> -> Class['apache::service']
}

--
You received this message because you are subscribed to the Google Groups "Puppet 
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to puppet-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-users/52E188C8.5020807%40badapple.net.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to