chef/cookbooks/apache2/recipes/default.rb

220 lines
6.2 KiB
Ruby

#
# Cookbook:: apache2
# Recipe:: default
#
# Copyright:: 2008-2013, Chef Software, Inc.
# Copyright:: 2014-2015, Alexander van Zoest
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
package 'apache2' do # ~FC009 only available in apt_package. See #388
package_name node['apache']['package']
default_release node['apache']['default_release'] unless node['apache']['default_release'].nil?
end
%w(sites-available sites-enabled mods-available mods-enabled conf-available conf-enabled).each do |dir|
directory "#{node['apache']['dir']}/#{dir}" do
mode '0755'
owner 'root'
group node['apache']['root_group']
end
end
%w(default default.conf 000-default 000-default.conf).each do |site|
link "#{node['apache']['dir']}/sites-enabled/#{site}" do
action :delete
not_if { site == "#{node['apache']['default_site_name']}.conf" && node['apache']['default_site_enabled'] }
end
file "#{node['apache']['dir']}/sites-available/#{site}" do
action :delete
backup false
not_if { site == "#{node['apache']['default_site_name']}.conf" && node['apache']['default_site_enabled'] }
end
end
directory node['apache']['log_dir'] do
mode '0755'
recursive true
end
# perl is needed for the a2* scripts
package node['apache']['perl_pkg']
package 'perl-Getopt-Long-Descriptive' if platform?('fedora')
%w(a2ensite a2dissite a2enmod a2dismod a2enconf a2disconf).each do |modscript|
link "/usr/sbin/#{modscript}" do
action :delete
only_if { ::File.symlink?("/usr/sbin/#{modscript}") }
end
template "/usr/sbin/#{modscript}" do
source "#{modscript}.erb"
mode '0700'
owner 'root'
group node['apache']['root_group']
action :create
end
end
unless platform_family?('debian')
cookbook_file '/usr/local/bin/apache2_module_conf_generate.pl' do
source 'apache2_module_conf_generate.pl'
mode '0755'
owner 'root'
group node['apache']['root_group']
end
execute 'generate-module-list' do
command "/usr/local/bin/apache2_module_conf_generate.pl #{node['apache']['lib_dir']} #{node['apache']['dir']}/mods-available"
action :nothing
end
end
if platform_family?('freebsd')
directory "#{node['apache']['dir']}/Includes" do
action :delete
recursive true
end
directory "#{node['apache']['dir']}/extra" do
action :delete
recursive true
end
end
if platform_family?('suse')
directory "#{node['apache']['dir']}/vhosts.d" do
action :delete
recursive true
end
%w(charset.conv default-vhost.conf default-server.conf default-vhost-ssl.conf errors.conf listen.conf mime.types mod_autoindex-defaults.conf mod_info.conf mod_log_config.conf mod_status.conf mod_userdir.conf mod_usertrack.conf uid.conf).each do |file|
file "#{node['apache']['dir']}/#{file}" do
action :delete
backup false
end
end
end
%W(
#{node['apache']['dir']}/ssl
#{node['apache']['cache_dir']}
).each do |path|
directory path do
mode '0755'
owner 'root'
group node['apache']['root_group']
end
end
directory node['apache']['lock_dir'] do
mode '0755'
if node['platform_family'] == 'debian'
owner node['apache']['user']
else
owner 'root'
end
group node['apache']['root_group']
end
# Set the preferred execution binary - prefork or worker
template "/etc/sysconfig/#{node['apache']['package']}" do
source 'etc-sysconfig-httpd.erb'
owner 'root'
group node['apache']['root_group']
mode '0644'
notifies :restart, 'service[apache2]', :delayed
only_if { platform_family?('rhel', 'amazon', 'fedora', 'suse') }
end
template "#{node['apache']['dir']}/envvars" do
source 'envvars.erb'
owner 'root'
group node['apache']['root_group']
mode '0644'
notifies :reload, 'service[apache2]', :delayed
only_if { platform_family?('debian') }
end
template 'apache2.conf' do
if platform_family?('rhel', 'amazon', 'fedora', 'arch', 'freebsd')
path "#{node['apache']['conf_dir']}/httpd.conf"
elsif platform_family?('debian')
path "#{node['apache']['conf_dir']}/apache2.conf"
elsif platform_family?('suse')
path "#{node['apache']['conf_dir']}/httpd.conf"
end
action :create
source 'apache2.conf.erb'
owner 'root'
group node['apache']['root_group']
mode '0644'
notifies :reload, 'service[apache2]', :delayed
end
%w(security charset).each do |conf|
apache_conf conf do
enable true
end
end
apache_conf 'ports' do
enable false
conf_path node['apache']['dir']
end
if node['apache']['version'] == '2.4'
if node['apache']['mpm_support'].include?(node['apache']['mpm'])
include_recipe "apache2::mpm_#{node['apache']['mpm']}"
else
Chef::Log.warn("apache2: #{node['apache']['mpm']} module is not supported and must be handled separately!")
end
end
node['apache']['default_modules'].each do |mod|
module_recipe_name = mod =~ /^mod_/ ? mod : "mod_#{mod}"
include_recipe "apache2::#{module_recipe_name}"
end
if node['apache']['default_site_enabled']
web_app node['apache']['default_site_name'] do
template 'default-site.conf.erb'
enable node['apache']['default_site_enabled']
end
end
apache_service_name = node['apache']['service_name']
service 'apache2' do
service_name apache_service_name
case node['platform_family']
when 'rhel'
if node['platform_version'].to_f < 7.0 && node['apache']['version'] != '2.4'
restart_command "/sbin/service #{apache_service_name} restart && sleep 1"
reload_command "/sbin/service #{apache_service_name} graceful && sleep 1"
end
when 'debian'
provider Chef::Provider::Service::Debian
when 'arch'
service_name apache_service_name
end
supports [:start, :restart, :reload, :status]
action [:enable, :start]
only_if "#{node['apache']['binary']} -t", environment: { 'APACHE_LOG_DIR' => node['apache']['log_dir'] }, timeout: 10
end