Собственная функция марионетки

Собственная функция марионетки

Я пытаюсь сделать свою собственную функцию. Я постоянно получаю это сообщение.

err: Не удалось получить каталог с удаленного сервера: Ошибка 400 на СЕРВЕРЕ: Функция 'brent_k' не возвращает значение в /etc/puppet/modules/munin/manifests/init.pp:17 на узле XYZ.com

Вот мой простой код

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

И затем в моем манифесте есть

$a = brent_k()

Я тоже пробовал return val. Как это исправить?

решение1

При изменении любого пользовательского кода Ruby, например пользовательской функции, необходимо перезапустить Puppetmaster. Если вы используете puppet под Passenger, это означает перезапуск Apache. В противном случае вы получите старую версию.

Кроме того, есть довольно неприятная ошибка, которая появляется, если вы размещаете несколько сред в вашем puppetmaster с функцией с идентичным именем в другой среде. В этом случае вы не можете быть уверены, какая функция среды используется, когда вы вызываете имя функции! Она использует одно и то же пространство имен функций во всех средах... (подтверждено, что это происходит в Puppet 2.7.22, не уверен насчет 3.x)

решение2

Как говорится в документации:

Мастер кукол кэширует пользовательские функции. Если вы редактируете существующую функцию (например, во время ее разработки), вам нужно будет перезапустить мастер кукол, прежде чем можно будет использовать новую версию.

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

Примечание о перезапуске Puppet Master:

Если вы выполните следующую команду для перезапуска Puppet master:

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

Вы заметите, что служба останавливается, но не запускается.

В этом случае, как упомянул Стив Шипвэй, вы, вероятно, запускаете Puppet master под Passenger и вам нужно перезагрузить apache2, чтобы фактически перезапустить Puppet master:

$ service apache2 reload

Связанный контент