木偶/ Facter“无法检索事实fqdn”:如何修复或规避?

我正在学习木偶,并试图在家里的虚拟机上进行试验。 我还没有使用puppet服务器,只是在本地运行。 它工作正常,但每次我运行puppet apply ... ,我得到了几秒钟的延迟,之后它显示消息

 warning: Could not retrieve fact fqdn 

我假设这条消息与延迟有关,我想摆脱它(延迟 – 我可以忍受这个消息)。 谷歌search解决scheme似乎表明,这是与DNS查询有关,但我真的不能find任何其他的东西,这似乎令人惊讶。 我所要的只是能够快速地在我的虚拟机上应用清单,所以我可以尝试。 我如何加快速度?

更新:我没有看到任何额外的信息在debugging输出,但它看起来像这样:

 $ 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”的标签,因为傀儡有这么几个追随者。 如果这不属于ruby,或者如果你知道一个更好的标签,让我知道。

再次更新:在了解了更多关于木偶的信息之后,我现在明白了这个信息是来自“Facter”组件的,它嗅出了Puppet运行系统的“事实”。 我发现了一些configuration选项,并使用“certname” , “node_name”和“node_name_value ”来玩弄 ,但我无法得到延迟消失。 有谁知道具体如何告诉Facter忽略fqdn或如何让Facter能够在Ubuntu 11.10 vm上findfqdn?

进展:

 $ 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: 45 

strace导致我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 

我将虚拟机从NATnetworking改为桥接,现在networking上有一个IP,现在arp立即返回。 (我不是networking专家,所以我不知道为什么这个工作,但这似乎是一个合理的尝试。) facter仍然需要大约4-5秒总计运行,仍然报告“无法检索事实fqdn”。 facter -d显示了“域值仍然为零”的几次出现,一直到最后。 我在想事情还不是很正确。

由于木偶使用fqdn事实来确定它运行的是哪个节点,所以如果无法确定,它可能无法运行。 根据你所描述的,debugging最简单的东西是facter fqdn而不是你的puppet命令行。

如果“几秒”非常接近5秒,则很可能是因为列出的单个错误的DNS服务器而导致DNSconfiguration中断。 什么在/etc/resolv.conf? 如果使用resolv.conf中列出的第一个名称服务器运行dig -x $HOSTIP $DNSSERVERIP ,会发生什么情况?

如果你查看facter/fqdn.rb你可以看到究竟是什么尝试去解决fqdn。 在我使用的版本中,我使用的是facter/hostname.rbfacter/domainname.rb ,它们调用了来自facter/util/resolution.rb代码。

到底发生了什么事将取决于你有什么版本,什么操作系统,也可能是你已经安装了什么。 调用/bin/hostnameuname (等)和做DNS查找都很可能。 您总是可以使用strace -t facter fqdn来查看正在花费的时间(查找时间戳记中的空白)

从你所描述的一切,听起来像问题是傀儡/ facter真的想要一个域名,你没有一个,你只是一个裸体的主机名。

domain example.com添加到/etc/resolv.conf应该可以做到。 运行hostname foo.example.com也应该做的(但将需要重新应用)。 永久性解决scheme取决于确切的OS设置。

在我的家用机器上运行木偶(Xubuntu)时,我得到了同样的错误。 我的工作是改变文件/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很高兴。

添加

  config.vm.hostname = "vagrant.example.com" 

我的Vagrantfile为我Vagrantfile了。

FQDN代表“完全合格的域名”。 例如,在Windows域(或其他类似的基于LDAP的域)中,它将是networking域的名称,例如“organization.internal”(您的计算机和服务器所连接到的域)包含您的networking组和用户帐户。

所以,在执行剩下的configuration步骤时,可能会遇到麻烦,需要进行一些authentication,这是我的猜测。

http://en.wikipedia.org/wiki/Fully_qualified_domain_name

有可能你会在ServerFault上得到更好的答案,因为系统/configurationpipe理也跨越了他们的领域。

将这行添加到/etc/resolv.conf

 domain abc.com 

再运行fqdn

Fqdn需要域名,这可能在你新安装的ubu12中丢失

另一个可能的解决办法是推翻这个事实。

http://www.puppetcookbook.com/posts/override-a-facter-fact.html

 FACTER_fqdn=box.example.com facter 

在Windows上,这将是

 SET FACTER_fqdn=box.example.com facter fqdn