Saltstack | grains(三)
一、grains介绍
grains用于采集客户端的基本信息,默认Salt已经帮你定义了一些信息如主机名、ip等,当然你也可以自定义grains采集。除了获取信息外,grains还能根据特定信息针对特定的minion做相关操作
备注
需要注意的是,grains信息只会在minion启动的时候进行采集,所以这些数据都相当于是静态的,一般来说都不会改变的,除非你重启minion,所以适合采集那些千年不变的信息如内核版本、操作系统版本等
通过salt命令匹配所有CentOS的minions并执行命令:
通过grains.item获取客户端的信息:
二、grains模块
可以通过grains.ls模块列出所有可用的grains项
grains数据可以通过grains.items全部列举出来
三、自定义grains
salt在安装后默认会定义了很多grains,可能有些人还是想自定义grains,自定义grains信息既可以在master上定义也可以在minion上定义
1、在minion端定义grains
在minion配置文件定义grains(如定义一个叫squid的roles)
当然你也可以另起一个配置文件来定义grains(/etc/salt/grains)
运行结果(grains.item获取单个grains项数据)
备注
当你在/etc/salt/minion跟/etc/salt/grains都定义了grains时,/etc/salt/minion优先
2、在master端定义grains
在master创建_grains目录
然后在该目录写个python脚本,例如获取minion的磁盘数量
同步自定义grains到minions
五、使用grains注意事项
master端定义grains默认是存放在/srv/salt/_grains/,需手动创建该目录,它们会在state.highstate运行的时候分发到各minions,当然你也可以运行saltutil.sync_grains或者saltutil.sync_all进行同步
另外有些时候同步完grains,会出现无法采集到有些minion的自定义信息,这个时候可以运行saltutil.refresh_modules刷新下grains,或者用终极大法,重启minion ^^
需要注意的是在定义grains的时候需要注意的是如果这个数据是会经常变动的话,就不太适合使用grains了,这时可以考虑使用pillar