Я пытаюсь сделать свою функцию. Я все время получаю это сообщение.
ошибка: не удалось получить каталог с удаленного сервера: ошибка 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
слишком. Как я могу это исправить?
При изменении любого настраиваемого кода Ruby, например настраиваемой функции, необходимо перезапустить Puppetmaster. Если вы запускаете марионетку под пассажиром, это означает перезапуск Apache. В противном случае вы получите старую версию.
Кроме того, существует довольно неприятная ошибка, которая проявляется, если вы размещаете несколько сред в своем Puppetmaster с идентично названной функцией в другой среде. В этом случае у вас нет возможности быть уверенным, какая функция среды используется при вызове имени функции! Он использует одно и то же пространство имен функций во всех средах ... (это подтверждено в Puppet 2.7.22, не уверен насчет 3.x)
Как говорится в документации:
Мастер марионетки кэширует пользовательские функции. Если вы редактируете существующую функцию (например, во время ее разработки), вам необходимо перезапустить мастер марионеток, прежде чем можно будет использовать новую версию.
https://docs.puppetlabs.com/guides/custom_functions.html
Примечание о перезапуске мастера Puppet:
Если вы выполните следующую команду для перезапуска мастера Puppet:
$ service puppetmaster restart
Restarting puppet master
puppetmaster not configured to start, please edit /etc/default/puppetmaster to enable
.
Вы заметите, что служба останавливается, но не запускается.
В этом случае, как упомянул Стив Шипвей, вы, вероятно, используете мастер Puppet под Passenger, и вам нужно перезагрузить apache2, чтобы фактически перезапустить мастер Puppet:
$ service apache2 reload