48

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

warning: Could not retrieve fact fqdn

我假设该消息与延迟有关,并且我想摆脱它(延迟-我可以接受该消息)。谷歌搜索解决方案似乎表明它与 DNS 查找有关,但我真的找不到任何关于它的东西,这似乎令人惊讶。我想要的只是能够在我的虚拟机中快速应用清单,以便我可以进行实验。我怎样才能加快速度?

更新:我在调试输出中看不到任何额外的信息,但它看起来像这样:

$ 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 的追随者很少。如果这不属于 ruby​​,或者如果您知道更好的标签,请告诉我。

再次更新:在了解了更多关于 puppet 的知识后,我现在明白这条消息来自名为“Facter”的组件,该组件可以嗅出有关 Puppet 正在运行的系统的“事实”。我找到了一些配置选项并使用了"certname""node_name""node_name_value",但我无法让延迟消失。有谁知道具体如何告诉 Facter 忽略 fqdn 或如何让 Facter 能够在 Ubuntu 11.10 vm 上找到 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: 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

我将虚拟机从 NAT 网络更改为桥接,因此它现在在网络上有一个 IP,并且arp现在立即返回。(我不是网络专家,所以我不知道为什么会这样,但这似乎是一个合理的尝试。)但facter仍然需要大约 4-5 秒才能运行并且仍然报告“无法检索事实 fqdn”。facter -d显示多次出现“域的值仍然为零”,一直到最后。我在想有些事情还是不太对劲。

4

6 回答 6

33

由于 puppet 使用 fqdn 事实来确定它作为哪个节点运行,如果无法确定它可能无法运行。鉴于您所描述的,最简单的调试方法是facter fqdn代替您的 puppet 命令行。

如果“几秒”非常接近恰好 5 秒,则很可能您的 DNS 配置因列出的单个错误 DNS 服务器而损坏。/etc/resolv.conf 中有什么?如果您dig -x $HOSTIP $DNSSERVERIP使用 resolv.conf 中列出的第一个名称服务器运行会发生什么?

如果您查看,facter/fqdn.rb您可以看到 facter 正在尝试做什么来解决 fqdn。在我最方便使用的版本中facter/hostname.rbfacter/domainname.rb它的调用代码来自facter/util/resolution.rb.

究竟会发生什么将取决于您拥有的 facter 版本、操作系统,以及您安装的具体内容。调用/bin/hostname, uname(etc) 和进行 DNS 查找都是很有可能的。您始终可以使用strace -t facter fqdn来查看花费时间的内容(查找时间戳的差距)

从你所描述的一切来看,听起来问题是 puppet/facter 真的想要一个域名而你没有,你只有一个裸露的主机名。

添加domain example.com到 /etc/resolv.conf 应该可以解决问题。跑步hostname foo.example.com也应该可以解决问题(但需要重新应用)。永久解决方案取决于确切的操作系统设置。

于 2011-10-16T19:06:31.403 回答
26

在我的家用机器(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 很高兴。

于 2012-04-08T16:45:01.703 回答
23

添加

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

我为我Vagrantfile修好了。

于 2013-11-16T22:37:00.440 回答
5

FQDN 代表“完全限定的域名”。例如,在 Windows 域(或其他类似的基于 LDAP 的域)中,它将是您的网络域的名称,例如“organization.internal” - 您的计算机和服务器加入的域,以及加入的域包含您的网络组和用户帐户。

因此,我的猜测可能是在获取执行其余配置步骤所需的某些身份验证的 fqdn 时遇到问题。

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

您可能会在 ServerFault 上得到更好的答案,因为系统/配置管理也跨越了它们的领域。

于 2011-10-15T21:18:11.307 回答
4

将此行附加到/etc/resolv.conf

domain abc.com

再次运行facter fqdn

Fqdn 需要域名,新安装的 ubu12 中可能缺少该域名

于 2013-11-15T07:11:03.620 回答
3

另一种可能的规避方法是覆盖事实。

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
于 2013-08-05T20:01:12.653 回答