Função própria de fantoche

Função própria de fantoche

Estou tentando fazer minha própria função. Continuo recebendo esta mensagem.

err: Não foi possível recuperar o catálogo do servidor remoto: Erro 400 no SERVER: A função 'brent_k' não retorna um valor em /etc/puppet/modules/munin/manifests/init.pp:17 no nó XYZ.com

Aqui está meu código simples

xyz.com:/etc/puppet/modules/munin/lib/puppet/parser/functions# cat brent_k.rb
  module Puppet::Parser::Functions
    newfunction(:brent_k, :type => :rvalue) do |args|
      val = 'ok'
      val
    end
  end

E então no meu manifesto, eu tenho

$a = brent_k()

Eu tentei return valtambém. Como posso consertar isso?

Responder1

Ao alterar qualquer código Ruby personalizado, como uma função personalizada, você deve reiniciar o Puppetmaster. Se você estiver executando o puppet como passageiro, isso significa reiniciar o Apache. Caso contrário, você obterá a versão antiga.

Além disso, há um bug bastante desagradável que ocorre se você estiver hospedando vários ambientes em seu puppetmaster com uma função com nome idêntico no outro ambiente. Nesse caso, você não tem como ter certeza de qual função do ambiente será usada ao chamar o nome da função! Ele usa o mesmo namespace de função em todos os ambientes... (isso está confirmado para acontecer no Puppet 2.7.22, não tenho certeza sobre 3.x)

Responder2

Como diz a documentação:

O puppet master armazena em cache funções personalizadas. Se você editar uma função existente (por exemplo, enquanto a desenvolve), será necessário reiniciar o puppet master antes que a nova versão possa ser usada.

https://puppet.com/docs/puppet/latest/writing_custom_functions.html

Nota sobre como reiniciar o Puppet master:

Se você executar o seguinte comando para reiniciar o Puppet master:

$ service puppetmaster restart
Restarting puppet master
puppetmaster not configured to start, please edit /etc/default/puppetmaster to enable 
.

Você notará que o serviço para, mas não inicia.

Nesse caso, como Steve Shipway mencionou, você provavelmente está executando o Puppet master no Passenger e precisa recarregar o apache2 para realmente reiniciar o Puppet master:

$ service apache2 reload

informação relacionada