Марионетка, оценивающая пользовательскую функцию в модуле с версией Ruby, отличной от настроенной версии

Я использую сторонний модуль, который использует функцию Ruby, которая не была представлена до версии 2.1. Версия ruby ​​в моей среде выполнения - 2.1.9:

Debug: Facter: fact "ruby" has resolved to {
  platform => "x86_64-linux",
  sitedir => "/opt/puppetlabs/puppet/lib/ruby/site_ruby/2.1.0",
  version => "2.1.9"
}.

, так что теоретически со мной все будет в порядке. Однако, когда я запускаю марионеточный агент, я получаю

Error: Could not retrieve catalog from remote server: Error 500 on SERVER: Server Error: Evaluation Error: Error while evaluating a Function Call, undefined method `to_h' for #<Array:0xc8fd201>

Array # to_h , доступный в Ruby 2.1.9, поэтому эта ошибка означает, что пользовательская функция в модуле оценивается с версией Ruby до 2.1, хотя я могу Я не нашел другой версии Ruby, которую она могла бы использовать. Я полностью очистил среду от всего до версии 2.4, в результате чего осталась только встроенная в Puppet версия 2.1.9.

Что здесь происходит?

3
задан 10 November 2017 в 21:07
1 ответ

Что происходит, так это то, что, хотя ваш агент марионетки имеет правильную рубиновую версию, как вы обнаружили, фактическая компиляция каталога происходит в главной службе марионеток.

Вот ваш виновник в Это дело; мастер не использует обычный рубин, он использует JRuby. Даже в самых последних версиях puppetserver на момент написания этой статьи (5.1.4) значение JRuby по умолчанию, используемое puppetserver, равно 1.7. Чтобы переключиться на JRuby 9k и получить ожидаемые функции (имейте в виду, что они называют это «несколько экспериментальным»), убедитесь, что ваш мастер марионеток работает под управлением версии 5.0 или новее, затем измените переменную среды, как описано в документы для новой версии JRuby.

2
ответ дан 3 December 2019 в 06:56

Теги

Похожие вопросы