一、grains与pillar简介
grains是minion启动时加载,在minion运行过程中不会发生变化,所以是静态数据。grains数据的定制可以在各minion端,也可以放在master端;grains中包含许多的信息,如:运行的内核版本,操作系统,网络接口地址,MAC地址,cpu,内存等等信息。
Pillar是Salt用来分发全局变量到所有或指定minion的一个定制接口,所以相对grains来说可以称为动态的数据,保存在master端。
由于涉及的配置文件采用yaml格式,如果对yaml语法不在熟悉请访问这里
http://www.ruanyifeng.com/blog/2016/07/yaml.html?f=tt
最好也了解下jinjia2的格式,如不熟悉请访问这里
http://docs.jinkan.org/docs/jinja2/intro.html
saltstack的安装部署请看这里
http://dyc2005.blog.51cto.com/270872/1967147
二、grains日常使用入门
1、获取minion的grains所有数据
1
|
salt
"minion_152"
grains.items
|
1
|
类似如图:
|
2、获取单项grains值
1
|
#salt "minion_152" grains.item os
|
如图:
3、获取grains中的所有项(键)
1
|
#salt "minion_152" grains.ls #以minion_152上的为例
|
这样就可通过grains.item 项去获取具体对应的值啦
4、在minion上订制grains数据
订制grains数据有两种方法分别如下:
方法一:
修改/etc/salt/minion配置文件去掉12行左右的注释
default_include: minion.d/*.conf
在/etc/salt/minion.d目录下
创建一个test.conf 内容如下:
1
2
3
4
5
|
grains:
Data:
-
test
Project:
- wgdbl_game
|
重启minion
1
|
#salt "minion_152" grains.items
|
如图:
方法二:
在master操作
1
2
3
|
mkdir
-pv
/srv/salt/_grains
cd
/srv/salt/_grains
cat
hello.py
|
1
2
3
4
5
6
|
#!/usr/bin/python
def
GrainsHello():
grains
=
{}
grains[
"project"
]
=
"myTestProject"
grains[
"name"
]
=
"san game"
return
grains
|
在服务端写好脚本再同步刷新到指定minion
1
|
#salt "minion_152" saltutil.sync_grains
|
如图:
推送更新成功。
此时到minion_152所在的机器
/var/cache/salt/minion/files/base/_grains/会发现 在master端创建的hello.py grains脚本已经推送至此,如图:
并且在该minion下的
/var/cache/salt/minion/extmods/grains 下有执行的标记生成了hello.pyc
第一种方法是grains中的纯静态指定minion下生成并且要重启minion生效,第二种方法可以统一放在胳端管理,再推送到各指定minions 动态生成管理。
三、pillar的使用
1、获取指定minion上pillar的数据
首先与grains不同的是要获取pillar需要在master的配置文件中打开
取消552行的注释如下:
pillar_opts: True
并重启salt-master
1
2
|
#salt "minion_152" pillar.data
如图:
|
注意:最好不要在线上使用 salt "*" pillar.data 这想会卡的哦。
2、pillar数据定制
配置master的pillar的根目录
取消529 -532 的注释
1
2
3
|
529 pillar_roots:
530 base:
531 -
/srv/pillar
|
创建根目录
mkdir -pv /srv/pillar
重启salt-master
切换到/srv/pillar目录
创建pillar顶层入口文件(相当于目录)top.sls,注意必须要以sls后缀。
1
2
3
4
|
cat
top
.sls
base:
"*"
:
- data
"minion_152"
:
- minion152
|
创建 data.sls
cat data.sls
1
2
3
4
|
project_name: san
subject:
-
zgws
-
wgdbl
|
创建 minion152.sls
cat minion152.sls
1
2
3
4
5
6
7
|
Minion_152: info
HostName:
-
zgws_game01
IP:
-
172.16
.
3.152
game:
-
zgws
|
向minion同步pillar数据
1
|
#salt "minion_152" saltutil.refresh_pillar
|
如图:
1
2
3
|
#salt "minion_152" pillar.data
或
#salt "minion_152" pillar.items
|
如图:
由于只对minion_152进行推送更新pIllar 因此其他的minion不会收到更新。
3、pillar配置文件中增加jinjia2格式的判断
cat top.sls
1
2
3
4
5
6
|
base:
"*"
:
-
data
"minion_152"
:
-
minion152
-
osinfo
|
创建osinfo.sls
cat osinfo.sls
1
2
3
4
5
|
OS_INFO:
-
{{ grains.os}}
{
%
if
grains[
"os"
]
=
=
"CentOS"
%
}
-
Linux System
{
%
endif
%
}
|
刷新pillar数据
1
|
#salt "minion_152" saltutil.refresh_pillar
|
查看minion_152 pillar数据
如图:
通过grains和pillar可以很方便的定制出特定的数据,pillar 配置是完全保存在master端的,而grains既可以保存在master端也可以单独至minion端,每次修改需要重启minion端。pillar偏向敏感数据的统一存放在master端且灵活修改。