我在 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 会砍掉最后一组