我正在学习木偶并尝试在家中的虚拟机上进行试验。我还没有使用木偶服务器,只是在本地运行。它运行正常,但每次运行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 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
我将VM从NAT网络更改为桥接,因此它现在在网络上有一个IP,arp
现在立即返回。 (我不是网络大师,所以我不知道为什么会这样,但是尝试它似乎是合理的。)但是facter
总共需要大约4-5秒来运行并仍然报告“无法检索事实fqdn“。 facter -d
显示了几次出现的“域名值仍为零”,一直到最后。我在想一些事情仍然不太正确。
答案 0 :(得分:33)
由于puppet使用fqdn事实来确定它正在运行的节点,如果无法确定,则可能无法运行。鉴于您所描述的内容,最简单的调试方法是facter fqdn
,而不是您的puppet命令行。
如果“几秒钟”非常接近5秒,则很可能您的DNS配置因列出的单个错误DNS服务器而中断。 /etc/resolv.conf中有什么?如果使用resolv.conf中列出的第一个名称服务器运行dig -x $HOSTIP $DNSSERVERIP
会发生什么?
如果你查看facter/fqdn.rb
,你可以看到为了解决fqdn而试图做些什么。在我最方便的版本中,它使用facter/hostname.rb
和facter/domainname.rb
来调用facter/util/resolution.rb
中的代码。
究竟发生了什么将取决于您拥有的版本,操作系统,以及可能还有您安装的内容。调用/bin/hostname
,uname
(等)并进行DNS查找都很有可能。您始终可以使用strace -t facter fqdn
查看占用时间的内容(查找时间戳中的差距)
从您描述的所有内容来看,听起来好像是木偶/其他人真的想拥有一个域名而你没有域名,你只有一个裸体主机名。
将domain example.com
添加到/etc/resolv.conf应该可以解决问题。运行hostname foo.example.com
也应该可以解决问题(但需要重新应用)。永久解决方案取决于确切的操作系统设置。
答案 1 :(得分:26)
我在家用机器(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
,木偶很高兴。
答案 2 :(得分:23)
添加
config.vm.hostname = "vagrant.example.com"
到我的Vagrantfile
为我修好了。
答案 3 :(得分:5)
FQDN代表“完全合格的域名”。例如,在Windows域(或其他类似的基于LDAP的域)中,它将是您的网络域的名称,例如“organization.internal” - 您的计算机和服务器加入的域,以及域包含您的网络组和用户帐户。
因此,在执行其余配置步骤所需的某些身份验证时,可能无法获取fqdn,这是我的猜测。
http://en.wikipedia.org/wiki/Fully_qualified_domain_name
您可能会在ServerFault上获得更好的答案,因为系统/配置管理也会跨越他们的领域。
答案 4 :(得分:4)
将此行附加到/etc/resolv.conf
domain abc.com
再次运行facter fqdn
Fqdn需要域名,新安装的ubu12中可能缺少域名
答案 5 :(得分: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