###Grains模块:###
grains的应用场景:
1、信息查询
2、在远程执行里面匹配minion
比如我想要在所有centos的机器上执行一个命令
3、在top.sls里面匹配minion
4、在配置文件的模板里使用
1、信息查询
###把所有grains的key列出来,grains支持的所有模块
[[email protected]_master ~]# salt ‘minion.saltstack.com‘ grains.ls
minion.saltstack.com:
- SSDs
- cpu_flags
- cpu_model
- cpuarch
- domain
- fqdn
- fqdn_ip4
- fqdn_ip6
- gpus
- host
- hwaddr_interfaces
- id
- init
- ip4_interfaces
- ip6_interfaces
- ip_interfaces
- ipv4
- ipv6
- kernel
- kernelrelease
- locale_info
- localhost
- lsb_distrib_codename
- lsb_distrib_id
- lsb_distrib_release
- master
- mdadm
- mem_total
- nodename
- num_cpus
- num_gpus
- os
- os_family
- osarch
- oscodename
- osfinger
- osfullname
- osmajorrelease
- osrelease
- osrelease_info
- path
- ps
- pythonexecutable
- pythonpath
- pythonversion
- saltpath
- saltversion
- saltversioninfo
- selinux
- server_id
- shell
- virtual
- zmqversion
##把所有grains的内容显示出来
[[email protected]_master ~]# salt ‘minion.saltstack.com‘ grains.items
minion.saltstack.com:
----------
SSDs:
cpu_flags:
- fpu
- vme
- de
- pse
- tsc
- msr
- pae
- mce
- cx8
- apic
- sep
- mtrr
- pge
- mca
- cmov
- pat
- pse36
- clflush
- dts
- mmx
- fxsr
- sse
- sse2
- ss
- syscall
- nx
- pdpe1gb
- rdtscp
- lm
- constant_tsc
- up
- arch_perfmon
- pebs
- bts
- xtopology
- tsc_reliable
- nonstop_tsc
- aperfmperf
- unfair_spinlock
- pni
- pclmulqdq
- ssse3
- fma
- cx16
- pcid
- sse4_1
- sse4_2
- x2apic
- movbe
- popcnt
- tsc_deadline_timer
- aes
- xsave
- avx
- f16c
- rdrand
- hypervisor
- lahf_lm
- abm
- ida
- arat
- epb
- xsaveopt
- pln
- pts
- dts
- fsgsbase
- bmi1
- avx2
- smep
- bmi2
- invpcid
cpu_model:
Intel(R) Core(TM) i5-4460 CPU @ 3.20GHz
cpuarch:
x86_64
domain:
saltstack.com
fqdn:
minion.saltstack.com
fqdn_ip4:
- 10.20.23.124
fqdn_ip6:
gpus:
|_
----------
model:
SVGA II Adapter
vendor:
unknown
host:
minion
hwaddr_interfaces:
----------
eth1:
00:0c:29:6e:29:0d
lo:
00:00:00:00:00:00
id:
minion.saltstack.com
init:
upstart
ip4_interfaces:
----------
eth1:
- 10.20.23.124
lo:
- 127.0.0.1
ip6_interfaces:
----------
eth1:
- fe80::20c:29ff:fe6e:290d
lo:
- ::1
ip_interfaces:
----------
eth1:
- 10.20.23.124
- fe80::20c:29ff:fe6e:290d
lo:
- 127.0.0.1
- ::1
ipv4:
- 10.20.23.124
- 127.0.0.1
ipv6:
- ::1
- fe80::20c:29ff:fe6e:290d
kernel:
Linux
kernelrelease:
2.6.32-431.el6.x86_64
locale_info:
----------
defaultencoding:
UTF8
defaultlanguage:
zh_CN
detectedencoding:
UTF-8
localhost:
salt_minion
lsb_distrib_codename:
Final
lsb_distrib_id:
CentOS
lsb_distrib_release:
6.5
master:
salt_master
mdadm:
mem_total:
474
nodename:
salt_minion
num_cpus:
1
num_gpus:
1
os:
CentOS
os_family:
RedHat
osarch:
x86_64
oscodename:
Final
osfinger:
CentOS-6
osfullname:
CentOS
osmajorrelease:
6
osrelease:
6.5
osrelease_info:
- 6
- 5
path:
/sbin:/usr/sbin:/bin:/usr/bin
ps:
ps -efH
pythonexecutable:
/usr/bin/python2.6
pythonpath:
- /usr/bin
- /usr/lib64/python26.zip
- /usr/lib64/python2.6
- /usr/lib64/python2.6/plat-linux2
- /usr/lib64/python2.6/lib-tk
- /usr/lib64/python2.6/lib-old
- /usr/lib64/python2.6/lib-dynload
- /usr/lib64/python2.6/site-packages
- /usr/lib/python2.6/site-packages
pythonversion:
- 2
- 6
- 6
- final
- 0
saltpath:
/usr/lib/python2.6/site-packages/salt
saltversion:
2015.5.10
saltversioninfo:
- 2015
- 5
- 10
- 0
selinux:
----------
enabled:
True
enforced:
Permissive
server_id:
748666745
shell:
/bin/bash
virtual:
VMware
zmqversion:
3.2.5
####想查看某一项的,把items改为单数item,并在后面加上某一项的名称:
[[email protected]_master ~]# salt ‘minion.saltstack.com‘ grains.item os
minion.saltstack.com:
----------
os:
CentOS
####get参数:相对于items,get只显示值的内容
[[email protected]_master ~]# salt ‘minion.saltstack.com‘ grains.get os
minion.saltstack.com:
CentOS
2、在远程执行里面匹配minion
比如我想要在所有centos的机器上执行一个命令
[[email protected]_master ~]# salt --help |grep grain
-G, --grain Instead of using shell globs to evaluate the target
use a grain value to identify targets, the syntax for
the target is the grain key followed by a
--grain-pcre Instead of using shell globs to evaluate the target
use a grain value to identify targets, the syntax for
the target is the grain key followed by a pcre regular
[[email protected]_master ~]# salt -G ‘os:CentOS‘ test.ping ##-G表示使用grains进行匹配,,参数必须紧跟salt
minion.saltstack.com:
True
minion1.saltstack.com:
True
[[email protected]_master ~]# salt -G ‘fqdn:minion.saltstack.com‘ test.ping
minion.saltstack.com:
True
[[email protected]_master ~]# salt ‘minion.saltstack.com‘ grains.get fqdn ###反查minion.saltstack.com的fqdn,用来定位
minion.saltstack.com:
minion.saltstack.com
所以通过grains插件可以实现在什么条件的机器侠执行一条相同的命令,都可以通过grains进行匹配。
若是内置的grains满足不了我们的需求,,我们也可以自定义grains,,通过在minion端修改配置文件的方式来自定义grains
###minion端###
[[email protected]_minion ~]# vim /etc/salt/minion ####切到文件结尾
grains:
roles: nginx
env: prod
[[email protected]_minion ~]# /etc/init.d/salt-minion restart
Stopping salt-minion daemon: [确定]
Starting salt-minion daemon: [确定]
[[email protected]_master ~]# salt -G ‘env:prod‘ test.ping
minion.saltstack.com:
True ###成功匹配
[[email protected]_master ~]# salt -G ‘roles:nginx‘ test.ping
minion.saltstack.com:
True
若是感觉grains写在minion配置文件里不方便,,也可以写在/etc/salt/grains文件下
前提是和配置文件里的不能冲突
###区别:加入到配置文件/etc/salt/minion上面必须指明为grains,,第二种方法为在/etc/salt/下创建一个名为grains的文件,不指明grains,直接写就好###
[[email protected]_minion ~]# vim /etc/salt/grains
cloud: openstack
[[email protected]_minion ~]# /etc/init.d/salt-minion restart #####添加完后必须重启
Stopping salt-minion daemon: [确定]
Starting salt-minion daemon: [确定]
[[email protected]_minion ~]# cat /etc/salt/grains
cloud: openstack
[[email protected]_minion ~]# tail /etc/salt/minion
#
mysql.host: ‘10.20.23.209‘
mysql.user: ‘salt‘
mysql.pass: ‘salt‘
mysql.db: ‘salt‘
mysql.port: 3306
grains:
role: nginx
env: prod
###匹配一下:
[[email protected]_master ~]# salt -G ‘cloud:openstack‘ test.ping
minion.saltstack.com:
True
###使用salt ‘*‘ saltutil.sync_grains刷新grains,就不需要minion端重启,测试:####
[[email protected]_minion ~]# vim /etc/salt/grains
cloud: openstack
test: salt ###添加了这一行,保存退出,不重启minion端
###切到master端###
[[email protected]_master ~]# salt ‘*‘ saltutil.sync_grains
minion.saltstack.com:
minion1.saltstack.com:
[[email protected]_master ~]# salt -G ‘test:salt‘ test.ping
minion.saltstack.com:
True
3、在top.sls里面匹配minion
[[email protected]_master ~]# vim /srv/salt/top.sls ###切到最后,添加如下内容:
‘role:nginx‘:
- match: grain
- init.pkg
[[email protected]_master ~]# cat /srv/salt/top.sls
base:
‘(minion|minion1).saltstack.com‘:
- match: pcre
- init.pkg
- init.limit
# ‘role:nginx‘:
# - match: grain
# - init.pkg ###先注释掉,注释用#号,知道写法即可