GRAINS 组件是saltstack中非常重要的一个组件,其主要用于记录Minion的一些静态信息,如比:CPU、内存、磁盘、网络等。grains信息是每次客户端启动后自动上报给master的,一旦这些静态信息发生改变需要重启minion 或者 重新同步下 grains
。除此之外我们还可以自定义Grains的一些信息。自定义的方法有三种:1、通过Minion配置文件定义;2、通过Grains相关模块定义;3、通过python脚本定义
-
- 认识并使用grains
- 查看grains中的函数:
# salt ginkgo sys.list_functions grains|less
ginkgo:
- grains.append
- grains.delkey
- grains.item
- grains.items
- grains.ls
- ........
- 查看grain中能获取到那些系统信息:
[root@Ginkgo ~]# salt ginkgo grains.ls|less
ginkgo:
- SSDs
- cab_u
- cabinet
- cpu_flags
- disks
- dns
- ....
- 查看grains或取到的系统信息:
# salt ginkgo grains.items|less
ginkgo:
----------
SSDs:
cab_u:
14-15
.....
- 查看grains获取到的某个或多个参数的信息:
salt ginkgo grains.item os ipv4
ginkgo:
----------
ipv4:
- 127.0.0.1
- 172.17.36.79
os:
CentOS
- 2.通过minion的配置文件定义grains.items
关于Minion的配置可以在/etc/salt/minion 中找到,但是一般不在原配置文件上作修改,而是在minion include的目录/etc/salt/minion.d/下,创建grains.conf 文件
cat /etc/salt/minion.d/grains.conf
grains:
roles:
- tomserver
deployment: datacenter4
cabinet: 13
cab_u: 14-15
- 3.通过grain模块定义grain.items。
使用grain模块时,用的方法是grain的append 和setval 方法。
创建grains
# salt ginkgo grains.append hosttype "MYM"
ginkgo:
----------
hosttype:
- MYM
查询
# salt ginkgo grains.item hosttype
ginkgo:
----------
hosttype:
- MYM
-
删除
salt ginkgo grains.remove hosttype "MYM"
----------
salt ginkgo grains.setvals "{hosttype: "MYM",locate: "ZZ"}"
ginkgo:
----------
hosttype:
MYM
locate:
ZZ
salt ginkgo grains.item locate
ginkgo:
----------
locate:
ZZ
这些命令执行后会将命令执行结果存入/etc/salt/grains中。
当/etc/salt/grains 和/etc/salt/minion.d/grains.conf 冲突时,会优先使用/etc/salt/minion.d/grains.conf
/etc/salt/grains 不需要重启minion,在命令行执行之后即生效
/etc/salt/minion.d/grains.conf 修改文件后需要重启Minion后生效。
- 自定义脚本定义grains 的items
默认自定义脚本需要存放在master的/srv/salt/_grains目录下,这里使用mkdir -p创建即可
创建一个获取系统时间的Python 脚本
cat gettime.py
#!/bin/env python
#-*- coding=utf8 -*-
import time
def gettime():
grains = {}
grains["server_time"] = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())
return grains
使用命令将脚本内容下发:
salt ginkgo saltutil.sync_grains
获得脚本的执行内容:
salt ginkgo grains.item server_time
ginkgo:
----------
server_time:
2017-12-13 17:24:06
下发后的脚本存放在
minion的/var/cache/salt/minion/extmods/grains
注意: /srv/salt/_grains下的脚本每次执行下发命令时都会进行下发,所以,在执行下发动作后,将/srv/salt/_grains清空,重新执行一次下发,以清空minion的环境。
grains配置优先级顺序为/etc/salt/minion.d/grains.conf (或/etc/salt/minion) > master端自定义grains脚本(minion端/var/cache/salt/minion/extmods/grains目录下) > Grains模块定义Grains (/etc/salt/grains)