Add jinja exceptions support

An exception support allows to use some kind of template-level
validation. Its may be helpful for openstack services configs
files templates.

Usage:
  {% raise_exception("exception message") %}

Change-Id: Id7d51916572da8bcb9161739240805f5f7cc80cc
This commit is contained in:
kbespalov 2016-12-26 13:38:27 +03:00 committed by Kirill Bespalov
parent 5893d2fb44
commit aa269c7fb0
1 changed files with 5 additions and 0 deletions

View File

@ -238,12 +238,17 @@ def address(service, port=None, external=False, with_scheme=False):
return addr
def j2raise(msg):
raise AssertionError(msg)
def jinja_render_file(path, lookup_paths=None):
file_loaders = [jinja2.FileSystemLoader(os.path.dirname(path))]
for p in lookup_paths:
file_loaders.append(jinja2.FileSystemLoader(p))
env = jinja2.Environment(loader=jinja2.ChoiceLoader(loaders=file_loaders))
env.globals['address'] = address
env.globals['raise_exception'] = j2raise
env.filters['gethostbyname'] = socket.gethostbyname
content = env.get_template(os.path.basename(path)).render(VARIABLES)