metadata.rb
Каждый кулинарный рецепт требует небольшого объёма метаданных. Содержимое файла metadata.rb предоставляет информацию, которая помогает Chef Infra Client и Server правильно развертывать кулинарные рецепты на каждом узле.
Файл metadata.rb:
- Расположен на верхнем уровне структуры каталогов кулинарного рецепта.
- Компилируется всякий раз, когда кулинарный рецепт загружается на сервер Chef Infra или когда запускается подкоманда
knife cookbook metadata, а затем хранится в формате JSON. - Создаётся автоматически командой knife при запуске подкоманды
knife cookbook create. - Редактируется с помощью текстового редактора, а затем повторно загружается на сервер Chef Infra в рамках загрузки кулинарного рецепта.
- Расположен на верхнем уровне структуры каталогов кулинарного рецепта.
- Компилируется всякий раз, когда кулинарный рецепт загружается на сервер Chef Infra или когда запускается подкоманда
knife cookbook metadata, а затем хранится в формате JSON. - Создаётся автоматически командой knife при запуске подкоманды
knife cookbook create. - Редактируется с помощью текстового редактора, а затем повторно загружается на сервер Chef Infra в рамках загрузки кулинарного рецепта.
Сообщения об ошибках
Сервер Chef Infra будет пытаться распространить только те кулинарные рецепты, которые необходимы для настройки отдельного узла. Это определяется путем идентификации ролей и рецептов, которые напрямую назначены этой системе, а затем расширения списка зависимостей и последующей передачи всего набора на узел. В некоторых случаях, если зависимость не указана в метаданных кулинарного рецепта, сервер Chef Infra может не рассматривать эту зависимость как требование, что приведёт к сообщению об ошибке. Если от сервера Chef Infra получено сообщение об ошибке относительно распространения кулинарного рецепта, проверьте записи depends в файле metadata.rb и повторите попытку.
Примечание
metadata.rb и затем повторно загружаться на сервер Chef Infra. Ограничения версий
Многие поля в метаданных кулинарного рецепта позволяют пользователю ограничивать версии. Существует набор операторов, общих для всех полей:
| Спецификация | Оператор |
|---|---|
| Пессимистическое (см. примечание ниже) | ~> |
| Равно | = |
| Больше или равно | >= |
| Больше | > |
| Меньше | < |
| Меньше или равно | <= |
Примечание
>= 2.2.0, < 3.0. Вместо этого мы можем записать это, объединив тильду «~» и знак больше «>» (часто называемый тильда-ракетой или «твидл-ваккой») и последующие номер главной и вспомогательной версии. Например: ~> 2.2 Настройки
В этом файле конфигурации есть следующие настройки:
chef_version-
Диапазон версий Chef Client, поддерживаемых этим кулинарным рецептом. Все операторы ограничений версий применимы к этому полю.
Например, чтобы соответствовать любой версии 16.x Chef Client, но не 15.x или 17.x:
chef_version '~> 16.0'Более сложный пример, где вы устанавливаете как нижнюю, так и верхнюю границу версии Chef Infra Client:
chef_version '>= 17.2', '< 17.4' 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 'Bob Bobberson' maintainer_email-
Адрес электронной почты лица, ответственного за поддержку кулинарного рецепта. Здесь может быть указан только один адрес электронной почты, поэтому, если требуется перенаправление на нескольких человек, рассмотрите возможность использования адреса электронной почты, который уже настроен для переадресации почты.
Например:
maintainer_email 'bob@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, большие или равные 20.04:
supports 'ubuntu', '>= 20.04'или, чтобы поддержать только Ubuntu 20.04:
supports 'ubuntu', '= 20.04'Вот список всех поддерживаемых конкретных операционных систем:
%w( aix amazon centos fedora freebsd debian oracle mac_os_x redhat suse opensuseleap ubuntu windowszlinux ).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/