使用Http API接口来读取pillar数据 — ext_pillar

大多时,在使用pillar我们都是直接用的SLS文件存储数据,但其实pillar可以支持多种数据存储方式,例如: mysql、mongo、json等等;这些都可以在官网或者代码中看到ext_piilar的代码;

pillar支持的数据存储模块列表地址:

需求:

先说说为什么会有这个需求,某些时候我们需要把pillar数据存储在CMDB中,或者去拉取CMDB的数据提供pillar使用,这个时候再去编辑pillar下的SLS文件就有点不优雅了;ext_pillar就是解决这个问题,它作为pillar数据映射和数据存储(CMDB)的一个枢纽。

最近在写代码发布,需要用到pillar数据(平台上提供一个版本号,代码url,在打包完代码推送到repo时,把版本号更新到pillar数据上,供saltstack调取),就想起了ext_pillar这个事儿,OMS运维平台用到了MySQL数据库,就想直接使用这个模块;在接触的时候,有点淡淡的忧伤,文档真少~~ 找到一个翻译文章采用的是MongoDB,想到再去搭个mongodb就有点过了; 肥肥给我的建议是不要采用MySQL,建议做成Http API接口方式;

pillar是一大利器,不仅可以存储安全性数据,也可以作为业务数据存储; 利用ext_pillar对接CMDB系统,state用来描述业务处理逻辑,而真实数据取自CMDB;以前没想到还可以这么玩,这块绿肥、jacky两人最早实现,很有经验

讲了这么多,来说说这么实现这个Http API的ext_pillar(无CMDB)

1. 实现后端数据 -> 根据业务场景,设计数据结构(dict)来满足业务,控制权在你手上,你想要什么样子就可以实现什么样子,关键点符合你业务

2. 实现ext_pillar,能访问到http访问到后端数据

3. 配置salt master配置文件,重启master

4. pillar测试

实现:

1. 后端数据实现.

采用http方式用的就是JSON数据,不仅能生成json数据,也能变更json数据;首先来看下pillar数据映射SLS文件格式

hdworkers:

ver: 2014102202

上述数据格式转换下dict,{‘hdworkers’: {‘ver’: ‘2014102202’}} ,我只需要实现简单的版本号映射就行,那么复杂的数据,大家可以自行设计;下面贴程序代码(代码很烂,莫喷~)

#-*-coding:utf-8-*-importjsonimportosclassBuildJson(object):”’BuildJSONdata(baseandminion_idetc..)”’defbase_data(self,args):”’buildbasedata”’info={}ret=dict(info,**args)self.write_data(‘base’,ret)defbuild_data(self,id,args):ifnotos.path.exists(‘/home/api/pillar/%s’%(id)):withopen(‘/home/api/pillar/base’)asf:obj=f.readlines()[0]ret=eval(obj)self.write_data(id,ret)withopen(‘/home/api/pillar/%s’%(id))asf:data=f.readlines()[0]cov_data=eval(data)ifnotcov_data.has_key(args.keys()[0]):ret=dict(cov_data,**args)self.write_data(id,ret)else:cov_data.update(args)self.write_data(id,cov_data)defwrite_data(self,file,ret):f=open(‘/home/api/pillar/%s’%(file),’w+’)f.write(str(ret))f.close()

#data = {‘hdworkers’:{‘ver’:’2014103105′}}

#bapi = BuildJson()

#bapi.base_data(data)

#bapi.build_data(‘test-01’,data)

生成base数据,再调用build_data(继承base数据,同时更新数据),而有些数据是会在id上有,但base是没的~,所以上述是我写的; 看官可以自行玩耍,,,有好的可以反馈给我,我在修改~

2. 实现ext_pillar,能通过http方式访问

因为是和OMS平台结合,上述生成的文件,我在nginx做了localtion设置,让数据能通过http访问;不然ext_pillar没法玩了

Nginx配置过程我就忽略,直接贴结果

梦想让我与众不同,奋斗让我改变命运!

使用Http API接口来读取pillar数据 — ext_pillar

相关文章:

你感兴趣的文章:

标签云: