+++ /dev/null
-require 'puppet/util/filetype'
-Puppet::Type.type(:a2mod).provide(:gentoo, :parent => Puppet::Provider) do
- desc "Manage Apache 2 modules on Gentoo"
-
- confine :operatingsystem => :gentoo
- defaultfor :operatingsystem => :gentoo
-
- attr_accessor :property_hash
-
- def create
- @property_hash[:ensure] = :present
- end
-
- def exists?
- (!(@property_hash[:ensure].nil?) and @property_hash[:ensure] == :present)
- end
-
- def destroy
- @property_hash[:ensure] = :absent
- end
-
- def flush
- self.class.flush
- end
-
- class << self
- attr_reader :conf_file
- end
-
- def self.clear
- @mod_resources = []
- @modules = []
- @other_args = ""
- end
-
- def self.initvars
- @conf_file = "/etc/conf.d/apache2"
- @filetype = Puppet::Util::FileType.filetype(:flat).new(conf_file)
- @mod_resources = []
- @modules = []
- @other_args = ""
- end
-
- self.initvars
-
- # Retrieve an array of all existing modules
- def self.modules
- if @modules.length <= 0
- # Locate the APACHE_OPTS variable
- records = filetype.read.split(/\n/)
- apache2_opts = records.grep(/^\s*APACHE2_OPTS=/).first
-
- # Extract all defines
- while apache2_opts.sub!(/-D\s+(\w+)/, '')
- @modules << $1.downcase
- end
-
- # Hang on to any remaining options.
- if apache2_opts.match(/APACHE2_OPTS="(.+)"/)
- @other_args = $1.strip
- end
-
- @modules.sort!.uniq!
- end
-
- @modules
- end
-
- def self.prefetch(resources={})
- # Match resources with existing providers
- instances.each do |provider|
- if resource = resources[provider.name]
- resource.provider = provider
- end
- end
-
- # Store all resources using this provider for flushing
- resources.each do |name, resource|
- @mod_resources << resource
- end
- end
-
- def self.instances
- modules.map {|mod| new(:name => mod, :provider => :gentoo, :ensure => :present)}
- end
-
- def self.flush
-
- mod_list = modules
- mods_to_remove = @mod_resources.select {|mod| mod.should(:ensure) == :absent}.map {|mod| mod[:name]}
- mods_to_add = @mod_resources.select {|mod| mod.should(:ensure) == :present}.map {|mod| mod[:name]}
-
- mod_list -= mods_to_remove
- mod_list += mods_to_add
- mod_list.sort!.uniq!
-
- if modules != mod_list
- opts = @other_args + " "
- opts << mod_list.map {|mod| "-D #{mod.upcase}"}.join(" ")
- opts.strip!
- opts.gsub!(/\s+/, ' ')
-
- apache2_opts = %Q{APACHE2_OPTS="#{opts}"}
- Puppet.debug("Writing back \"#{apache2_opts}\" to #{conf_file}")
-
- records = filetype.read.split(/\n/)
-
- opts_index = records.find_index {|i| i.match(/^\s*APACHE2_OPTS/)}
- records[opts_index] = apache2_opts
-
- filetype.backup
- filetype.write(records.join("\n"))
- @modules = mod_list
- end
- end
-end