grains
grains 类似于puppet的facter 负责采集客户端一些基本信息,这个也完全可以自定义。一般从服务器端定义然后推下去,采集完后,再汇报上来。
altstack里的Grains功能,是控制minion端的静态变量,在master端通过Grains可以获得minion对应的变量值。
查看minion的全部静态变量,可以通过如下实现:
# salt '*' grains.ls
JYD-test-3:
- SSDs
- biosreleasedate
- biosversion
- cpu_flags
- cpu_model
- cpuarch
......
所列出静态变量是成组出现的,如上只是列出了组的key(用python的思维理解)
用如下命令可列出被控端的key及vlaue:
# salt '*' grains.items
JYD-test-3:
----------
SSDs:
biosreleasedate:
07/02/2015
biosversion:
6.00
cpu_flags:
- fpu
......
也可以指定查看key值,如查看系统类型(grains.item后面跟的为grains组的key):
# salt '*' grains.item osfinger --out=pprint
{'JYD-test-2': {'osfinger': 'CentOS-6'}}
{'JYD-test-3': {'osfinger': 'CentOS-6'}}
自定义grains.item
第一种方法(很少使用):
在minion端:
修改配置文件/etc/salt/minion 中 去掉 default_include: minion.d/*.conf 前的#号
在minion端的/etc/salt/minion.d/ 目录下新建并编辑conf文件,如:
# vi /etc/salt/minion.d/web.conf
grains: #必须声明
web: nginx
user: dong
重启salt-minion服务,并在master端验证:
# /etc/init.d/salt-minion restart
Stopping salt-minion daemon: [确定]
Starting salt-minion daemon: [确定]
# salt 'JYD-test-2' grains.item web --out=pprint
{'JYD-test-2': {'web': 'nginx'}}
第二种方法:
在master端添加
创建/srv/salt/_grains/目录,编写grains文件(python代码)
# mkdir -pv /srv/salt/_grains/
mkdir: 已创建目录 "/srv/salt"
mkdir: 已创建目录 "/srv/salt/_grains/"
以下为获取被控主机系统允许最大打开文件数的grains数据的拓展模块。
# vi /srv/salt/_grains/get_openfile.py
import os,sys,commands
def Grains_openfile():
grains = {}
#init default value
_open_file=65536
try:
getulimit=commands.getstatusoutput('source /etc/profile;ulimit -n')
except Exception,e:
pass
if getulimit[0]==0:
_open_file=int(getulimit[1])
grains['max_open_file'] = _open_file #max_open_file是grains的项,_open_file即grains这一项的值。
return grains
注:python的必须缩进,否则会识别错误。
将该python文件同步到被控主机,并刷新重载模块使之生效。
# salt 'JYD-test-2' saltutil.sync_grains
JYD-test-2:
- grains.get_openfile
# salt 'JYD-test-2' sys.reload_modules
JYD-test-2:
True
在被控端上查看
# ll /var/cache/salt/minion/extmods/grains/ #存放扩展模块文件
-rw-------. 1 root root 353 2月 26 19:00 get_openfile.py
-rw-------. 1 root root 646 2月 26 19:11 get_openfile.pyc
# ll /var/cache/salt/minion/files/base/_grains/ #临时存放位置
-rw-------. 1 root root 353 2月 26 19:00 get_openfile.py
大功告成,接下来在master端查看效果。
# salt 'JYD-test-2' grains.item max_open_file
JYD-test-2:
----------
max_open_file:
1024