]> git.donarmstrong.com Git - dsa-puppet.git/blob - 3rdparty/modules/apache/manifests/init.pp
add Openstack modules to 3rdparty
[dsa-puppet.git] / 3rdparty / modules / apache / manifests / init.pp
1 # Class: apache
2 #
3 # This class installs Apache
4 #
5 # Parameters:
6 #
7 # Actions:
8 #   - Install Apache
9 #   - Manage Apache service
10 #
11 # Requires:
12 #
13 # Sample Usage:
14 #
15 class apache (
16   $apache_name            = $::apache::params::apache_name,
17   $service_name           = $::apache::params::service_name,
18   $default_mods           = true,
19   $default_vhost          = true,
20   $default_charset        = undef,
21   $default_confd_files    = true,
22   $default_ssl_vhost      = false,
23   $default_ssl_cert       = $::apache::params::default_ssl_cert,
24   $default_ssl_key        = $::apache::params::default_ssl_key,
25   $default_ssl_chain      = undef,
26   $default_ssl_ca         = undef,
27   $default_ssl_crl_path   = undef,
28   $default_ssl_crl        = undef,
29   $default_ssl_crl_check  = undef,
30   $default_type           = 'none',
31   $ip                     = undef,
32   $service_enable         = true,
33   $service_manage         = true,
34   $service_ensure         = 'running',
35   $service_restart        = undef,
36   $purge_configs          = true,
37   $purge_vhost_dir        = undef,
38   $purge_vdir             = false,
39   $serveradmin            = 'root@localhost',
40   $sendfile               = 'On',
41   $error_documents        = false,
42   $timeout                = '120',
43   $httpd_dir              = $::apache::params::httpd_dir,
44   $server_root            = $::apache::params::server_root,
45   $conf_dir               = $::apache::params::conf_dir,
46   $confd_dir              = $::apache::params::confd_dir,
47   $vhost_dir              = $::apache::params::vhost_dir,
48   $vhost_enable_dir       = $::apache::params::vhost_enable_dir,
49   $mod_dir                = $::apache::params::mod_dir,
50   $mod_enable_dir         = $::apache::params::mod_enable_dir,
51   $mpm_module             = $::apache::params::mpm_module,
52   $lib_path               = $::apache::params::lib_path,
53   $conf_template          = $::apache::params::conf_template,
54   $servername             = $::apache::params::servername,
55   $manage_user            = true,
56   $manage_group           = true,
57   $user                   = $::apache::params::user,
58   $group                  = $::apache::params::group,
59   $keepalive              = $::apache::params::keepalive,
60   $keepalive_timeout      = $::apache::params::keepalive_timeout,
61   $max_keepalive_requests = $::apache::params::max_keepalive_requests,
62   $logroot                = $::apache::params::logroot,
63   $logroot_mode           = $::apache::params::logroot_mode,
64   $log_level              = $::apache::params::log_level,
65   $log_formats            = {},
66   $ports_file             = $::apache::params::ports_file,
67   $docroot                = $::apache::params::docroot,
68   $apache_version         = $::apache::version::default,
69   $server_tokens          = 'OS',
70   $server_signature       = 'On',
71   $trace_enable           = 'On',
72   $allow_encoded_slashes  = undef,
73   $package_ensure         = 'installed',
74   $use_optional_includes  = $::apache::params::use_optional_includes,
75 ) inherits ::apache::params {
76   validate_bool($default_vhost)
77   validate_bool($default_ssl_vhost)
78   validate_bool($default_confd_files)
79   # true/false is sufficient for both ensure and enable
80   validate_bool($service_enable)
81   validate_bool($service_manage)
82   validate_bool($use_optional_includes)
83
84   $valid_mpms_re = $apache_version ? {
85     '2.4'   => '(event|itk|peruser|prefork|worker)',
86     default => '(event|itk|prefork|worker)'
87   }
88
89   if $mpm_module {
90     validate_re($mpm_module, $valid_mpms_re)
91   }
92
93   if $allow_encoded_slashes {
94     validate_re($allow_encoded_slashes, '(^on$|^off$|^nodecode$)', "${allow_encoded_slashes} is not permitted for allow_encoded_slashes. Allowed values are 'on', 'off' or 'nodecode'.")
95   }
96
97   # NOTE: on FreeBSD it's mpm module's responsibility to install httpd package.
98   # NOTE: the same strategy may be introduced for other OSes. For this, you
99   # should delete the 'if' block below and modify all MPM modules' manifests
100   # such that they include apache::package class (currently event.pp, itk.pp,
101   # peruser.pp, prefork.pp, worker.pp).
102   if $::osfamily != 'FreeBSD' {
103     package { 'httpd':
104       ensure => $package_ensure,
105       name   => $apache_name,
106       notify => Class['Apache::Service'],
107     }
108   }
109   validate_re($sendfile, [ '^[oO]n$' , '^[oO]ff$' ])
110
111   # declare the web server user and group
112   # Note: requiring the package means the package ought to create them and not puppet
113   validate_bool($manage_user)
114   if $manage_user {
115     user { $user:
116       ensure  => present,
117       gid     => $group,
118       require => Package['httpd'],
119     }
120   }
121   validate_bool($manage_group)
122   if $manage_group {
123     group { $group:
124       ensure  => present,
125       require => Package['httpd']
126     }
127   }
128
129   validate_apache_log_level($log_level)
130
131   class { '::apache::service':
132     service_name    => $service_name,
133     service_enable  => $service_enable,
134     service_manage  => $service_manage,
135     service_ensure  => $service_ensure,
136     service_restart => $service_restart,
137   }
138
139   # Deprecated backwards-compatibility
140   if $purge_vdir {
141     warning('Class[\'apache\'] parameter purge_vdir is deprecated in favor of purge_configs')
142     $purge_confd = $purge_vdir
143   } else {
144     $purge_confd = $purge_configs
145   }
146
147   # Set purge vhostd appropriately
148   if $purge_vhost_dir == undef {
149     $purge_vhostd = $purge_confd
150   } else {
151     $purge_vhostd = $purge_vhost_dir
152   }
153
154   Exec {
155     path => '/bin:/sbin:/usr/bin:/usr/sbin',
156   }
157
158   exec { "mkdir ${confd_dir}":
159     creates => $confd_dir,
160     require => Package['httpd'],
161   }
162   file { $confd_dir:
163     ensure  => directory,
164     recurse => true,
165     purge   => $purge_confd,
166     notify  => Class['Apache::Service'],
167     require => Package['httpd'],
168   }
169
170   if ! defined(File[$mod_dir]) {
171     exec { "mkdir ${mod_dir}":
172       creates => $mod_dir,
173       require => Package['httpd'],
174     }
175     # Don't purge available modules if an enable dir is used
176     $purge_mod_dir = $purge_configs and !$mod_enable_dir
177     file { $mod_dir:
178       ensure  => directory,
179       recurse => true,
180       purge   => $purge_mod_dir,
181       notify  => Class['Apache::Service'],
182       require => Package['httpd'],
183     }
184   }
185
186   if $mod_enable_dir and ! defined(File[$mod_enable_dir]) {
187     $mod_load_dir = $mod_enable_dir
188     exec { "mkdir ${mod_enable_dir}":
189       creates => $mod_enable_dir,
190       require => Package['httpd'],
191     }
192     file { $mod_enable_dir:
193       ensure  => directory,
194       recurse => true,
195       purge   => $purge_configs,
196       notify  => Class['Apache::Service'],
197       require => Package['httpd'],
198     }
199   } else {
200     $mod_load_dir = $mod_dir
201   }
202
203   if ! defined(File[$vhost_dir]) {
204     exec { "mkdir ${vhost_dir}":
205       creates => $vhost_dir,
206       require => Package['httpd'],
207     }
208     file { $vhost_dir:
209       ensure  => directory,
210       recurse => true,
211       purge   => $purge_vhostd,
212       notify  => Class['Apache::Service'],
213       require => Package['httpd'],
214     }
215   }
216
217   if $vhost_enable_dir and ! defined(File[$vhost_enable_dir]) {
218     $vhost_load_dir = $vhost_enable_dir
219     exec { "mkdir ${vhost_load_dir}":
220       creates => $vhost_load_dir,
221       require => Package['httpd'],
222     }
223     file { $vhost_enable_dir:
224       ensure  => directory,
225       recurse => true,
226       purge   => $purge_vhostd,
227       notify  => Class['Apache::Service'],
228       require => Package['httpd'],
229     }
230   } else {
231     $vhost_load_dir = $vhost_dir
232   }
233
234   concat { $ports_file:
235     owner   => 'root',
236     group   => $::apache::params::root_group,
237     mode    => '0644',
238     notify  => Class['Apache::Service'],
239     require => Package['httpd'],
240   }
241   concat::fragment { 'Apache ports header':
242     ensure  => present,
243     target  => $ports_file,
244     content => template('apache/ports_header.erb')
245   }
246
247   if $::apache::conf_dir and $::apache::params::conf_file {
248     case $::osfamily {
249       'debian': {
250         $pidfile              = "\${APACHE_PID_FILE}"
251         $error_log            = 'error.log'
252         $scriptalias          = '/usr/lib/cgi-bin'
253         $access_log_file      = 'access.log'
254       }
255       'redhat': {
256         $pidfile              = 'run/httpd.pid'
257         $error_log            = 'error_log'
258         $scriptalias          = '/var/www/cgi-bin'
259         $access_log_file      = 'access_log'
260       }
261       'freebsd': {
262         $pidfile              = '/var/run/httpd.pid'
263         $error_log            = 'httpd-error.log'
264         $scriptalias          = '/usr/local/www/apache24/cgi-bin'
265         $access_log_file      = 'httpd-access.log'
266       } 'gentoo': {
267         $pidfile              = '/run/apache2.pid'
268         $error_log            = 'error.log'
269         $error_documents_path = '/usr/share/apache2/error'
270         $scriptalias          = '/var/www/localhost/cgi-bin'
271         $access_log_file      = 'access.log'
272
273         ::portage::makeconf { 'apache2_modules':
274           content => $default_mods,
275         }
276         file { [
277           '/etc/apache2/modules.d/.keep_www-servers_apache-2',
278           '/etc/apache2/vhosts.d/.keep_www-servers_apache-2'
279         ]:
280           ensure  => absent,
281           require => Package['httpd'],
282         }
283       }
284       'Suse': {
285         $pidfile              = '/var/run/httpd2.pid'
286         $error_log            = 'error.log'
287         $scriptalias          = '/usr/lib/cgi-bin'
288         $access_log_file      = 'access.log'
289       }
290       default: {
291         fail("Unsupported osfamily ${::osfamily}")
292       }
293     }
294
295     $apxs_workaround = $::osfamily ? {
296       'freebsd' => true,
297       default   => false
298     }
299
300     # Template uses:
301     # - $pidfile
302     # - $user
303     # - $group
304     # - $logroot
305     # - $error_log
306     # - $sendfile
307     # - $mod_dir
308     # - $ports_file
309     # - $confd_dir
310     # - $vhost_dir
311     # - $error_documents
312     # - $error_documents_path
313     # - $apxs_workaround
314     # - $keepalive
315     # - $keepalive_timeout
316     # - $max_keepalive_requests
317     # - $server_root
318     # - $server_tokens
319     # - $server_signature
320     # - $trace_enable
321     file { "${::apache::conf_dir}/${::apache::params::conf_file}":
322       ensure  => file,
323       content => template($conf_template),
324       notify  => Class['Apache::Service'],
325       require => Package['httpd'],
326     }
327
328     # preserve back-wards compatibility to the times when default_mods was
329     # only a boolean value. Now it can be an array (too)
330     if is_array($default_mods) {
331       class { '::apache::default_mods':
332         all  => false,
333         mods => $default_mods,
334       }
335     } else {
336       class { '::apache::default_mods':
337         all => $default_mods,
338       }
339     }
340     class { '::apache::default_confd_files':
341       all => $default_confd_files
342     }
343     if $mpm_module {
344       class { "::apache::mod::${mpm_module}": }
345     }
346
347     $default_vhost_ensure = $default_vhost ? {
348       true  => 'present',
349       false => 'absent'
350     }
351     $default_ssl_vhost_ensure = $default_ssl_vhost ? {
352       true  => 'present',
353       false => 'absent'
354     }
355
356     ::apache::vhost { 'default':
357       ensure          => $default_vhost_ensure,
358       port            => 80,
359       docroot         => $docroot,
360       scriptalias     => $scriptalias,
361       serveradmin     => $serveradmin,
362       access_log_file => $access_log_file,
363       priority        => '15',
364       ip              => $ip,
365       logroot_mode    => $logroot_mode,
366       manage_docroot  => $default_vhost,
367     }
368     $ssl_access_log_file = $::osfamily ? {
369       'freebsd' => $access_log_file,
370       default   => "ssl_${access_log_file}",
371     }
372     ::apache::vhost { 'default-ssl':
373       ensure          => $default_ssl_vhost_ensure,
374       port            => 443,
375       ssl             => true,
376       docroot         => $docroot,
377       scriptalias     => $scriptalias,
378       serveradmin     => $serveradmin,
379       access_log_file => $ssl_access_log_file,
380       priority        => '15',
381       ip              => $ip,
382       logroot_mode    => $logroot_mode,
383       manage_docroot  => $default_ssl_vhost,
384     }
385   }
386 }