2016-03-03 17 views
0

想要寫在Groovy詹金斯自動使部署工作爲我們的項目DSL工作構建腳本。在每個項目中都有一個用於角色和主機參數的通用yml文件,我想閱讀它並使用其內容來配置作業。我如何讀ansible YML配置文件在常規

的問題是,到目前爲止,我使用的是snakeyml讀取YML文件,但它返回一個ArrayList(更像是一個地圖),我不能有效地利用。

的人都知道一個更好的解決方案?

我陽明樣本文件:

--- 
- hosts: app.host 
    roles: 
    - role: app-db 
    db_name: myproje_db 
    db_port: "3306" 
    migrate_module: "my-proje-api" 
    - role: java-app 
    app_name: "myproje-api" 
    app_artifact_name: "my-proje-api" 
    app_links: 
    - myproje_db 

我讀了工作區中的文件在我的主Groovy腳本:在另一個類的另一個功能

InputStream configFile = streamFileFromWorkspace('data/config.yml') 

並對其進行處理:

public String configFileReader(def out, InputStream configFile){ 
     def map 
     Yaml configFileYml = new Yaml() 
     map = configFileYml.load(configFile) 
} 

它返回地圖類型作爲數組列表。

回答

2

這是一個預期的輸出,這樣的配置已經開始用「 - 」代表名單。它是「一組主機,每個主機都有一組角色」。

如果你想迭代每臺主機上,你可以這樣做:

Yaml configFileYml = new Yaml() 
configFileYml.load(configFile).each { host -> ... } 

當讀取配置,它等同於以下結構(常規格式):

[ // collection of map (host) 
[ // 1 map for each host 
    hosts:"app.host", 
    roles:[ // collection of map (role) 
    [ // 1 map for each role 
    role: 'app-db', 
    db_name: 'myproje_db', 
    db_port: "3306", 
    migrate_module: "my-proje-api" 
    ], 
    [ 
    role: 'java-app', 
    app_name: "myproje-api", 
    app_artifact_name: "my-proje-api", 
    app_links:['myproje_db'] 
    ] 
    ] 
] 
] 
+0

謝謝前進,我弄錯了。你介意爲這個yaml寫一個完整的示例代碼嗎?例如,我怎樣才能訪問項目myproje_db在Java應用程序角色的app_links?導致示例代碼沒有爲我工作,它給我錯誤的指向字符串的指針。 – Fezo

+0

如果我不知道房產的名稱,該怎麼辦?就像我不知道有一個屬性爲migrate_module,但我正在另一個配置文件中編寫此屬性,或者我正在製作它的映射。我真的很感激你可以給我關於這件事的任何線索。 – Fezo

+0

當讀取配置時,我已經添加了一個到groovy結構的映射。這只是一個地圖集合。 –