文章采集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的配置过程,直接粘贴结果

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线