为什么这个 Puppet 节点定义不能在它匹配的主机名上运行?

为什么这个 Puppet 节点定义不能在它匹配的主机名上运行?

我在 Debian Squeeze 系统上运行 puppet 2.7.9。我瞄准的盒子名为“puppet”

# hostname
puppet

# facter | grep hostname
hostname => puppet

# cat /etc/hosts | head -n2
127.0.0.1   localhost
127.0.1.1   puppet.example.com  puppet

我的节点定义如下所示:

node puppet {
    include base, puppet
}

尽管节点文档断言

节点名称可以是短主机名,也可以是完全限定域名 (FQDN)。

仅当我用短主机名替换 FQDN 或使用正则表达式匹配(如:“/^puppet..*/”)时,上述节点定义才会触发。使用短主机名定义:

# puppet agent -vt
info: Caching catalog for puppet.example.com
info: Applying configuration version '1327898040'
notice: Finished catalog run in 0.64 seconds

这次运行应该有更多输出。这是怎么回事?我遗漏了什么?

答案1

我理解 Puppet 世界中的 dns 主机名“puppet”是为 puppetmaster 机器保留的,如果您想通过自己的 puppet 服务器定位主机,请为其指定一个不同的主机名并使用 dns cname 作为别名。这应该可行,至少我就是这么做的。

答案2

自从 puppet 7(问题发布之后)以来,这种情况发生了变化……

请参阅此“错误”链接

决定在下一版本中将 strict_hostname_checking 的默认值从 false 更改为 true,并在 Puppet 7 中完全删除该选项(并且仅允许严格主机名检查)

现在没有strict_hostname_checking变量可以配置它,并且它现在的工作方式就像真的一样,因此您只能通过原始节点名称匹配 fqdn,例如。

node somemachineX {
    include somemodule
}
node default {
    notify {"using default node": }
}

将会说“使用默认节点”,并且不会为您的主机 somemachineX.yourdomain.com 包含一些模块...但以下任何一个都可以工作:

node /^somemachineY/ {
    include somemodule
}
node 'somemachineZ.yourdomain.com' {
    include somemodule
}

但当然这个正则表达式不是很好并且也会匹配如下内容:

somemachineYYY.yourdomain.com
somemachineY.wrongdomain.com

看看文档了解它并发现它不是最新的......(以下引用不再正确)

如果 strict_hostname_checking 设置为 false,并且节点的名称看起来像一个完全限定的域名(它有多个以句点分隔的字母、数字、下划线和破折号组),Puppet 会砍掉最后一组

相关内容