summaryrefslogtreecommitdiffstats
path: root/src/lib/Bcfg2/Server/Plugins/Cfg/CfgJinja2Generator.py
diff options
context:
space:
mode:
authorGordon Messmer <gordon@dragonsdawn.net>2014-09-11 11:22:03 -0700
committerGordon Messmer <gordon@dragonsdawn.net>2014-09-11 11:22:03 -0700
commit4462816a4a2c26ef7fc94f51b6485feb1ab44c27 (patch)
tree09c73c42e98d95f3ea28910d13c01ce3077003dc /src/lib/Bcfg2/Server/Plugins/Cfg/CfgJinja2Generator.py
parent92f64c0aa166eca93cdf56e7e2e870100c3cb5bc (diff)
downloadbcfg2-4462816a4a2c26ef7fc94f51b6485feb1ab44c27.tar.gz
bcfg2-4462816a4a2c26ef7fc94f51b6485feb1ab44c27.tar.bz2
bcfg2-4462816a4a2c26ef7fc94f51b6485feb1ab44c27.zip
First pass at Jinja2 support for Cfg.
Diffstat (limited to 'src/lib/Bcfg2/Server/Plugins/Cfg/CfgJinja2Generator.py')
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Cfg/CfgJinja2Generator.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/lib/Bcfg2/Server/Plugins/Cfg/CfgJinja2Generator.py b/src/lib/Bcfg2/Server/Plugins/Cfg/CfgJinja2Generator.py
new file mode 100644
index 000000000..aaf9f4fc0
--- /dev/null
+++ b/src/lib/Bcfg2/Server/Plugins/Cfg/CfgJinja2Generator.py
@@ -0,0 +1,38 @@
+""" The CfgJinja2Generator allows you to use the `Jinja2
+<http://jinja.pocoo.org/>`_ templating system to generate
+:ref:`server-plugins-generators-cfg` files. """
+
+from Bcfg2.Server.Plugin import PluginExecutionError
+from Bcfg2.Server.Plugins.Cfg import CfgGenerator, SETUP
+
+try:
+ from jinja2 import Template
+ HAS_JINJA2 = True
+except ImportError:
+ HAS_JINJA2 = False
+
+
+class CfgJinja2Generator(CfgGenerator):
+ """ The CfgJinja2Generator allows you to use the `Jinja2
+ <http://jinja.pocoo.org/>`_ templating system to generate
+ :ref:`server-plugins-generators-cfg` files. """
+
+ #: Handle .jinja2 files
+ __extensions__ = ['jinja2']
+
+ #: Low priority to avoid matching host- or group-specific
+ #: .crypt.jinja2 files
+ __priority__ = 50
+
+ def __init__(self, fname, spec, encoding):
+ CfgGenerator.__init__(self, fname, spec, encoding)
+ if not HAS_JINJA2:
+ raise PluginExecutionError("Jinja2 is not available")
+ __init__.__doc__ = CfgGenerator.__init__.__doc__
+
+ def get_data(self, entry, metadata):
+ template = Template(self.data.decode(self.encoding))
+ name = entry.get('realname', entry.get('name'))
+ return template.render(metadata=metadata, name=name, path=name,
+ source_path=name, repo=SETUP['repo'])
+ get_data.__doc__ = CfgGenerator.get_data.__doc__