Facts.d - 在木偶运行期间无法检索到Pluginfacts

时间:2014-04-02 15:59:07

标签: upgrade puppet facter

我刚刚将 puppet 环境从3.4.2升级到3.4.3。通过puppetlabs的apt repos。我正在升级代理商主人。执行代理运行会导致以下错误:

Info: Retrieving pluginfacts
Debug: Failed to load library 'msgpack' for feature 'msgpack'
Debug: file_metadata supports formats: pson yaml b64_zlib_yaml raw
Debug: Failed to load library 'msgpack' for feature 'msgpack'
Debug: file_metadata supports formats: pson yaml b64_zlib_yaml raw

Error: /File[/var/lib/puppet/facts.d]: Could not evaluate: Could not retrieve information from environment production source(s) puppet://<puppetserver>/pluginfacts

Debug: Finishing transaction [...]

尽管如此,我从 master 中检索目录,因此 代理运行仍然有效,并且似乎可以执行它应该执行的操作。 (或者说,如果出现与错误消息相关的错误,我实际上无法确定。)

但是,我想摆脱错误信息。

我在代理上仔细检查了puppet --version的木偶版本。我使用乘客为puppetmaster。 Facter 的版本为2.0.1那么我错过了什么?

添加:使用先前版本3.4.2运行代理时,将不会显示错误消息。

有什么想法吗?非常感谢您的支持。

ITL

7 个答案:

答案 0 :(得分:3)

这是由于这个错误:https://tickets.puppetlabs.com/browse/PUP-3655

问题是,要使pluginsync正常工作,环境中必须至少有一个模块,其中facts.d目录直接位于模块的顶层。

我的工作是在我们的一个主要内部模块的顶层创建一个可执行facts.d/README文件,其中包含以下内容:

#!/bin/bash
# This directory is where external fact scripts would go, if we had any.  This
# directory exists only because with directory environments puppet will
# complain if there isn't a single module in an environment that doesn't have a
# facts.d directory.
echo "bug=https://tickets.puppetlabs.com/browse/PUP-3655"
exit 0

答案 1 :(得分:1)

昨天发布了Facter 2.0.1。那是你的问题。降级到1.7.x,你应该没事。

答案 2 :(得分:1)

你在这里遇到的问题来自于更新,以及你在版本3.X上使用puppet私有事实的方式2.X.当你想要分发外部事实时(这是我的情况)。

正如在facter 2.2文档中所述,您需要将facter文件夹重新定位到模块树中:

  

分发外部事实的最佳方法是使用pluginsync   在Puppet 3.4 / Facter 2.0.1中添加了对它们的支持。添加外部   你的木偶模块的事实,只需将它们放入   ModulePath进行/ MODULE / facts.d /.

因此,在旧版本中,外部事实的路径是:

  

ModulePath进行/ MODULE / LIB / facter / external_fact.rb

如果您将其更改为:

  

ModulePath进行/ MODULE / facts.d / external_fact.rb

然后你不会再遇到这个问题了。

此致

- rustx

答案 3 :(得分:0)

今天抓到同样的错误,重新配置我的木偶大师:

Info: Retrieving pluginfacts
Error: /File[/var/lib/puppet/facts.d]: Could not evaluate: Could not retrieve information from environment production source(s) puppet://puppet/pluginfacts
Info: Retrieving plugin
Error: /File[/var/lib/puppet/lib]: Could not evaluate: Could not retrieve information from environment production source(s) puppet://puppet/plugins
Info: Caching catalog for puppet
Info: Applying configuration version '1405577010'

以下是我的版本:

grundic@puppet:~$ puppet --version
3.6.2
grundic@puppet:~$ facter --version
2.1.0

重启守护进程帮助了我(我在乘客身后使用木偶大师):

grundic@puppet:~$ sudo service apache2 restart 
 * Restarting web server apache2
 ... waiting    ...done.
grundic@puppet:~$ sudo puppet agent --test --verbose
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for puppet
Info: Applying configuration version '1405607835'
Notice: Dummy message for debugging
Notice: /Stage[main]/Main/Notify[Dummy message for debugging]/message: defined 'message' as 'Dummy message for debugging'
Notice: Finished catalog run in 0.06 seconds

答案 4 :(得分:0)

我有同样的犯罪者在centos 6.5上运行傀儡3.6.2。 将puppet,puppet-server,facter和hiera降级到之前的版本(3.6.1,2.0.2,1.3.3)&#39;问题..

答案 5 :(得分:0)

正如Grundic所说,重启大师。

然后将证书清理到主服务器上的puppet代理并删除代理上的证书。然后重新运行puppet agent -t和puppet cert sign --all。一切都会消失。这对我有用。

答案 6 :(得分:0)

for path in `ls */lib/facter | grep :$ | sed "s,:,,"`; 
   do MODULE=`echo $path | sed "s,/lib/facter,,"`; 
   cd $MODULE && ln  -s lib/facter facts.d && cd .. ;
done

这些部分特别重要

`ls */lib/facter | grep :$ | sed "s,:,,"`

`echo $path | sed "s,/lib/facter,,"`

此代码段应该从/ etc / puppet / modules以及/ etc / puppet / environments中每个环境的模块/路径运行。