为什么 puppet 一直告诉我:“Puppet.features.rubygems?已被弃用。如果需要,请在应用程序的入口点中要求使用 ruby​​gems”?

为什么 puppet 一直告诉我:“Puppet.features.rubygems?已被弃用。如果需要,请在应用程序的入口点中要求使用 ruby​​gems”?

我有一个相当小的(约 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文件夹可以找到一堆使用 ruby​​gems 的模块。

是什么导致了这个警告?我该如何修复它?

答案1

这是通过设计从 Puppet 3.0.1 开始。

如果已加载 bundler,例如 bundler exec puppet,则不要加载 ruby​​gems,因为 bundler 有自己的逻辑来管理当前应用程序环境中的 gem。并且 gem 集、版本等通常与您可能已安装的 gem(例如通过 rvm)不同。

如果未加载 bundler,则恢复旧行为,即确保在调用任何 puppet 代码之前加载 ruby​​gems。理想情况下,这应该在 bin/puppet 脚本中完成,但是,这不适用于 rack 设置,因此我们将 ruby​​gems 加载移至命令行代码,这实际上是 puppet 应用程序入口点。

一些功能(例如 stomp)调用 Puppet.features.rubygems? 只是为了在评估调用功能的 gem 之前加载 ruby​​gems 的副作用。现在我们确保 gem 加载系统在早期是合理的,这不再是必要的。

自定义功能可能会调用 Puppet.features.rubygems?,因此我们添加了弃用警告并保留了旧行为(明确要求 ruby​​gems)。可能需要修改自定义功能以确保 puppet 在捆绑器环境中正常工作。

如果您已将 puppetmaster 更新至 3.0.1,则您也应该更新所有 puppet 代理。反之亦然。

答案2

如果您使用的任何提供程序或其他任何程序调用 Puppet.features.rubygems?,则将显示此警告。过去,puppet 曾经在库中加载 ruby​​ gem,这不是正确的方法,应该被弃用。但为了保持向后兼容性,他们仍然保留了此调用并显示警告以表明这不是正确的方法。

相关内容