From 83b60a48456c8d3efe90b5593d80323e435f2426 Mon Sep 17 00:00:00 2001 From: Narayan Desai Date: Mon, 28 Jul 2008 18:48:11 +0000 Subject: Implement support for non-configuration plugins - add new configuration option - switch all callers over to new Core api - fork RecvStats when DBStats is in use git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@4831 ce84e21b-d406-0410-9b95-82705330c041 --- src/lib/Options.py | 2 ++ src/lib/Server/Admin/Client.py | 5 ++--- src/lib/Server/Admin/Pull.py | 4 ++-- src/lib/Server/Admin/Query.py | 4 ++-- src/lib/Server/Core.py | 16 ++++++++-------- src/sbin/bcfg2-info | 11 +++++++---- src/sbin/bcfg2-server | 6 +++++- 7 files changed, 28 insertions(+), 20 deletions(-) diff --git a/src/lib/Options.py b/src/lib/Options.py index 3c5b3979a..5d62196aa 100644 --- a/src/lib/Options.py +++ b/src/lib/Options.py @@ -179,6 +179,8 @@ SERVER_REPOSITORY = Option('Server repository path', '/var/lib/bcfg2', cf=('server', 'repository'), cmd='-Q', odesc='' ) SERVER_SVN = Option('Server svn support', False, cf=('server', 'svn')) +SERVER_PLUGINS = Option('Server plugin list', cf=('server', 'plugins'), + default=[], cook=list_split) SERVER_GENERATORS = Option('Server generator list', cf=('server', 'generators'), default=['SSHbase', 'Cfg', 'Pkgmgr', 'Rules'], cook=list_split) diff --git a/src/lib/Server/Admin/Client.py b/src/lib/Server/Admin/Client.py index a63c971fe..c51ac1598 100644 --- a/src/lib/Server/Admin/Client.py +++ b/src/lib/Server/Admin/Client.py @@ -8,9 +8,8 @@ class Client(Bcfg2.Server.Admin.Mode): def __init__(self, configfile): Bcfg2.Server.Admin.Mode.__init__(self, configfile) try: - self.bcore = Bcfg2.Server.Core.Core(self.get_repo_path(), - [], ['Metadata'], - 'foo', False, 'UTF-8') + self.bcore = Bcfg2.Server.Core.Core(self.get_repo_path(), [], + [], [], 'foo', False, 'UTF-8') except Bcfg2.Server.Core.CoreInitError, msg: self.errExit("Core load failed because %s" % msg) [self.bcore.fam.Service() for _ in range(5)] diff --git a/src/lib/Server/Admin/Pull.py b/src/lib/Server/Admin/Pull.py index 71bfdefc2..d0efe489e 100644 --- a/src/lib/Server/Admin/Pull.py +++ b/src/lib/Server/Admin/Pull.py @@ -97,8 +97,8 @@ class Pull(Bcfg2.Server.Admin.Mode): new_entry = self.BuildNewEntry(client, etype, ename) try: - bcore = Bcfg2.Server.Core.Core(self.repo, [], ['Cfg', 'SSHbase', 'Metadata'], - 'foo', False) + bcore = Bcfg2.Server.Core.Core(self.repo, [], [], + ['Cfg', 'SSHbase'], 'foo', False) except Bcfg2.Server.Core.CoreInitError, msg: self.errExit("Core load failed because %s" % msg) [bcore.fam.Service() for _ in range(5)] diff --git a/src/lib/Server/Admin/Query.py b/src/lib/Server/Admin/Query.py index 9fc019a88..999bde5c2 100644 --- a/src/lib/Server/Admin/Query.py +++ b/src/lib/Server/Admin/Query.py @@ -8,8 +8,8 @@ class Query(Bcfg2.Server.Admin.Mode): Bcfg2.Logging.setup_logging(100, to_console=False, to_syslog=False) Bcfg2.Server.Admin.Mode.__init__(self, cfile) try: - self.bcore = Bcfg2.Server.Core.Core(self.get_repo_path(), - [], ['Metadata'], + self.bcore = Bcfg2.Server.Core.Core(self.get_repo_path(), [], + [], [], 'foo', False, 'UTF-8') except Bcfg2.Server.Core.CoreInitError, msg: self.errExit("Core load failed because %s" % msg) diff --git a/src/lib/Server/Core.py b/src/lib/Server/Core.py index d7086aa96..57655cbb4 100644 --- a/src/lib/Server/Core.py +++ b/src/lib/Server/Core.py @@ -199,7 +199,7 @@ except ImportError: class Core(object): '''The Core object is the container for all Bcfg2 Server logic, and modules''' - def __init__(self, repo, structures, generators, password, svn, encoding): + def __init__(self, repo, plugins, structures, generators, password, svn, encoding): object.__init__(self) self.datastore = repo try: @@ -224,28 +224,28 @@ class Core(object): [data.remove('') for data in [structures, generators] if '' in data] - for plugin in structures + generators: + for plugin in structures + generators + plugins: if not self.plugins.has_key(plugin): self.init_plugins(plugin) - plugins = self.plugins.values() + chk_plugins = self.plugins.values() while True: - plugin = plugins.pop() + plugin = chk_plugins.pop() if isinstance(plugin, Bcfg2.Server.Plugin.MetadataPlugin): self.metadata = plugin break - if not plugins: + if not chk_plugins: self.init_plugins("Metadata") self.metadata = self.plugins["Metadata"] break - plugins = self.plugins.values() + chk_plugins = self.plugins.values() while True: - plugin = plugins.pop() + plugin = chk_plugins.pop() if isinstance(plugin, Bcfg2.Server.Plugin.StatisticsPlugin): self.stats = plugin break - if not plugins: + if not chk_plugins: self.init_plugins("Statistics") self.stats = self.plugins["Statistics"] break diff --git a/src/sbin/bcfg2-info b/src/sbin/bcfg2-info index df278ed92..aca9895db 100755 --- a/src/sbin/bcfg2-info +++ b/src/sbin/bcfg2-info @@ -295,6 +295,7 @@ if __name__ == '__main__': } optinfo.update({'repo': Bcfg2.Options.SERVER_REPOSITORY, 'svn': Bcfg2.Options.SERVER_SVN, + 'plugins': Bcfg2.Options.SERVER_PLUGINS, 'structures': Bcfg2.Options.SERVER_STRUCTURES, 'generators': Bcfg2.Options.SERVER_GENERATORS, 'password': Bcfg2.Options.SERVER_PASSWORD, @@ -303,11 +304,13 @@ if __name__ == '__main__': setup = Bcfg2.Options.OptionParser(optinfo) setup.parse(sys.argv[1:]) if "-d" in sys.argv: - loop = infoCore(setup['repo'], setup['structures'], setup['generators'], - setup['password'], setup['svn'], setup['encoding'], True) + loop = infoCore(setup['repo'], setup['plugins'], setup['structures'], + setup['generators'], setup['password'], setup['svn'], + setup['encoding'], True) else: - loop = infoCore(setup['repo'], setup['structures'], setup['generators'], - setup['password'], setup['svn'], setup['encoding'], False) + loop = infoCore(setup['repo'], setup['plugins'], setup['structures'], + setup['generators'], setup['password'], setup['svn'], + setup['encoding'], False) if "args" in setup and setup['args']: loop.onecmd(" ".join(setup['args'])) raise SystemExit(0) diff --git a/src/sbin/bcfg2-server b/src/sbin/bcfg2-server index 7ee8abfdd..47f0afa1d 100755 --- a/src/sbin/bcfg2-server +++ b/src/sbin/bcfg2-server @@ -40,13 +40,16 @@ class Bcfg2Serv(Bcfg2.Component.Component): raise SetupError try: - self.Core = Core(setup['repo'], setup['structures'], + self.Core = Core(setup['repo'], setup['plugins'], setup['structures'], setup['generators'], setup['password'], setup['svn'], setup['encoding']) except CoreInitError, msg: logger.critical("Fatal error: %s" % (msg)) raise SystemExit, 1 + if 'DBStats' in self.Core.plugins: + self.fork_funcs.append("RecvStats") + self.funcs.update({ "AssertProfile" : self.Bcfg2AssertProfile, "GetConfig" : self.Bcfg2GetConfig, @@ -195,6 +198,7 @@ if __name__ == '__main__': OPTINFO.update({'repo': Bcfg2.Options.SERVER_REPOSITORY, 'svn': Bcfg2.Options.SERVER_SVN, + 'plugins': Bcfg2.Options.SERVER_PLUGINS, 'structures': Bcfg2.Options.SERVER_STRUCTURES, 'generators': Bcfg2.Options.SERVER_GENERATORS, 'password': Bcfg2.Options.SERVER_PASSWORD}) -- cgit v1.2.3-1-g7c22