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

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

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

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

Когда я запускаю агент puppet, я получаю эту ошибку в службе logstash, которую я назвал "supervisor" в качестве поставщика для:

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

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

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

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 что вы попадаете сюда. Я бы посоветовал прочесть как пользовательские типы, так и страницы провайдеров, а также слайды Ричарда Кроули " Расширяющаяся кукла" Также в конце 2012 года выйдет книга от двух сотрудников Puppet Labs: Puppet Types и Providers.

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

Другие вопросы по тегам