On Friday, 26 August 2016 07:58:39 UTC+1, Martin Alfke wrote:
>
> Hi Henrik, 
> > On 26 Aug 2016, at 00:25, Henrik Lindberg <henrik....@puppet.com 
> <javascript:>> wrote: 
> > 
> > 
> > The recommended approach is to always use 'include()' to include the 
> classes (you can include the same class any number of times). You then use 
> data binding (that is, automatic binding of class parameters to values) by 
> storing the parameters in hiera. 
>
> is include() still the recommended way? 
> Or should we start using contain()? 
>

Depends on if you want to ensure a class relationship or not. I would say 
containing classes in other modules is bad design, and soon you'll end up 
creating dependency loops. I would only ever contain a class that's in the 
same module, a common pattern would be:

class drupal {
  contain drupal::config
  contain drupal::install
  Class[drupal::install] -> Class[drupal::config]
}

https://docs.puppet.com/puppet/latest/reference/lang_containment.html

To comment on the original poster's problem, if Class[My_drupal_class] is 
creating Class[Apache] using the resource like syntax, then 
Class[My_drupal_class] is not designed very well. In practice Drupal does 
not depend on Apache. It's a set of PHP files and a MySQL database, and it 
may or may not have Apache serve it's PHP (it could be another web server). 
If Class[My_drupal_class] is intended to be used under Apache, then it 
should create it's own Apache::Vhost resource (assuming Puppetlabs' Apache 
module) and that's it. Then somewhere else in your manifest, you will 
instantiate Class[Apache] with all the settings you want. This way you 
could even run other Apache services on the same Drupal machine, or, move 
Drupal to any other Apache server. Here's a sketch of a role/profile 
approach I would use:

class role::mywebserver {
   class { 'apache':
      all my options...
   }
   contain profile::drupal
   contain profile::some_other_apache_service
   Class[apache] -> Class[profile::drupal]
}

class profile::drupal {
   class { 'my_drupal_class':
      option       => 'something',
      parameter => 'something else',
      woof         => 'meow',
   }
   apache::vhost { 'my_drupal_vhost':
     listen           => 80,
     docroot        => '/opt/drupal',
     otherparams => 'I can't remember',
   }
}

In the above, profile::drupal is portable to any other role / node.

-- 
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/196f3238-edef-46d3-8b09-07f0f3e9621d%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to