On Tuesday, May 20, 2014 12:54:15 PM UTC-5, Jesse Cotton wrote:
>
>
> Understood. However without creating a custom fact, I am not aware of a 
> way to say 'apache::keepalive = 1' only applies when a node has the profile 
> 'profile::apache_phpfpm'. 
>
>

There is no good way to say that to Puppet.  It reflects a non-idiomatic 
thought process.  Moreover, it's unlikely to be what you really want to say 
-- you might in the future want other nodes to have keepalive enabled, 
too.  You should instead consider how to assign apache::keepalive: 1 to 
exactly those nodes that get profile::apache_phpfpm.

There are at least two ways you could approach that problem:

   1. If you are using hiera to assign roles and/or profiles to nodes then 
   it should be entirely straightforward to override apache::keepalive at the 
   same hierarchy level where you assign profile::apache_phpfpm.
   2. You can perform a resource parameter override in 
   profile::apache_phpfpm.

If it is viable, the former is preferable to the latter.  A resource 
parameter override is a bit messy because it relies on implementation 
details of module 'apache'.  (It does not work to override class 
parameters; you must instead override one or more parameters of a bona fide 
resource, which can be of either defined or native type.)

 

>
> And the foregoing is based on using only the built-in YAML back end.  
>> Hiera supports pluggable back ends, usable together or separately.  A 
>> custom back end can employ whatever lookup or computation you want to serve 
>> whichever data you choose.
>>
>>
> We're really trying to avoid this.
>


I don't blame you.  A custom back-end should certainly be a last resort.  
As you keep that alternative in reserve, however, don't forget that such a 
custom component does not necessarily need to replace the YAML back-end; 
hiera can use two (or more) at the same time.

 

>
>>> 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)
>>> }
>>>  
>>>
>>
>>
>> Either you're missing something or I am.  I see nothing in that class 
>> that would inherently preclude it being composed.  In particular, the two 
>> class declarations it contains both use 'include', not the resource-like 
>> class declaration syntax.  If there is a barrier to composition it would be 
>> related to composition with another class that declares some of the same 
>> resources.  That problem has a solution, however: factor out the 
>> multiply-declared resources into their own class or classes, which the 
>> then-composable classes declare instead of declaring the resources directly.
>>
>>
> Duplicate declaration: Apache::Listen[80] is already declared in file ...
>
>
>

As I said, a duplicate resource.  As I said, factor it (and the others) 
out.  I think it's excellent practice to avoid resource declarations 
directly in profile classes, unless possibly of resources that are 
assuredly specific to the profile in which they appear.

 

> Yes, the class could be broken into separate classes but this only 
> exacerbates the issue of assigning variables based on the profile.
>
>
>

But that's just it: you don't *want* to assign data based (strictly) on 
profile.  Or if you do, then understand that it is inherently inconsistent 
with composable profiles.  Since the node characteristic that determines 
the combination of profiles in use is its role, it is on that basis that 
you want to assign data.  Indeed, that's what you already said with respect 
to apache::keepalive.  Note that with hiera, that doesn't mean you must 
avoid assigning data based on profile; it just means you must (also) be 
able to assign data based on role, with the role-based data having higher 
priority.


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 puppet-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-users/3e64dace-ed21-4fdb-9130-94f443931448%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to