diff options
| author | Adrian Likins <alikins@redhat.com> | 2008-10-20 10:54:14 -0400 |
|---|---|---|
| committer | Adrian Likins <alikins@redhat.com> | 2008-10-20 10:54:14 -0400 |
| commit | e68618cbed9401e5773e4e5de3998e4cdad264be (patch) | |
| tree | 4c3e3890d9c07a6c4863e4aed3ce65c45e357447 /func | |
| parent | 6e17cdc205518bf6f4a4524622ea1c4eaff2d87d (diff) | |
| download | func-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-x | func/minion/server.py | 25 |
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: |
