On Monday, May 19, 2014 10:18:11 AM UTC-4, jcbollinger wrote:
>
>
>
> On Friday, May 16, 2014 10:55:35 AM UTC-5, Jesse Cotton wrote:
>>
>> I work with Matt and am filling in for him since I posed this question to 
>> him originally.
>>
>> Our confusion really lies around how you layout profiles for a 
>> multi-function box. For example, suppose you have a role, "CMS App Server" 
>> that will host various CMS like Wordpress, Drupal, and others. They are all 
>> built on top of the same technologies, Apache, PHP, and MySQL. I don't 
>> believe you can build a separate profile for each CMS b/c they will 
>> conflict (at least within Puppet). Each will require a certain set of php 
>> modules and settings, apache modules and settings, etc. So do you build a 
>> single profile like profile::wordpress_drupal_cms3_cm4 or do you build a 
>> profile::apachefpm profile? The later seems more logical to me however you 
>> lose the ability to define profile specific hiera variables b/c 
>> profile::apachefpm is generic.
>>
>>
>
> You can declare the same class multiple times, provided that you use the 
> 'include' function or its cousins to do so.  That is a tremendously useful 
> technique for managing configurations where multiple facilities share 
> requirements on some of the same core resources.  Using 'include' instead 
> of resource-like class declarations means you must feed data to your 
> classes via hiera instead of via your manifests, but separating your data 
> from your manifests is good practice anyway.  That's what Christopher Wood 
> was pointing you toward, and it is good advice.
>
>
We're aware of most of this and agree with most of this. However when you 
always call include, you lose the ability to say a particular hiera 
variable is attached to the profile. For example

If you define:

class profile::apache_phpfpm {
  include ::apache
}

with the following in hiera:

apache::keepalive = 1

keepalive = 1 applies anywhere apache is included

vs

class profile::apache_phpfpm (
  $keepalive = 1
) {
  class { ::apache:
    keepalive => $keepalive
  }
}

profile::apache_phpfpm::keepalive = 1

So with the later you can build a somewhat self-contained profile. With the 
former you have to set variables "globally" or on a node.

 

> It is thus possible to find and/or write composable classes and modules 
> for managing the components you want.  As David Schmitt observes, 
> composability is not automatic, but I don't see why your particular case of 
> an apache-based PHP app server with firewall rules and a specific 
> collection of PHP and apache modules should present any special problem.
>
> Thus, the answer to your question is "neither."  You build a drupal 
> profile, and a wordpress profile, etc., and you use them all together.
>
>
So below is an example for Drupal. It could literally be cloned for 
Wordpress and Joomla. Unfortunately, b/c of the class declarations, it is 
not composable.

class profile::drupal (
  $apache_listen = ['80'],
  $apache_name_virtual_hosts = ['*:80'],
  $apache_modules = ['fastcgi'],
  $apache_fastcgi_servers = {
    'www' => {
      host => '127.0.0.1:9000',
      faux_path => '/var/www/php.fcgi',
      alias => '/php.fcgi',
      file_type => 'application/x-httpd-php'
    }
  },
  $phpfpm_pools = {
    'www' => {
      listen  => '127.0.0.1:9000',
      user => 'apache',
      pm_max_requests => 500,
      catch_workers_output => 'no',
      php_admin_value => {},
      php_value => {}
    }
  },
  $php_modules = [],
  $firewall_rules = {},
  $backup_jobs = {},
  $cron_jobs = {}
) {

  include ::apache
  ::apache::listen { $apache_listen: }
  ::apache::namevirtualhost { $apache_name_virtual_hosts: }
  ::apache::mod { $apache_modules: }
  create_resources(::apache::fastcgi::server, $apache_fastcgi_servers)

  include ::php::fpm::daemon
  create_resources(::php::fpm::conf, $phpfpm_pools)
  ::php::module { $php_modules: } ~> Service['php-fpm']

  # So the apache user is created before
  # php-fpm starts
  Class['::apache'] -> Class['::php::fpm::daemon']

  create_resources(firewall, $firewall_rules)
  create_resources(::duplicity::job, $backup_jobs)
  create_resources(::cron::job, $cron_jobs)
}
 

>
> John
>
>
>

-- 
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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-users/6a4218c6-fb00-4434-aa56-56de3fb33eff%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to