2016-08-30 44 views
0

我需要基於某些邏輯遞歸插入散列條目。散列的狀態在已定義的類型循環中得到更新,但不在外部作用域中。下面要澄清:傀儡2.7:在父範圍更新散列失敗

class Test { 
    $config = {} 
    define my_loop() 
    { 
    $config['a'] = 'b' 
    notify { "1) config = $config": } # shows that $config has a=>b 
    } 

    my_loop { 'loop' : } 
    notify { "2) config = $config": 
    require => My_loop['loop'] # shows that $config is empty 
    } 
} 

所以,問題是$configloop()裏面包含a=>b,但loop()之外它沒有。我必須在這裏碰到一些範圍規則。

想法?

回答

0

Puppet變量的值被設置一次,之後它們不會改變。在那些呈現出不同行爲外觀的少數地方,實際發生的是要麼創建修改的本地副本,要麼創建一個完全獨立的變量。

此外,不要在類內部嵌套類或定義的類型。 Puppet允許它出於歷史原因,但它沒有你可能期望的語義,並且它使嵌套的類/類型很難找到。

考慮編寫一個自定義函數來執行計算並返回所需的散列。

還要考慮升級到受支持版本的Puppet是否可行。 2.7版本非常陳舊。

+0

謝謝。我最終編寫了一個自定義的Ruby函數,它返回了我需要的散列。 – alecswan