[英]Accessing multiple nested hiera values from puppet code (or “puppet lookup” cmd)
這可能是一個非常簡單的問題,但似乎很難在互聯網上搜索答案,或者至少我花了太多時間來處理這個問題。
如何使用lookup()
或更好的方式從Puppet模塊中的hieradata
文件(下面)訪問或直接創建所有foo::bar
值的列表?
---
foo::bar:
'some uniq name':
baz: 12345
...
'another uniq name':
baz: 54321
...
因此,如果可以使用通配符,則關鍵路徑將如下所示 - > foo::bar::*::baz.
這需要使用lookup
函數,lambda迭代器和哈希語法表示法,所以它實際上並不那么容易,盡管代碼可能會使它看起來那樣。
我們需要遍歷foo::bar
哈希中的鍵的值。 我們可以從那開始:
lookup(foo::bar, Hash).each |String $key, Hash $value| {
# first $key is 'some uniq name' string
# first $value is 'some uniq name' hash
}
現在我們需要訪問每個嵌套哈希中的bar
鍵的值。 我們可以通過正常的語法來訪問哈希中的鍵值:
lookup(foo::bar, Hash).each |String $key, Hash $value| {
$value['baz'] # first value is 12345
}
但是,我們需要將這些值存儲在變量中,以便在退出lambda范圍后保留它們而不是丟棄它們。 因此,我們需要有一個變量存儲lambda迭代器的返回值,並使用一個返回修改過的數組的lambda迭代器:
$bazes = lookup(foo::bar, Hash).map |String $key, Hash $value| {
$value['baz']
}
從而實現了在hieradata中存儲所有baz
值的數組(或列表)的目標。 雖然代碼很短,但可以說並不那么簡單。
有用的文檔 -
查詢: https : //puppet.com/docs/puppet/5.2/hiera_use_function.html
lambda迭代器map
: https : //puppet.com/docs/puppet/5.3/function.html#map
訪問哈希值: https : //puppet.com/docs/puppet/5.3/lang_data_hash.html#accessing-values
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.