Создание поставщика пакетов марионеток - "Служба команд не определена для поставщика"
Я пытаюсь создать поставщика услуг для супервизора. Я не являюсь программистом на 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). Новые типы и поставщики могут быть проще.