bstopp/puppet-aem

View on GitHub
manifests/dispatcher/farm.pp

Summary

Maintainability
Test Coverage
# == Define: aem::dispatcher::farm
#
# Configure a Dispatcher instance.
define aem::dispatcher::farm(
  $ensure              = 'present',
  $allow_authorized    = undef,
  $allowed_clients     = $::aem::dispatcher::params::allowed_clients,
  $auth_checker        = undef,
  $cache_headers       = undef,
  $cache_rules         = $::aem::dispatcher::params::cache_rules,
  $cache_ttl           = undef,
  $client_headers      = $::aem::dispatcher::params::client_headers,
  $docroot             = undef,
  $failover            = undef,
  $filters             = $::aem::dispatcher::params::filters,
  $grace_period        = undef,
  $health_check_url    = undef,
  $ignore_parameters   = undef,
  $invalidate          = undef,
  $invalidate_handler  = undef,
  $priority            = $::aem::dispatcher::params::priority,
  $propagate_synd_post = undef,
  $renders             = $::aem::dispatcher::params::renders,
  $retries             = undef,
  $retry_delay         = undef,
  $serve_stale         = undef,
  $session_management  = undef,
  $stat_file           = undef,
  $stat_files_level    = undef,
  $statistics          = undef,
  $sticky_connections  = undef,
  $unavailable_penalty = undef,
  $vanity_urls         = undef,
  $virtualhosts        = $::aem::dispatcher::params::virtualhosts
) {

  # Required dispatcher class because it is used by parameter defaults
  if ! defined(Class['aem::dispatcher']) {
    fail('You must include the aem::dispatcher base class before using any dispatcher class or defined resources')
  }

  validate_re($ensure, '^(present|absent)$', "${ensure} is not supported for ensure. Allowed values are 'present' and 'absent'.")

  if $allow_authorized {
    validate_integer($allow_authorized, 1, 0)
  }

  if is_array($allowed_clients) {
    validate_hash($allowed_clients[0])
    $_allowed_clients = $allowed_clients
  } else {
    validate_hash($allowed_clients)
    $_allowed_clients = [$allowed_clients]
  }

  if $auth_checker {
    validate_hash($auth_checker)

    if !has_key($auth_checker, 'url') {
      fail('Auth checker url is not specified.')
    }

    if !has_key($auth_checker, 'filter') {
      fail('Auth checker filter are not specified.')
    } else {
      if !is_array($auth_checker['filter']) {
        fail('Auth checker filter must be an array.')
      }
      validate_hash($auth_checker['filter'][0])
    }

    if !has_key($auth_checker, 'headers') {
      fail('Auth checker headers are not specified.')
    } else {
      if !is_array($auth_checker['headers']) {
        fail('Auth checker headers must be an array.')
      }
      validate_hash($auth_checker['headers'][0])
    }
  }

  if $cache_headers {
    if is_array($cache_headers) {
      $_cache_headers = $cache_headers
    } else {
      $_cache_headers = [$cache_headers]
    }
  }

  if is_array($cache_rules) {
    validate_hash($cache_rules[0])
    $_cache_rules = $cache_rules
  } else {
    validate_hash($cache_rules)
    $_cache_rules = [$cache_rules]
  }

  if $cache_ttl {
    validate_integer($cache_ttl, 1, 0)
  }

  if is_array($client_headers) {
    $_client_headers = $client_headers
  } else {
    $_client_headers = [$client_headers]
  }

  validate_absolute_path($docroot)

  if $failover {
    validate_integer($failover, 1, 0)
  }

  if is_array($filters) {
    validate_hash($filters[0])
    $_filters = $filters
  } else {
    validate_hash($filters)
    $_filters = [$filters]
  }

  if $grace_period {
    validate_integer($grace_period, undef, 1)
  }

  if $health_check_url {
    validate_string($health_check_url)
  }

  if $ignore_parameters {
    if is_array($ignore_parameters) {
      validate_hash($ignore_parameters[0])
      $_ignore_parameters = $ignore_parameters
    } else {
      validate_hash($ignore_parameters)
      $_ignore_parameters = [$ignore_parameters]
    }
  }

  if $invalidate_handler {
    validate_absolute_path($invalidate_handler)
  } elsif $invalidate == undef {
    $_invalidate = $::aem::dispatcher::params::invalidate
  } else {

    if is_array($invalidate) {
      validate_hash($invalidate[0])
      $_invalidate = $invalidate
    } else {
      validate_hash($invalidate)
      $_invalidate = [$invalidate]
    }
  }

  if $priority {
    if $priority.is_a(Integer) {
      validate_integer($priority, 99, 0)
      if $priority < 10 {
        $priority_string = "0${priority}"
      }
      else {
        $priority_string = $priority
      }
    }
    else {
      fail('Priority should be a valid Integer from 0 to 99')
    }

  }
  else {
    $priority_string = '00'
  }

  if $propagate_synd_post {
    validate_integer($propagate_synd_post, 1, 0)
  }

  if is_array($renders) {
    validate_hash($renders[0])
    $_renders = $renders
  } else {
    validate_hash($renders)
    $_renders = [$renders]
  }

  if $retries {
    validate_integer($retries, undef, 1)
  }

  if $retry_delay {
    validate_integer($retry_delay, undef, 1)
  }

  if $serve_stale {
    validate_integer($serve_stale, 1, 0)
  }

  if $session_management {
    if $allow_authorized == 1 {
      fail('Allow authorized and session management are mutually exclusive.')
    }
    validate_hash($session_management)
    if !has_key($session_management, 'directory') {
      fail('Session management directory is not specified.')
    } else {
      validate_absolute_path($session_management['directory'])
    }
    if has_key($session_management, 'encode') {
      validate_re($session_management['encode'], '^(md5|hex)$',
        "${session_management['encode']} is not supported for session_management['encode']. Allowed values are 'md5' and 'hex'.")
    }
    if has_key($session_management, 'timeout') {
      validate_integer($session_management['timeout'], undef, 0)
    }
  }

  if $stat_file {
    validate_absolute_path($stat_file)
  }

  if $stat_files_level {
    validate_integer($stat_files_level, undef, 0)
  }

  if $statistics {
    if is_array($statistics) {
      validate_hash($statistics[0])
      $_statistics = $statistics
    } else {
      validate_hash($statistics)
      $_statistics = [$statistics]
    }
  }

  if $sticky_connections {
    if is_array($sticky_connections) {
      validate_string($sticky_connections[0])
    } else {
      validate_string($sticky_connections)
    }
  }

  if $unavailable_penalty {
    validate_integer($unavailable_penalty, undef, 1)
  }

  if $vanity_urls {
    validate_hash($vanity_urls)
    if !has_key($vanity_urls, 'file') {
      fail('Vanity Urls cache file is not specified.')
    } else {
      validate_absolute_path($vanity_urls['file'])
      validate_integer($vanity_urls['delay'], undef, 0)
    }
  }

  if !is_array($virtualhosts) {
    $_virtualhosts = [$virtualhosts]
  } else {
    $_virtualhosts = $virtualhosts
  }

  if $ensure == 'present' {
    file { "${::aem::dispatcher::params::farm_path}/dispatcher.${priority_string}-${name}.inc.any" :
      ensure  => $ensure,
      content => template("${module_name}/dispatcher/dispatcher.any.erb"),
      notify  => Service[$::apache::service_name],
    }
  } else {
    file { "${::aem::dispatcher::params::farm_path}/dispatcher.${priority_string}-${name}.inc.any" :
      ensure => $ensure,
      notify => Service[$::apache::service_name],
    }
  }

}