diff modules/website/manifests/https.pp @ 0:956e484adc12

Initial public release of Puppet configs
author IBBoard <dev@ibboard.co.uk>
date Sat, 16 Aug 2014 19:47:38 +0000
parents
children 16e9e26337be
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/modules/website/manifests/https.pp	Sat Aug 16 19:47:38 2014 +0000
@@ -0,0 +1,145 @@
+# If the SSL cert and key are defined then the definer deals with them existing
+# If the SSL cert and key are not defined then we use template file paths and ensure they exist
+define website::https(
+    $docroot            = undef,
+    $ip                 = $website::primary_ip,
+    $ssl_cert           = undef,
+    $ssl_key            = undef,
+    $ssl_ca_chain       = $website::ca_chain,
+    $priority           = undef,
+    $docroot_owner      = undef,
+    $docroot_group      = undef,
+    $serveraliases      = [],
+    $ensure             = 'present',
+    $custom_fragment    = '',
+    $force_no_www       = true,
+    $force_no_index     = true,
+    $lockdown_requests  = true,
+  ) {
+
+  if ! defined(Class['website']) {
+    fail('You must include the website base class before using any website defined resources')
+  }
+
+  validate_re($ensure, '^(present|absent)$',
+  "${ensure} is not supported for ensure.
+  Allowed values are 'present' and 'absent'.")
+
+  $shortname = domain_to_short_name($name)
+  $logpart = $shortname
+  $shortdomain = domain_to_short_domain($name)
+
+  $custom_conf0 = 'Header add Strict-Transport-Security "max-age=16070400; includeSubDomains"'
+
+  if $force_no_index {
+    $custom_conf1 = "$custom_conf0
+Include conf.extra/no-index.conf"
+  } else {
+    $custom_conf1 = $custom_conf0
+  }
+
+  if $lockdown_requests {
+    $custom_conf2 = "$custom_conf1
+Include conf.custom/filter-core.conf"
+  } else {
+    $custom_conf2 = $custom_conf1
+  }
+
+  if $force_no_www {
+    $custom_conf3 = "$custom_conf2
+Include conf.extra/no-www.conf"
+  } else {
+    $custom_conf3 = $custom_conf2
+  }
+
+  if $custom_fragment {
+    $custom_conf = "$custom_conf3
+#Additional custom fragment
+$custom_fragment"
+  } else {
+    $custom_conf = $custom_conf3
+  }
+
+  if $docroot == undef {
+    $siteroot = "${website::basedir}/${shortname}"
+  } else {
+    $siteroot = $docroot
+  }
+
+  if $ssl_cert == undef {
+    $sslcert = "${website::certdir}/${shortdomain}.crt"
+    $sslkey = "${website::certdir}/${shortdomain}.key"
+    file { $sslcert:
+      source => "puppet:///private/pki/custom/${shortdomain}.crt",
+      before => Apache::Vhost[$name],
+      notify => Service['httpd'],
+      ensure => present;
+    }
+    file { $sslkey:
+      source => "puppet:///private/pki/custom/${shortdomain}.key",
+      before => Apache::Vhost[$name],
+      notify => Service['httpd'],
+      ensure => present;
+    }
+  } else {
+    $sslcert = $ssl_cert
+    $sslkey = $ssl_key
+  }
+
+  if $ssl_ca_chain == '' {
+    # Special case where we're directly under the CA and don't want to unnecessarily send the CA cert
+    $ssl_chain = undef
+  } else {
+    $ssl_chain = "/etc/pki/custom/$ssl_ca_chain"
+    if ! defined(File[$ssl_chain]) {
+      file { $ssl_chain:
+        ensure => present,
+        source => "puppet:///private/pki/custom/$ssl_ca_chain",
+        notify  => Service['httpd'],
+      }
+    }
+  }
+
+  if $docroot_owner == undef {
+    $owner = $website::docroot_owner
+  } else {
+    $owner = $docroot_owner
+  }
+
+  if $docroot_group == undef {
+    $group = $website::docroot_group
+  } else {
+    $group = $docroot_group
+  }
+
+  apache::vhost { $name:
+    ip              => $ip,
+    port            => '443',
+    priority        => $priority,
+    docroot         => $siteroot,
+    docroot_owner   => $owner,
+    docroot_group   => $group,
+    custom_fragment => $custom_conf,
+    logroot         => '/var/log/apache/',
+    access_log_file => "access_${logpart}.log",
+    error_log_file  => "error_${logpart}.log",
+    serveraliases   => $serveraliases,
+    ssl             => true,
+    ssl_cert        => $sslcert,
+    ssl_key         => $sslkey,
+    ssl_chain       => $ssl_chain,
+    ensure          => $ensure,
+  }
+
+  apache::vhost { "${name}-80":
+    servername => $name,
+    port => 80,
+    docroot => $siteroot,
+    redirect_status => 'permanent',
+    redirect_dest => "https://$name/",
+    serveraliases   => $serveraliases,
+    logroot         => '/var/log/apache/',
+    access_log_file => "access_${logpart}_nossl.log",
+    error_log_file  => "error_${logpart}_nossl.log",
+  }
+}