当我在puppet中使用definition而不是class时,参数的最佳实践是什么?

时间:2014-02-14 16:33:40

标签: puppet

我意识到在模块中使用modulename :: params类创建params.pp一般是个好主意,并在modulename类中继承它以处理单独文件中的参数。如果不是上课,我该怎么做呢?我正在创建一个定义吗?

为了澄清,我使用定义可以在服务器上安装同一应用程序的多个版本。

1 个答案:

答案 0 :(得分:5)

好问题。由于在Puppet中没有可用于已定义类型的继承,因此params.pp模式不能以与定义类型完全相同的方式再现。还有另一种方式。

以下代码通过Foo ['bar']定义类型输出'hello world':

class params {
  $msg = 'hello world'
}
define foo($msg = $params::msg ) {
  notify{ $msg: }
}

foo { 'bar': }
include params

现在,为了实现上述功能,必须包含params。否则,Puppet解析器会抱怨类params尚未被评估,因此无法解析$params::msg变量。

没有必要在包含params和bar的定义之间提供排序,因为在Puppet 类中总是在定义的类型之前评估。如果不是这样,上面可能会导致相同的评估问题,你必须写:

foo { 'bar':
  require => Class['params'] # <- not necessary
}
include params

因此,要在模块foo中工作,您可以像以前一样添加一个params类,并使用以下命令启动init.pp:

include foo::params
define foo($x = $foo::params::x, $y = $foo::params::y, ...) 

一个重要的注意事项

在您愉快地继续使用params.pp模式之前,我建议您阅读此博文:the problem with params.pp