简单的介绍:
渲染器一般使用在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‘]}}
上例返回的是一个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. #}
注意:不是所有的渲染器都可以单独使用,或渲染器之间混合使用,输出的结果需要被另一个渲染器解析成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 {}
更多示例参见:https://github.com/saltstack/salt/blob/develop/salt/renderers
关于支持的渲染器的相关模块参见FULL LIST OF RENDERERS部分