summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-09-06 04:49:45 +0000
committerluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-09-06 04:49:45 +0000
commite309b76e168f83e27cf541dc19a02c5b25c1e47c (patch)
treef5849a38377df2d719646c438d43ccdb9a99702f /lib
parentc5ce953462f424138f0009ce978eb9620aff84a7 (diff)
downloadpuppet-e309b76e168f83e27cf541dc19a02c5b25c1e47c.tar.gz
puppet-e309b76e168f83e27cf541dc19a02c5b25c1e47c.tar.xz
puppet-e309b76e168f83e27cf541dc19a02c5b25c1e47c.zip
Modifying the provider base class so that it defines a method for every used command (e.g., you call "commands :rpm => 'rpm'", and it defines an "rpm" method. I then pushed this throughout the package providers, which are the heaviest users of commands.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1571 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'lib')
-rw-r--r--lib/puppet/client/master.rb9
-rw-r--r--lib/puppet/provider.rb18
-rwxr-xr-xlib/puppet/provider/package/apple.rb6
-rwxr-xr-xlib/puppet/provider/package/apt.rb26
-rwxr-xr-xlib/puppet/provider/package/aptitude.rb4
-rwxr-xr-xlib/puppet/provider/package/blastwave.rb33
-rwxr-xr-xlib/puppet/provider/package/darwinport.rb22
-rwxr-xr-xlib/puppet/provider/package/dpkg.rb7
-rwxr-xr-xlib/puppet/provider/package/freebsd.rb23
-rwxr-xr-xlib/puppet/provider/package/gem.rb19
-rwxr-xr-xlib/puppet/provider/package/openbsd.rb24
-rw-r--r--lib/puppet/provider/package/portage.rb7
-rwxr-xr-xlib/puppet/provider/package/ports.rb32
-rwxr-xr-xlib/puppet/provider/package/rpm.rb20
-rwxr-xr-xlib/puppet/provider/package/sun.rb28
-rwxr-xr-xlib/puppet/provider/package/sunfreeware.rb8
-rw-r--r--lib/puppet/provider/package/up2date.rb17
-rwxr-xr-xlib/puppet/provider/package/yum.rb18
-rw-r--r--lib/puppet/util.rb3
-rw-r--r--lib/puppet/util/package.rb31
20 files changed, 128 insertions, 227 deletions
diff --git a/lib/puppet/client/master.rb b/lib/puppet/client/master.rb
index 8ab251728..19d301f7d 100644
--- a/lib/puppet/client/master.rb
+++ b/lib/puppet/client/master.rb
@@ -564,7 +564,14 @@ class Puppet::Client::MasterClient < Puppet::Client
end
end
ensure
- Facter.loadfacts
+ if Facter.respond_to? :loadfacts
+ Facter.loadfacts
+ elsif Facter.respond_to? :load
+ Facter.load
+ else
+ raise Puppet::Error,
+ "You must upgrade your version of Facter to use centralized facts"
+ end
end
# Retrieve the plugins from the central server. We only have to load the
diff --git a/lib/puppet/provider.rb b/lib/puppet/provider.rb
index f51ea4450..c303aae2e 100644
--- a/lib/puppet/provider.rb
+++ b/lib/puppet/provider.rb
@@ -45,6 +45,24 @@ class Puppet::Provider
end
@commands[name] = path
confine :exists => path
+
+ # Now define a method for that package
+ unless method_defined? name
+ define_method(name) do |args|
+ cmd = command(name) + " " + args
+ begin
+ output = execute cmd
+ rescue Puppet::ExecutionFailure
+ if output
+ raise Puppet::ExecutionFailure.new(output)
+ else
+ raise Puppet::ExecutionFailure, "Could not execute '#{cmd}'"
+ end
+ end
+
+ return output
+ end
+ end
end
end
diff --git a/lib/puppet/provider/package/apple.rb b/lib/puppet/provider/package/apple.rb
index e16609bfa..fff83617b 100755
--- a/lib/puppet/provider/package/apple.rb
+++ b/lib/puppet/provider/package/apple.rb
@@ -44,11 +44,7 @@ Puppet::Type.type(:package).provide :apple do
self.fail "Mac OS X packages must specify a package source"
end
- begin
- output = execute("#{command(:installer)} -pkg #{source} -target / 2>&1")
- rescue Puppet::ExecutionFailure
- raise Puppet::PackageError.new(output)
- end
+ installer "-pkg #{source} -target /"
end
end
diff --git a/lib/puppet/provider/package/apt.rb b/lib/puppet/provider/package/apt.rb
index a31fbda2b..b4f94fb0c 100755
--- a/lib/puppet/provider/package/apt.rb
+++ b/lib/puppet/provider/package/apt.rb
@@ -15,8 +15,8 @@ Puppet::Type.type(:package).provide :apt, :parent => :dpkg do
# Debian boxes, and the only thing that differs is that it can
# install packages from remote sites.
- def apt
- command(:aptget)
+ def aptcmd(arg)
+ aptget(arg)
end
def checkforcdrom
@@ -55,23 +55,12 @@ Puppet::Type.type(:package).provide :apt, :parent => :dpkg do
# Add the package version
str += "=%s" % should
end
- cmd = "#{apt()} -q -y install %s" % str
-
- begin
- output = execute(cmd)
- rescue Puppet::ExecutionFailure
- raise Puppet::PackageError.new(output)
- end
+ aptcmd("-q -y install %s" % str)
end
# What's the latest package version available?
def latest
- cmd = "#{command(:aptcache)} showpkg %s" % @model[:name]
- begin
- output = execute(cmd)
- rescue Puppet::ExecutionFailure
- raise Puppet::PackageError.new(output)
- end
+ output = aptcache("showpkg %s" % @model[:name] )
if output =~ /Versions:\s*\n((\n|.)+)^$/
versions = $1
@@ -104,12 +93,7 @@ Puppet::Type.type(:package).provide :apt, :parent => :dpkg do
end
def uninstall
- cmd = "#{apt()} -y -q remove %s" % @model[:name]
- begin
- output = execute(cmd)
- rescue Puppet::ExecutionFailure
- raise Puppet::PackageError.new(output)
- end
+ aptcmd("-y -q remove %s" % @model[:name])
end
def versionable?
diff --git a/lib/puppet/provider/package/aptitude.rb b/lib/puppet/provider/package/aptitude.rb
index ca5acaf62..e95f484f6 100755
--- a/lib/puppet/provider/package/aptitude.rb
+++ b/lib/puppet/provider/package/aptitude.rb
@@ -6,8 +6,8 @@ Puppet::Type.type(:package).provide :aptitude, :parent => :apt do
ENV['DEBIAN_FRONTEND'] = "noninteractive"
- def apt
- command(:aptitude)
+ def aptcmd(arg)
+ aptitude(arg)
end
end
diff --git a/lib/puppet/provider/package/blastwave.rb b/lib/puppet/provider/package/blastwave.rb
index feea6721e..41e15228c 100755
--- a/lib/puppet/provider/package/blastwave.rb
+++ b/lib/puppet/provider/package/blastwave.rb
@@ -32,18 +32,13 @@ Puppet::Type.type(:package).provide :blastwave, :parent => :sun do
# Turn our blastwave listing into a bunch of hashes.
def self.blastlist(hash)
- command = "#{command(:pkgget)} -c"
+ command = "-c"
if hash[:justme]
command += " " + hash[:justme]
end
- begin
- output = execute(command)
- rescue Puppet::ExecutionFailure => detail
- raise Puppet::Error, "Could not get package listing: %s" %
- detail
- end
+ pkgget command
list = output.split("\n").collect do |line|
next if line =~ /^#/
@@ -89,13 +84,7 @@ Puppet::Type.type(:package).provide :blastwave, :parent => :sun do
end
def install
- begin
- execute("#{command(:pkgget)} -f install #{@model[:name]}")
- rescue Puppet::ExecutionFailure => detail
- raise Puppet::Error,
- "Could not install %s: %s" %
- [@model[:name], detail]
- end
+ pkgget "-f install #{@model[:name]}"
end
# Retrieve the version from the current package file.
@@ -112,23 +101,11 @@ Puppet::Type.type(:package).provide :blastwave, :parent => :sun do
# Remove the old package, and install the new one
def update
- begin
- execute("#{command(:pkgget)} -f upgrade #{@model[:name]}")
- rescue Puppet::ExecutionFailure => detail
- raise Puppet::Error,
- "Could not upgrade %s: %s" %
- [@model[:name], detail]
- end
+ pkgget "-f upgrade #{@model[:name]}"
end
def uninstall
- begin
- execute("#{command(:pkgget)} -f remove #{@model[:name]}")
- rescue Puppet::ExecutionFailure => detail
- raise Puppet::Error,
- "Could not remove %s: %s" %
- [@model[:name], detail]
- end
+ pkgget "-f remove #{@model[:name]}"
end
end
diff --git a/lib/puppet/provider/package/darwinport.rb b/lib/puppet/provider/package/darwinport.rb
index 7c19a90a6..0dcdcca84 100755
--- a/lib/puppet/provider/package/darwinport.rb
+++ b/lib/puppet/provider/package/darwinport.rb
@@ -1,12 +1,12 @@
Puppet::Type.type(:package).provide :darwinport do
desc "Package management using DarwinPorts on OS X."
- PORT = "/opt/local/bin/port"
- confine :exists => PORT, :operatingsystem => "Darwin"
+ commands :port => "/opt/local/bin/port"
+ confine :operatingsystem => "Darwin"
def self.eachpkgashash
# list out all of the packages
- open("| #{PORT} list installed") { |process|
+ open("| #{command(:port)} list installed") { |process|
regex = %r{(\S+)\s+@(\S+)\s+(\S+)}
fields = [:name, :ensure, :location]
hash = {}
@@ -45,13 +45,7 @@ Puppet::Type.type(:package).provide :darwinport do
should = @model[:ensure]
# Seems like you can always say 'upgrade'
- cmd = "#{PORT} upgrade #{@model[:name]}"
-
- begin
- output = execute(cmd)
- rescue Puppet::ExecutionFailure
- raise Puppet::PackageError.new(output)
- end
+ port "upgrade #{@model[:name]}"
end
def query
@@ -66,7 +60,7 @@ Puppet::Type.type(:package).provide :darwinport do
end
def latest
- info = %x{#{PORT} search '^#{@model[:name]}$' 2>/dev/null}
+ info = port "search '^#{@model[:name]}$' 2>/dev/null"
if $? != 0 or info =~ /^Error/
return nil
@@ -79,11 +73,7 @@ Puppet::Type.type(:package).provide :darwinport do
end
def uninstall
- cmd = "#{PORT} uninstall #{@model[:name]}"
- output = %x{#{cmd} 2>&1}
- if $? != 0
- raise Puppet::PackageError.new(output)
- end
+ port "uninstall #{@model[:name]}"
end
def update
diff --git a/lib/puppet/provider/package/dpkg.rb b/lib/puppet/provider/package/dpkg.rb
index cb68cd97e..56ffe95f5 100755
--- a/lib/puppet/provider/package/dpkg.rb
+++ b/lib/puppet/provider/package/dpkg.rb
@@ -100,12 +100,7 @@ Puppet::Type.type(:package).provide :dpkg do
end
def uninstall
- cmd = "#{command(:dpkg)} -r %s" % @model[:name]
- begin
- output = execute(cmd)
- rescue Puppet::ExecutionFailure
- raise Puppet::PackageError.new(output)
- end
+ dpkg "-r %s" % @model[:name]
end
end
diff --git a/lib/puppet/provider/package/freebsd.rb b/lib/puppet/provider/package/freebsd.rb
index 8d44870e4..f630c66b6 100755
--- a/lib/puppet/provider/package/freebsd.rb
+++ b/lib/puppet/provider/package/freebsd.rb
@@ -5,12 +5,12 @@ Puppet::Type.type(:package).provide :freebsd, :parent => :openbsd do
so there are plans to rewrite this support to directly use those
libraries."
- commands :info => "/usr/sbin/pkg_info",
- :add => "/usr/sbin/pkg_add",
- :delete => "/usr/sbin/pkg_delete"
+ commands :pkginfo => "/usr/sbin/pkg_info",
+ :pkgadd => "/usr/sbin/pkg_add",
+ :pkgdelete => "/usr/sbin/pkg_delete"
def self.listcmd
- command(:info)
+ command(:pkginfo)
end
def install
@@ -20,13 +20,7 @@ Puppet::Type.type(:package).provide :freebsd, :parent => :openbsd do
return super
end
- cmd = command(:add) + " -r " + @model[:name]
-
- begin
- output = execute(cmd)
- rescue Puppet::ExecutionFailure
- raise Puppet::PackageError.new(output)
- end
+ pkgadd " -r " + @model[:name]
end
def query
@@ -40,12 +34,7 @@ Puppet::Type.type(:package).provide :freebsd, :parent => :openbsd do
end
def uninstall
- cmd = "#{command(:delete)} %s-%s" % [@model[:name], @model[:ensure]]
- begin
- output = execute(cmd)
- rescue Puppet::ExecutionFailure
- raise Puppet::PackageError.new(output)
- end
+ pkgdelete "%s-%s" % [@model[:name], @model[:ensure]]
end
end
diff --git a/lib/puppet/provider/package/gem.rb b/lib/puppet/provider/package/gem.rb
index 67d5e37c4..b0ecaafe6 100755
--- a/lib/puppet/provider/package/gem.rb
+++ b/lib/puppet/provider/package/gem.rb
@@ -17,6 +17,7 @@ Puppet::Type.type(:package).provide :gem do
if name = hash[:justme]
command += name
end
+
begin
list = execute(command).split("\n\n").collect do |set|
if gemhash = gemsplit(set)
@@ -60,7 +61,7 @@ Puppet::Type.type(:package).provide :gem do
end
def install(useversion = true)
- command = "#{command(:gem)} install "
+ command = "install "
if (! @model.should(:ensure).is_a? Symbol) and useversion
command += "-v %s " % @model.should(:ensure)
end
@@ -69,12 +70,8 @@ Puppet::Type.type(:package).provide :gem do
else
command += @model[:name]
end
- begin
- execute(command)
- rescue Puppet::ExecutionFailure => detail
- raise Puppet::Error, "Could not install %s: %s" %
- [@model[:name], detail]
- end
+
+ gem command
end
def latest
@@ -89,13 +86,7 @@ Puppet::Type.type(:package).provide :gem do
end
def uninstall
- begin
- # Remove everything, including the binaries.
- execute("#{command(:gem)} uninstall -x -a #{@model[:name]}")
- rescue Puppet::ExecutionFailure => detail
- raise Puppet::Error, "Could not uninstall %s: %s" %
- [@model[:name], detail]
- end
+ gem "uninstall -x -a #{@model[:name]}"
end
def update
diff --git a/lib/puppet/provider/package/openbsd.rb b/lib/puppet/provider/package/openbsd.rb
index 2a0cb87d8..6012dcc84 100755
--- a/lib/puppet/provider/package/openbsd.rb
+++ b/lib/puppet/provider/package/openbsd.rb
@@ -2,7 +2,7 @@
Puppet::Type.type(:package).provide :openbsd do
desc "OpenBSD's form of ``pkg_add`` support."
- commands :info => "pkg_info", :add => "pkg_add", :delete => "pkg_delete"
+ commands :pkginfo => "pkg_info", :pkgadd => "pkg_add", :pkgdelete => "pkg_delete"
defaultfor :operatingsystem => :openbsd
@@ -62,23 +62,12 @@ Puppet::Type.type(:package).provide :openbsd do
"You must specify a package source for BSD packages"
end
- cmd = command(:add) + " " + @model[:source]
-
- begin
- output = execute(cmd)
- rescue Puppet::ExecutionFailure
- raise Puppet::PackageError.new(output)
- end
+ pkgadd @model[:source]
end
def query
hash = {}
- begin
- # list out our specific package
- info = execute("#{command(:info)} #{@model[:name]}")
- rescue Puppet::ExecutionFailure
- raise Puppet::PackageError.new(info)
- end
+ info = pkginfo @model[:name]
# Search for the version info
if info =~ /Information for #{@model[:name]}-(\S+)/
@@ -96,12 +85,7 @@ Puppet::Type.type(:package).provide :openbsd do
end
def uninstall
- cmd = "#{command(:delete)} %s" % @model[:name]
- begin
- output = execute(cmd)
- rescue Puppet::ExecutionFailure
- raise Puppet::PackageError.new(output)
- end
+ pkgdelete @model[:name]
end
end
diff --git a/lib/puppet/provider/package/portage.rb b/lib/puppet/provider/package/portage.rb
index ed701ecd6..199ba8a83 100644
--- a/lib/puppet/provider/package/portage.rb
+++ b/lib/puppet/provider/package/portage.rb
@@ -48,11 +48,8 @@ Puppet::Type.type(:package).provide :portage do
package_name = "=#{@model[:category]}/#{@model[:name]}-#{@model.should( :ensure )}"
end
command = "EMERGE_DEFAULT_OPTS=\"\" #{command(:emerge)} #{package_name}"
- begin
- output = execute( command )
- rescue Puppet::ExecutionFailure => detail
- raise Puppet::PackageError.new(detail)
- end
+
+ output = execute( command )
end
def uninstall
diff --git a/lib/puppet/provider/package/ports.rb b/lib/puppet/provider/package/ports.rb
index c3d18141a..8279d1405 100755
--- a/lib/puppet/provider/package/ports.rb
+++ b/lib/puppet/provider/package/ports.rb
@@ -1,10 +1,10 @@
Puppet::Type.type(:package).provide :ports, :parent => :freebsd do
desc "Support for FreeBSD's ports. Again, this still mixes packages
and ports."
- commands :upgrade => "/usr/local/sbin/portupgrade",
- :version => "/usr/local/sbin/portversion",
- :uninstall => "/usr/local/sbin/pkg_deinstall",
- :info => "/usr/sbin/pkg_info"
+ commands :portupgrade => "/usr/local/sbin/portupgrade",
+ :portversion => "/usr/local/sbin/portversion",
+ :portuninstall => "/usr/local/sbin/pkg_deinstall",
+ :portinfo => "/usr/sbin/pkg_info"
defaultfor :operatingsystem => :freebsd
@@ -19,24 +19,20 @@ Puppet::Type.type(:package).provide :ports, :parent => :freebsd do
# -p: create a package
# -N: install if the package is missing, otherwise upgrade
# -P: prefer binary packages
- cmd = "#{command(:upgrade)} -p -N -P #{@model[:name]}"
+ cmd = "-p -N -P #{@model[:name]}"
- begin
- output = execute(cmd)
- if output =~ /\*\* No such /
- raise Puppet::PackageError, "Could not find package %s" % @model[:name]
- end
- rescue Puppet::ExecutionFailure
- raise Puppet::PackageError.new(output)
+ output = portupgrade cmd
+ if output =~ /\*\* No such /
+ raise Puppet::ExecutionFailure, "Could not find package %s" % @model[:name]
end
end
# If there are multiple packages, we only use the last one
def latest
- cmd = "#{command(:version)} -v #{@model[:name]}"
+ cmd = "-v #{@model[:name]}"
begin
- output = execute(cmd)
+ output = portversion(cmd)
rescue Puppet::ExecutionFailure
raise Puppet::PackageError.new(output)
end
@@ -87,13 +83,7 @@ Puppet::Type.type(:package).provide :ports, :parent => :freebsd do
end
def uninstall
- cmd = "#{command(:uninstall)} #{@model[:name]}"
- begin
- output = execute(cmd)
- rescue Puppet::ExecutionFailure
- raise Puppet::PackageError.new(output)
- end
-
+ portuninstall @model[:name]
end
def update
diff --git a/lib/puppet/provider/package/rpm.rb b/lib/puppet/provider/package/rpm.rb
index 0c9c26d42..4052c1394 100755
--- a/lib/puppet/provider/package/rpm.rb
+++ b/lib/puppet/provider/package/rpm.rb
@@ -6,6 +6,7 @@ Puppet::Type.type(:package).provide :rpm do
VERSIONSTRING = "%{VERSION}-%{RELEASE}"
commands :rpm => "rpm"
+ defaultfor :operatingsystem => :redhat
def self.list
packages = []
@@ -47,11 +48,10 @@ Puppet::Type.type(:package).provide :rpm do
:description => "DESCRIPTION"
}
- cmd = "#{command(:rpm)} -q #{@model[:name]} --qf '%s\n'" %
- "%{NAME} #{VERSIONSTRING}"
+ cmd = "-q #{@model[:name]} --qf '%{NAME} #{VERSIONSTRING}\n'"
begin
- output = execute(cmd)
+ output = rpm cmd
rescue Puppet::ExecutionFailure
return nil
end
@@ -70,8 +70,6 @@ Puppet::Type.type(:package).provide :rpm do
output
end
- hash[:ensure] = :present
-
return hash
end
@@ -97,20 +95,12 @@ Puppet::Type.type(:package).provide :rpm do
if @model.is(:ensure) != :absent
flag = "-U"
end
- output = %x{#{command(:rpm)} #{flag} #{source} 2>&1}
- unless $? == 0
- raise Puppet::PackageError.new(output)
- end
+ rpm "#{flag} #{source}"
end
def uninstall
- cmd = "#{command(:rpm)} -e %s" % @model[:name]
- begin
- output = execute(cmd)
- rescue Puppet::ExecutionFailure
- raise Puppet::PackageError.new(output)
- end
+ rpm "-e " + @model[:name]
end
def update
diff --git a/lib/puppet/provider/package/sun.rb b/lib/puppet/provider/package/sun.rb
index 590e8f84a..a2730af2a 100755
--- a/lib/puppet/provider/package/sun.rb
+++ b/lib/puppet/provider/package/sun.rb
@@ -3,9 +3,9 @@
Puppet::Type.type(:package).provide :sun do
desc "Sun's packaging system. Requires that you specify the source for
the packages you're managing."
- commands :info => "/usr/bin/pkginfo",
- :add => "/usr/sbin/pkgadd",
- :rm => "/usr/sbin/pkgrm"
+ commands :pkginfo => "/usr/bin/pkginfo",
+ :pkgadd => "/usr/sbin/pkgadd",
+ :pkgrm => "/usr/sbin/pkgrm"
defaultfor :operatingsystem => :solaris
@@ -29,7 +29,7 @@ Puppet::Type.type(:package).provide :sun do
"FILES" => nil
}
- cmd = "#{command(:info)} -l"
+ cmd = "#{command(:pkginfo)} -l"
# list out all of the packages
execpipe(cmd) { |process|
@@ -81,7 +81,7 @@ Puppet::Type.type(:package).provide :sun do
}
hash = {}
- cmd = "#{command(:info)} -l"
+ cmd = "#{command(:pkginfo)} -l"
if device
cmd += " -d #{device}"
end
@@ -118,7 +118,7 @@ Puppet::Type.type(:package).provide :sun do
unless @model[:source]
raise Puppet::Error, "Sun packages must specify a package source"
end
- cmd = [command(:add)]
+ cmd = []
if @model[:adminfile]
cmd << " -a " + @model[:adminfile]
@@ -132,11 +132,7 @@ Puppet::Type.type(:package).provide :sun do
cmd += ["-n", @model[:name]]
cmd = cmd.join(" ")
- begin
- output = execute(cmd)
- rescue Puppet::ExecutionFailure => detail
- raise Puppet::PackageError.new(output)
- end
+ pkgadd cmd
end
# Retrieve the version from the current package file.
@@ -150,20 +146,14 @@ Puppet::Type.type(:package).provide :sun do
end
def uninstall
- command = "#{command(:rm)} -n "
+ command = "-n "
if @model[:adminfile]
command += " -a " + @model[:adminfile]
end
command += " " + @model[:name]
- begin
- execute(command)
- rescue ExecutionFailure => detail
- raise Puppet::Error,
- "Could not uninstall %s: %s" %
- [@model[:name], detail]
- end
+ pkgrm command
end
# Remove the old package, and install the new one. This will probably
diff --git a/lib/puppet/provider/package/sunfreeware.rb b/lib/puppet/provider/package/sunfreeware.rb
index e6c3870f7..7933eb42f 100755
--- a/lib/puppet/provider/package/sunfreeware.rb
+++ b/lib/puppet/provider/package/sunfreeware.rb
@@ -3,13 +3,7 @@ Puppet::Type.type(:package).provide :sunfreeware, :parent => :blastwave do
desc "Package management using sunfreeware.com's ``pkg-get`` command on Solaris.
At this point, support is exactly the same as ``blastwave`` support and
has not actually been tested."
- if pkgget = binary("pkg-get")
- PKGGET = pkgget
- else
- PKGGET = nil
- end
-
- confine :exists => PKGGET
+ commands :pkgget => "pkg-get"
end
# $Id$
diff --git a/lib/puppet/provider/package/up2date.rb b/lib/puppet/provider/package/up2date.rb
index 8cceb3735..1f9fa0ffc 100644
--- a/lib/puppet/provider/package/up2date.rb
+++ b/lib/puppet/provider/package/up2date.rb
@@ -6,18 +6,12 @@ Puppet.type(:package).provide :up2date, :parent => :rpm do
# Install a package using 'up2date'.
def install
- cmd = "#{command(:up2date)} -u %s" % @model[:name]
-
- begin
- output = execute(cmd)
- rescue Puppet::ExecutionFailure
- raise Puppet::PackageError.new(output)
- end
+ up2date "-u %s" % @model[:name]
#@states[:ensure].retrieve
#if @states[:ensure].is == :absent
unless self.query
- raise Puppet::PackageError.new(
+ raise Puppet::ExecutionFailure.new(
"Could not find package %s" % self.name
)
end
@@ -27,12 +21,7 @@ Puppet.type(:package).provide :up2date, :parent => :rpm do
def latest
#up2date can only get a list of *all* available packages?
#cmd = "/usr/sbib/up2date-nox --show-available %s" % self[:name]
- cmd = "#{command(:up2date)} --show-available"
- begin
- output = execute(cmd)
- rescue Puppet::ExecutionFailure
- raise Puppet::PackageError.new(output)
- end
+ output = up2date "--show-available"
if output =~ /#{@model[:name]}-(\d+.*)\.\w+/
return $1
diff --git a/lib/puppet/provider/package/yum.rb b/lib/puppet/provider/package/yum.rb
index 5be838746..80f9f7857 100755
--- a/lib/puppet/provider/package/yum.rb
+++ b/lib/puppet/provider/package/yum.rb
@@ -6,16 +6,10 @@ Puppet::Type.type(:package).provide :yum, :parent => :rpm do
# Install a package using 'yum'.
def install
- cmd = "#{command(:yum)} -y install %s" % @model[:name]
-
- begin
- output = execute(cmd)
- rescue Puppet::ExecutionFailure => detail
- raise Puppet::PackageError.new(detail)
- end
+ output = yum "-y install %s" % @model[:name]
unless self.query
- raise Puppet::PackageError.new(
+ raise Puppet::Error.new(
"Could not find package %s" % self.name
)
end
@@ -23,13 +17,7 @@ Puppet::Type.type(:package).provide :yum, :parent => :rpm do
# What's the latest package version available?
def latest
- cmd = "#{command(:yum)} list available %s" % @model[:name]
-
- begin
- output = execute(cmd)
- rescue Puppet::ExecutionFailure => detail
- raise Puppet::PackageError.new(detail)
- end
+ output = yum "list available %s" % @model[:name]
if output =~ /#{@model[:name]}\S+\s+(\S+)\s/
return $1
diff --git a/lib/puppet/util.rb b/lib/puppet/util.rb
index 502a47abf..c16d87029 100644
--- a/lib/puppet/util.rb
+++ b/lib/puppet/util.rb
@@ -431,7 +431,8 @@ module Util
else
Puppet.debug "Executing '%s'" % command
end
- output = %x{#{command} 2>&1}
+ command += " 2>&1" unless command =~ />/
+ output = %x{#{command}}
if failonfail
unless $? == 0
diff --git a/lib/puppet/util/package.rb b/lib/puppet/util/package.rb
new file mode 100644
index 000000000..00e04f64a
--- /dev/null
+++ b/lib/puppet/util/package.rb
@@ -0,0 +1,31 @@
+require 'puppet'
+
+module Puppet::Util::Package
+ def versioncmp(version_a, version_b)
+ vre = /[-.]|\d+|[^-.\d]+/
+ ax = version_a.scan(vre)
+ bx = version_b.scan(vre)
+
+ while (ax.length>0 && bx.length>0) do
+ a = ax.shift
+ b = bx.shift
+
+ if( a == b ) then next
+ elsif (a == '-' && b == '-') then next
+ elsif (a == '-') then return -1
+ elsif (b == '-') then return 1
+ elsif (a == '.' && b == '.') then next
+ elsif (a == '.' ) then return -1
+ elsif (b == '.' ) then return 1
+ elsif (a =~ /^\d+$/ && b =~ /^\d+$/) then
+ if( a =~ /^0/ or b =~ /^0/ ) then
+ return a.to_s.upcase <=> b.to_s.upcase
+ end
+ return a.to_i <=> b.to_i
+ else
+ return a.upcase <=> b.upcase
+ end
+ end
+ return version_a <=> version_b;
+ end
+end