Grains:静态数据
- 当Minion启动的时候收集的Minion本地的相关信息(只收集一次)
- 操作系统版本,内核版本,CPU,内存,硬盘,设备型号,序列号
- 不重启minion,这些信息数据是不会改变的。
主要作用:
自定义Grans的常用方法:
- 通过Minion配置文件定义
- 通过Grains相关模块定义
- 通过Python脚本定义
信息查询
salt 'saltStack01' grains.ls # 列出所有的grains数据的key
salt 'saltStack01' grains.items # 列出信息所有信息
salt '*' grains.item os # 列出单个key信息
salt '*' grains.item fqdn_ip4 # 列出所有主机的IP地址
目标选择
salt -G 'os:CentOS' test.ping # 查看属于CentOS的主机
salt -G 'os:CentOS' cmd.run 'ip a' # 让属于CentOS的主机的执行该命令
Grians优先级
- 系统自带
- grains文件写的
- minion配置文件写的
- 自己写的
通过Minion配置文件定义Grains
1、修改Minion配置文件
[root@saltStack01 minion.d]# cat /etc/salt/minion |grep -A 6 'grains:'
grains:
roles:
- webserver
- memcache
# deployment: datacenter4
# cabinet: 13
# cab_u: 14-15
[root@saltStack01 minion.d]#
2、为了统一管理Minion的Grains信息,需要把配置在/etc/salt/grains中
[root@saltStack01 salt]# cat /etc/salt/grains
name: liang
test1:
- test-12
- test-24
[root@saltStack01 salt]#
3、重启Minion服务:
systemctl restart salt-minion
4、验证:
[root@saltStack01 salt]# salt '*salt*' grains.item roles
saltStack01:
----------
roles:
- webserver
- memcache
[root@saltStack01 salt]# salt '*salt*' grains.item name
saltStack01:
----------
name:
liang
[root@saltStack01 salt]# salt '*salt*' grains.item test1
saltStack01:
----------
test1:
- test-12
- test-24
[root@saltStack01 salt]#
通过Grains模块定义Grains
grains.append命令
[root@saltStack01 salt]# salt '*salt*' grains.append salt 'haha'
saltStack01:
----------
salt:
- haha
[root@saltStack01 salt]# salt '*salt*' grains.item salt
saltStack01:
----------
salt:
- haha
[root@saltStack01 salt]#
grains.setvals命令
[root@saltStack01 salt]# salt '*salt*' grains.setvals "{'salt': 'good','abc': 'cool'}"
saltStack01:
----------
abc:
cool
salt:
good
[root@saltStack01 salt]# salt '*salt*' grains.item salt
saltStack01:
----------
salt:
good
[root@saltStack01 salt]# cat /etc/salt/grains
abc: cool
name: liang
salt: good
test1:
- test-12
- test-24
[root@saltStack01 salt]#
通过Python扩展Grains
1、在Master上编写一个Python脚本
[root@saltStack01 ~]# mkdir -p /srv/salt/_grains
[root@saltStack01 ~]# cat /srv/salt/_grains/example.py
#!/usr/bin/python
def grains():
local={}
test={'key': 'vaule','key1': 'vaule1','key2': 'vaule2'}
local['list']= [1,2,3,4]
local['string']= 'str'
local['dict']= test
return local
[root@saltStack01 ~]# cat /srv/salt/_grains/info.py
#!/usr/bin/python
import commands
def role():
information={}
information['disk_num'] = commands.getoutput('fdisk -l |grep Disk|wc -l')
information['hostname'] = commands.getoutput('hostname')
return information
[root@saltStack01 _grains]#
2、把脚本同步到minion上去
[root@saltStack01 ~]# salt '*salt*' saltutil.sync_grains
saltStack01:
- grains.example
- grains.info
[root@saltStack01 ~]# salt '*salt*' cmd.run 'ls /var/cache/salt/minion/extmods/grains/'
saltStack01:
example.py
example.pyc
info.py
info.pyc
[root@saltStack01 ~]#
3、验证
[root@saltStack01 ~]# salt '*salt*' grains.item list string dict
saltStack01:
----------
dict:
----------
key:
vaule
key1:
vaule1
key2:
vaule2
list:
- 1
- 2
- 3
- 4
string:
str
[root@saltStack01 ~]# salt '*salt*' grains.item disk_num
saltStack01:
----------
disk_num:
3
[root@saltStack01 ~]#
Grains相关命令:
[root@saltStack01 ~]# salt 'centos6' sys.list_functions grains
centos6:
- grains.append
- grains.delval
- grains.filter_by
- grains.get
- grains.get_or_set_hash
- grains.has_value
- grains.item
- grains.items
- grains.ls
- grains.remove
- grains.setval
- grains.setvals
[root@saltStack01 ~]# salt 'centos6' sys.doc grains