RENDERERS salt渲染器

简单的介绍:

渲染器一般使用在sls文件中,将指定的模板形式数据翻译成python数据类型,供salt使用。
默认情况下sls文件呈现的是jinja模板的样子,然后模板会被解析成YAML格式的数据,salt支持多种模板。
目前模板的支持情况如下:
  Jinja + YAML, Mako + YAML, Wempy + YAML, Jinja + json, Mako + json and Wempy + json
Renderers可以被设计任何模板类型,只需要把这些文件解析成Python结构的数据
yaml的基本说明参见:https://docs.saltstack.com/en/2016.11/topics/yaml/index.html#yaml


MULTIPLE RENDERERS

使用渲染器类型的配置项:
  #renderer: yaml_jinja
使用多个渲染器的示例,一般使用python:

1 #!py    #指示使用py renderer
2 def run():
3     '''
4     Install the python-mako package
5     '''
6     return {'include': ['python'],
7             'python-mako': {'pkg': ['installed']}}
View Code

上例返回的是一个python的数据结构,可作为yaml解析后的结果使用


COMPOSING RENDERERS

渲染器的结构和组成,salt可支持以下的渲染结构:

yaml
  i.e, just YAML, no templating. #无模板方式
mako | yaml
  输入使用mako renderer渲染,输出到yaml renderer进行处理
jinja | mako | yaml
  使用jinja | mako 进行联合渲染,再输出到yaml renderer进行处理

示例:

 1 #!jinja|mako|yaml        #多渲染器使用|分隔
 2 
 3 An_Example:
 4   cmd.run:
 5     - name: |
 6         echo "Using Salt ${grains['saltversion']}"     #mako部分,$为标识符
 7              "from path {{grains['saltpath']}}."        #jinja部分,{{}}为标识符
 8     - cwd: /
 9 
10 <%doc> ${...} is Mako's notation, and so is this comment. </%doc>    #注释文档
11 {#     Similarly, {{...}} is Jinja's notation, and so is this comment. #}
View Code

注意:不是所有的渲染器都可以单独使用,或渲染器之间混合使用,输出的结果需要被另一个渲染器解析成highstate数据结构,提供给salt,需要了解渲染器输入和输出的关系,以及最后需要的数据格式是什么。


WRITING RENDERERS

使用自己写的RENDERERS,意味着你需要将这个RENDERERS分发到minion端,minion端再利用自定义的渲染器对配置进行渲染,grains就是一个例子,利用minion端的本地变量对配置内容做渲染处理。

master端的renderers环境配置:
file_roots中添加_renderers目录,目录里面定义渲染器

在执行以下命令时会触发_renderers的渲染配置:
state.apply
saltutil.sync_renderers
saltutil.sync_all


EXAMPLES

一个renderers的示例:

 1 import yaml
 2 from salt.utils.yamlloader import SaltYamlSafeLoader
 3 def render(yaml_data, saltenv='', sls='', **kws):
 4     if not isinstance(yaml_data, basestring):
 5         yaml_data = yaml_data.read()
 6     data = yaml.load(
 7         yaml_data,
 8         Loader=SaltYamlSafeLoader
 9     )
10     return data if data else {}
View Code

更多示例参见:https://github.com/saltstack/salt/blob/develop/salt/renderers

关于支持的渲染器的相关模块参见FULL LIST OF RENDERERS部分

原文地址:https://www.cnblogs.com/solitarywares/p/7447503.html