zoukankan      html  css  js  c++  java
  • 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部分

  • 相关阅读:
    eclipse 智能提示
    android 入门 004 (同一个方法,点击实现不同的效果)
    android 入门 003 (点击事件)
    android 入门 002 (拨打电话,发送短信)
    android 入门 001 (界面布局)
    Eclipse智能提示及快捷键
    转 Android学习笔记: 学习过程中碰到的一些问题及解决方法
    flash视频器播放器代码
    asp.net MVC webservice 报次错解决方法
    快递单号规则
  • 原文地址:https://www.cnblogs.com/solitarywares/p/7447503.html
Copyright © 2011-2022 走看看