--- /dev/null
+require 'puppet/provider/a2mod'
+
+Puppet::Type.type(:a2mod).provide(:redhat, :parent => Puppet::Provider::A2mod) do
+ desc "Manage Apache 2 modules on RedHat family OSs"
+
+ commands :apachectl => "apachectl"
+
+ confine :osfamily => :redhat
+ defaultfor :osfamily => :redhat
+
+ require 'pathname'
+
+ # modpath: Path to default apache modules directory /etc/httpd/mod.d
+ # modfile: Path to module load configuration file; Default: resides under modpath directory
+ # libfile: Path to actual apache module library. Added in modfile LoadModule
+
+ attr_accessor :modfile, :libfile
+ class << self
+ attr_accessor :modpath
+ def preinit
+ @modpath = "/etc/httpd/mod.d"
+ end
+ end
+
+ self.preinit
+
+ def create
+ File.open(modfile,'w') do |f|
+ f.puts "LoadModule #{resource[:identifier]} #{libfile}"
+ end
+ end
+
+ def destroy
+ File.delete(modfile)
+ end
+
+ def self.instances
+ modules = apachectl("-M").lines.collect { |line|
+ m = line.match(/(\w+)_module \(shared\)$/)
+ m[1] if m
+ }.compact
+
+ modules.map do |mod|
+ new(
+ :name => mod,
+ :ensure => :present,
+ :provider => :redhat
+ )
+ end
+ end
+
+ def modfile
+ modfile ||= "#{self.class.modpath}/#{resource[:name]}.load"
+ end
+
+ # Set libfile path: If absolute path is passed, then maintain it. Else, make it default from 'modules' dir.
+ def libfile
+ libfile = Pathname.new(resource[:lib]).absolute? ? resource[:lib] : "modules/#{resource[:lib]}"
+ end
+end