我意识到在模块中使用modulename :: params类创建params.pp通常是个好主意,并在modulename类中继承它以处理单独文件中的参数.如果不是上课,我该如何做,我正在创建一个定义?
为了澄清,我使用的定义能够在服务器上安装同一应用程序的多个版本.
好问题.由于在Puppet中没有可用于已定义类型的继承,因此params.pp模式不能以与定义类型完全相同的方式再现.还有另一种方式.
以下代码通过Foo ['bar']定义的类型输出'hello world':
class params {
$msg = 'hello world'
}
define foo($msg = $params::msg ) {
notify{ $msg: }
}
foo { 'bar': }
include params
Run Code Online (Sandbox Code Playgroud)
现在,为了实现上述功能,必须params包括在内.否则,Puppet解析器会抱怨类params尚未被评估,因此$params::msg无法解析变量.
没有必要在包含params和bar的定义之间提供排序,因为在Puppet 类中总是在定义的类型之前进行求值.如果不是这样,上面可能会导致相同的评估问题,你必须写:
foo { 'bar':
require => Class['params'] # <- not necessary
}
include params
Run Code Online (Sandbox Code Playgroud)
因此,为了在模块中工作,foo您可以像以前一样简单地添加一个params类,并使用以下命令启动init.pp:
include foo::params
define foo($x = $foo::params::x, $y = $foo::params::y, ...)
Run Code Online (Sandbox Code Playgroud)
在你愉快地继续使用params.pp模式之前,我建议你阅读这篇博文:params.pp的问题