#chef-infra #chef-recipe
#шеф-повар-инфра #шеф-повар-рецепт
Вопрос:
В чем разница между рецептом и ресурсом?
Как вызвать ресурс в рецепте? Я вижу, как включить рецепт, но не понимаю, как рецепт использует ресурсы.
Ответ №1:
Иван на 100% прав в том, что рецепты — это набор ресурсов (и произвольный код ruby), поэтому вот еще немного о том, как работают ресурсы и как их использовать.
ИСПОЛЬЗОВАНИЕ РЕСУРСА
- Обратитесь к содержащей их кулинарной книге в метаданных.rb
depends 'hostsfile', '2.4.5'
Это сделает все ресурсы из этой кулинарной книги доступными в ваших рецептах
- Вызывайте ресурс по его имени через интервал.
Это создано шеф-поваром на основе названия кулинарной книги и ресурса. Существует несколько правил, которым следует соглашение об именовании, которые могут сбить вас с толку, если вы не будете следовать лучшим практикам snake-case.
- Все ресурсы и поваренная книга будут в нижнем регистре
- Все дефисы станут символами подчеркивания ( ‘-‘ >>> ‘_’ )
- Имя по умолчанию — cookbook_resource
таким образом, кулинарная книга COOLEST-COOKBOOK
с ресурсом rAd_ReSoUrCe
стала бы coolest_cookbook_rad_resource 'resource name'
ТИПЫ РЕСУРСОВ
Существует три наиболее часто используемых типа ресурсов. В порядке от наименее используемых к наиболее используемым они:
- Поставщик ресурсов-тяжеловес (HWRP)
- Облегченный поставщик ресурсов (LWRP)
- Пользовательский ресурс
HWRP позволяют значительно контролировать интервал между именами, но требуют сравнительно большой работы.
LWRP являются отличной заменой HWRP, но с ними все еще связан код плиты котла. Они также требуют, чтобы вы поддерживали два отдельных файла, поставщика и ресурса. Ресурс объявляет атрибуты, связанные с LWRP, а Поставщик предоставляет логику для того, что делает ресурс при его вызове.
Пользовательские ресурсы позволяют поддерживать единый файл, который обладает как свойствами (аналогами атрибутов), так и логикой. Это также устраняет практически весь код плиты котла, связанный с LWRP. Вы должны быть на chef-клиенте 12.4 , чтобы использовать пользовательские ресурсы.
ПОНИМАНИЕ РЕСУРСА
Единственный способ по-настоящему понять, что делает ресурс, — это посмотреть на его исходный код, поскольку ввод-вывод ресурсов на самом деле представляет собой черный ящик. Отличный ресурс для понимания того, что могут делать пользовательские ресурсы, этоhttps://docs.chef.io/custom_resources.html, и вы можете довольно легко найти объяснения HWRP и LWRP через поисковые системы.
Комментарии:
1. если у меня есть кулинарная книга с рецептом и ресурсом. Как мне вызвать этот ресурс из моего рецепта. И рецепт, и ресурс находятся в одной кулинарной книге. Нужно ли мне по-прежнему использовать cookbookname_resourcename? Нужно ли также включать название кулинарной книги в metadata.rb?
2. Честно говоря, похоже, на это вы могли бы ответить сами примерно через 5 минут экспериментов. Вам не нужно будет включать кулинарную книгу в свои метаданные, если вы ссылаетесь на ресурс, определенный сам по себе, ссылки metadata.rb — это способ собрать все необходимые вам кулинарные книги. Что касается соглашения об именовании, да, вам все равно нужно будет использовать формат <имя_книги>_<имя_ресурса>, чтобы ссылаться на него. Часть поваренной книги функционирует аналогично разделению имен в том смысле, что теоретически предотвращает коллизии, но на самом деле это не пространство имен, так как вы можете его отключить.
Ответ №2:
Рецепт шеф-повара — это просто последовательность ресурсов (плюс иногда другие вещи, такие как определения переменных), действия которых выполняются в порядке определения.
В основном это набор ресурсов, определенных с использованием шаблонов (имена ресурсов, пары атрибут-значение и действия) (c) docs
Вот пример ресурса, создающего файл с указанным содержимым. В документе «ресурсы шеф-повара» есть примеры того, что с ними можно сделать.
file '/var/www/public_html/index.php' do
content '<html>This is a placeholder for the home page.</html>'
mode '0755'
owner 'admin'
group 'admin'
action :create
end
Комментарии:
1. Чтобы ответить на ваш вопрос о том, как использовать ресурс, вы должны выполнить следующее: