diff options
author | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-09-06 04:49:45 +0000 |
---|---|---|
committer | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-09-06 04:49:45 +0000 |
commit | e309b76e168f83e27cf541dc19a02c5b25c1e47c (patch) | |
tree | f5849a38377df2d719646c438d43ccdb9a99702f /lib | |
parent | c5ce953462f424138f0009ce978eb9620aff84a7 (diff) | |
download | puppet-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.rb | 9 | ||||
-rw-r--r-- | lib/puppet/provider.rb | 18 | ||||
-rwxr-xr-x | lib/puppet/provider/package/apple.rb | 6 | ||||
-rwxr-xr-x | lib/puppet/provider/package/apt.rb | 26 | ||||
-rwxr-xr-x | lib/puppet/provider/package/aptitude.rb | 4 | ||||
-rwxr-xr-x | lib/puppet/provider/package/blastwave.rb | 33 | ||||
-rwxr-xr-x | lib/puppet/provider/package/darwinport.rb | 22 | ||||
-rwxr-xr-x | lib/puppet/provider/package/dpkg.rb | 7 | ||||
-rwxr-xr-x | lib/puppet/provider/package/freebsd.rb | 23 | ||||
-rwxr-xr-x | lib/puppet/provider/package/gem.rb | 19 | ||||
-rwxr-xr-x | lib/puppet/provider/package/openbsd.rb | 24 | ||||
-rw-r--r-- | lib/puppet/provider/package/portage.rb | 7 | ||||
-rwxr-xr-x | lib/puppet/provider/package/ports.rb | 32 | ||||
-rwxr-xr-x | lib/puppet/provider/package/rpm.rb | 20 | ||||
-rwxr-xr-x | lib/puppet/provider/package/sun.rb | 28 | ||||
-rwxr-xr-x | lib/puppet/provider/package/sunfreeware.rb | 8 | ||||
-rw-r--r-- | lib/puppet/provider/package/up2date.rb | 17 | ||||
-rwxr-xr-x | lib/puppet/provider/package/yum.rb | 18 | ||||
-rw-r--r-- | lib/puppet/util.rb | 3 | ||||
-rw-r--r-- | lib/puppet/util/package.rb | 31 |
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 |