Puppet
Puppet:用雜湊迭代替換 create_resources()
我們正在從 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_hash
s 和 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 } }