--- /dev/null
+define apache::mod (
+ $package = undef,
+ $package_ensure = 'present',
+ $lib = undef,
+ $lib_path = $::apache::lib_path,
+ $id = undef,
+ $path = undef,
+ $loadfile_name = undef,
+ $loadfiles = undef,
+) {
+ if ! defined(Class['apache']) {
+ fail('You must include the apache base class before using any apache defined resources')
+ }
+
+ $mod = $name
+ #include apache #This creates duplicate resources in rspec-puppet
+ $mod_dir = $::apache::mod_dir
+
+ # Determine if we have special lib
+ $mod_libs = $::apache::params::mod_libs
+ if $lib {
+ $_lib = $lib
+ } elsif has_key($mod_libs, $mod) { # 2.6 compatibility hack
+ $_lib = $mod_libs[$mod]
+ } else {
+ $_lib = "mod_${mod}.so"
+ }
+
+ # Determine if declaration specified a path to the module
+ if $path {
+ $_path = $path
+ } else {
+ $_path = "${lib_path}/${_lib}"
+ }
+
+ if $id {
+ $_id = $id
+ } else {
+ $_id = "${mod}_module"
+ }
+
+ if $loadfile_name {
+ $_loadfile_name = $loadfile_name
+ } else {
+ $_loadfile_name = "${mod}.load"
+ }
+
+ # Determine if we have a package
+ $mod_packages = $::apache::params::mod_packages
+ if $package {
+ $_package = $package
+ } elsif has_key($mod_packages, $mod) { # 2.6 compatibility hack
+ $_package = $mod_packages[$mod]
+ } else {
+ $_package = undef
+ }
+ if $_package and ! defined(Package[$_package]) {
+ # note: FreeBSD/ports uses apxs tool to activate modules; apxs clutters
+ # httpd.conf with 'LoadModule' directives; here, by proper resource
+ # ordering, we ensure that our version of httpd.conf is reverted after
+ # the module gets installed.
+ $package_before = $::osfamily ? {
+ 'freebsd' => [
+ File[$_loadfile_name],
+ File["${::apache::conf_dir}/${::apache::params::conf_file}"]
+ ],
+ default => File[$_loadfile_name],
+ }
+ # if there are any packages, they should be installed before the associated conf file
+ Package[$_package] -> File<| title == "${mod}.conf" |>
+ # $_package may be an array
+ package { $_package:
+ ensure => $package_ensure,
+ require => Package['httpd'],
+ before => $package_before,
+ }
+ }
+
+ file { $_loadfile_name:
+ ensure => file,
+ path => "${mod_dir}/${_loadfile_name}",
+ owner => 'root',
+ group => $::apache::params::root_group,
+ mode => '0644',
+ content => template('apache/mod/load.erb'),
+ require => [
+ Package['httpd'],
+ Exec["mkdir ${mod_dir}"],
+ ],
+ before => File[$mod_dir],
+ notify => Class['apache::service'],
+ }
+
+ if $::osfamily == 'Debian' {
+ $enable_dir = $::apache::mod_enable_dir
+ file{ "${_loadfile_name} symlink":
+ ensure => link,
+ path => "${enable_dir}/${_loadfile_name}",
+ target => "${mod_dir}/${_loadfile_name}",
+ owner => 'root',
+ group => $::apache::params::root_group,
+ mode => '0644',
+ require => [
+ File[$_loadfile_name],
+ Exec["mkdir ${enable_dir}"],
+ ],
+ before => File[$enable_dir],
+ notify => Class['apache::service'],
+ }
+ # Each module may have a .conf file as well, which should be
+ # defined in the class apache::mod::module
+ # Some modules do not require this file.
+ if defined(File["${mod}.conf"]) {
+ file{ "${mod}.conf symlink":
+ ensure => link,
+ path => "${enable_dir}/${mod}.conf",
+ target => "${mod_dir}/${mod}.conf",
+ owner => 'root',
+ group => $::apache::params::root_group,
+ mode => '0644',
+ require => [
+ File["${mod}.conf"],
+ Exec["mkdir ${enable_dir}"],
+ ],
+ before => File[$enable_dir],
+ notify => Class['apache::service'],
+ }
+ }
+ } elsif $::osfamily == 'Suse' {
+ $enable_dir = $::apache::mod_enable_dir
+ file{ "${_loadfile_name} symlink":
+ ensure => link,
+ path => "${enable_dir}/${_loadfile_name}",
+ target => "${mod_dir}/${_loadfile_name}",
+ owner => 'root',
+ group => $::apache::params::root_group,
+ mode => '0644',
+ require => [
+ File[$_loadfile_name],
+ Exec["mkdir ${enable_dir}"],
+ ],
+ before => File[$enable_dir],
+ notify => Class['apache::service'],
+ }
+ # Each module may have a .conf file as well, which should be
+ # defined in the class apache::mod::module
+ # Some modules do not require this file.
+ if defined(File["${mod}.conf"]) {
+ file{ "${mod}.conf symlink":
+ ensure => link,
+ path => "${enable_dir}/${mod}.conf",
+ target => "${mod_dir}/${mod}.conf",
+ owner => 'root',
+ group => $::apache::params::root_group,
+ mode => '0644',
+ require => [
+ File["${mod}.conf"],
+ Exec["mkdir ${enable_dir}"],
+ ],
+ before => File[$enable_dir],
+ notify => Class['apache::service'],
+ }
+ }
+ }
+}