我意识到在模块中使用modulename :: params类创建params.pp一般是个好主意,并在modulename类中继承它以处理单独文件中的参数。如果不是上课,我该怎么做呢?我正在创建一个定义吗?
为了澄清,我使用定义可以在服务器上安装同一应用程序的多个版本。
答案 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