--- /dev/null
+# See README.md for usage information
+define apache::custom_config (
+ $ensure = 'present',
+ $confdir = $::apache::confd_dir,
+ $content = undef,
+ $priority = '25',
+ $source = undef,
+ $verify_command = $::apache::params::verify_command,
+ $verify_config = true,
+) {
+
+ if $content and $source {
+ fail('Only one of $content and $source can be specified.')
+ }
+
+ if $ensure == 'present' and ! $content and ! $source {
+ fail('One of $content and $source must be specified.')
+ }
+
+ validate_re($ensure, '^(present|absent)$',
+ "${ensure} is not supported for ensure.
+ Allowed values are 'present' and 'absent'.")
+
+ validate_bool($verify_config)
+
+ if $priority {
+ $priority_prefix = "${priority}-"
+ } else {
+ $priority_prefix = ''
+ }
+
+ ## Apache include does not always work with spaces in the filename
+ $filename_middle = regsubst($name, ' ', '_', 'G')
+ $filename = "${priority_prefix}${filename_middle}.conf"
+
+ if ! $verify_config or $ensure == 'absent' {
+ $notifies = Class['Apache::Service']
+ } else {
+ $notifies = undef
+ }
+
+ file { "apache_${name}":
+ ensure => $ensure,
+ path => "${confdir}/${filename}",
+ content => $content,
+ source => $source,
+ require => Package['httpd'],
+ notify => $notifies,
+ }
+
+ if $ensure == 'present' and $verify_config {
+ exec { "service notify for ${name}":
+ command => $verify_command,
+ subscribe => File["apache_${name}"],
+ refreshonly => true,
+ notify => Class['Apache::Service'],
+ before => Exec["remove ${name} if invalid"],
+ }
+
+ exec { "remove ${name} if invalid":
+ command => "/bin/rm ${confdir}/${filename}",
+ unless => $verify_command,
+ subscribe => File["apache_${name}"],
+ refreshonly => true,
+ }
+ }
+}