Saltstack | grains(三)

一、grains介绍

grains用于采集客户端的基本信息,默认Salt已经帮你定义了一些信息如主机名、ip等,当然你也可以自定义grains采集。除了获取信息外,grains还能根据特定信息针对特定的minion做相关操作

备注
需要注意的是,grains信息只会在minion启动的时候进行采集,所以这些数据都相当于是静态的,一般来说都不会改变的,除非你重启minion,所以适合采集那些千年不变的信息如内核版本、操作系统版本等

通过salt命令匹配所有CentOS的minions并执行命令:

# salt -G 'os:CentOS' test.version
SquidMonitor-SZ:
0.16.3

通过grains.item获取客户端的信息:

# salt -G 'os:CentOS' grains.item kernel
SquidMonitor-SZ:
kernel: Linux

二、grains模块

可以通过grains.ls模块列出所有可用的grains项

# salt '*' grains.ls
SquidMonitor-SZ:
- biosreleasedate
- biosversion
- cpu_flags
- cpu_model
...

grains数据可以通过grains.items全部列举出来

# salt '*' grains.items
SquidMonitor-SZ:
biosreleasedate: 09/29/2009
biosversion: 56KT57AUS
...

三、自定义grains

salt在安装后默认会定义了很多grains,可能有些人还是想自定义grains,自定义grains信息既可以在master上定义也可以在minion上定义

1、在minion端定义grains

在minion配置文件定义grains(如定义一个叫squid的roles)

# vim /etc/salt/minion
grains:
roles:
- squid

当然你也可以另起一个配置文件来定义grains(/etc/salt/grains)

# vim /etc/salt/grains
roles:
- squid

运行结果(grains.item获取单个grains项数据)

# salt '*' grains.item roles
SquidMonitor-SZ:
roles:
squid

备注
当你在/etc/salt/minion跟/etc/salt/grains都定义了grains时,/etc/salt/minion优先

2、在master端定义grains

在master创建_grains目录

# mkdir /srv/salt/_grains && cd /srv/salt/_grains

然后在该目录写个python脚本,例如获取minion的磁盘数量

# vim suse.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Filename: suse.py
import commands
def client_info():
result = {}
result['ipv4_eth1'] = commands.getoutput("fdisk -l | ")
return result

同步自定义grains到minions

# salt '*' saltutil.sync_grains

五、使用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