- A+
在之前的文章<<saltstack应用之批量部署mysql>>中有用到简化pillar配置步骤,这次把里面关于pillar的内容单独拿出来,可以更直观的理解pillar的使用。
定义
Pillar是Salt用来分发全局变量到所有minions的一个接口。不像是state tree, pillar只对匹配类型的minion有效。 这使它为特定的minion存储敏感数据非常有用.官网详细介绍
简化pillar配置步骤
正常情况下,每个或每组minion在top.sls中单独配置,这样略显麻烦,可以使用py模式的sls文件来简化配置
1,要启用pillar,首先要修改master中的配置
1 |
vim /etc/salt/master |
1 2 3 |
pillar_roots: base: - /srv/pillar |
2,重启salt master
1 |
service salt-master restart |
3,建立top.sls,这里使用*号匹配所有的minion到custom
1 2 |
touch /srv/pillar/top.sls vim /srv/pillar/top.sls |
1 2 |
‘*’: - custom |
编写custom/init.sls
1 2 |
touch /srv/pillar/custom/init.sls vim /srv/pillar/custom/init.sls |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#!py #coding:utf-8 """ 返回minion对应的pillar信息 """ import yaml import os def run(): """ 首先获取请求的salt id,例如id是:1.2.3.4-centos.game.web,然后根据获取的pillar_root组合成路径/srv/pillar/custom/1.2.3.4-centos.game.web 如果文件存在,利用yaml模块从文件中读取信息,返回字典 如果文件不存在,则返回空 """ config={} id=__opts__['id'] pillar_root=__opts__['pillar_roots']['base'][0] path='%s/custom/%s'%(pillar_root,id) if os.path.isfile(path): s=open(path).read() config=yaml.load(s) return config |
5,这样以后需要添加对应salt minion的pillar信息时,只要到custom目录下新建以salt id命名的文件,文件内容为yaml格式,就可以自动解析了,省去了到top.sls中添加配置的烦恼。例如 salt id为1.2.3.4-centos.game.web:
1 2 |
touch /srv/pillar/custom/1.2.3.4-centos.game.web vim /srv/pillar/custom/1.2.3.4-centos.game.web |
1 2 |
age: 18 name: fox |
编写完后执行下面的命令就能看到age信息了。
1 |
salt 1.2.3.4-centos.game.web pillar.item age |
总结
pillar系统还是非常灵活的,熟练的使用可以进一步提升自动化的程度。

微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
10/08/2016 下午 5:22 沙发
按照方法原封不动的脚本测试了一下,根本没出来age信息
11/11/2016 上午 11:20 1层
@匿名 同样出不来信息
25/09/2015 下午 2:59 板凳
hi,站长,请教个问题,这篇文章里的pillar_root=__opts__[‘pillar_roots’][‘base’][0],__opts__是个什么函数,怎么在python里也没查到,还是一种别的用法