2015-09-25 3 views
0

У меня есть функция, которую я пытаюсь запустить у своего кукловода на каждом запуске клиента. Она работает просто отлично на самом кукловод, но это приводит к тому, агент работает сбой на узлах из-за следующей ошибки:Неинициализированная константа на пользовательской функции марионеток

Error: Could not retrieve catalog from remote server: Error 400 on SERVER: uninitialized constant Puppet::Parser::Functions::<my_module> 

Я не совсем уверен, почему. Я включил ведение журнала отладки на master через config.ru, но я вижу ту же ошибку в журналах с более полезными сообщениями.

Какие еще шаги можно предпринять, чтобы отладить это?

Обновление: Добавление дополнительных деталей.

Кукольного сообщество, с Foreman связное Кукольник работает на Apache2 с пассажиром/Rack

Оба клиента и мастера работают кукольные 3.7.5

Оба клиента и мастера являются Ubuntu 14,04

Оба клиента и мастер использует Ruby, 1.9.3p484 (2013-11-22 ревизии 43786) [x86_64-Линукс]

Pluginsync включен

Пользовательская функция отлично работает на кукольном мастере, когда ее запускают как часть манифеста кукловода (это сам клиент) или марионетка применяется непосредственно на сервере.

Функция присутствует на клиентах, и когда я обновляюсь для отладки, я вижу, что файл отображается на стороне клиента.

Я не могу вставить функцию здесь, к сожалению, потому что это проприетарный код. Он полагается на aws-sdk, но я подтвердил, что этот рубиновый камень присутствует как на стороне клиента, так и на стороне мастера, с той же версией в обоих местах. Я даже попробовал объединить всю функцию с:

begin 
rescue LoadError 
end 

и иметь тот же результат.

+0

Проверьте, есть ли ваш пользовательский файл функций на клиентах или нет –

+1

странно. функции должны работать только на сервере. Пользовательские функции не запускаются на узлах агента. – ptierno

+0

тоже. попробуйте включить pluginsync https://docs.puppetlabs.com/references/latest/configuration.html#pluginsync – ptierno

ответ

1

Это ошеломляюще глупо, но оказывается, я как-то не замечал, что я на самом деле не включил эту строку в моей функции:

require 'aws-sdk' 

И поэтому ошибка я получал:

uninitialized constant Puppet::Parser::Functions::Aws 

Фактически речь идет о недостатке AWS SDK, а не о проблеме с самим кукольным модулем (который также был смутно назван aws), и именно так я его интерпретировал. В принципе, я ударил головой о стену несколько дней над мучительной глупой ошибкой. Извиняюсь всем, кто пытался мне помочь :)

Смежные вопросы