init.pp 2.33 KB
# Class: nginx
#
# Install nginx.
#
# Parameters:
# * $user. Defaults to 'www-data'.
# * $worker_processes. Defaults to '1'.
# * $worker_connections. Defaults to '1024'.
# * $error_log. Default to undef
# * $pid_file. Default to undef
# * $access_log. Default to undef
#
# Create config directories :
# * /etc/nginx/conf.d for http config snippet
# * /etc/nginx/includes for sites includes
#
# Provide 3 definitions :
# * nginx::config (http config snippet)
# * nginx::site (http site)
# * nginx::site_include (site includes)
#
# Templates:
#   - nginx.conf.erb => /etc/nginx/nginx.conf
#
class nginx (
  $user = 'www-data',
  $worker_processes = '1',
  $worker_connections = '1024',
  $error_log = undef,
  $pid_file = undef,
  $access_log = undef
){
  $nginx_includes = '/etc/nginx/includes'
  $nginx_conf = '/etc/nginx/conf.d'

  case $::operatingsystem {
    centos,fedora,rhel: {
      $nginx_packages = ['nginx', 'GeoIP', 'gd', 'libXpm', 'libxslt']
    }
    debian,ubuntu: {
      $nginx_packages = 'nginx-extras'
    }
  }
  if ! defined(Package[$nginx_packages]) { 
    package { $nginx_packages: 
      ensure => latest
    }
  }

  #restart-command is a quick-fix here, until http://projects.puppetlabs.com/issues/1014 is solved
  service { 'nginx':
    ensure     => running,
    enable     => true,
    hasrestart => true,
    require    => File['/etc/nginx/nginx.conf'],
    restart    => '/etc/init.d/nginx reload'
  }

  file { '/etc/nginx/nginx.conf':
    ensure  => present,
    mode    => '0644',
    owner   => 'root',
    group   => 'root',
    content => template('nginx/nginx.conf.erb'),
    notify  => Service['nginx'],
    require => Package[$nginx_packages],
  }

  file { $nginx_conf:
    ensure  => directory,
    mode    => '0644',
    owner   => 'root',
    group   => 'root',
    require => Package[$nginx_packages],
  }

  file { '/etc/nginx/ssl':
    ensure  => directory,
    mode    => '0644',
    owner   => 'root',
    group   => 'root',
    require => Package[$nginx_packages],
  }

  file { $nginx_includes:
    ensure  => directory,
    mode    => '0644',
    owner   => 'root',
    group   => 'root',
    require => Package[$nginx_packages],
  }

  # Nuke default files
  file { '/etc/nginx/fastcgi_params':
    ensure  => absent,
    require => Package[$nginx_packages],
  }

  file { '/etc/nginx/sites-enabled/default':
    ensure => absent,
  }
}