速云科技

SaltStack数据系统之Grains

1.1.1   什么是Grains?

Grains是SaltStack的一个组件,存放着minion启动时收集的底层系统的静态信息。Grains是存储在minion端的,当minion启动时,会进行Grains的采集工作,然后保存下来。在以后的生命周期(再次重启minion,会重新收集)是不会发生变化的,所以是静态数据。Grains中包含诸如运行的内核版本、操作系统、CPU个数、内存、物理设备型号等信息。

Grains应用场景

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

Grains 常用操作

列出Minion上所有可用的grains的名称。

[root@master ~]# salt ‘*’ grains.ls

列出Minion上所有grains的的名称及内容。

[root@master ~]# salt ‘*’ grains.items

查询salt版本

salt ‘*’ grains.get saltversion

查询eth0 所有IP 地址

salt ‘*’ grains.get ip_interfaces:eth0

1.1.2   自定义Grains

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

[root@minion ~]# vim /etc/salt/minion

grains:

roles: nginx

dept: dev

cloud: openstack

如果你觉得写在Minion配置文件,不容易管理。可以将Grains的数据写到/etc/salt/grains文件里。案例如下:

[root@minion ~]# vim /etc/salt/grains

roles: nginx

dept: dev

cloud: openstack

和定义在Minion的区别是将grains:这个Key去掉即可。

还记得前面说的Grains的特点吗,必须重启Minion才会重新收集Grains。

[root@minion ~]# /etc/init.d/salt-minion restart

Stopping salt-minion daemon:                              [ OK ]

Starting salt-minion daemon:                               [ OK ]

重启minion服务后,使用grains.item就可以列出roles等自定义的grains。

[root@master ~]# salt ‘*’ grains.item roles

minion.example.com:

roles: nginx

同时这些Grains也可以被其它SaltStack的组件所使用,比如上面提到,在选择Minion时。下面的例子是重新加载所有的Nginx服务的远程执行命令:

[root@master ~]# salt -G roles:nginx cmd.run ‘/usr/local/nginx/sbin/nginx -s reload’

1.1.3   Grains常用操作

由于Grains的数据是Minion启动时收集的,那么我们如果进行的改变。比如我们修改了主机名。需要刷新Grains的数据。

[root@master ~]# salt ‘*’ saltutil.sync_grains

1.1.4   Grains使用案例

使用Grains匹配Minion

匹配所有系统是CentOS的客户端:

[root@master ~]# salt -G ‘os:CentOS’ test.ping

minion.example.com:

True

在Top文件中使用Grains匹配

‘roles:nginx’:

– match: grain

– web.nginx

欢迎留言