Can someone who's familiar with RHEL test this?
On Sep 23, 2008, at 1:47 AM, Oliver Hookins wrote:
>
> Signed-off-by: Oliver Hookins <[EMAIL PROTECTED]>
> ---
> lib/puppet/provider/package/rpm.rb | 9 +++-
> lib/puppet/provider/package/yumhelper.py | 102 +++++++++++++++++++++
> +++++---
> 2 files changed, 99 insertions(+), 12 deletions(-)
>
> diff --git a/lib/puppet/provider/package/rpm.rb b/lib/puppet/
> provider/package/rpm.rb
> index a303da4..b5a5c5d 100755
> --- a/lib/puppet/provider/package/rpm.rb
> +++ b/lib/puppet/provider/package/rpm.rb
> @@ -23,9 +23,16 @@ Puppet::Type.type(:package).provide :rpm, :source
> => :rpm, :parent => Puppet::Pr
> def self.instances
> packages = []
>
> + # rpm < 4.1 don't support --nosignature
> + output = rpm "--version"
> + sig = "--nosignature"
> + if output =~ /RPM version (([123].*)|(4\.0.*))/
> + sig = ""
> + end
> +
> # list out all of the packages
> begin
> - execpipe("#{command(:rpm)} -qa --nosignature --nodigest
> --qf '#{NEVRAFORMAT}\n'") { |process|
> + execpipe("#{command(:rpm)} -qa #{sig} --nodigest --qf
> '#{NEVRAFORMAT}\n'") { |process|
> # now turn each returned line into a package object
> process.each { |line|
> hash = nevra_to_hash(line)
> diff --git a/lib/puppet/provider/package/yumhelper.py b/lib/puppet/
> provider/package/yumhelper.py
> index 962b96c..d014e1e 100644
> --- a/lib/puppet/provider/package/yumhelper.py
> +++ b/lib/puppet/provider/package/yumhelper.py
> @@ -4,8 +4,21 @@
> # (C) 2007 Red Hat Inc.
> # David Lutterkort <dlutter @redhat.com>
>
> -import yum
> import sys
> +import string
> +import re
> +
> +# this maintains compatibility with really old platforms with
> python 1.x
> +from os import popen
> +
> +# try to use the yum libraries by default, but shell out to the yum
> executable
> +# if they are not present (i.e. yum <= 2.0)
> +try:
> + import yum
> +except ImportError:
> + useyumlib = 0
> +else:
> + useyumlib = 1
>
> OVERRIDE_OPTS = {
> 'debuglevel': 0,
> @@ -26,14 +39,81 @@ def pkg_lists(my):
> my.doRpmDBSetup()
> return my.doPackageLists('updates')
>
> -try:
> +def shell_out():
> + try:
> + p = popen("/usr/bin/env yum check-update 2>&1")
> + output = p.readlines()
> + rc = p.close()
> +
> + if rc is not None:
> + # None represents exit code of 0, otherwise the exit
> code is in the
> + # format returned by wait(). The high 8-bits are what
> we want.
> + # Exit code of 100 from yum represents updates available.
> + rc = rc >> 8
> + if rc != 100:
> + return rc
> + else:
> + # Exit code is None (0), no updates waiting so don't
> both parsing output
> + return 0
> +
> + # Yum prints a line of hyphens (old versions) or a blank
> line between
> + # headers and package data, so skip everything before them
> + skipheaders = 0
> + for line in output:
> + if not skipheaders:
> + if re.compile("^((-){80}|)$").search(line):
> + skipheaders = 1
> + continue
> +
> + # Skip any blank lines
> + if re.compile("^( )?$").search(line):
> + continue
> +
> + # Format is:
> + # Yum 1.x: name arch (epoch:)?version
> + # Yum 2.0: name arch (epoch:)?version repo
> + # epoch is optional if 0
> +
> + p = string.split(line)
> + pname = p[0]
> + parch = p[1]
> + pevr = p[2]
> +
> + # Separate out epoch:version-release
> + evr_re = re.compile("^(\d:)?(\S+)-(\S+)$")
> + evr = evr_re.match(pevr)
> +
> + pepoch = ""
> + if evr.group(1) is None:
> + pepoch = "0"
> + else:
> + pepoch = evr.group(1).replace(":", "")
> + pversion = evr.group(2)
> + prelease = evr.group(3)
> +
> + print "_pkg", pname, pepoch, pversion, prelease, parch
> +
> + return 0
> + except:
> + print sys.exc_info()[0]
> + return 1
> +
> +if useyumlib:
> try:
> - my = yum.YumBase()
> - ypl = pkg_lists(my)
> - for pkg in ypl.updates:
> - print "_pkg %s %s %s %s %s" % (pkg.name, pkg.epoch,
> pkg.version, pkg.release, pkg.arch)
> - finally:
> - my.closeRpmDB()
> -except IOError, e:
> - print "_err IOError %d %s" % (e.errno, e)
> - sys.exit(1)
> + try:
> + my = yum.YumBase()
> + ypl = pkg_lists(my)
> + for pkg in ypl.updates:
> + print "_pkg %s %s %s %s %s" % (pkg.name, pkg.epoch,
> pkg.version, pkg.release, pkg.arch)
> + finally:
> + my.closeRpmDB()
> + except IOError, e:
> + print "_err IOError %d %s" % (e.errno, e)
> + sys.exit(1)
> + except AttributeError, e:
> + # catch yumlib errors in buggy 2.x versions of yum
> + print "_err AttributeError %s" % e
> + sys.exit(1)
> +else:
> + rc = shell_out()
> + sys.exit(rc)
> --
> 1.5.4.3
>
>
> >
--
The Ninety-Ninety Rule of Project Schedules:
The first 90% of the task takes 90% of the time, and the last
10% takes the other 90%.
---------------------------------------------------------------------
Luke Kanies | http://reductivelabs.com | http://madstop.com
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Puppet Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/puppet-dev?hl=en
-~----------~----~----~----~------~----~------~--~---