From 34b24211eb8baddec7daf6fa7ecb151fd9aa82e3 Mon Sep 17 00:00:00 2001 From: Narayan Desai Date: Mon, 9 Jun 2008 15:56:41 +0000 Subject: Change to typed plugin system git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@4680 ce84e21b-d406-0410-9b95-82705330c041 --- src/lib/Server/Core.py | 47 +++++++++++++++++++++++++++++++---------------- 1 file changed, 31 insertions(+), 16 deletions(-) (limited to 'src/lib/Server/Core.py') diff --git a/src/lib/Server/Core.py b/src/lib/Server/Core.py index 6a6264e9a..a5a484de9 100644 --- a/src/lib/Server/Core.py +++ b/src/lib/Server/Core.py @@ -233,28 +233,43 @@ class Core(object): except ImportError, e: logger.error("Failed to load plugin %s: %s" % (plugin, e)) continue - struct = getattr(mod, plugin) + plug = getattr(mod, plugin) + if plug.experimental: + logger.info("Loading experimental plugin %s" % (plugin)) + logger.info("NOTE: Interface subject to change") try: - self.plugins[plugin] = struct(self, self.datastore) + self.plugins[plugin] = plug(self, self.datastore) except PluginInitError: logger.error("Failed to instantiate plugin %s" % (plugin)) except: logger.error("Unexpected instantiation failure for plugin %s" % (plugin), exc_info=1) - if 'Metadata' in self.plugins: - self.metadata = self.plugins['Metadata'] - else: - raise CoreInitError, "No Metadata plugin loaded" - for plugin in structures: - if self.plugins.has_key(plugin): - self.structures.append(self.plugins[plugin]) - else: - logger.error("Plugin %s not loaded. Not enabled as a Structure" % (plugin)) - for plugin in generators: - if self.plugins.has_key(plugin): - self.generators.append(self.plugins[plugin]) - else: - logger.error("Plugin %s not loaded. Not enabled as a Generator" % (plugin)) + plugins = self.plugins.values() + while True: + plugin = plugins.pop() + if isinstance(plugin, Bcfg2.Server.Plugin.MetadataPlugin): + self.metadata = plugin + break + if not plugins: + raise CoreInitError, "No Metadata plugin loaded" + for plug_names, plug_tname, plug_type, collection in \ + [(structures, 'structure', Bcfg2.Server.Plugin.StructurePlugin, + self.structures), + (generators, 'generator', Bcfg2.Server.Plugin.GeneratorPlugin, + self.generators)]: + for plugin in plug_names: + print plugin, self.plugins.keys(), plugin in self.plugins + raw_input() + if plugin in self.plugins: + if not isinstance(self.plugins[plugin], plug_type): + logger.error("Plugin %s is not a %s plugin; unloading" \ + % (plugin, plug_tname)) + del self.plugins[plugin] + else: + collection.append(self.plugins[plugin]) + else: + logger.error("Plugin %s not loaded. Not enabled as a %s" \ + % (plugin, plug_tname)) def GetStructures(self, metadata): '''Get all structures for client specified by metadata''' -- cgit v1.2.3-1-g7c22