summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-09-05 21:29:03 +0000
committerluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-09-05 21:29:03 +0000
commite28250dc1d30cf9e9c13e157143e140b402c967e (patch)
tree6a0343b6165b014d89b88fe1647b61860cb5b418 /lib
parent41c90815e16dc65103c617ce56a071902ff93123 (diff)
Adding further gentoo support -- finalized portage support, plus conf and init info for puppetd
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1564 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'lib')
-rw-r--r--lib/puppet/provider/package/portage.rb42
1 files changed, 19 insertions, 23 deletions
diff --git a/lib/puppet/provider/package/portage.rb b/lib/puppet/provider/package/portage.rb
index dc9b3890f..ed701ecd6 100644
--- a/lib/puppet/provider/package/portage.rb
+++ b/lib/puppet/provider/package/portage.rb
@@ -1,15 +1,15 @@
Puppet::Type.type(:package).provide :portage do
desc "Provides packaging support for Gentoo's portage system."
- commands :emerge => "emerge", :eix => "eix"
+ commands :emerge => "/usr/bin/emerge", :eix => "/usr/bin/eix"
defaultfor :operatingsystem => :gentoo
def self.list
search_format = /(\S+) (\S+) \[(.*)\] \[(\S*)\] ([\S]*) (.*)/
- result_fields = [:category, :name, :version, :version_available,
+ result_fields = [:category, :name, :ensure, :version_available,
:vendor, :description]
- command = "#{command(:eix)} --format \"{<installedversions>}<category> <name> [<installedversions>] [<best>] <homepage> <description>{}\""
+ command = "#{command(:eix)} --format \"{installedversions}<category> <name> [<installedversions>] [<best>] <homepage> <description>{}\""
begin
search_output = execute( command )
@@ -19,8 +19,8 @@ Puppet::Type.type(:package).provide :portage do
match = search_format.match( search_result )
if( match )
- package = {:ensure => :present}
- result_fields.zip( match.captures ) { |field, value| package[field] = value }
+ package = {}
+ result_fields.zip( match.captures ) { |field, value| package[field] = value unless value.empty? }
if self.is_a? Puppet::Type and type = @model[:type]
package[:type] = type
elsif self.is_a? Module and self.respond_to? :name
@@ -28,9 +28,7 @@ Puppet::Type.type(:package).provide :portage do
else
raise Puppet::DevError, "Cannot determine package type"
end
- if package[:version]
- package[:version] = package[:version].split.last
- end
+ package[:ensure] = package[:ensure].split.last
packages.push( Puppet.type(:package).installedpkg(package) )
end
@@ -43,11 +41,11 @@ Puppet::Type.type(:package).provide :portage do
end
def install
- if @model[:version] && @model.should( :ensure ) != :latest
- # We must install a specific version
- package_name = "=#{@model[:name]}-#{@model[:version]}"
+ if @model.should( :ensure ) == :present || @model.should( :ensure ) == :latest
+ package_name = "#{@model[:category]}/#{@model[:name]}"
else
- package_name = @model[:name]
+ # We must install a specific version
+ package_name = "=#{@model[:category]}/#{@model[:name]}-#{@model.should( :ensure )}"
end
command = "EMERGE_DEFAULT_OPTS=\"\" #{command(:emerge)} #{package_name}"
begin
@@ -58,12 +56,7 @@ Puppet::Type.type(:package).provide :portage do
end
def uninstall
- if @model[:version]
- # We must uninstall a specific version
- package_name = "=#{@model[:name]}-#{@model[:version]}"
- else
- package_name = @model[:name]
- end
+ package_name = "#{@model[:category]}/#{@model[:name]}"
command ="EMERGE_DEFAULT_OPTS=\"\" #{command(:emerge)} --unmerge #{package_name}"
begin
output = execute( command )
@@ -78,7 +71,7 @@ Puppet::Type.type(:package).provide :portage do
def query
search_format = /(\S+) (\S+) \[(.*)\] \[(\S*)\] ([\S]*) (.*)/
- result_fields = [:category, :name, :version, :version_available, :vendor, :description]
+ result_fields = [:category, :name, :ensure, :version_available, :vendor, :description]
search_field = @model[:name].include?( '/' ) ? "--category-name" : "--name"
command = "#{command(:eix)} --format \"<category> <name> [<installedversions>] [<best>] <homepage> <description>\" --exact #{search_field} #{@model[:name]}"
@@ -93,19 +86,22 @@ Puppet::Type.type(:package).provide :portage do
if( match )
package = {}
result_fields.zip( match.captures ) { |field, value| package[field] = value unless value.empty? }
- package[:ensure] = package[:version] ? :present : :absent
- package[:version] = package[:version].split.last if package[:version]
+ if package[:ensure]
+ package[:ensure] = package[:ensure].split.last
+ else
+ package[:ensure] = :absent
+ end
packages << package
end
end
case packages.size
when 0
- return nil
+ raise Puppet::PackageError.new( "No package found with the specified name [#{@model[:name]}]" )
when 1
return packages[0]
else
- self.fail "More than one package with the specified name [#{@model[:name]}], please use category/name to disambiguate"
+ raise Puppet::PackageError.new( "More than one package with the specified name [#{@model[:name]}], please use category/name to disambiguate" )
end
rescue Puppet::ExecutionFailure => detail
raise Puppet::PackageError.new(detail)