2017-01-10 83 views
0

我對每個實例都有以下YAML配置。將部分YAML加載到字典中

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

我想

  • 只有QA塊裝入一個字典,如果我現在的環境是QA。
  • 只有當我的當前環境爲刺激時,才能將Prod塊轉換爲字典。

我該如何有條件地將一個YAML塊加載到字典中?

下游的代碼是這樣的

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

我希望這些值在腳本KSH根據環境來解決。

+3

你將不得不攝入整個YAML,然後只取得你想要的東西 – inspectorG4dget

+0

我增加了細節。加載一切都會產生衝突 – pmv

+1

我不明白加載該YAML會如何導致衝突,因爲您會得到以下字典:'{'prod':{'login':「A」,'var1':「 VP1「,」var2「:」VP2「},'QA':{'login':」B「,'var1':」QP1「,」var2「:」QP2「}}'。你可以很容易地查詢'prod'或'QA'的字典並獲得衝突較少的數據 – 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部分讀取數據 –