diff options
author | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2013-10-29 16:35:27 -0400 |
---|---|---|
committer | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2013-10-30 06:37:46 -0400 |
commit | c4e1b49ff7d5b8f5860f5cc208476ff42159724e (patch) | |
tree | 84da32caf2072e617dd6b7be992ff5971b50095a /src/lib/Bcfg2/Server/Plugins/Cfg | |
parent | 2161b4be08f2b295f68e2f7c0f9c791919542a39 (diff) | |
download | bcfg2-c4e1b49ff7d5b8f5860f5cc208476ff42159724e.tar.gz bcfg2-c4e1b49ff7d5b8f5860f5cc208476ff42159724e.tar.bz2 bcfg2-c4e1b49ff7d5b8f5860f5cc208476ff42159724e.zip |
Plugins: Added TemplateDataProvider plugin interface
This lets you provide variables to the top-level namespace of
templates in a more seamless way than through a Connector plugin.
It's mostly useful for TemplateHelper for now, but may find other uses
in the future.
Diffstat (limited to 'src/lib/Bcfg2/Server/Plugins/Cfg')
-rw-r--r-- | src/lib/Bcfg2/Server/Plugins/Cfg/CfgCheetahGenerator.py | 24 | ||||
-rw-r--r-- | src/lib/Bcfg2/Server/Plugins/Cfg/CfgGenshiGenerator.py | 24 |
2 files changed, 35 insertions, 13 deletions
diff --git a/src/lib/Bcfg2/Server/Plugins/Cfg/CfgCheetahGenerator.py b/src/lib/Bcfg2/Server/Plugins/Cfg/CfgCheetahGenerator.py index 476dc1fc6..84309b5dd 100644 --- a/src/lib/Bcfg2/Server/Plugins/Cfg/CfgCheetahGenerator.py +++ b/src/lib/Bcfg2/Server/Plugins/Cfg/CfgCheetahGenerator.py @@ -3,7 +3,8 @@ :ref:`server-plugins-generators-cfg` files. """ import Bcfg2.Options -from Bcfg2.Server.Plugin import PluginExecutionError +from Bcfg2.Server.Plugin import PluginExecutionError, \ + DefaultTemplateDataProvider, get_template_data from Bcfg2.Server.Plugins.Cfg import CfgGenerator try: @@ -13,6 +14,18 @@ except ImportError: HAS_CHEETAH = False +class DefaultCheetahDataProvider(DefaultTemplateDataProvider): + """ Template data provider for Cheetah templates. Cheetah and + Genshi currently differ over the value of the ``path`` variable, + which is why this is necessary. """ + + def get_template_data(self, entry, metadata, template): + rv = DefaultTemplateDataProvider.get_template_data(self, entry, + metadata, template) + rv['path'] = rv['name'] + return rv + + class CfgCheetahGenerator(CfgGenerator): """ The CfgCheetahGenerator allows you to use the `Cheetah <http://www.cheetahtemplate.org/>`_ templating system to generate @@ -37,10 +50,9 @@ class CfgCheetahGenerator(CfgGenerator): def get_data(self, entry, metadata): template = Template(self.data.decode(Bcfg2.Options.setup.encoding), compilerSettings=self.settings) - template.metadata = metadata - template.name = entry.get('realname', entry.get('name')) - template.path = entry.get('realname', entry.get('name')) - template.source_path = self.name - template.repo = Bcfg2.Options.setup.repository + for key, val in get_template_data( + entry, metadata, self.name, + default=DefaultCheetahDataProvider()).items(): + setattr(template, key, val) return template.respond() get_data.__doc__ = CfgGenerator.get_data.__doc__ diff --git a/src/lib/Bcfg2/Server/Plugins/Cfg/CfgGenshiGenerator.py b/src/lib/Bcfg2/Server/Plugins/Cfg/CfgGenshiGenerator.py index 7ba8c4491..ef4e6a656 100644 --- a/src/lib/Bcfg2/Server/Plugins/Cfg/CfgGenshiGenerator.py +++ b/src/lib/Bcfg2/Server/Plugins/Cfg/CfgGenshiGenerator.py @@ -6,7 +6,8 @@ import re import sys import traceback import Bcfg2.Options -from Bcfg2.Server.Plugin import PluginExecutionError, removecomment +from Bcfg2.Server.Plugin import PluginExecutionError, removecomment, \ + DefaultTemplateDataProvider, get_template_data from Bcfg2.Server.Plugins.Cfg import CfgGenerator from genshi.template import TemplateLoader, NewTextTemplate from genshi.template.eval import UndefinedError, Suite @@ -42,6 +43,18 @@ d['a']""" GENSHI_REMOVES_BLANK_LINES = _genshi_removes_blank_lines() +class DefaultGenshiDataProvider(DefaultTemplateDataProvider): + """ Template data provider for Genshi templates. Cheetah and + Genshi currently differ over the value of the ``path`` variable, + which is why this is necessary. """ + + def get_template_data(self, entry, metadata, template): + rv = DefaultTemplateDataProvider.get_template_data(self, entry, + metadata, template) + rv['path'] = template + return rv + + class CfgGenshiGenerator(CfgGenerator): """ The CfgGenshiGenerator allows you to use the `Genshi <http://genshi.edgewall.org>`_ templating system to generate @@ -81,13 +94,10 @@ class CfgGenshiGenerator(CfgGenerator): raise PluginExecutionError("Failed to load template %s" % self.name) - fname = entry.get('realname', entry.get('name')) stream = self.template.generate( - name=fname, - metadata=metadata, - path=self.name, - source_path=self.name, - repo=Bcfg2.Options.setup.repository).filter(removecomment) + **get_template_data( + entry, metadata, self.name, + default=DefaultGenshiDataProvider())).filter(removecomment) try: try: return stream.render('text', |