Создание поставщика пакетов марионеток — для поставщика не определена служба команд

Я пытаюсь создать поставщика услуг для supervisord. Я не программист Ruby и никогда раньше не создавал ничего из этого, и документация либо ужасна, либо ее трудно найти, либо она не относится к тому типу провайдера, который я пытаюсь создать.

Источник для этого провайдера находится здесь:

/lib/puppet/provider/service/supervisor/supervisor.rb

Когда я запускаю кукольный агент, я получаю эту ошибку в службе logstash, которую я назвал «супервизор» в качестве поставщика для:

err: /Service[logstash]/ensure: change from false to running failed: No command service defined for provider 

Итак, что я делаю неправильно? Кроме того, если вы найдете что-то еще необычное в этом провайдере, дайте мне знать!

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


person Gritty Kitty    schedule 13.12.2012    source источник


Ответы (1)


Проблема заключается в ссылках на command(:service), например.

def startcmd
  [command(:service), "start", @resource[:name]]
end

Это ищет предопределенную команду в провайдере под названием «сервис», отсюда и ошибка. У вас есть две определенные команды:

commands :supervisord => "/usr/bin/supervisord",
         :supervisorctl => "/usr/bin/supervisorctl"

Таким образом, ваши ссылки в restartcmd, startcmd и stopcmd должны измениться на command(:supervisorctl) — при условии, что это команда, которая позволит вам запускать/останавливать.

Строка commands вверху заставит Puppet использовать поставщика только в том случае, если все они доступны на хосте. Затем вызов command(:name) получает полный путь к ним, и вы возвращаете полную команду и аргументы для запуска поставщика услуг base, когда он запускает/останавливает/перезапускает службу.

Документация не содержит подробностей о вспомогательных методах, таких как commands, с которыми вы здесь сталкиваетесь. Я бы посоветовал прочитать как пользовательские типы, так и страницы поставщиков, а также Расширение слайдов Puppet. В конце 2012 года должна выйти книга двух сотрудников Puppet Labs: Типы марионеток и поставщики.

Вы также сталкиваетесь с тем, что ваш провайдер расширяет поставщика услуг base, что правильно, но он ожидает, что производные будут работать определенным образом (например, методы * cmd). Новые типы и поставщики могут быть проще.

person Dominic Cleal    schedule 13.12.2012
comment
Я почти полностью уверен, что причина именно в этом. Я даже не заметил, что он все еще был там. Я использовал другого провайдера в качестве основы, поэтому я, должно быть, случайно оставил эту часть. Спасибо! Похоже, тогда я должен изменить его на command(:supervisorctl). - person Gritty Kitty; 13.12.2012