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 调用