Шеф-повар: ресурсы против рецепта

#chef-infra #chef-recipe

#шеф-повар-инфра #шеф-повар-рецепт

Вопрос:

В чем разница между рецептом и ресурсом?

Как вызвать ресурс в рецепте? Я вижу, как включить рецепт, но не понимаю, как рецепт использует ресурсы.

Ответ №1:

Иван на 100% прав в том, что рецепты — это набор ресурсов (и произвольный код ruby), поэтому вот еще немного о том, как работают ресурсы и как их использовать.

ИСПОЛЬЗОВАНИЕ РЕСУРСА

  1. Обратитесь к содержащей их кулинарной книге в метаданных.rb

depends 'hostsfile', '2.4.5'

Это сделает все ресурсы из этой кулинарной книги доступными в ваших рецептах

  1. Вызывайте ресурс по его имени через интервал.

Это создано шеф-поваром на основе названия кулинарной книги и ресурса. Существует несколько правил, которым следует соглашение об именовании, которые могут сбить вас с толку, если вы не будете следовать лучшим практикам snake-case.

  • Все ресурсы и поваренная книга будут в нижнем регистре
  • Все дефисы станут символами подчеркивания ( ‘-‘ >>> ‘_’ )
  • Имя по умолчанию — cookbook_resource

таким образом, кулинарная книга COOLEST-COOKBOOK с ресурсом rAd_ReSoUrCe стала бы coolest_cookbook_rad_resource 'resource name'

ТИПЫ РЕСУРСОВ

Существует три наиболее часто используемых типа ресурсов. В порядке от наименее используемых к наиболее используемым они:

  1. Поставщик ресурсов-тяжеловес (HWRP)
  2. Облегченный поставщик ресурсов (LWRP)
  3. Пользовательский ресурс

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. Чтобы ответить на ваш вопрос о том, как использовать ресурс, вы должны выполнить следующее: