• grains


    介绍:
      作为获取系统底层信息的一个接口,可收集大量的系统基础信息。
      salt master可以通过grains获取minion端的具体信息,从而进行差异化的处理。
      grains保存的是一个相对静态的数据,可以配置为定时刷新的方式。
      grains不区分变量的大小写。


    LISTING GRAINS

    列出grains变量,master端执行
      salt '*' grains.ls
      salt '*' grains.items


    GRAINS IN THE MINION CONFIG

    在minion配置grains变量,可以使用以下几种方法:
    (1)在minion的主配置文件中配置

    1 grains:
    2   roles:
    3     - webserver
    4     - memcache
    5   deployment: datacenter4
    6   cabinet: 13
    7   cab_u: 14-15
    View Code

     (2)配置在单独的文件中,不需要顶层的grains

    1 cat /etc/salt/grains
    2 roles:
    3   - webserver
    4   - memcache
    5 deployment: datacenter4
    6 cabinet: 13
    7 cab_u: 14-15
    View Code

    MATCHING GRAINS IN THE TOP FILE

    在minion中正确的配置好grains之后,就可以在pillar的top文件中配置匹配grains
    示例:

     1 'node_type:webserver':
     2   - match: grain
     3   - webserver
     4 
     5 'node_type:postgres':
     6   - match: grain
     7   - postgres
     8 
     9 'node_type:redis':
    10   - match: grain
    11   - redis
    12 
    13 'node_type:lb':
    14   - match: grain
    15   - lb
    View Code

    优化版示例:

    1 {% set the_node_type = salt['grains.get']('node_type', '') %}
    2 
    3 {% if the_node_type %}
    4   'node_type:{{ the_node_type }}':
    5     - match: grain
    6     - {{ the_node_type }}
    7 {% endif %}
    View Code

    说明:使用模板的方式比上面类似硬编码的方式要简略些,可以根据实际grains变量的值进行渲染,但是一定要确认好minion端设置了node_type


    WRITING GRAINS

    步骤:
    (1)在file_roots里设置环境路径
      /srv/salt/_grains
    (2)在定义好的grains目录下编写自定义的函数
      示例:

    1 def yourfunction():
    2      # initialize a grains dictionary
    3      grains = {}
    4      # Some code for logic that sets grains like
    5      grains['yourcustomgrain'] = True
    6      grains['anothergrain'] = 'somevalue'
    7      return grains
    8      #函数名无所谓,确保返回的为python字段类型即可
    View Code

    WHEN TO USE A CUSTOM GRAIN

    如何使用自定义的grains

    出发点:如果存储的数据经常变更的话优先考虑将数据定义在pillar中。
    在jinja模板中使用自定义的grains:

    1     ...
    2     ...
    3     {{ salt['module.function_name']('argument_1', 'argument_2') }}
    4     {{ pillar['my_pillar_key'] }}
    5     ...
    6     ... 
    View Code

    LOADING CUSTOM GRAINS

    如何加载自定义的grains文件,使用main函数的方式

    示例:

     1 #!/usr/bin/env python
     2 def _my_custom_grain():
     3     my_grain = {'foo': 'bar', 'hello': 'world'}
     4     return my_grain
     5 
     6 
     7 def main():
     8     # initialize a grains dictionary
     9     grains = {}
    10     grains['my_grains'] = _my_custom_grain()
    11     return grains
    View Code

    PRECEDENCE

    minion端读取grains变量的优先级
    1、Core grains.
      核心的grains变量,包含系统的一些环境信息
    2、Custom grains in /etc/salt/grains.
      在/etc/salt/grains中编写的一些grains变量
    3、Custom grains in /etc/salt/minion.
      在minion主配置文件中编写的grains变量
    4、Custom grain modules in _grains directory, synced to minions.
      从master的_grains目录同步到minion端的grains变量


    EXAMPLES OF GRAINS

    参考:https://github.com/saltstack/salt/blob/develop/salt/grains/core.py


    SYNCING GRAINS

    同步grains变量,当以下命令被执行的时候被触发:
      state.highstate
      saltutil.sync_grains
      saltutil.sync_all


  • 相关阅读:
    BZOJ2874 训练士兵 主席树
    单纯形 BZOJ3112: [Zjoi2013]防守战线
    珠宝 jewelry 省选模拟
    FWT [BZOJ 4589:Hard Nim]
    后缀自动机SAM BZOJ 2806
    就是要第一个出场的albus 【BZOJ】 线性基
    冲刺第十二十三天
    冲刺第十 十一天
    阅读8.9.10
    冲刺第八九天
  • 原文地址:https://www.cnblogs.com/solitarywares/p/7449781.html
Copyright © 2020-2023  润新知