Puppet/Facter"无法检索事实fqdn":如何修复或规避?

Rya*_*art 47 ruby puppet facter

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

warning: Could not retrieve fact fqdn
Run Code Online (Sandbox Code Playgroud)

我假设消息与延迟有关,我想摆脱它(延迟 - 我可以忍受消息).谷歌搜索解决方案似乎表明它与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
...
Run Code Online (Sandbox Code Playgroud)

更新:我添加了"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
Run Code Online (Sandbox Code Playgroud)

那是我的路由器,它通过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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

fre*_*eit 33

由于puppet使用fqdn事实来确定它正在运行的节点,因此如果无法确定它,则可能无法运行.鉴于您所描述的内容,最简单的调试方法是使用facter fqdnpuppet命令行.

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

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

究竟发生了什么取决于你拥有什么版本的facter,什么操作系统,以及可能还有你安装的内容.调用/bin/hostname,uname(等)和进行DNS查找都很有可能.您可以随时使用strace -t facter fqdn以查看花费时间的内容(查找时间戳中的差距)

从您描述的所有内容来看,听起来好像是木偶/因素真的想拥有一个域名而你没有域名,你只有一个裸体主机名.

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

  • 将`domain example.com`添加到`/ etc/resolv.conf`为我做了诀窍.谢谢! (4认同)
  • 啊! `strace`发现了一些东西:`/ usr/lib/ruby​​/1.8/facter/arp.rb`正在调用`arp ​​-a`,它阻塞5秒钟.我在我的回答中添加了resolv.conf,dig输出和arp输出.它现在更快,但仍然不快.在一个桌面核心上,4-5秒听起来是否正确? (3认同)
  • 最近的Facter版本使用'arp -an'来避免反向查找.您可以修改arp.rb以使用此调用,或将facter升级到1.6.1 - 或者修复超时问题. (2认同)

Tee*_*sti 26

在我的家用机器(Xubuntu)上运行木偶时我遇到了同样的错误.对我有用的是改变第二行文件/etc/hosts.改变前的前两行:

127.0.0.1   localhost
127.0.1.1   box
Run Code Online (Sandbox Code Playgroud)

改变之后:

127.0.0.1   localhost
127.0.1.1   box.example.com box
Run Code Online (Sandbox Code Playgroud)

现在,命令hostname -f返回box.example.com而不是box,木偶很高兴.

  • 确保您的重定向顺序正确无误.你必须注意做一些像`127.0.1.1 box www.box.com`这样的事情 (4认同)

shr*_*ing 23

添加

  config.vm.hostname = "vagrant.example.com"
Run Code Online (Sandbox Code Playgroud)

我为我Vagrantfile修好了.


jef*_*unt 5

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

因此,它可能无法获得执行其余配置步骤所需的某些身份验证的fqdn,这是我的猜测.

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

您可以在ServerFault上获得更好的答案,因为系统/配置管理也会跨越他们的领域.