我似乎在理解如何让它工作方面遇到了一点问题。我正在构建一台新服务器,它位于办公室 NAT 后面,它的反向 DNS 映射到office.mydomain.com
,但我希望这台机器是ns2.mydomain.com
为了 puppet 而存在的。
nodes.pp 片段:
node 'ns2.mydomain.com' inherits basenode {
info('ns2.mydomain.com')
}
node 'office.mydomain.com' inherits basenode {
info('office.mydomain.com')
}
客户端上的“puppet.conf”如下:
[main]
#was node_name=ns2.mydomain.com
#was fqdn=ns2.mydomain.com
certname=ns2.mydomain.com
node_name=cert
我的服务器上的系统日志报告:
Sep 16 22:59:12 support puppetmasterd[2800]: Host is missing hostname and/or domain: office.mydomain.com
Sep 16 22:59:12 support puppetmasterd[2800]: (Scope(Node[office.mydomain.com])) office.mydomain.com
Sep 16 22:59:12 support puppetmasterd[2800]: Compiled catalog for office.mydomain.com in 0.03 seconds
Sep 16 22:59:12 support puppetmasterd[2800]: Caching catalog for ns2.mydomain.com
我怎样才能让它抓取配置ns2.mydomain.com
而不做这样的事情:
node 'ns2.mydomain.com' inherits basenode {
info('ns2.mydomain.com')
}
node 'office.mydomain.com' inherits 'ns2.mydomain.com' {
info('office.mydomain.com')
}
更新:这个问题似乎也导致了其他问题。例如,如果我info("$fqdn")
在机器后面时office.mydomain.com
fqdn 事实是空的,以及$operatingsystem
。这几乎就像事实没有被正确发现一样。可能存在 NAT 问题吗?有什么建议可以追踪此问题的原因吗?
答案1
啊啊,Puppet 主机名检测。真是一场噩梦……
默认情况下,将使用什么名称来查找node
使用哪个定义是基于 fqdn 事实的内容。什么那实际上映射到取决于一些不同的事情,是的,反向 DNS 是其中之一 - 而且它比机器自己的主机名更受欢迎!
但是,此名称(通常)仅适用于证书生成时。您实际上误用了变量node_name
——它应该设置为“cert”或“facter”之一。该fqdn
参数也已弃用。
你实际上要做的就是将certname
客户端上的参数设置为您要使用的节点名称,然后设置node_name
为cert
(或者直接忽略,因为这cert
是默认值)。这将从客户端提供的证书的 CN 中获取节点名称,并且参数certname
确保将其设置为合理的名称,而不是 facter 自行决定的名称。不幸的是,由于您已经创建了“错误”的证书,因此您需要rm -rf /var/lib/puppet/ssl
在设置配置后重新生成这些证书(在客户端上并重新运行 Puppet),以便创建和使用正确的证书。
如果这一切听起来有点复杂,那您是对的——确实如此。欢迎来到 Puppet。
答案2
我似乎运气不错(尽管还有一些我想看的测试用例),在编辑中将/etc/hosts
所需的 fqdn 列在 127.0.0.1 下作为第一个选项。它似乎可以正确检测/传递事实。虽然我似乎仍然需要创建一个名为的节点office.mydomain.com
来继承我想要的节点。