一.什么是Grains和Pillar?
Grains:grains是minion第一次启动的时候采集的静态数据,可以用在salt的模块和其他组件中。其实grains在每次的minion启动(重启)的时候都会采集,即向master汇报一次的。grains是minion启动时加载的,在运行过程中不会发生变化,所以是静态数据。grains中包含诸如运行的内核版本,操作系统等信息。在master端通过Grains可以获得minion对应的变量值。
Pillar:Pillar是在salt 0.9.8版本后才添加的功能组件。它跟grains的结构一样,也是一个字典格式,数据通过key/value的格式进行存储。在Salt的设计中,Pillar使用独立的加密sesstion,所以Pillar可以用来传递敏感的数据,例如ssh-key,加密证书等。
存储位置:存储在master端,存放需要提供给minion的信息
应用场景:敏感信息:每个minion只能访问master分配给自己的信息
二.Grains的相应的配置
查看远端服务器的数据的命令:
salt wf2 grains.item os ##查看 wf2 的 os 的类型
salt wf2 grains.item ipv4 ##查看 wf2 的 ip
salt -G 'os:redhat' cmd.run hostname ## -G表示匹配 'os:redhat'表示前面匹配所有红帽的系统 cmd 表示匹配到一致的远端的服务器执行cmd后面的命令
更改信息的方式有两种:一在minion端更改,二在master端更改
1. 在minion端,有两种方法更改grains
方法一:在minion的配置文件中更改默认的 roles 值
cd /etc/salt/
ls
vim minion
grains:
roles:
- apache ##更改默认的roles的值
/etc/init.d/salt-minion restart ##因为是静态的更改配置文件,所以要重新启动服务
测试:在master上 salt wf2 grains.item roles ##可以看到输出的是,刚更改的配置文件的数据
方法二:在minion端的salt下编写一个文件
cd /etc/salt
ls
vim grains
roles: nginx ##因为不是更改的配置文件,所以不需要重起
测试:在master端上 salt wf3 grains.item roles
##虽然编写了配置文件,但是master端没有识别这个文件,并不知道这个文件的存在,所以需要触发一下,模块刷一下
salt wf3 saltutil.sync_grains ##刷新
salt wf3 grains.item roles ##再次查看,就可以看到添加的文件里面的信息
2在master端,有两种方法更改grains
##什么系统操作什么命令 role自定义角色
##无需重起,只需要在master上触发一下grains
方法一:编辑top.sls文件
top file中不需要匹配主机名,批量的配置服务器
vim top.sls
base:
"wf1":
- haproxy.service
"roles:apache":
- match: grain
- apache.install
"roles:nginx":
- match: grain
- nginx.service
方法二:在master端,编写py脚本 优点是:不需要登陆远程的服务端
mkdir _grains
cd _grains/
vim my_grains.py
#!/usr/bin/env python
def my_grains():
grains = {}
grains['hello'] = 'westos'
grains['salt'] = 'stack'
return grainsa
salt wf3 saltutil.sync_grains ##查看 wf3 的 grains 的值
测试:
在wf3处: cd /var/cache/salt -> tree . -> 将my文件传送了过来
在wf1处: salt wf3 grains.item hello/salt
==================================================================================
注意:如果同时编写了这些,那么这四个的优先级又是什么呢?
1.grains ##配置文件中的grains的默认的(或者更改的)值
2./etc/salt/grains ##在 minion 端编写的文件
3./etc/salt/minion
4._grains/my_grains.py ##在master上面添加的目录和文件
==================================================================================
三.Pillar的相应的配置
在wf1上:
cd /etc/salt/
vim master
pillar_roots:
base:
- /srv/pillar
/etc/init.d/salt-master restart
mkdir /srv/pillar
cd /srv/pillar
mkdir web
cd web
vim install.sls
{% if grains['fqdn'] == 'wf2' %}
webserver: httpd
{% elif grains['fqdn'] == 'wf3' %}
webserver: nginx
{% endif %}
cd ..
vim top.sls
base:
'*':
- web.install
测试: salt '*' pillar.items
salt '*' saltutil.refresh_pillar ##刷新
salt wf2/3 pillar.item webserver ##单独看的话,就查看不了,需要刷新
salt '*' saltutil.refresh_pillar ##刷新
salt wf2/3 pillar.item webserver ##刷新过后就可以查看
==================================================================================
注意:pillar的用法:-I 匹配 -S扫描整个网络
salt -I 'webserver:httpd' test.ping
salt -S 172.25.254.0/24 test.ping
==================================================================================