@cdmonkey
2016-07-08T17:18:06.000000Z
字数 2761
阅读 1010
Saltstack
Grains and Pillar are two data systems of saltstack.
http://docs.saltstack.cn/topics/targeting/grains.html
每一个“Minion”节点自身的静态属性,以
Python
字典的形式存放于“Minion”端。
其作用是,当你的“minion”端节点启动时,它会把它的详细信息(处理器、内存、主机名、操作系统类型、网络地址等信息)记录下来,能够于匹配目标时使用,当然也有其他的用途。除非被控的节点重新启动服务或者是进行强制的刷新操作,否则“Grains”内保存的数据是不会改变的,因而从某种意义上来说它属于静态的数据。
其用来存放一些被控节点的基本数据,能够用来基于这些基本信息进行目标的匹配等操作。注意:“Grains”中的信息是被控节点的服务启动时进行收集并存储的,因而其生命周期为下次重启服务之前。
三个应用场景:
显示被控端节点的所有“Grains”信息:
[root@salt-master ~]# salt 'node2.cdmonkey.com' grains.items
node2.cdmonkey.com:
----------
SSDs:
biosreleasedate:
07/31/2013
biosversion:
6.00
cpu_flags:
...
cpu_model:
Intel(R) Core(TM) i3-3110M CPU @ 2.40GHz
cpuarch:
x86_64
domain:
fqdn:
Node-A2
fqdn_ip4:
- 172.16.1.22
...
host:
Node-A2
hwaddr_interfaces:
----------
eth0:
00:0c:29:75:1c:c9
lo:
00:00:00:00:00:00
id:
node2.cdmonkey.com
ip4_interfaces:
...
kernel:
Linux
kernelrelease:
2.6.32-504.el6.x86_64
locale_info:
...
localhost:
Node-A2
...
manufacturer:
VMware, Inc.
master:
172.16.1.21
...
os:
CentOS
os_family:
RedHat
...
osrelease:
6.6
path:
/sbin:/usr/sbin:/bin:/usr/bin
productname:
VMware Virtual Platform
...
saltpath:
/usr/lib/python2.6/site-packages/salt
saltversion:
2015.5.0
...
shell:
/bin/bash
virtual:
VMware
zmqversion:
3.2.5
显示某一个方面的信息:
[root@salt-master ~]# salt 'node2.cdmonkey.com' grains.item os
node2.cdmonkey.com:
----------
os:
CentOS
#也可以是这样,并且这个方法更为常用些:
[root@salt-master ~]# salt 'node2.cdmonkey.com' grains.get os
node2.cdmonkey.com:
CentOS
[root@salt-master ~]# salt -G 'host:*2' test.ping
node2.cdmonkey.com:
True
#如此看来,在通过Grains进行匹配时,也可以使用通配符。
除了于命令行中进行匹配外,当然也能够于状态文件中进行匹配。
[root@salt-master ~]# vim /etc/salt/states/top.sls
#增加如下内容:
'roles:nginx':
- match: grain
- init.pkg
如果被控节点的主机名设定的合理且具体,那么我们很容匹配到我们需要的目标节点,例如匹配所有运行“Nginx”服务的节点。但如果我们无法通过主机名或标识匹配到目标,那么我们于很多时候需要自定义“Grains”信息,自定义的操作需要于被控节点进行。
[root@Node-A2 ~]# vim /etc/salt/minion
grains:
roles: nginx
env: prod
# 定义完成后需要重启被控端服务进程:
[root@Node-A2 ~]# /etc/init.d/salt-minion restart
-------------------
# 在控制端进行匹配操作:
[root@salt-master ~]# salt -G 'roles:nginx' test.ping
node2.cdmonkey.com:
True
还有一种写法,可以将自定义的内容单独的写到被控端的grains
文件(需要手动创建)内。
[root@Node-A2 ~]# vim /etc/salt/grains
cloud: openstack
#仍旧需要重启被控端服务进程:
[root@Node-A2 ~]# /etc/init.d/salt-minion restart
-------------------
#在控制端进行匹配操作:
[root@salt-master ~]# salt -G 'cloud:openstack' test.ping
node2.cdmonkey.com:
True
我们首先在被控端节点对自定义的“Grains”信息进行修改
[root@Node-A2 ~]# vim /etc/salt/grains
cloud: openstack
model: R720
#被控端节点不重启服务进程。
-------------------
#在控制端进行刷新操作:
[root@salt-master ~]# salt '*' saltutil.sync_grains
node2.cdmonkey.com:
node3.cdmonkey.com:
#然后进行匹配操作:
[root@salt-master ~]# salt -G 'model:R720' test.ping
node2.cdmonkey.com:
True
很显然,在控制端节点进行刷新操作比在被控端重启服务进程而言要方便许多。
[root@test-ngx ~]# vim /etc/salt/states/top.sls
base:
'os:CentOS':
- match: grain # Use Grains to match
- init.pkg
[root@test-ngx ~]# salt '*' state.highstate