diff options
author | Krzysztof A. Adamski <krzysztofa@gmail.com> | 2008-08-02 19:41:40 -0400 |
---|---|---|
committer | Krzysztof A. Adamski <krzysztofa@gmail.com> | 2008-08-07 18:29:22 -0400 |
commit | b2ea14876b07a9a2a64adbb0ddd824e15c674ffe (patch) | |
tree | 479d2ed287b92440d478c1e78abba377cf59a25c /func | |
parent | 4a17d134e0f5a3880a4ba0d930e2d37485c8b1a2 (diff) | |
download | func-b2ea14876b07a9a2a64adbb0ddd824e15c674ffe.tar.gz func-b2ea14876b07a9a2a64adbb0ddd824e15c674ffe.tar.xz func-b2ea14876b07a9a2a64adbb0ddd824e15c674ffe.zip |
Adding overlord modules support.
Diffstat (limited to 'func')
-rw-r--r-- | func/minion/modules/func_module.py | 6 | ||||
-rwxr-xr-x | func/module_loader.py | 19 | ||||
-rwxr-xr-x | func/overlord/client.py | 12 | ||||
-rw-r--r-- | func/overlord/modules/__init__.py | 0 | ||||
-rw-r--r-- | func/overlord/modules/test.py | 5 | ||||
-rw-r--r-- | func/overlord/overlord_module.py | 2 |
6 files changed, 38 insertions, 6 deletions
diff --git a/func/minion/modules/func_module.py b/func/minion/modules/func_module.py index 56f21f9..6586d40 100644 --- a/func/minion/modules/func_module.py +++ b/func/minion/modules/func_module.py @@ -15,6 +15,7 @@ import inspect from func import logger from certmaster.config import read_config, BaseConfig from func.commonconfig import FuncdConfig +import func.module_loader from func.minion.func_arg import * #the arg getter stuff class FuncModule(object): @@ -85,10 +86,7 @@ class FuncModule(object): return self.description def __is_public_valid_method(self,attr): - if inspect.ismethod(getattr(self, attr)) and attr[0] != '_' and\ - attr != 'register_rpc' and attr!='register_method_args': - return True - return False + return func.module_loader.is_public_valid_method(self, attr, blacklist=['register_rpc', 'register_method_args']) def __get_method_args(self): """ diff --git a/func/module_loader.py b/func/module_loader.py index f418f80..a999de7 100755 --- a/func/module_loader.py +++ b/func/module_loader.py @@ -16,6 +16,7 @@ import distutils.sysconfig import os import sys +import inspect from gettext import gettext _ = gettext @@ -36,9 +37,17 @@ def module_walker(topdir): # in the module name, and foo..bar doesnt work -akl module_files.append(os.path.normpath("%s/%s" % (root, filename))) - return module_files +def load_methods(path, main_class): + methods = {} + modules = load_modules(path, main_class) + for x in modules.keys(): + for method in dir(modules[x]): + if is_public_valid_method(modules[x], method): + methods["%s.%s" % (x,method)]=getattr(modules[x], method) + return methods + def load_modules(path='func/minion/modules/', main_class=func_module.FuncModule, blacklist=None): python_path = distutils.sysconfig.get_python_lib() @@ -103,6 +112,14 @@ def load_modules(path='func/minion/modules/', main_class=func_module.FuncModule, return mods +def is_public_valid_method(obj, attr, blacklist=[]): + if inspect.ismethod(getattr(obj, attr)) and attr[0] != '_': + for b in blacklist: + if attr==b: + return False + return True + return False + if __name__ == "__main__": diff --git a/func/overlord/client.py b/func/overlord/client.py index b02438d..e68fdcc 100755 --- a/func/overlord/client.py +++ b/func/overlord/client.py @@ -31,6 +31,8 @@ import delegation_tools as dtools import func.forkbomb as forkbomb import func.jobthing as jobthing from func.CommonErrors import * +import func.module_loader as module_loader +from func.overlord import overlord_module # =================================== # defaults @@ -192,6 +194,8 @@ class Overlord(object): if init_ssl: self.setup_ssl() + + self.methods = module_loader.load_methods('func/overlord/modules/', overlord_module.BaseModule) def setup_ssl(self, client_key=None, client_cert=None, ca=None): # defaults go: @@ -285,7 +289,13 @@ class Overlord(object): If Overlord() was constructed with noglobs=True, the return is instead just a single value, not a hash. """ - + + if module == "local": + if method in self.methods.keys(): + return self.methods[method]() + else: + raise AttributeError("no such method") + if not self.delegate: #delegation is turned off, so run normally return self.run_direct(module, method, args, nforks) diff --git a/func/overlord/modules/__init__.py b/func/overlord/modules/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/func/overlord/modules/__init__.py diff --git a/func/overlord/modules/test.py b/func/overlord/modules/test.py new file mode 100644 index 0000000..09f7a33 --- /dev/null +++ b/func/overlord/modules/test.py @@ -0,0 +1,5 @@ +from func.overlord import overlord_module + +class test(overlord_module.BaseModule): + def return1(self): + return 1 diff --git a/func/overlord/overlord_module.py b/func/overlord/overlord_module.py new file mode 100644 index 0000000..17a335d --- /dev/null +++ b/func/overlord/overlord_module.py @@ -0,0 +1,2 @@ +class BaseModule: + pass |