我正在使用一个第三方模块,它使用了直到版本2.1才引入的Ruby特性。 我的运行时环境中的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上可用,所以这个错误意味着模块中的自定义函数正在使用2.1之前版本的Ruby进行评估,尽pipe我找不到其它可能使用的Ruby版本。 在2.4版之前,我已经彻底清除了任何东西的环境,只剩下Puppet内置的2.1.9版本。
这里发生了什么?
发生什么事情是,当你的木偶经纪人有你find的正确的ruby版本,实际编目的目录发生在木偶主服务。
这是你的罪魁祸首。 主人不使用普通的ruby,它使用JRuby。 即使在本文写作的最新的puppetserver版本(5.1.4)中,puppetserver使用的默认JRuby也是1.7。 要切换到JRuby 9k并获得您期望的function(请注意,他们称之为“有点实验性”),请确保您的木偶大师运行5.0或更新,然后更改环境variables,如文档更新的JRuby版本。