在 puppetmaster 端,是否有一个选项可以将节点设置为暂停状态(将其设置为 noop)?我正在寻找类似以下示例中的设置。每个在其定义中将名为 noop 的变量设置为 true 的节点都不会被更新。
因此,在多个 puppet 客户端运行后,example1.node.com 将不会有 test1 文件,但 example2.node.com 将有该文件。
有这样的选择吗?还有其他方法吗?(当然,我可以简单地在节点名称中添加“_”,它就会停止匹配。我正在寻找官方方法。
node "example1.node.com"
{
$noop = true
file
{
"/root/test1":
content => "test",
ensure => present,
}
}
node "example2.node.com"
{
file
{
"/root/test1":
content => "test",
ensure => present,
}
}
答案1
一种常见的方法是使用外部节点分类器,使用您自己的业务逻辑将类和/或属性附加到节点。它记录在https://puppet.com/docs/puppet/latest/nodes_external.html
如果您想避免在文件上应用任何内容,您可以添加如下内容site.pp
:
if $noop == true {
fail('noop, I don't do anything!')
}
更高级一点。如果你想让 puppet 在系统上存在 /etc/noop 时避免应用你的清单,你可以创建一个定制事实:
Facter.add('noop') { setcode { File.exists? '/etc/noop' } }
然后使用site.pp
:
if $::noop == true {
fail('noop, I don't do anything!')
答案2
我还没有找到在节点定义中设置 noop 的方法,以便在客户端上看到变化(就像客户端代理使用 --noop 运行一样),但对我来说禁用节点的更快方法是:
在节点名称前面添加下划线,例如_example1.node.com
make 将阻止节点与 fqdn 匹配,因此如果存在默认配置,将应用默认配置(参见@GargantuChet 的评论)
node "_example1.node.com"
{
file
{
"/root/test1":
content => "test",
ensure => present,
}
}