2013-05-10 24 views
0

我對Puppet非常陌生,似乎無法找到這個問題的答案。我有一個定義的木偶的資源,需要幾個參數:木偶 - 需要使用參數定義的資源

class xy::xy { 
    include apache:regular_apache 
    define setup($pkg_name, $xy_version, $pas_ver) { 
    file { '/etc/xy': 
      ensure => present, 
      notify => Service['apache'], 
    } 
} 

我想需要在另一個文件中的另一個資源這個自定義資源。

class soft::buy { 
    include xy::xy 

    $xt_requires = [Xy::Xy::Setup["{'xt_buy': pkg_name => 'xt_buy_v01', 
              xy_version => '1.0.1', 
              pas_version => '2.1.4'}"]] 

    package { 'buy.xt': 
    ensure => $::buy_xt_version, 
    provider => 'xt', 
    require => $xt_requires, 
    } 
} 

,我得到的錯誤是這樣的:Syntax error at 'require'; expected '}'

從閱讀木偶文檔,好像我缺少一個逗號或冒號地方,但我已經嘗試了各種各樣的事情。我想知道如何正確地要求一個自定義的資源與另一個資源的參數?謝謝!

回答

4

語法錯誤可以通過以下代碼片段修復。

package { 'buy.xt': 
    ensure => $::buy_xt_version, 
    provider => 'xt', 
    require => $xt_requires 
} 

[編輯:原始代碼定義$ xt_requires,而不是$需要]

您正在定義的參數require(它定義需要處理第一哪些資源)。

這與語言聲明require(它包括一個類並添加對所需類的依賴關係)不同。

但是,在require-paramter中,您無法指定需求的參數,只是它的存在。完全正確的將是:

xy::xy::setup {'xt_buy': 
    pkg_name => 'xt_buy_v01', 
    xy_version => '1.0.1', 
    pas_version => '2.1.4' 
} 

package { 'buy.xt': 
    ensure => $::buy_xt_version, 
    provider => 'xt', 
    require => Xy::Xy::Setup['xt_buy'] 
} 
+0

對不起,我沒有正確複製我的代碼!實際上在我的代碼中需要=> $ require。 – 2013-05-10 18:24:10

+0

同樣,我沒有完成我的anwser在打「答覆」之前。我已經用真正的答案更新了它... – kronn 2013-05-10 18:26:05

+0

另外,我忽略了另一個問題:您定義$ xt_require,稍後引用$ requires。可能不會出現根本錯誤,因爲您很難模糊該示例。 – kronn 2013-05-10 18:28:09