0

我对 Puppet 很陌生,似乎无法找到这个问题的答案。我有一个已定义的 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 '}'

通过阅读 Puppet 文档,我似乎在某处缺少逗号或冒号,但我尝试了很多方法。我想知道如何正确地要求自定义定义的资源和另一个资源的参数?谢谢!

4

1 回答 1

4

可以通过以下代码片段修复语法错误。

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

[编辑:原始代码定义 $xt_requires,而不是 $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']
}
于 2013-05-10T18:20:35.787 回答