puppet/apache/manifests/init.pp

796 lines
18 KiB
Puppet

import "debian.pp"
import "redhat.pp"
# Install Apache, www logrotate script and cron job.
#
class apache::common {
case $operatingsystem {
debian,ubuntu: {
if ! $httpd_user {
$user = "www-data"
} else {
$user = $httpd_user
}
if ! $httpd_group {
$group = "www-data"
} else {
$group = $httpd_group
}
}
}
if $apache_datadir {
file { $apache_datadir:
ensure => directory,
mode => 0755,
owner => "root",
group => "root",
seltype => "httpd_sys_content_t",
}
file { "/srv/www":
ensure => link,
target => $apache_datadir,
require => File[$apache_datadir],
}
} else {
file { "/srv/www":
ensure => directory,
mode => 0755,
owner => root,
group => root,
}
}
file { "/srv/www/log":
ensure => directory,
mode => 0755,
owner => root,
group => root,
require => File["/srv/www"],
}
if "${selinux}" == "true" {
if $apache_datadir {
selinux::manage_fcontext { "${apache_datadir}(/.*)?":
type => "httpd_sys_content_t",
before => File[$apache_datadir],
}
}
}
package { "httpd":
name => $operatingsystem ? {
debian => "apache2",
ubuntu => "apache2",
default => "httpd",
},
ensure => installed,
}
file { "/usr/local/sbin/www-logrotate.sh":
ensure => present,
source => "puppet:///modules/apache/www-logrotate.sh",
mode => 0755,
owner => root,
group => root,
seluser => "system_u",
selrole => "object_r",
seltype => "httpd_rotatelogs_exec_t",
}
cron { "www-logrotate":
ensure => present,
command => "/usr/local/sbin/www-logrotate.sh",
user => "root",
hour => "0",
minute => "0",
weekday => "1",
require => File["/usr/local/sbin/www-logrotate.sh"],
}
}
# Configure HTTP server.
#
# === Global variables
#
# $httpd_user:
# User httpd runs as. Defaults to apache.
# $httpd_group:
# Group httpd runs as. Defaults to apache.
#
class apache::server inherits apache::common {
case $operatingsystem {
debian,ubuntu: {
include apache::debian::server
}
centos,fedora: {
if ! $httpd_user {
$user = "apache"
} else {
$user = $httpd_user
}
if ! $httpd_group {
$group = "apache"
} else {
$group = $httpd_group
}
include apache::redhat::server
}
default: {
fail("Apache module not supported in ${operatingsystem}.")
}
}
}
# Configure HTTP virtual host.
#
# === Parameters
#
# $name:
# FQDN of virtual host.
# $aliases:
# Optional ServerAlias for this virtual host.
# $root:
# Path to document root. Defaults to /srv/www/http/$fqdn
# $redirect:
# Add redirect to given URL.
#
# === Sample usage
#
# apache::site { "default":
# redirect => "http://www.example.com/",
# }
# apache::site { "www.example.com":
# root => "/roles/prteam/public/public_access",
# }
#
define apache::site($aliases="", $root="", $redirect="") {
case $operatingsystem {
debian,ubuntu: {
apache::debian::site { $name:
aliases => $aliases,
root => $root,
redirect => $redirect,
}
}
centos,fedora: {
apache::redhat::site { $name:
aliases => $aliases,
root => $root,
redirect => $redirect,
}
}
default: {
fail("Apache module not supported in ${operatingsystem}.")
}
}
if !$redirect {
$site_fqdn = $name ? {
"default" => $homename,
default => $name,
}
apache::webalizer::site { "http/${site_fqdn}":
site_proto => "http",
site_fqdn => $site_fqdn,
}
}
}
# Configure HTTPS server.
#
# === Global variables
#
# $httpsd_user:
# User httpsd runs as. Defaults to httpsd.
# $httpsd_group:
# Group httpsd runs as. Defaults to httpsd.
#
class apache::sslserver inherits apache::common {
case $operatingsystem {
debian,ubuntu: {
include apache::debian::sslserver
}
centos,fedora: {
if ! $httpsd_user {
$user = "httpsd"
} else {
$user = $httpsd_user
}
if ! $httpsd_group {
$group = "httpsd"
} else {
$group = $httpsd_group
}
include apache::redhat::sslserver
}
default: {
fail("Apache module not supported in ${operatingsystem}.")
}
}
}
# Enable SSL on port 443.
#
class apache::sslserver::listen {
apache::configfile { "ssl.conf":
content => template("apache/ssl.conf.erb"),
http => false,
require => Class["apache::sslserver"],
}
}
# Configure HTTPS virtual host.
#
# === Parameters
#
# $name:
# FQDN of virtual host.
# $ipaddr:
# IP address of virtual host. Defaults to _default_.
# $root:
# Path to document root. Defaults to /srv/www/https/$fqdn
# $ssl_cert:
# Path to SSL certificate. Defaults to puppet client certificate.
# $ssl_key:
# Path to SSL private key. Defaults to puppet client certificate.
# $ssl_chain:
# Path to SSL certificate chain. Defaults to none.
#
# === Sample usage
#
# apache::site { "www.example.com":
# root => "/roles/prteam/public/secure_access",
# ssl_cert => "puppet:///path/to/www.example.com.crt",
# ssl_key => "puppet:///path/to/www.example.com.key",
# }
#
define apache::sslsite($ipaddr="_default_", $root="", $ssl_cert="", $ssl_key="", $ssl_chain="") {
include apache::sslserver::listen
case $operatingsystem {
debian,ubuntu: {
$apache_ssldir = "/etc/ssl"
apache::debian::sslsite { $name:
ipaddr => $ipaddr,
root => $root,
ssl_cert => $ssl_cert,
ssl_key => $ssl_key,
ssl_chain => $ssl_chain,
require => Class["apache::sslserver::listen"],
}
}
centos,fedora: {
$apache_ssldir = "/etc/pki/tls"
apache::redhat::sslsite { $name:
ipaddr => $ipaddr,
root => $root,
ssl_cert => $ssl_cert,
ssl_key => $ssl_key,
ssl_chain => $ssl_chain,
require => Class["apache::sslserver::listen"],
}
}
default: {
fail("Apache module not supported in ${operatingsystem}.")
}
}
$site_fqdn = $name ? {
"default" => $homename,
default => $name,
}
apache::webalizer::site { "https/${site_fqdn}":
site_proto => "https",
site_fqdn => $site_fqdn,
}
}
# Install extra configuration file.
#
# === Parameters
#
# $name:
# Config file name.
# $source:
# Config file source. Defaults to /etc/httpd/conf.d/$name
# if neither $source nor $content is defined.
# $content:
# Config file content. See also $source.
# $require:
# Dependencies for the config file.
# $http:
# Set to false to disable config on http server.
# $https:
# Set to false to disable config on https server.
#
# === Sample usage
#
#apache::configfile { "auth_kerb.conf":
# content => template("apache/auth_kerb.conf.erb"),
# require => Package["mod_auth_kerb"],
# http => false,
#}
#
define apache::configfile($source="", $content="", $http=true, $https=true) {
case $operatingsystem {
debian,ubuntu: {
apache::debian::configfile { $name:
source => $source,
content => $content,
http => $http,
https => $https,
}
}
centos,fedora: {
apache::redhat::configfile { $name:
source => $source,
content => $content,
http => $http,
https => $https,
}
}
default: {
fail("Apache module not supported in ${operatingsystem}.")
}
}
}
# Install mod_auth_kerb.
#
class apache::mod::auth_kerb {
package { "mod_auth_kerb":
ensure => installed,
require => Package["httpd"],
}
apache::configfile { "auth_kerb.conf":
content => template("apache/auth_kerb.conf.erb"),
require => Package["mod_auth_kerb"],
http => false,
}
}
# Install mod_authnz_ldap.
#
class apache::mod::authnz_ldap {
case $operatingsystem {
debian,ubuntu: {
apache::debian::a2enmod { "authnz_ldap": }
}
centos,fedora: { }
default: {
fail("Apache module not supported in ${operatingsystem}.")
}
}
}
# Install mod_include
#
class apache::mod::include {
case $operatingsystem {
debian,ubuntu: {
apache::debian::a2enmod { "include": }
}
centos,fedora: { }
default: {
fail("Apache module not supported in ${operatingsystem}.")
}
}
}
# Install mod_fcgid.
#
class apache::mod::fcgid {
package { "mod_fcgid":
name => $operatingsystem ? {
debian => "libapache2-mod-fcgid",
ubuntu => "libapache2-mod-fcgid",
default => "mod_fcgid",
},
ensure => installed,
require => Package["httpd"],
}
case $operatingsystem {
debian,ubuntu: {
apache::debian::a2enmod { "fcgid":
require => Package ["libapache2-mod-fcgid"],
}
}
centos,fedora: {
apache::configfile { "fcgid.conf":
require => Package["mod_fcgid"],
}
}
default: {
fail("Apache module not supported in ${operatingsystem}.")
}
}
}
# Install mod_headers.
#
class apache::mod::headers {
case $operatingsystem {
debian,ubuntu: {
apache::debian::a2enmod { "headers": }
}
centos,fedora: { }
default: {
fail("Apache module not supported in ${operatingsystem}.")
}
}
}
# Install mod_ldap.
#
class apache::mod::ldap {
case $operatingsystem {
debian,ubuntu: {
apache::debian::a2enmod { "ldap": }
}
centos,fedora: { }
default: {
fail("Apache module not supported in ${operatingsystem}.")
}
}
}
# Install mod_perl.
#
class apache::mod::perl {
package { "mod_perl":
name => $operatingsystem ? {
debian => "libapache2-mod-perl2",
ubuntu => "libapache2-mod-perl2",
default => "mod_perl",
},
ensure => installed,
require => Package["httpd"],
}
case $operatingsystem {
debian,ubuntu: {
apache::debian::a2enmod { "perl2":
require => Package ["libapache2-mod-perl2"],
}
}
centos,fedora: {
apache::configfile { "perl.conf":
require => Package["mod_perl"],
}
}
default: {
fail("Apache module not supported in ${operatingsystem}.")
}
}
}
# Install PHP.
#
class apache::mod::php {
package { "php":
name => $operatingsystem ? {
debian => "libapache2-mod-php5",
ubuntu => "libapache2-mod-php5",
default => "php",
},
ensure => installed,
require => Package["httpd"],
}
case $operatingsystem {
debian,ubuntu: {
apache::debian::a2enmod { "php5":
require => Package ["libapache2-mod-php5"],
}
}
centos,fedora: {
apache::configfile { "php.conf":
require => Package["php"],
}
}
default: {
fail("Apache module not supported in ${operatingsystem}.")
}
}
}
# Install mod_proxy
#
class apache::mod::proxy {
case $operatingsystem {
debian,ubuntu: {
apache::debian::a2enmod { "proxy":
content => template("apache/proxy.conf.erb"),
}
}
centos,fedora: {
apache::configfile { "proxy.conf":
content => template("apache/proxy.conf.erb"),
}
}
default: {
fail("Apache module not supported in ${operatingsystem}.")
}
}
}
# Install mod_proxy_http
#
class apache::mod::proxy_http {
case $operatingsystem {
debian,ubuntu: {
apache::debian::a2enmod { "proxy_http": }
}
centos,fedora: { }
default: {
fail("Apache module not supported in ${operatingsystem}.")
}
}
}
# Install mod_proxy_balancer
#
class apache::mod::proxy_balancer {
case $operatingsystem {
debian,ubuntu: {
apache::debian::a2enmod { "proxy_balancer": }
}
centos,fedora: { }
default: {
fail("Apache module not supported in ${operatingsystem}.")
}
}
}
# Install mod_python.
#
class apache::mod::python {
package { "mod_python":
name => $operatingsystem ? {
debian => "libapache2-mod-python",
ubuntu => "libapache2-mod-python",
default => "mod_python",
},
ensure => installed,
require => Package["httpd"],
}
case $operatingsystem {
debian,ubuntu: {
apache::debian::a2enmod { "python":
require => Package ["libapache2-mod-python"],
}
}
centos,fedora: {
apache::configfile { "python.conf":
require => Package["mod_python"],
}
}
default: {
fail("Apache module not supported in ${operatingsystem}.")
}
}
}
# Install mod_rewrite.
#
class apache::mod::rewrite {
case $operatingsystem {
debian,ubuntu: {
apache::debian::a2enmod { "rewrite": }
}
centos,fedora: { }
default: {
fail("Apache module not supported in ${operatingsystem}.")
}
}
}
# Install mod_wsgi.
#
class apache::mod::wsgi {
package { "mod_wsgi":
name => $operatingsystem ? {
debian => "libapache2-mod-wsgi",
ubuntu => "libapache2-mod-wsgi",
default => "mod_wsgi",
},
ensure => installed,
require => Package["httpd"],
}
case $operatingsystem {
debian,ubuntu: {
apache::debian::a2enmod { "wsgi":
require => Package ["libapache2-mod-wsgi"],
}
}
centos,fedora: {
apache::configfile { "wsgi.conf":
require => Package["mod_wsgi"],
}
}
default: {
fail("Apache module not supported in ${operatingsystem}.")
}
}
}
# Install and configure webalizer.
#
class apache::webalizer {
package { "webalizer":
ensure => installed,
}
file { [ "/srv/www/webalizer",
"/srv/www/webalizer/history",
"/srv/www/webalizer/history/http",
"/srv/www/webalizer/history/https",
"/srv/www/webalizer/html/http",
"/srv/www/webalizer/html/https",
"/srv/www/webalizer/html", ]:
ensure => directory,
mode => 0755,
owner => $operatingsystem ? {
debian => root,
ubuntu => root,
default => webalizer,
},
group => root,
require => [ File["/srv/www"], Package["webalizer"], ],
}
file { [ "/etc/webalizer",
"/etc/webalizer/http",
"/etc/webalizer/https", ]:
ensure => directory,
mode => 0644,
owner => root,
group => root,
}
File["/etc/webalizer/http", "/etc/webalizer/https"] {
purge => true,
force => true,
recurse => true,
source => "puppet:///modules/custom/empty",
}
case $operatingsystem {
debian,ubuntu: {
file { "/etc/cron.daily/webalizer":
ensure => absent,
require => Package["webalizer"],
}
}
default: {
file { "/etc/cron.daily/00webalizer":
ensure => absent,
require => Package["webalizer"],
}
}
}
file { "/usr/local/sbin/www-webalizer.sh":
ensure => present,
source => "puppet:///modules/apache/www-webalizer.sh",
mode => 0755,
owner => root,
group => root,
require => Package["webalizer"],
}
cron { "www-webalizer":
ensure => present,
environment => "MAILTO=root",
command => "/usr/local/sbin/www-webalizer.sh",
user => $operatingsystem ? {
debian => root,
ubuntu => root,
default => webalizer,
},
hour => 23,
minute => 59,
require => File["/usr/local/sbin/www-webalizer.sh"],
}
File <| tag == "webalizer" |>
}
define apache::webalizer::site($site_proto, $site_fqdn) {
@file { "/etc/webalizer/${name}.conf":
ensure => present,
mode => 0644,
owner => root,
group => root,
content => template("apache/webalizer.conf.erb"),
require => File["/etc/webalizer/${site_proto}"],
tag => "webalizer",
}
@file { [ "/srv/www/webalizer/history/${name}",
"/srv/www/webalizer/html/${name}", ]:
ensure => directory,
mode => 0755,
owner => $operatingsystem ? {
debian => root,
ubuntu => root,
default => webalizer,
},
group => root,
require => [ File["/srv/www/webalizer/history/${site_proto}"],
File["/srv/www/webalizer/html/${site_proto}"], ],
tag => "webalizer",
}
}