Fantoche avaliando uma função personalizada em um módulo com uma versão diferente do Ruby da versão configurada

3

Estou usando um módulo de terceiros que usa um recurso do Ruby que não foi apresentado até a versão 2.1. A versão em ruby no meu ambiente de tempo de execução é 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"
}.

então, em teoria, eu deveria estar bem. No entanto, quando eu corro o agente fantoche eu recebo

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 está disponível no Ruby 2.1.9, então este erro implica que a função customizada no módulo está sendo avaliada com uma versão do Ruby anterior ao 2.1, embora eu não consiga encontrar qualquer outra versão do Ruby que possa estar usando . Esfreguei completamente o ambiente de qualquer coisa antes da versão 2.4, que deixa apenas a versão 2.1.9 do Puppet.

O que está acontecendo aqui?

    
por Chris Wilson 10.11.2017 / 20:07

1 resposta

3

O que está acontecendo é que, enquanto o seu agente de marionetes tem a versão rubi correta como você encontrou, a compilação real do catálogo acontece no serviço principal de marionetes.

Existe o seu culpado neste caso; o mestre não usa o ruby normal, ele usa o JRuby. Mesmo nas versões mais recentes absolutas do puppetserver, até o momento da redação (5.1.4), o JRuby padrão em uso pelo puppetserver é 1.7. Para mudar para o JRuby 9k e obter as funções que você espera (lembre-se de que eles o chamam de "algo experimental"), certifique-se de que seu mestre de marionetes esteja rodando 5.0 ou mais novo, então altere a variável de ambiente conforme descrito nos documentos para a versão mais recente do JRuby.

    
por 10.11.2017 / 21:13

Tags