如何设置某些节点暂停/保持/无操作?

如何设置某些节点暂停/保持/无操作?

在 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.commake 将阻止节点与 fqdn 匹配,因此如果存在默认配置,将应用默认配置(参见@GargantuChet 的评论)

node "_example1.node.com"
{
    file 
    {
        "/root/test1":
            content => "test",
            ensure => present,
    }
}

相关内容