In a conjunct effort me and Varinder Singh merged the RPM Module with
the Yum Module and we create a module called Packages.
The module is available at:
http://func.pastebin.com/f215bec3b
http://matrix.senecac.on.ca/~mpaivaneto/packages.py
Help and suggestions are welcome.
--
--------
Milton Paiva Neto
milton.paiva@xxxxxxxxx
mpaivaneto@xxxxxxxxxxxxxxxxxxx
http://miltonpaiva.wordpress.com/
# Copyright 2007, Red Hat, Inc
# Michael DeHaan <mdehaan@xxxxxxxxxx>#
# Copyright 2009
# Varinder Singh <varin312@xxxxxxxxx>
# Milton Paiva Neto <milton.paiva@xxxxxxxxx>
#
# This software may be freely redistributed under the terms of the GNU
# general public license.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
import func_module
import yum
import rpm
### YUM MODULE ###
class DummyCallback(object):
def event(self, state, data=None):
pass
class Packages(func_module.FuncModule):
version = "0.0.1"
api_version = "0.0.1"
description = "Package Management system for minions via func"
def install(self, pkg=None):
ayum = yum.YumBase()
ayum.doGenericSetup()
ayum.doRepoSetup()
try:
ayum.doLock()
if pkg != None:
tx_result = ayum.install(pattern=pkg)
ayum.buildTransaction()
ayum.processTransaction(callback=DummyCallback())
tx_result = tx_result + ['Package Installed']
else:
tx_result = ['Please Enter a Package Name to install']
except Errors.InstallError, ex:
tx_result = [str(ex)]
finally:
ayum.closeRpmDB()
ayum.doUnlock()
return map(str, tx_result)
def remove(self, pkg=None):
ayum = yum.YumBase()
ayum.doGenericSetup()
ayum.doRepoSetup()
try:
ayum.doLock()
if pkg != None:
tx_result = ayum.remove(pattern=pkg)
ayum.buildTransaction()
ayum.processTransaction(callback=DummyCallback())
tx_result = tx_result + ['Package removed']
else:
tx_result = ['Please Enter a Package Name to remove']
except Errors.InstallError, ex:
tx_result = [str(ex)]
finally:
ayum.closeRpmDB()
ayum.doUnlock()
return map(str, tx_result)
def groupinstall(self, grp=None):
ayum = yum.YumBase()
ayum.doGenericSetup()
ayum.doRepoSetup()
try:
ayum.doLock()
if grp != None:
if grp[0]!='@':
grp = '@'+grp
tx_result = ayum._at_groupinstall(pattern=grp)
ayum.buildTransaction()
ayum.processTransaction(callback=DummyCallback())
else:
tx_result = ['Please Enter a Group Name to install']
except Errors.InstallError, ex:
tx_result = [str(ex)]
finally:
ayum.closeRpmDB()
ayum.doUnlock()
return map(str, tx_result)
def groupremove(self, grp=None):
ayum = yum.YumBase()
ayum.doGenericSetup()
ayum.doRepoSetup()
try:
ayum.doLock()
if grp != None:
if grp[0]!='@':
grp = '@'+grp
tx_result = ayum._at_groupremove(pattern=grp)
ayum.buildTransaction()
ayum.processTransaction(callback=DummyCallback())
else:
tx_result = ['Please Enter a Group Name to remove']
except Errors.InstallError, ex:
tx_result = [str(ex)]
finally:
ayum.closeRpmDB()
ayum.doUnlock()
return map(str, tx_result)
### RPM MODULE ###
def inventory(self, flatten=True):
"""
Returns information on all installed packages.
By default, 'flatten' is passed in as True, which makes printouts very
clean in diffs for use by func-inventory. If you are writting another
software application, using flatten=False will prevent the need to
parse the returns.
"""
ts = rpm.TransactionSet()
mi = ts.dbMatch()
results = []
for hdr in mi:
name = hdr['name']
epoch = (hdr['epoch'] or 0)
version = hdr['version']
release = hdr['release']
arch = hdr['arch']
if flatten:
results.append("%s %s %s %s %s" % (name, epoch, version,
release, arch))
else:
results.append([name, epoch, version, release, arch])
return results
def verify(self, flatten=True):
"""
Returns information of the verification of all installed packages.
"""
ts = rpm.TransactionSet()
mi = ts.dbMatch()
results = []
for hdr in mi:
name = hdr['name']
if flatten:
yb = yum.YumBase()
pkgs = yb.rpmdb.searchNevra(name)
for pkg in pkgs:
errors = pkg.verify()
for fn in errors.keys():
for prob in errors[fn]:
results.append('%s %s %s' % (name, fn, prob.message))
else:
results.append("%s-%s-%s.%s" % (name, version, release, arch))
return results
def glob(self, pattern, flatten=True):
"""
Return a list of installed packages that match a pattern
"""
ts = rpm.TransactionSet()
mi = ts.dbMatch()
results = []
if not mi:
return
mi.pattern('name', rpm.RPMMIRE_GLOB, pattern)
for hdr in mi:
name = hdr['name']
epoch = (hdr['epoch'] or 0)
version = hdr['version']
release = hdr['release']
# gpg-pubkeys have no arch
arch = (hdr['arch'] or "")
if flatten:
results.append("%s %s %s %s %s" % (name, epoch, version,
release, arch))
else:
results.append([name, epoch, version, release, arch])
return results
def register_method_args(self):
"""
Implementing the method argument getter
"""
return {
'inventory':{
'args':{
'flatten':{
'type':'boolean',
'optional':True,
'default':True,
'description':"Print clean in difss"
}
},
'description':"Returns information on all installed packages"
},
'verify':{
'args':{
'flatten':{
'type':'boolean',
'optional':True,
'default':True,
'description':"Print clean in difss"
}
},
'description':"Returns information of the verification on all installed packages"
},
'glob':{
'args':{
'pattern':{
'type':'string',
'optional':False,
'description':"The glob packet pattern"
},
'flatten':{
'type':'boolean',
'optional':True,
'default':True,
'description':"Print clean in difss"
}
},
'description':"Return a list of installed packages that match a pattern"
}
}
_______________________________________________
Func-list mailing list
Func-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/func-list