什么是Grains?

Grains是SaltStack的一个组件,存放着minion启动时收集的底层系统的静态信息。Grains中包含诸如运行的操作系统、内核版本、CPU个数、内存、主机名、IP地址、物理设备型号、甚至机器的SN号等非常多的信息。



Grains是存储在minion端的,当minion启动时,会进行Grains的采集工作,然后保存下来。在以后的生命周期(再次重启minion,会重新收集)是不会发生变化的,所以是静态数据。你可能已经想到这些数据可以用来做资产管理的信息收集。

Grains应用场景

• Grains可以在state系统中使用,用于配置管理模块。
• Grains可以target中使用,在用来匹配Minion,比如匹配操作系统,使用-G选项。
• Grains可以用于信息查询,Grains保存着收集到的客户端的详细信息。

Grains使用案例

1.Grains 信息查询

1
2
3
4
5
6
7
8
 列出Minion上所有可用的grains的名称。
# salt '*' grains.ls
列出Minion上所有grains的的名称及内容。
# salt '*' grains.items
查询salt版本
# salt '*' grains.get saltversion
查询eth0 所有IP 地址
# salt '*' grains.get ip_interfaces:eth0

2.使用Grains匹配Minion
匹配所有系统是CentOS的客户端,并执行命令:

3.在Top文件中使用Grains匹配

这样我们可以使用grains进行非常灵活的来选择对应的服务器。
4.在States文件中配合jinja模板使用Grains内容做判断。

例如如果你的环境中有CentOS还有Debian系统,那么在快速入门中我们编写的apache.sls需要修改为下面的内容:

1
2
 
因为CentOS和Debian的apache的包名称是不同的,我们可以通过grains的os获取到操作系统名称,然后进行判断。注意这个{% … %}{% elif … %}{% endif %}是jinja模版。

自定义Grains

内置的Grains不一定能满足所有需求,所以SaltStack支持在Minion的配置文件中静态定义Grains,或者在/etc/salt/grains中,推荐后者。比如我们将一台服务器打一个标签。说明它是一台Nginx,运行在OpenStack平台中。这样我们在以后做远程管理的时候,比如重启下所有的Nginx服务,就可以通过这个自定义的Grains来进行了。

1
2
3
4
5
6
7
8
9
10
11
12
# vim /etc/salt/grains
roles: nginx
dept: dev
cloud: openstack

还记得前面说的Grains的特点吗,必须重启Minion才会重新收集Grains。
# /etc/init.d/salt-minion restart

重启minion服务后,使用grains.item就可以列出roles等自定义的grains。
# salt '*' grains.item roles
linux-node2.example.com:
roles: nginx

Comments

2017-03-03