75 lines
1.7 KiB
Ruby
75 lines
1.7 KiB
Ruby
Puppet::Type.type(:entropy_repo).provide(:file) do
|
|
desc "File provider for Entropy Repositories"
|
|
|
|
defaultfor :operatingsystem => :sabayon
|
|
|
|
mk_resource_methods
|
|
|
|
def type_prefix
|
|
if @property_hash[:repo_type] == 'enman'
|
|
'enman_'
|
|
else
|
|
''
|
|
end
|
|
end
|
|
|
|
def enabled=(value)
|
|
enabled_filename = "/etc/entropy/repositories.conf.d/entropy_#{type_prefix}#{@property_hash[:name]}"
|
|
disabled_filename = "/etc/entropy/repositories.conf.d/_entropy_#{type_prefix}#{@property_hash[:name]}"
|
|
|
|
if value == 'true'
|
|
if File.exists?(disabled_filename)
|
|
File.rename(disabled_filename, enabled_filename)
|
|
end
|
|
else
|
|
if File.exists?(enabled_filename)
|
|
File.rename(enabled_filename, disabled_filename)
|
|
end
|
|
end
|
|
|
|
@property_hash[:enabled] = value
|
|
end
|
|
|
|
def self.instances
|
|
repos = Dir.entries('/etc/entropy/repositories.conf.d/')
|
|
|
|
repos.collect do |r|
|
|
if r == '.' || r == '..'
|
|
nil
|
|
elsif r =~ /\.example$/
|
|
nil
|
|
elsif r !~ /^_?entropy_/
|
|
nil
|
|
else
|
|
matches = /^(_)?entropy_(enman_)?(.*)$/.match(r)
|
|
enabled = matches[1].nil? ? 'true' : 'false'
|
|
type = matches[2] == 'enman_' ? 'enman' : 'entropy'
|
|
name = matches[3]
|
|
|
|
repo = {
|
|
:name => name,
|
|
:repo_type => type,
|
|
:enabled => enabled,
|
|
:provider => :entropy_repo,
|
|
}
|
|
|
|
new(repo)
|
|
end
|
|
end.compact
|
|
end
|
|
|
|
def self.prefetch(resources)
|
|
repos = self.instances()
|
|
|
|
resources.each do |name, resource|
|
|
if provider = repos.find { |r| r.name == name }
|
|
resources[name].provider = provider
|
|
end
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
# vim: set ts=2 shiftwidth=2 expandtab :
|
|
|