我正在学习有关puppet的知识,并尝试在家里的VM上进行实验。我还没有使用puppet服务器,只是在本地运行。它工作得很好,但是每次我运行puppet apply ...时,都会有几秒钟的延迟,之后它就会显示消息
warning: Could not retrieve fact fqdn我假设消息与延迟有关,并且我想摆脱它(延迟--我可以接受消息)。谷歌搜索解决方案似乎表明它与DNS查找有关,但我真的找不到任何关于它的其他东西,这似乎令人惊讶。我想要的是能够在我的vm中快速应用清单,这样我就可以进行实验了。我怎么才能加快速度呢?
更新:我在调试输出中看不到任何额外的信息,但它看起来像这样:
$ puppet apply -dv puppet-1.pp
warning: Could not retrieve fact fqdn
debug: Failed to load library 'rubygems' for feature 'rubygems'
debug: Failed to load library 'selinux' for feature 'selinux'
debug: Puppet::Type::File::ProviderMicrosoft_windows: feature microsoft_windows is missing
...木偶更新:我添加了“红宝石”标签,因为木偶的追随者太少了。如果这不属于ruby,或者如果你知道更好的标签,请告诉我。
再次更新:了解了更多关于puppet的知识,我现在知道这条消息是来自一个称为"Facter“的组件,它嗅探出有关Puppet运行的系统的”事实“。我找到了一些配置选项,并尝试了"certname","node_name"和"node_name_value",但我无法让延迟消失。有谁知道如何让Facter忽略fqdn,或者如何让Facter能够在Ubuntu 11.10虚拟机上找到fqdn?
进展:
$ cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.1.1这是我的路由器,它通过Tomato运行Dnsmasq。
$ dig -x 192.168.1.129 192.168.1.1
; <<>> DiG 9.7.3 <<>> -x 192.168.1.129 192.168.1.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21838
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;129.1.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
129.1.168.192.in-addr.arpa. 0 IN PTR desk-vm-ubuntu-beta.
;; Query time: 14 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Sun Oct 16 17:47:47 2011
;; MSG SIZE rcvd: 77
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27462
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;192.168.1.1. IN A
;; ANSWER SECTION:
192.168.1.1. 0 IN A 192.168.1.1
;; Query time: 11 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Sun Oct 16 17:47:47 2011
;; MSG SIZE rcvd: 45strace将我带到arp,它阻塞了5秒钟,并为每个facter调用了两次
$ time arp -a
? (10.0.2.2) at 52:54:00:12:35:02 [ether] on eth0
real 0m5.127s
user 0m0.004s
sys 0m0.016s我将VM从NAT网络更改为桥接,现在它在网络上有一个IP,并且arp现在立即返回。(我不是网络专家,所以我不知道为什么这样做有效,但这似乎是一个合理的尝试。)但facter仍然需要大约4-5秒的时间来运行,并且仍然报告“无法检索事实fqdn”。facter -d显示了几次“域的值仍然为零”的情况,一直到最后。我在想,还是有些地方不太对劲。
发布于 2011-10-17 03:06:31
由于puppet使用fqdn事实来确定它作为哪个节点运行,因此如果无法确定它可能无法运行。考虑到您所描述的内容,最简单的调试方法是facter fqdn,而不是puppet命令行。
如果“几秒钟”非常接近于恰好5秒,则很可能是您的DNS配置被破坏,并列出了一个损坏的DNS服务器。/etc/resolv.conf中有什么?如果使用resolv.conf中列出的第一个名称服务器运行dig -x $HOSTIP $DNSSERVERIP,会发生什么情况?
如果你查看facter/fqdn.rb,你可以看到facter到底在做什么来解析fqdn。在我最方便的版本中,它使用的是facter/hostname.rb和facter/domainname.rb,它们从facter/util/resolution.rb调用代码。
到底会发生什么,将取决于你的facter版本,操作系统,可能还有你到底安装了什么。调用/bin/hostname、uname (等)和进行DNS查找都很有可能。您总是可以使用strace -t facter fqdn来查看是什么在占用时间(查找时间戳中的间隙)
从你所描述的一切来看,问题听起来确实像是puppet/facter真的想要一个域名,而你没有,你只有一个赤裸裸的主机名。
将domain example.com添加到/etc/resolv.conf应该可以解决这个问题。运行hostname foo.example.com也应该可以做到这一点(但需要重新应用)。永久解决方案取决于确切的操作系统设置。
发布于 2012-04-09 00:45:02
在我的家用机器(Xubuntu)上运行puppet时,我得到了同样的错误。对我来说起作用的是修改文件/etc/hosts的第二行。更改前的前两行:
127.0.0.1 localhost
127.0.1.1 box在更改之后:
127.0.0.1 localhost
127.0.1.1 box.example.com box现在,命令hostname -f返回box.example.com而不是box,puppet很高兴。
发布于 2013-11-17 06:37:00
添加
config.vm.hostname = "vagrant.example.com"给我的Vagrantfile帮我修好了。
https://stackoverflow.com/questions/7780322
复制相似问题