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

Mat*_* M. 3 puppet

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

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

Lod*_*rds 5

好问题.由于在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的问题