如何在nodes.pp中覆盖定义的类型?我希望能够使用nodes.pp
设置自定义domain
。Case Default
不是一种选择。
我正在使用木偶 6.0。
以下方法不起作用。它说Could not find declared class resolv::resolv_config
. 根据这个答案,它看起来曾经在 3.0 中工作。
节点.pp
node "test001" {
class { 'resolv::resolv_config':
domain => "something.local",
}
}
modules/resolv/manifests/init.pp
class resolv {
case $hostname {
/^[Abc][Xyz]/: {
resolv:resolv_config { 'US':
domain => "mydomain.local",
}
}
}
}
define resolv::resolv_config($domain){
file { '/etc/resolv.conf':
content => template("resolv/resolv.conf.erb"),
}
}
resolv.conf.erb
domain <%= @domain %>
这里有几个问题,但导致"找不到声明的类"错误的问题是您使用了错误的语法来声明定义的类型。你的代码应该是这样的:
node "test001" {
resolv::resolv_config { 'something.local':
domain => "something.local",
}
}
https://puppet.com/docs/puppet/latest/lang_defined_types.html,文档中有一些声明已定义类型的示例。
一旦你开始工作,你会发现另一个问题,在这个定义中。
define resolv::resolv_config($domain){
file { '/etc/resolv.conf':
content => template("resolv/resolv.conf.erb"),
}
}
如果您尝试声明多个resolv::resolv_config
,将导致错误,因为它们都将尝试声明/etc/resolv.conf
文件资源。您几乎肯定想要使用file_line
资源。