Puppet

Puppet:用雜湊迭代替換 create_resources()

  • January 18, 2022

我們正在從 Puppet 2 遷移到 5。範圍似乎有點不同。以前,當create_resources()與 hiera_hash 和預設雜湊一起使用時,呼叫腳本中的變數可用於 ERB,但現在它們似乎不可用。例如,我可以$a = 'hello world'在呼叫腳本之前設置create_resources(),然後在我的 ERB 中,我可以簡單地引用$a並返回hello world. 現在情況似乎並非如此。

所以這個想法是放棄create_resources()並使用 Puppet 5 的each功能,hiera_hash只是在循環中創建一個新文件。但是,我無法將預設值合併到每個雜湊元素。我無法重新聲明變數,因此似乎無法在循環內進行合併。

這是我正在嘗試做的一個例子:

數據.file1.yaml

my::data:
 element_a:
   fname: 'Brian'
   lname: 'Detweiler'
 element_b:
   fname: 'Joe'
   lname: 'Schmoe'

數據.default.yaml

my::defaults
 mname: 'M.'

在我將這兩個都拉入 as hiera_hashs 和 do之前create_resources('my::template::script', $names, $names_default),我最終會得到預期的合併:

'element_a' => { fname => 'Brian', lname => 'Detweiler', mname => 'M.'},
'element_b' => { fname => 'Joe', lname => 'Schmoe', mname => 'M.'}

現在我想做

$names.each | String $key, Hash $value | {
 $merged_hash_val = $names_default + $value
 file {
   # ... create file with $merged_hash_val in here
 }
}

但由於變數是不可變的,我無法重新分配值。有沒有解決的辦法?

模板仍然可以訪問變數。我擔心那裡還有其他事情發生。create_resources()如果你解決了這個問題,你可能不想改變你的用法。

請參閱:https ://puppet.com/docs/puppet/5.5/lang_template_erb.html#accessing-puppet-variables

FTR

$names.each | String $key, Hash $value | {
 $merged_hash_val = $names_default + $value
 file {
   * => $merged_hash_val
 }
}

https://puppet.com/docs/puppet/7/lang_resources.html#lang_resource_syntax-setting-attributes-from-hash

引用自:https://serverfault.com/questions/954327