Spec-Zone.ru › Chef 16

metadata.rb

[править на GitHub]

Каждый кулинарный рецепт (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 и повторите попытку.

Примечание

Файл metadata.json можно редактировать напрямую, если необходимы временные изменения. Любое последующее обновление или действие, генерирующее метаданные, приведет к перезаписи существующего файла metadata.json сгенерированными метаданными. Поэтому все постоянные изменения в метаданных кулинарного рецепта должны выполняться в файле metadata.rb и затем повторно загружаться на сервер Chef Infra.

Ограничения версий

Многие поля в метаданных кулинарного рецепта позволяют пользователю ограничивать версии. Существует набор операторов, общих для всех полей:

Спецификация Оператор
Пессимистическое (см. примечание ниже) ~>
Равно =
Больше или равно >=
Больше >
Меньше <
Меньше или равно <=

Примечание

Пессимистический механизм блокировки поддерживается правильным семантическим обозначением версий кулинарных рецептов. Если мы используем версию 2.2.3 кулинарного рецепта, мы знаем, что API будет стабильным до выпуска версии 3.0.0. Используя традиционные операторы, мы бы записали это как >= 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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API