如何将parameter passing给傀儡模块?

configuration木偶模块的最佳做法是什么? 我有傀儡2.7.11 。 我觉得这种方式很混乱,看起来像使用全局variables。

 node default { $always_apt_update = true include apt } 

我应该创buildinheritance原来大部分configuration的类吗? 文档似乎有太多的版本,我不知道哪一个适用于我。

更新:

当我尝试这个:

  class { 'apt': always_update => 'true', } 

我收到一个错误:

 Error 400 on SERVER: Invalid parameter always_update at /etc/puppet/manifests/nodes.pp:32 

您应该使用参数化类而不是全局variables。

例如:

 node default { class {'apt': always_update =>true } } class apt ($always_update = true ) { // code } node 'example.com' { class { bar: } } 

有关更多信息,请参阅puppet文档:

这些答案似乎有些过时,新版本的puppet即3.7.x,可以通过Hiera传递类参数。 像类声明这样的资源不再被认为是最佳实践。

虽然第二个答案确实使用了Hiera,但它明确地使用了“hiera”函数,这也是不太可取的做法。

新的解决scheme看起来像这样:

/etc/puppet/manifests/site.pp

 node default { include apt } 

/etc/puppet/modules/apt/manifests/init.pp

 class apt ($always_update = true ) { // code } 

/etc/puppet/hieradata/<filename>.yaml

 apt::always_update: true 

Hiera数据yaml文件可以根据需要具有不同的参数值。

现在推荐的做法是使用Hiera 。 它被内置到3.x中,但在2.7中,您需要单独安装它。

然后,您可以从您的清单中的Hiera中为apt类获取数据:

 $always_apt_update = hiera("always_apt_update") 

像这样的Hieraconfiguration

 :hierarchy: - %{::clientcert} - common 

..(从clientcert事实中拉出的)节点将被用作比common.yaml文件更高的查找优先级。

因此,对于node1.example.com.yaml always_apt_update: falsecommon.yaml always_apt_update: true ,node1将最终将该variables设置为false,而其他节点将默认为true。