Puppet - 需要带参数的已定义资源

时间:2013-05-10 18:14:28

标签: deployment puppet

我对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文档,似乎我在某个地方错过了一个逗号或冒号,但我尝试了各种各样的东西。我想知道如何正确地要求自定义资源与其他资源的参数?谢谢!

1 个答案:

答案 0 :(得分: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']
}