2013-05-10 23 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