2017-01-10 3 views
0

각 인스턴스에 대해 다음 YAML 구성을 사용합니다.부분 YAML을 사전에로드

prod: 
    login: A 
    var1: VP1 
    var2: VP2 
QA: 
    login: B 
    var1: QP1 
    var2: QP2 

나는 나의 현재의 환경 품질이 경우 사전에

  • 만 QA 블록을로드 할.
  • 내 현재 환경이 자극되면 독점 전용 블록으로.

YAML 블록을 조건부로로드 할 수 있습니까?

하류 코드는 내가이 값은 환경에 따라 ksh 스크립트에서 해결 될하려는이

#bin/ksh 
login = {login} 
var1 = {var1} 
var2 = {var2} 

같은 것입니다.

+3

전체 YAML을 섭취하고 원하는 것을 취해야합니다. – inspectorG4dget

+0

세부 정보를 추가했습니다. 모든 것을 로딩하면 충돌이 발생할 것입니다. – pmv

+1

다음 {{ 'prod': { 'login': "A", "var1": " VP1 ","var2 ":"VP2 "}, 'QA': { '로그인':"B ","var1 ":"QP1 ","var2 ":"QP2 "}}' 당신은 쉽게'prod' 또는'QA'에 대해 그 dict을 질의하고 conflict-less 데이터를 얻을 수 있습니다. – inspectorG4dget

답변

1

전체 파일을로드 한 다음 원하는 키 아래에있는 파일 만 가져 오기만하면됩니다.

with open('data.yml') as f: 
    d = yaml.load(f.read()) 
    print yaml.dump(d['QA']) 

이런 식으로.

0
import yaml 
import socket 

qa="172.27.139.94" 
prod="172.27.139.95" 
ip = socket.gethostbyname(socket.gethostname()) 
if ip == qa: 
    yml_dic = yaml.load(open('yamlconfig.yml', 'r'))["QA"] 
elif ip == prod: 
    yml_dic = yaml.load(open('yamlconfig.yml', 'r'))["prod"] 

print yml_dic 
+0

제안 된 솔루션이 실제로 무엇을하는지에 대한 설명을 제공하는 것이 일반적입니다. –

+0

1 단계 : 우리의 환경에서 IP 주소를 얻는 것 –

+0

2 단계 : QA와 일치하는 IP 주소 인 경우 QA 섹션의 데이터를 읽습니다. –