第2章 saltstack数据系统 2.1 Grains 2.1.1 什么是Grains?
Grains是saltstack的一个组件,它存放着minion启动时收集到的系统底层的详细信息,每次minion启动时,就会进行Grains的采集并保存下来,在以后的生命周期里面,除非你再次重启minion,否则Grains是不会重新收集的。Grains的信息是静态信息。
那么Grains会收集哪些信息呢?最好详细了解它的内容!grains与远程执行走的更近一些。
Grains are collected for the operating system, domain name, IP address, kernel, OS type, memory, and many other system properties(属性). 2.1.1.1 Grains的应用场景
r Grains可以在state系统中使用,用于配置管理模块。
r Grains可以在target中使用,再用来匹配minion,比如匹配操作系统,使用-G选项。
r Grains可以用于信息查询,Grains保存着收集到的客户端的详细信息。 2.1.2 Grains常用操作 2.1.2.1 列出可用的Grains名称
~ Available grains can be listed by using the 'grains.ls' module
salt 'saltstack-node1*' grains.ls2.1.2.2 列出Grains详细数据
~ Grains data can be listed by using the 'grains.items' module(超级详细)
salt 'saltstack-node1*' grains.items ~ 只显示item 里的os值,注意item后面没有s
salt '*' grains.item os2.1.2.3 获取指定的Grains信息
~ fqdn
salt 'saltstack-node1*' grains.get fqdn ~ domain
salt 'saltstack-node1*' grains.get domain ~ ip4_interfaces
salt 'saltstack-node1*' grains.get ip4_interfaces2.1.3 自定义Grains
有三种方式,建议使用第2种,自定义grains文件,而不是在minion的配置文件中修改。 2.1.3.1 grains in the minion config(不建议)
在minion配置文件中,支持配置grains。比如说,给一台机器打一个标签,标签内容是webserver,这样以后在做管理时,比如说,重启所有的webserver服务时,那么我们就可以使用这个标签(即grains的值)来获取。
不建议在这里配置,因为会比较混乱,需要在每一个minion端配置,工作量大并且不好统一。
~ 修改minion配置文件
[root@saltstack-node1 ~]# vim /etc/salt/minion#在minion配置文件中定义grains
grains:
# env代表环境(key),test代表测试环境(value)
~ 验证命令:验证时,会有延时,要耐心等待,最好先用test.ping 来测试连通性。
salt 'saltstack-node1*' grains.get role
salt 'saltstack-node1*' grains.get env
~ 官网案例
grains:
roles:#第1个key
- webserver#这样写代表列表形式,即这台机器扮演多个角色(value1)
- memcache#这样写代表列表形式,即这台机器扮演多个角色(value2)
deployment: datacenter4#第2个key,只有1个value
cabinet: 13
cab_u: 14-15
~ 小结
r 会有延时,需要耐心等待与测试。
r 不建议使用这种方式定义grains。 2.1.3.2 grains in /etc/salt/grains(推荐※)
第2种配置方式有个优点,可以把自定义的grains抽取出来,把配置写好后,再批量分发给不同的minion端,这样就可以统一自定义的grains,而且配置还特别简单。
~ 创建并修改grains文件
#注意写法!test代表测试环境。
[root@saltstack-node1 ~]# vim /etc/salt/grains
cloud: openstack
roles:
- nginx
- php
env: test
#配置完成后,必须要重启minion服务。
~ 验证命令
salt 'saltstack-node1*' grains.get cloud
salt 'saltstack-node1*' grains.get roles
salt 'saltstack-node1*' grains.get env
如果出现下面的报错,可以先test.ping,看是否有问题。服务端推送的时候,经常会有延时。 2.1.3.3 matching grains in the top file
第3种用法,是在top file里面编写。
~ 创建并编写top file
[root@saltstack-node1 ~]# vim /etc/salt/top.sls
base: