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

warning: Could not retrieve fact fqdn

我假设消息与延迟有关,我想消除它(延迟——我可以接受消息).在谷歌上搜索一个解决方案似乎表明它与DNS查找有某种关联,但我真的找不到关于它的任何其他信息,这似乎令人惊讶.我想要的就是能够在我的虚拟机中快速应用 list ,这样我就可以进行实验了.我怎样才能加快速度?

Update:我在调试输出中没有看到任何额外的信息,但它看起来是这样的:

$ 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
...

Update:我添加了"ruby"标签,因为puppet的粉丝太少了.如果这不属于ruby,或者如果你知道一个更好的标签,请告诉我.

Update again:了解了一些关于puppet的更多信息后,我现在明白了这条消息来自一个名为"Facter"的组件,它可以嗅出puppet运行的系统的"事实".我找到了一些配置选项,玩了"certname""node_name""node_name_value",但我无法让延迟消失.有没有人特别知道如何告诉Facter忽略fqdn,或者如何让Facter能够在Ubuntu11.10虚拟机上找到fqdn?

Progress:

$ cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.1.1

这是我的路由,通过番茄运行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立即返回.(我不是网络大师,所以我不知道为什么会这样,但这似乎是一个合理的try .)但facter运行总共需要4-5秒,并且仍然报告"无法检索事实fqdn".facter -d显示了"域的值仍然为零"的多次出现,一直到最后.我觉得有些事情还是不太对劲.

推荐答案

由于puppet使用fqdn事实来确定它作为哪个 node 运行,因此如果无法确定,它可能无法运行.根据您所描述的,最简单的调试方法是facter fqdn,而不是puppet命令行.

如果"几秒钟"非常接近精确的5秒钟,则很可能您的DNS配置已被 destruct ,并列出了一个坏的DNS服务器.在什么情况下.形态?如果使用resolv中列出的第一个名称服务器运行dig -x $HOSTIP $DNSSERVERIP,会发生什么.形态?

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

具体情况将取决于您拥有的facter版本、操作系统,以及您安装的具体内容.拨打/bin/hostnameuname(等)和进行DNS查找都很有可能.您总是可以使用strace -t facter fqdn来查看花费的时间(查找时间戳中的间隔)

从你所描述的每一件事来看,问题似乎是puppet/facter真的想要一个域名,而你没有,你只有一个裸主机名.

domain example.com添加到/etc/resolv.conf应该做到这一点.运行hostname foo.example.com也可以做到这一点(但需要重新应用).永久解决方案取决于确切的操作系统设置.

Ruby相关问答推荐

BasicObject 的 singleton_class 的超类如何以及为什么是 Ruby 中的 Class 类?

Rack并发 - rack.multithread、async.callback 或两者兼而有之?

如何在加载文件时禁用重新定义常量的警告

Sinatra 与 EventMachine WebSockets 一起工作是否成功?

如何使用 capybara + cucumber 断言 ruby​​ 中的 html 表行数

如何使用 if..else 块的结果分配变量?

如何将哈希保存到 CSV

Ruby 中是否有像 C 中一样的主要方法?

RSpec: stubbing Kernel::sleep?

按可能为 nil 的属性对对象的 ruby​​ 数组进行排序

Ruby 中的p是什么?

如何在 Ruby 中解冻对象?

有没有办法在 RSpec 中取消存根?

你能用 Ruby 开发原生 iPhone 应用程序吗?

在 ruby​​ 异常中捕获行号

如何验证 RSpec 中的退出和中止?

将两个数组组合成哈希

Lisp 和 Erlang 原子、Ruby 和 Scheme 符号.它们有多大用处?

如何计算Ruby日期的星期几?

传递哈希而不是方法参数