У меня достаточно маленькая (~ 10 хостов) установка марионетки, и недавно я начал получать предупреждающие сообщения при каждом запуске агента марионетки. Сообщение такое:
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%, что изменилось - это всего лишь тестовая среда, поэтому мы не так строги в отношении управления изменениями, как следовало бы. Возможно, был установлен новый пакет марионеток или добавлен дополнительный модуль - мы не знаем.
Проблема в том, что у меня нет информации о том, что может быть причиной этого. Гребу через мой /etc/puppet/modules
В папке есть несколько модулей, использующих rubygems.
Что вызывает это предупреждение и как его исправить?
Это по дизайну начиная с Puppet 3.0.1.
Если упаковщик загружен, например bundler exec puppet, то не загружайте rubygems, поскольку у Bundler есть собственная логика для управления гемами в текущей среде приложения. И набор драгоценных камней, версий и т. Д. Часто отличается от тех, которые вы могли установить, например, через rvm.
Если сборщик не загружен, вернитесь к старому поведению, которое должно гарантировать загрузку rubygems перед вызовом любого кода марионетки. В идеале это должно быть сделано в сценарии bin / puppet, однако он не работает для настроек стойки, поэтому мы переместили загрузку rubygems в код командной строки, который фактически является точкой входа в марионеточное приложение.
Несколько функций, например топать, называли Puppet.features.rubygems? только из-за побочного эффекта загрузки rubygems до оценки драгоценных камней вызывающей функции. В этом больше нет необходимости, поскольку мы обеспечиваем работоспособность системы загрузки драгоценных камней на ранней стадии.
Пользовательские функции могут вызывать Puppet.features.rubygems ?, поэтому мы добавили предупреждение об устаревании и сохранили старое поведение (явное требование rubygems). Может потребоваться изменить настраиваемые функции, чтобы марионетка правильно работала в среде сборщика.
Если вы обновили Puppetmaster до версии 3.0.1, вам также следует обновить все свои марионеточные агенты. Или наоборот.
если какой-либо провайдер или что-то еще, что вы используете, вызывает Puppet.features.rubygems? затем отображается это предупреждение. Раньше марионетка использовалась для загрузки рубиновых драгоценных камней в библиотеки, что было неправильным способом, и предполагалось, что это будет устаревшим. Но для обеспечения обратной совместимости они по-прежнему поддерживают этот вызов и показывают предупреждение, указывающее, что это неправильный путь.