summaryrefslogtreecommitdiffstats
path: root/certmaster/minion/modules/yumcmd.py
diff options
context:
space:
mode:
Diffstat (limited to 'certmaster/minion/modules/yumcmd.py')
-rw-r--r--certmaster/minion/modules/yumcmd.py50
1 files changed, 50 insertions, 0 deletions
diff --git a/certmaster/minion/modules/yumcmd.py b/certmaster/minion/modules/yumcmd.py
new file mode 100644
index 0000000..f952372
--- /dev/null
+++ b/certmaster/minion/modules/yumcmd.py
@@ -0,0 +1,50 @@
+# Copyright 2007, Red Hat, Inc
+# James Bowes <jbowes@redhat.com>
+#
+# 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
+
+# XXX Use internal yum callback or write a useful one.
+class DummyCallback(object):
+
+ def event(self, state, data=None):
+ pass
+
+class Yum(func_module.FuncModule):
+
+ version = "0.0.1"
+ api_version = "0.0.1"
+ description = "Package updates through yum."
+
+ def update(self):
+ # XXX support updating specific rpms
+ ayum = yum.YumBase()
+ ayum.doGenericSetup()
+ ayum.doRepoSetup()
+ try:
+ ayum.doLock()
+ ayum.update()
+ ayum.buildTransaction()
+ ayum.processTransaction(
+ callback=DummyCallback())
+ finally:
+ ayum.closeRpmDB()
+ ayum.doUnlock()
+ return True
+
+ def check_update(self, repo=None):
+ """Returns a list of packages due to be updated"""
+ ayum = yum.YumBase()
+ ayum.doConfigSetup()
+ ayum.doTsSetup()
+ if repo is not None:
+ ayum.repos.enableRepo(repo)
+ return map(str, ayum.doPackageLists('updates').updates)