Назад | Перейти на главную страницу

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

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

ошибка: не удалось получить каталог с удаленного сервера: ошибка 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