Библиотеки или определения шеф-повара?

Будучи относительно новым для шеф-повара, мне необходимо создавать библиотеки или определения из существующих рецептов.

В рецептах используется ресурс bash ресурс, ресурс блока ruby ​​(который уведомляет другой ресурс блока ruby ​​с задержкой синхронизации), ресурс шаблона снова, который уведомляет блок ruby ​​и т.д.

Какой был бы лучший подход к этому? Библиотека или определение?

Я прочитал, что если я использую определение, я не смогу уведомлять ресурс в определении, означает ли это, что я могу уведомить ресурс в другом файле определения?

Я также читал, что в библиотеках вы не можете напрямую использовать ресурсы. Если это так, как я могу использовать ресурс в моей библиотеке?

Ответы

Ответ 1

Итак, это "в основном мнение", но я все равно отвечу. Здесь есть 4 различных варианта:

  • Определение
  • LWRP
  • ПГВР
  • "Библиотека"

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

LWRP (Light-weight resource and provider) - это DSL, специфичный для шеф-повара, который фактически компилируется в HWRP (ресурс тяжелого веса и поставщик) во время выполнения. Как LWRP, так и HWRP являются расширениями шеф-повара. В дополнение к завершению серии повторяющихся задач * WRP создадут ресурс верхнего уровня в Chef (например, template или package), который будет доступен для вашего рецепта и других рецептов поваренной книги.

Разница между LWRP и HWRP - это действительно Ruby. HWRP используют полномасштабные классы Ruby. Если вы не разработчик Ruby, они могут быть немного запугивающими. Тем не менее, вы должны попробовать попробовать, прежде чем писать и LWRP. LWRP используют специальный DSL для Chef для создания ресурсов. В конце дня они скомпилируют (примерно) тот же код, что и тяжеловесный аналог. Я свяжу некоторые ссылки в конце. У вас есть доступ к ресурсам Chef внутри любой реализации, а также к run_context.

Наконец, "библиотеки" (обратите внимание на цитаты) часто неправильно понимаются и злоупотребляют. Это код Ruby, оцененный как Ruby, поэтому они могут делать что угодно. HWRPs фактически являются формой библиотеки. Иногда люди используют библиотеки как "помощники". Они создадут вспомогательный модуль с такими методами, как best_ip_for или aggregate_some_data, а затем "смешивают" (Rubyism) эту библиотеку с их рецептами или ресурсами для СУШКИ. В других случаях библиотеки могут использоваться для "взлома" самого шеф-повара. Хорошим примером этого является кулинарная книга partial-search. Facebook рассказал о том, как они ограничили количество атрибутов, отправленных обратно на сервер в прошлом году на ChefConf. Библиотеки действительно являются территорией undefined, потому что они являются ключами к королевству.

Итак, хотя я на самом деле не ответил на ваш вопрос (потому что он основан на мнениях), я надеюсь, что предоставил вам достаточно информации о том, как лучше двигаться вперед. Имейте в виду, что каждая инфраструктура представляет собой специальную снежинку, и нет ответа справа; существует только лучший ответ. Я бы предложил поделиться этой информацией с вашей командой и оценить преимущества и недостатки каждого подхода. Вы также можете попробовать список рассылки повара, по которому люди дадут вам много мнений.

Ресурсы