pillar 데이터 -- ext 를 Http API 인터페이스 로 읽 기pillar
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 설정 과정 은 무시 하고 결 과 를 바로 붙 입 니 다.
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
데이터 생 성 과정 을 보 여주 지 않 습 니 다. 백 엔 드 데이터 업데이트 만 하면 minion id 에 대응 하 는 pillar 를 실행 하면 최신 데 이 터 를 얻 을 수 있 습 니 다. pillar 는 동적 이기 때 문 입 니 다 ~
이 글 이 여러분 을 도 울 수 있 기 를 바 랍 니 다. 즐 거 운 시간 보 내세 요 ~ ~ ~ 다 시 는 나 처럼 글 을 찾 지 않 아 도 된다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
pillar 데이터 -- ext 를 Http API 인터페이스 로 읽 기pillar코드 를 포장 하여 repo 로 보 낼 때 버 전 번 호 를 pillar 데이터 에 업데이트 하여 saltstack 에서 찾 을 수 있 습 니 다) 를 사용 하면 ext 가 생각 납 니 다.pillar 라 는 일 은...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.