summaryrefslogtreecommitdiffstats
path: root/func
diff options
context:
space:
mode:
authorAdrian Likins <alikins@redhat.com>2008-10-20 10:54:14 -0400
committerAdrian Likins <alikins@redhat.com>2008-10-20 10:54:14 -0400
commite68618cbed9401e5773e4e5de3998e4cdad264be (patch)
tree4c3e3890d9c07a6c4863e4aed3ce65c45e357447 /func
parent6e17cdc205518bf6f4a4524622ea1c4eaff2d87d (diff)
downloadfunc-e68618cbed9401e5773e4e5de3998e4cdad264be.tar.gz
func-e68618cbed9401e5773e4e5de3998e4cdad264be.tar.xz
func-e68618cbed9401e5773e4e5de3998e4cdad264be.zip
add system.inventory() method that returns a list of all modules
and methods on a system. Not documented yet, since it's probably not in final form yet.
Diffstat (limited to 'func')
-rwxr-xr-xfunc/minion/server.py25
1 files changed, 23 insertions, 2 deletions
diff --git a/func/minion/server.py b/func/minion/server.py
index 64a8645..582921b 100755
--- a/func/minion/server.py
+++ b/func/minion/server.py
@@ -56,7 +56,8 @@ class XmlRpcInterface(object):
self.logger = logger.Logger().logger
self.audit_logger = logger.AuditLogger()
self.__setup_handlers()
-
+
+
# need a reference so we can log ip's, certs, etc
# self.server = server
@@ -74,7 +75,6 @@ class XmlRpcInterface(object):
except AttributeError, e:
self.logger.warning("module %s not loaded, missing register_rpc method" % self.modules[x])
-
# internal methods that we do instead of spreading internal goo
# all over the modules. For now, at lest -akl
@@ -84,6 +84,7 @@ class XmlRpcInterface(object):
self.handlers["system.listMethods"] = self.list_methods
self.handlers["system.list_methods"] = self.list_methods
self.handlers["system.list_modules"] = self.list_modules
+ self.handlers["system.inventory"] = self.inventory
def list_modules(self):
modules = self.modules.keys()
@@ -95,6 +96,26 @@ class XmlRpcInterface(object):
methods.sort()
return methods
+
+ def inventory(self):
+ inventory = {}
+
+ # FIXME: it's kind of dumb that we dont have a real object
+ # to represent which methods are in which classes, just a list
+ # of modules, and a list of methods. we can match strings to
+ # see which are where, but that seems lame -akl
+ for module in self.modules.keys():
+ inventory[module] = []
+ for method in self.handlers.keys():
+ # string match, ick.
+ method_bits = method.split('.')
+ method_module = string.join(method_bits[:-1], '.')
+ method_name = method_bits[-1]
+ if method_module == module:
+ inventory[module].append(method_name)
+
+ return inventory
+
def get_dispatch_method(self, method):
if method in self.handlers: