Knife-Zero doesn't include Berkshelf support, so vendoring everything in the repo is convenient again
		
			
				
	
	
		
			220 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			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
 |