2015-12-14 104 views
0

我看到很多問題接近這個,但並不完全符合我的要求,所以請幫我解決這個問題。在我的YAML文件我有一個層次,如用hiera解釋嵌套yaml?

## application.yaml 
application::params::api: 
    consumers: 
    app1: 
     id: 'appname1' 
     key: 'key1' 
    app2: 
     id: 'appname2' 
     key: 'key2' 

然後在應用PARAMS

## params.pp 
class application::params { 
    $application = hiera('application::params::api->????->app1->???->id') 
} 

問號是什麼我使用的運行層次上的一個新的水平,我不確定作爲我的分隔符應該是什麼?我看到這遍灑在我們的代碼中,但找不到它是如何加載/調用到hiera的示例

我會只使用$application = hiera('application::params::api::app1::id')

+0

什麼傀儡代碼看起來像類/定義將會使用這個YAML? – ptierno

回答

2

::符號是木偶具體,並沒有特殊的含義Hiera但可以瀏覽到使用點按鍵細節。當使用示例中的數據時,表達式hiera('application::params::api.consumers.app1.id')將返回值'appname1'。約Hiera Lookup Keys

更多信息。

+0

你確定嗎? – ptierno

+0

是的,我很積極。我編寫了解決Hiera中這些密鑰的代碼。 –

+0

接受並加上一個,謝謝 – ehime

0

您應該利用create_resources函數的優勢,並可能使用define而不是class以使其具有可重複性。

舉例如下:

# application/init.pp 
class application { 
    create_resources('application::app', hiera('application::apps')) 
} 

# application/app.pp 
define application::app(id, key) { 
    # do stuff with id and key 
} 

這是一個壞榜樣和最佳做法的整體概念流浪狗。但是,這應該通過一些研究讓你到你想要的地方。

希望它有幫助。