2017-06-02 23 views
0

在一個類的範圍內,我需要能夠從另一個類訪問一個變量。該變量作爲參數傳遞,例如,在puppet中,如何從一個不同的參數化類中獲取類範圍內的變量

class parameterized_class (
    $param1, 
) { 
    ... 
} 

class other_class() { 
    include parameterized_class 
    Class['parameterized_class'] -> Class['other_class'] 
    $local_var = $parameterized_class::param1 
} 

隨着用法的例子:

node default { 
    class { 'parameterized_class': 
     param1 => 'somevalue', 
    } 
    class { 'other_class': } 
} 

上面的例子不工作,因爲我得到大體類似的錯誤:

必須將param1傳遞給 類[Parameteriz ed_class]在 /path/to/modules/parameterized_class/manifests/init.pp:1 在節點本地主機

顯然,包括試圖宣佈parameterized_class不傳遞任何參數。但從文檔中,我可以看到include允許一個類以前已經聲明過,並且由於我已將parameterized_class聲明作爲other_class的依賴項,所以我不明白我是如何得到這個錯誤的。

我使用的木偶3.4.3,在Ubuntu 14.04忠實的可用版本

我應該如何去other_class的範圍內,從檢索中parameterized_class$param1的價值?在參數化類上不可能使用include

+0

首先,升級到非過時版本的Puppet:https://docs.puppet.com/puppet/4.10/puppet_collections.html#apt-based-systems。其次,你可以在參數化類中使用'include',但這不會幫助你在這裏實現你想要的。第三,在'other_class'定義中使用'Class ['parameterized_class'] - > Class ['other_class']'以及你想要做的事情的方式可能最終會導致問題。考慮到這一點以及你正在嘗試做什麼,解決你的問題最簡單的方法是hiera或刪除'include parameterized_class'這一行。 –

+0

讓我們知道你喜歡哪條路線,我們可以進一步提供幫助。 –

回答

0

根據Puppet文檔(https://docs.puppet.com/puppet/3.5/lang_classes.html#include-like-behavior),您不能使用包含類聲明和強制參數。在你的情況下,你可以做的只是不打擾包含,因爲你已經通過在你的節點定義中聲明它來處理它。另外,因爲兩者都在你的節點定義中聲明,所以你也可以在那裏定購它們。

作爲不提供默認值的一個注意事項是一個不好的做法,因爲跨模塊使用變量。

相關問題