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: false和common.yaml always_apt_update: true ,node1将最终将该variables设置为false,而其他节点将默认为true。