grains是master从minion上拿数据
salt '*' grains.ls
salt 'node1' grains.items
salt 'node1' grains.item os
salt -G 'os:CentOS' test.ping

1、用grains命令添加
salt 'Minion' grains.append  saltbook  'verycool' 
salt '*' grains.setval key "{'sub-key': 'val', 'sub-key2': 'val2'}"  设置多个
salt '*' grains.remove key val  删除

2、在minion端定义grains
vim /etc/salt/minion.d/hostinfo.conf       #自定义grains,相当于打上一个标签,在根据标签进行操作
grains:
  roles:
    - webserver
    - memcache
  deployment: datacenter4
  cabinet: 13
 重启minion   /etc/init.d/salt-minion restart

3、在master端自己编写grains,然后推送给minion
mkdir /srv/salt/_grains
vim /srv/salt/_grains/system.py
import platform
def get_system():
    grains = {}                 # 初始化一个grains字典
    grains['system'] = platform.platform()
    return grains              #返回结果

salt "zabbix_agent" saltutil.sync_grains        #推送给minion(被控端的/var/cache/salt/minion/extmods/grains/目录下)
salt "zabbix_agent" grains.item system        #查看这个grains

使用
grains是静态的
1、通过目标使用grains
salt -G 'os:CentOS' test.ping
2、通过top.sls来使用
vim top.sls
base:
'location:shanghai':
    - match: grain
    - webserver (具体的sls文件名)
salt '*' state.highstate来调用,只有location:shanghai的主机才执行user.sls
3、通过在定义的state,sls文件使用
{% set the_node_type = salt['grains.get']('grains的key', '默认值')  %}    or  grains['os']
{% if the_node_type %}
  'node_type:{{ the_node_type }}':
    - match: grain
    - {{ the_node_type }}
{% endif %}
4、通过编写模块来调用grains,__grains__['key']
vim g1.py
def t1():
return __grains__['location']
salt '*' saltutil.sync_modules 推送
salt ‘*’ g1.t1    调用

results matching ""

    No results matching ""