我有一个相当小的(约 10 个主机)puppet 安装,最近,我开始在每次运行 puppet 代理时收到警告消息。消息是:
Info: Loading facts in /etc/puppet/modules/stdlib/lib/facter/root_home.rb
Info: Loading facts in /etc/puppet/modules/stdlib/lib/facter/facter_dot_d.rb
Info: Loading facts in /etc/puppet/modules/stdlib/lib/facter/puppet_vardir.rb
Info: Loading facts in /etc/puppet/modules/firewall/lib/facter/iptables.rb
Info: Loading facts in /etc/puppet/modules/concat/lib/facter/concat_basedir.rb
Info: Loading facts in /var/lib/puppet/lib/facter/root_home.rb
Info: Loading facts in /var/lib/puppet/lib/facter/concat_basedir.rb
Info: Loading facts in /var/lib/puppet/lib/facter/facter_dot_d.rb
Info: Loading facts in /var/lib/puppet/lib/facter/iptables.rb
Info: Loading facts in /var/lib/puppet/lib/facter/puppet_vardir.rb
Debug: catalog supports formats: b64_zlib_yaml dot pson raw yaml; using pson
Warning: Puppet.features.rubygems? is deprecated. Require rubygems in your application's entry point if you need it.
(at /usr/lib/ruby/vendor_ruby/puppet/util/feature.rb:17:in `add')
Info: Caching catalog for hostname.example.com
我不能 100% 确定发生了什么变化 - 这只是一个测试环境,所以我们对变更管理的严格程度还不够。可能是安装了新的 puppet 包,或者添加了额外的模块 - 我们不知道。
问题是,我没有任何信息可以说明是什么原因导致了这种情况。通过 grepping/etc/puppet/modules
文件夹可以找到一堆使用 rubygems 的模块。
是什么导致了这个警告?我该如何修复它?
答案1
这是通过设计从 Puppet 3.0.1 开始。
如果已加载 bundler,例如 bundler exec puppet,则不要加载 rubygems,因为 bundler 有自己的逻辑来管理当前应用程序环境中的 gem。并且 gem 集、版本等通常与您可能已安装的 gem(例如通过 rvm)不同。
如果未加载 bundler,则恢复旧行为,即确保在调用任何 puppet 代码之前加载 rubygems。理想情况下,这应该在 bin/puppet 脚本中完成,但是,这不适用于 rack 设置,因此我们将 rubygems 加载移至命令行代码,这实际上是 puppet 应用程序入口点。
一些功能(例如 stomp)调用 Puppet.features.rubygems? 只是为了在评估调用功能的 gem 之前加载 rubygems 的副作用。现在我们确保 gem 加载系统在早期是合理的,这不再是必要的。
自定义功能可能会调用 Puppet.features.rubygems?,因此我们添加了弃用警告并保留了旧行为(明确要求 rubygems)。可能需要修改自定义功能以确保 puppet 在捆绑器环境中正常工作。
如果您已将 puppetmaster 更新至 3.0.1,则您也应该更新所有 puppet 代理。反之亦然。
答案2
如果您使用的任何提供程序或其他任何程序调用 Puppet.features.rubygems?,则将显示此警告。过去,puppet 曾经在库中加载 ruby gem,这不是正确的方法,应该被弃用。但为了保持向后兼容性,他们仍然保留了此调用并显示警告以表明这不是正确的方法。