文章采集api(为什么会有这个需求,某些时候我们需要把pillar数据存储在CMDB中 )
优采云 发布时间: 2022-03-08 14:06文章采集api(为什么会有这个需求,某些时候我们需要把pillar数据存储在CMDB中
)
大部分时候,在使用pillar的时候,我们直接使用SLS文件来存储数据,但实际上pillar可以支持多种数据存储方式,比如:mysql、mongo、json等;这些可以在官网或者ext_piilar的code代码中看到;
pillar支持的数据存储模块列表地址:
要求:
我们来谈谈为什么会有这种需求。有时我们需要将柱子数据存储在CMDB中,或者从CMDB中拉取数据提供柱子使用。这时候在柱子下编辑SLS文件就有点*敏*感*词*了。 ext_pillar 解决了这个问题,作为支柱数据映射和数据存储 (CMDB) 的枢纽。
最近写代码要发布,需要用到pillar data(一个版本号,平台提供代码url,代码打包推送到repo时,版本号更新为saltstack的pillar data call),刚好想到ext_pillar,OMS运维平台使用的是MySQL数据库,所以想直接使用这个模块;接触的时候有点难过,文档也很少~~ 找个翻译 文章 用的是MongoDB,想着再建个mongodb有点过分了;飞飞给我的建议是不要用MySQL,建议做一个Http API接口;
pillar 是一个很棒的工具,它不仅可以存储安全数据,还可以存储业务数据;使用ext_pillar连接CMDB系统,状态用于描述业务处理逻辑,真实数据取自CMDB;玩,这块绿肥和jacky是第一个意识到的,很有经验
说了这么多,再说说实现这个Http API的ext_pillar(没有CMDB)
1.实现后端数据->根据业务场景,设计满足业务的数据结构(dict),控制权在你手中,实现你想要的,关键积分符合你的业务
2.实现ext_pillar,可以访问http访问后端数据
3.配置salt master配置文件,重启master
4.支柱测试
实施:
1. 后端数据实现。
HTTP方式使用JSON数据,不仅可以生成json数据,还可以改变json数据;先来看看柱子数据映射SLS文件格式
hdworkers:
版本:2014102202
上面的数据格式转换成dict,{'hdworkers': {'ver': '2014102202'}},我只需要实现一个简单的版本号映射,你自己设计这么复杂的数据;把程序贴在Code下面(代码很烂,不要喷~)
# -*- coding: utf-8 -*-
import json
import os
class BuildJson(object):
'''
Build JSON data(base and minion_id etc..)
'''
def base_data(self,args):
'''
build base data
'''
info = {}
ret = dict(info,**args)
self.write_data('base',ret)
def build_data(self,id,args):
if not os.path.exists('/home/api/pillar/%s' % (id)):
with open('/home/api/pillar/base') as f:
obj = f.readlines()[0]
ret = eval(obj)
self.write_data(id,ret)
with open('/home/api/pillar/%s' % (id)) as f:
data = f.readlines()[0]
cov_data = eval(data)
if not cov_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)
def write_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(数据)
#bapi.build_data('test-01',data)
生成基础数据,然后调用build_data(继承基础数据,同时更新数据),id上会有一些数据,但是基础不行~,所以上面是我写的评委自己玩,有好的可以反馈给我,我正在修改~
2.实现ext_pillar,可以通过http访问
因为是结合OMS平台,所以我对上面生成的文件在nginx中做了localtion设置,这样就可以通过http访问数据了;否则,ext_pillar 无法播放
我忽略了Nginx的配置过程,直接粘贴结果