簡體   English   中英

從木偶代碼(或“木偶查找”cmd)訪問多個嵌套的hiera值

[英]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迭代器maphttps//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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM