Saltstack的数据信息采集者Grains和Pillar
一、SaltStack 的配置文件格式及写法
在谈到grains和pillar之前,要和大家先谈一下SaltStack的配置文件写法
因为下面谈到的自定义grains和如何配置pillar需要涉及到。
关于SaltStack的所有配置文件都是YAML格式的,编写归则有以下几点:
1.1 配置文件中用空格来表示层级之间的关系,每层每次都递增2个空格,不是Tab键。
每次每组的配置首层必须顶头没有缩进。
1.2 配置文件中用冒号(:)及其后面跟和一个空格来表示其是一个含有值的父层;
就是其下面还有其他值。
1.3 用短横杠(-)和其后紧跟一个空格来表示后面跟的是一个值。
下面具体看下图的说明:
二、Grains
grains 是在minion端定义的,其数据信息相对是静态的。
就是说当master/minion互相建立连接的时刻开始,在master 端
通过 grains 所获取的minion端的主机信息是固定不变的,就是在minion端主机配置发生改变时,这种数据仍然不会发生改变;除非重启服务;当然还有给命令可以刷新,使之生效,那是后话了;
值得一提的是我们可以利用grains 采集的数据信息,用来做资产管理。
2.1. 查看目标主机的所有 grains 信息
在master端执行
salt 'minion1.saltstack.com' grains.items
实例应用:
2.1.1 获取目标主机的操作系统信息
2.1.2 用 grains 在远程执行上来匹配目标minion;(grains的内容是不区分大小写的)
2.1.3 你也可以利用 grains模块的get方法来获取目标的grains信息
[root@master stats]# salt 'minion1.saltstack.com' grains.get fqdn
minion1.saltstack.com:
minion1.saltstack.com
2.2. 自定义 grains
自定义的 grains 是在minion端的主配置文件中定义的
2.2.1 方法一: [root@minion1 ~]# vi /etc/salt/minion
653 ###### Grains setings ######
654 ############################################
655 grains:
656 roels: nginx
657 env: prod
修改后,要重启minion服务
重启客户端服务成功后,在master端测试一下:
[root@master salt]# salt -G 'env:prod' test.ping
minion1.saltstack.com:
True
2.2.2 方法二:
这也是建议的方法,这样看着比较清晰,好管理
就是把自定义的grains 配置文件单独的放在 /etc/salt/minion.d/目录下
2.2.2.1 首先在 minion端的主配置文件 /etc/salt/minion 里设置如下选项:
default_include: minion.d/*.conf
2.2.2.2 在目录 /etc/slat/minon.d/ 下创建 grains.conf文件;添加如下内容:
[root@minion1 minion.d]# cat grains.conf
###### Grains setings ######
############################################
grains:
roles: nginx
env: prod
2.2.2.3 重启minion端服务
[root@minion1 minion.d]# service salt-minion restart
Stopping salt-minion daemon: [ OK ]
Starting salt-minion daemon: [ OK ]
2.2.2.4 在 master 端测试
[root@master ~]# salt -G 'roles:windows' test.ping
minion1.saltstack.com:
True
2.3. 同步 grains 数据
你也许很讨厌修改grains数据后,必须重启才能生效的方式;现在你有更好的方法:
刷新granins数据
2.3.1 在minion端修改grains数据
[root@minion1 minion.d]# cat grains.conf
###### Grains setings ######
############################################
grains:
roles: windows
env: prod
test: salt
2.3.2在master测试:
[root@master ~]# salt -G 'test:salt' test.ping
No minions matched the target. No command was sent, no jid was assigned.
ERROR: No return received # 没执行刷新命令前
[root@master ~]# salt '*' saltutil.sync_grains # 执行刷新命令
minion1.saltstack.com:
minion2.saltstack.com:
Minion did not return. [Not connected] # 这个minion2是没有启动的情况
[root@master ~]# salt -G 'test:salt' test.ping
minion1.saltstack.com:
True # 刷新后的返回状态为真
三、 Pillar
pillar 数据系统是在master端对minion主机进行任何数据参数的定义,可动态匹配minion端的主机特性。
而且在 pillar 中定义的参数,可以被其他组件使用,如模板、state、API等,这也是其价值的体现
3.1. 如何定义和是使用 pillar
3.1.1 首先在 /etc/salt/master 中定义 pillar 的根目录
内容如下:
pillar_roots:
base:
- /srv/pillar
[root@master ~]# service salt-master restart # 重启 master 服务
3.1.2 在master主机上创建以上目录
[root@master stats]# install -d /srv/pillar/
3.1.3 在上面的目录里创建入口文件: top.sls 添如下内容
[root@master stats]# cat /srv/pillar/top.sls
base: # 定义环境
'*': # 匹配的minion目标
- init.rsyslog # 在/srv/pillar/init目录下,有个rsyslog.sls文件
3.1.4 在 /srv/pillar/目录下创建init目录,
mkdir /srv/pillar/init
之后在 init目录下创建文件rsyslog.sls文件,内容如下
[root@master init]# cat rsyslog.sls
{% if granis['osfinger'] == 'CentOS-6' % } # 用grains判断系统发行版本是CentOS-6
syslog: rsyslog # pillar的参数syslog的名字就是 rsyslog
{% elif grains['osfinger'] == 'CentOS-5'%} # 用grains判断若是Centos-5
syslog: syslog # pillar的参数syslog的名字就是 syslog
{% endif %} # if语句的结束语句
3.1.5 在master端刷新 pillar 数据
[root@master init]# salt '*' saltutil.refresh_pillar
minion2.saltstack.com:
True
minion1.saltstack.com:
True
3.1.6 测试 pillar
[root@master pillar]# salt '*' pillar.data syslog
minion1.saltstack.com:
----------
syslog:
rsyslog
minion2.saltstack.com:
----------
syslog:
rsyslog
3.1.7 在远程执行中使用自定义的 pillar