metadata.rb
Каждый кулинарный рецепт (cookbook) требует небольшого набора метаданных. Файл с именем metadata.rb расположен в верхней части каждой директории кулинарного рецепта. Содержимое файла metadata.rb предоставляет информацию, которая помогает Chef Infra Client и Server правильно развернуть кулинарные рецепты на каждом узле.
Файл metadata.rb:
- Расположен на верхнем уровне структуры каталога кулинарного рецепта.
- Компилируется всякий раз, когда кулинарный рецепт загружается на сервер Chef Infra или когда выполняется подкоманда
knife cookbook metadata, а затем сохраняется как данные JSON. - Автоматически создается командой knife при выполнении подкоманды
knife cookbook create. - Редактируется с помощью текстового редактора, а затем повторно загружается на сервер Chef Infra в рамках загрузки кулинарного рецепта.
Сообщения об ошибках
Сервер Chef Infra будет пытаться распространить только те кулинарные рецепты, которые необходимы для настройки отдельного узла. Это определяется путем идентификации ролей и рецептов, назначенных непосредственно этому узлу, а затем расширения списка зависимостей и доставки всего этого набора узлу. В некоторых случаях, если зависимость не указана в метаданных кулинарного рецепта, сервер Chef Infra может не рассматривать эту зависимость как требование, что приведет к сообщению об ошибке. Если сервер Chef Infra возвращает сообщение об ошибке при распространении кулинарного рецепта, проверьте записи depends в файле metadata.rb и повторите попытку.
Примечание
Ограничения версий
Многие поля в метаданных кулинарного рецепта позволяют пользователю ограничивать версии. Существует набор операторов, общих для всех полей:
| Спецификация | Оператор |
|---|---|
| Пессимистическое (см. примечание ниже) | ~> |
| Равно | = |
| Больше или равно | >= |
| Больше | > |
| Меньше | < |
| Меньше или равно | <= |
Примечание
>= 2.2.0, < 3.0. Вместо этого мы можем записать это, объединив тильду «~» и знак больше «>» — часто называемый тильдой-ракетой или «виньетой-ваккой» — за которой следуют основные и второстепенные номера версий. Например: ~> 2.2
Настройки
В этом файле конфигурации есть следующие настройки:
chef_version-
Диапазон версий Chef Client, поддерживаемых данным кулинарным рецептом. Все операторы ограничений версий применимы к этому полю.
Например, для соответствия любой версии 14.x Chef Client, но не 13.x или 15.x:
chef_version '~> 14.0'Более сложный пример, где вы устанавливаете как нижнюю, так и верхнюю границу версии Chef Infra Client:
chef_version '>= 14.2.1', '< 14.5.1' depends-
Это поле требует, чтобы на сервере Chef Infra существовал кулинарный рецепт с совпадающим именем и версией. При совпадении сервер Chef Infra включает зависимость в набор кулинарных рецептов, отправленных узлу во время выполнения Chef Infra Client. Очень важно, чтобы поле
dependsсодержало точные данные. Если описание зависимости неверно, Chef Infra Client может не завершить настройку системы. Все операторы ограничений версий применимы к этому полю.Например, для указания зависимости от кулинарного рецепта с именем
cats:depends 'cats'или для указания зависимости от того же кулинарного рецепта, но только при версии меньше 1.0:
depends 'cats', '< 1.0' description-
Краткое описание кулинарного рецепта и его функциональности.
Например:
description 'A fancy cookbook that manages a herd of cats!' gem-
Указывает зависимость от gem для установки в Chef Infra Client через bundler. Установка gem происходит после синхронизации всех кулинарных рецептов, но перед загрузкой других кулинарных рецептов. Используйте этот атрибут один раз для каждой зависимости gem. Например:
gem 'loofah' gem 'chef-sugar'Предупреждение
Используйте настройкуgemтолько для доступа к внешним библиотекам chef, поставляемым в виде gem, в Chef Infra Client для библиотек и файлов атрибутов. Настройкаgemвmetadata.rbпозволяет осуществить раннюю установку этого типа gem, с фундаментальным ограничением — он не может устанавливать нативные gem. Не устанавливайте нативные gem с настройкойgemвmetadata.rb. Настройкаgemне является универсальной заменой для ресурса chef_gem, и не использует внутренне ресурсchef_gem. Для нативных gem требуется компиляция с C и их нельзя устанавливать сmetadata.rb, потому чтоmetadata.rbвыполняется до выполнения любого кода рецепта. Следовательно, Chef Infra Client не может установить компиляторы C перед установкой gem. Вместо этого установите нативные gem с помощью ресурсаchef_gem, вызываемого из кода рецепта. Вам также необходимо использовать ресурсbuild_essentialв коде рецепта для установки необходимых компиляторов на систему. Чистые ruby gem также могут быть установлены с помощью metadata.rb. issues_url-
URL для места хранения отслеживания проблем кулинарного рецепта. Эта настройка также используется Chef Supermarket. В Chef Supermarket это значение используется для определения места назначения ссылки «Просмотреть проблемы».
Например:
issues_url 'https://github.com/chef-cookbooks/chef-client/issues' license-
Тип лицензии, под которой распространяется кулинарный рецепт:
Apache v2.0,GPL v2,GPL v3,MIT, илиlicense 'Proprietary - All Rights Reserved(по умолчанию). Пожалуйста, учитывайте лицензии на файлы внутри кулинарного рецепта и следуйте описанным в них ограничениям.Например:
license 'Apache-2.0'или:
license 'GPL-3.0'или:
license 'MIT'или:
license 'Proprietary - All Rights Reserved' maintainer-
Имя лица или организации, ответственного за поддержку кулинарного рецепта.
Например:
maintainer 'Adam Jacob' maintainer_email-
Электронный адрес лица, ответственного за поддержку кулинарного рецепта. Здесь может быть указан только один адрес электронной почты, поэтому если необходимо перенаправить его нескольким людям, рассмотрите использование адреса электронной почты, уже настроенного для переадресации почты.
Например:
maintainer_email 'adam@example.com' name-
Обязательное поле. Название кулинарного рецепта.
Например:
name 'cats' ohai_version-
Диапазон версий Ohai, поддерживаемых этим кулинарным рецептом. Все операторы ограничений версий применимы к этому полю.
Например, для соответствия любой версии 8.x Ohai, но не 7.x или 9.x:
ohai_version '~> 8'Примечание
Эта настройка не отображается в Chef Supermarket. privacy-
Укажите кулинарный рецепт как закрытый.
Например:
privacy true source_url-
URL расположения исходного кода кулинарного рецепта. Эта настройка также используется Chef Supermarket. В Chef Supermarket это значение используется для определения места назначения ссылки «Просмотреть исходный код».
Например:
source_url 'https://github.com/chef-cookbooks/chef-client' supports-
Показывает, что кулинарный рецепт поддерживает определённую платформу. Используйте ограничения версий для определения зависимостей от версий платформы:
<(меньше),<=(меньше или равно),=(равно),>=(больше или равно),~>(приблизительно больше), или>(больше). Для указания нескольких платформ используйте несколько полейsupports, по одному для каждой платформы.Например, для поддержки всех версий Ubuntu:
supports 'ubuntu'или для поддержки версий Ubuntu, больших или равных 16.04:
supports 'ubuntu', '>= 16.04'или для поддержки только Ubuntu 18.04:
supports 'ubuntu', '= 18.04'Вот список всех поддерживаемых операционных систем:
%w( aix amazon centos fedora freebsd debian oracle mac_os_x redhat suse opensuseleap ubuntu windows zlinux ).each do |os| supports os end version-
Текущая версия кулинарного рецепта. Номера версий всегда следуют простому трехзначному формату.
Например:
version '2.0.0'
© Chef Software, Inc.
Licensed under the Creative Commons Attribution 3.0 Unported License.
The Chef™ Mark and Chef Logo are either registered trademarks/service marks or trademarks/servicemarks of Chef, in the United States and other countries and are used with Chef Inc's permission.
We are not affiliated with, endorsed or sponsored by Chef Inc.
https://docs.chef.io/config_rb_metadata/