%PDF- %PDF-
Direktori : /usr/lib/python2.7/site-packages/salt/renderers/ |
Current File : //usr/lib/python2.7/site-packages/salt/renderers/jinja.py |
# -*- coding: utf-8 -*- ''' Jinja loading utils to enable a more powerful backend for jinja templates For Jinja usage information see :ref:`Understanding Jinja <understanding-jinja>`. ''' # Import python libs from __future__ import absolute_import, print_function, unicode_literals import logging # Import salt libs from salt.exceptions import SaltRenderError import salt.utils.templates # Import 3rd-party libs from salt.ext import six from salt.ext.six.moves import StringIO # pylint: disable=import-error log = logging.getLogger(__name__) def _split_module_dicts(): ''' Create a copy of __salt__ dictionary with module.function and module[function] Takes advantage of Jinja's syntactic sugar lookup: .. code-block:: {{ salt.cmd.run('uptime') }} ''' if not isinstance(__salt__, dict): return __salt__ mod_dict = dict(__salt__) for module_func_name, mod_fun in six.iteritems(mod_dict.copy()): mod, fun = module_func_name.split('.', 1) if mod not in mod_dict: # create an empty object that we can add attributes to mod_dict[mod] = lambda: None setattr(mod_dict[mod], fun, mod_fun) return mod_dict def render(template_file, saltenv='base', sls='', argline='', context=None, tmplpath=None, **kws): ''' Render the template_file, passing the functions and grains into the Jinja rendering system. :rtype: string ''' from_str = argline == '-s' if not from_str and argline: raise SaltRenderError( 'Unknown renderer option: {opt}'.format(opt=argline) ) tmp_data = salt.utils.templates.JINJA(template_file, to_str=True, salt=_split_module_dicts(), grains=__grains__, opts=__opts__, pillar=__pillar__, saltenv=saltenv, sls=sls, context=context, tmplpath=tmplpath, proxy=__proxy__, **kws) if not tmp_data.get('result', False): raise SaltRenderError( tmp_data.get('data', 'Unknown render error in jinja renderer') ) if isinstance(tmp_data['data'], bytes): tmp_data['data'] = tmp_data['data'].decode(__salt_system_encoding__) return StringIO(tmp_data['data'])