pillar 데이터 -- ext 를 Http API 인터페이스 로 읽 기pillar

6568 단어 SaltstackPillar
대부분의 경우 pillar 를 사용 할 때 우 리 는 모두 직접 사용 하 는 SLS 파일 로 데 이 터 를 저장 하지만 사실은 pillar 는 여러 가지 데이터 저장 방식 을 지원 할 수 있다. 예 를 들 어 my sql, mongo, json 등 이다.이것들 은 모두 홈 페이지 나 코드 에서 ext 를 볼 수 있다piilar 코드;
  pillar 가 지원 하 는 데이터 저장 모듈 목록 주소:http://docs.saltstack.com/en/latest/ref/pillar/all/index.html#all-salt-pillars
 필요:
    먼저 왜 이런 수요 가 있 는 지 말 해 보 세 요. 어떤 때 는 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 에서 추출 합 니 다.예전 에는 이렇게 놀 수 있 을 줄 몰 랐 는데, 이 녹비, 잭 두 사람 이 가장 먼저 실현 되 어 경험 이 많다.
  
 
 이렇게 많아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 ':' 201410202 '} 으로 변환 합 니 다. 저 는 간단 한 버 전 번호 맵 만 실현 하면 됩 니 다. 복잡 한 데 이 터 는 여러분 이 직접 디자인 할 수 있 습 니 다.다음 에 프로그램 코드 붙 여 주세요.
 # -*- 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(data)
    #bapi.build_data('test-01',data)
    base 데이터 생 성, build 호출data (base 데 이 터 를 계승 하고 데 이 터 를 업데이트 합 니 다). 일부 데 이 터 는 id 에 있 지만 base 는 없습니다. 그래서 상술 한 것 은 제 가 쓴 것 입 니 다. 관 리 는 스스로 놀 수 있 고, 좋 은 것 이 있 으 면 나 에 게 피드백 할 수 있 으 며, 나 는 수정 하고 있다 ~
 2. ext 구현pillar, http 방식 으로 접근 가능
   OMS 플랫폼 과 결합 하여 상기 생 성 된 파일 이기 때문에 저 는 nginx 에서 localtion 설정 을 해서 데 이 터 를 http 로 접근 할 수 있 도록 했 습 니 다.아니면 ext필 라 못 하 겠 어.
   Nginx 설정 과정 은 무시 하고 결 과 를 바로 붙 입 니 다.
      wKiom1RTRYnBk6SRAABWZ4qyD_U841.jpg
     ID 데 이 터 는 http 를 통 해 접근 할 수 있 습 니 다. OK, 내 려 가세 요. extpillar
    ext_pillar 실현
   more /usr/lib/python2.6/site-packages/salt/pillar/oms.py
# -*- coding: utf-8 -*-
'''
author: pengyao
A module to pull data from OMS system via its API into the Pillar dictionary


Configuring the Wolf system ext_pillar
==================================

.. code-block:: yaml

  ext_pillar:
  - oms:
      api: http://oms.example.com/api/pillar/

Module Documentation
====================
'''

# Import python libs
import logging
import urllib2
import json


# Set up logging
log = logging.getLogger(__name__)


def ext_pillar(minion_id, pillar, api):
    '''
    Read pillar data from OMS system via its API.
    '''
    pillar_url = api + "/" + minion_id

    log.info("Querying OMS system Pillar for %r" %(minion_id))
    try:
        request = urllib2.urlopen(pillar_url).read()
        ret = eval(request)
        result = json.loads(json.dumps(ret))
    except Exception, e:
        log.exception(
            'Query OMS system failed! Error: %s' %(e)
        )
        return {}

    return result

    위 코드 는 간단 합 니 다. urllib 2 요청 minionid 데이터, json. loads 는 데 이 터 를 dict 로 변환 하여 saltstack 에 되 돌려 줍 니 다.urllib 가 요청 한 데 이 터 는 str 입 니 다. 저 는 str 를 먼저 dict 로 바 꾸 어 json 에 게 전달 하고 유 니 코드 가 되 지 않도록 하 겠 습 니 다.
  3. salt master 프로필 설정, pillar 테스트
    extpillar 코드 설정 master 프로필, master 에서 pillar 데 이 터 를 불 러 올 수 있 도록 합 니 다.
    cat /etc/salt/master
    ext_pillar: 
      - oms:           #코드 이름, oms. py         api: http://X.X.X.X/pillar/       # api 접두사, http: / / 도 메 인 이름 / IP / pillar / minionid 데이터 접근 가능
    마스터 다시 시작
    /etc/init.d/salt-master restart
   
   4. pillar 테스트
       salt  'minion_id' pillar.item hdworkers
        使用Http API接口来读取pillar数据 -- ext_pillar_第1张图片
       데이터 생 성 과정 을 보 여주 지 않 습 니 다. 백 엔 드 데이터 업데이트 만 하면 minion id 에 대응 하 는 pillar 를 실행 하면 최신 데 이 터 를 얻 을 수 있 습 니 다. pillar 는 동적 이기 때 문 입 니 다 ~
       이 글 이 여러분 을 도 울 수 있 기 를 바 랍 니 다. 즐 거 운 시간 보 내세 요 ~ ~ ~  다 시 는 나 처럼 글 을 찾 지 않 아 도 된다.

좋은 웹페이지 즐겨찾기