Ресурс chef_gem
Эта страница сгенерирована из исходного кода клиента Chef Infra. Чтобы предложить изменение, отредактируйте файл chef_gem.rb и отправьте запрос на вытягивание в репозиторий Chef Infra Client.
Используйте ресурс chef_gem для установки gem только для экземпляра Ruby, предназначенного для chef-клиента. Когда gem устанавливается из локального файла, его необходимо добавить на узел с помощью ресурсов remote_file или cookbook_file.
Ресурс chef_gem работает со всеми теми же свойствами и параметрами, что и ресурс gem_package, но не принимает свойство gem_binary, потому что всегда использует CurrentGemEnvironment, на котором выполняется chef-client. Кроме выполнения действий, аналогичных ресурсу gem_package, ресурс chef_gem выполняет следующее:
- Выполняет свои действия немедленно, до сходимости, что позволяет использовать gem в рецепте сразу после установки.
- Выполняет
Gem.clear_pathsпосле действия, гарантируя, что gem знает о изменениях, чтобы его можно было потребовать сразу после установки.
Предупреждение
Ресурсы chef_gem и gem_package оба используются для установки gem Ruby. На любой машине, на которой установлен Chef Infra Client, есть два экземпляра Ruby. Один — это стандартный системный экземпляр Ruby, а другой — выделенный экземпляр, доступный только для Chef Infra Client. Используйте ресурс chef_gem для установки gem в экземпляр Ruby, выделенный для Chef Infra Client. Используйте ресурс gem_package для установки всех остальных gem (т.е. установка gem на уровне всей системы).
Синтаксис
Полный синтаксис всех свойств, доступных для ресурса chef_gem:
chef_gem 'name' do
clear_sources true, false
gem_binary String
include_default_source true, false
options String, Hash, Array
package_name String
source String, Array
timeout String, Integer
version String
action Symbol # defaults to :install if not specified
endгде:
-
chef_gem— это ресурс. -
name— имя, данное блоку ресурса. -
actionопределяет действия, которые Chef Infra Client предпримет, чтобы привести узел в нужное состояние. -
clear_sources,gem_binary,include_default_source,options,package_name,source,timeout, иversion— свойства, доступные для данного ресурса.
Действия
Ресурс chef_gem имеет следующие действия:
:install- По умолчанию. Устанавливает gem. Если указана версия, устанавливает указанную версию gem.
:nothing- Этот блок ресурса не действует, пока не получит уведомление от другого ресурса о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо ставится в очередь для выполнения в конце выполнения Chef Infra Client.
:purge- Удаляет gem. Это действие обычно удаляет файлы конфигурации, а также сам gem.
:reconfig- Переконфигурирует gem. Это действие требует файла ответов.
:remove- Удаляет gem.
:upgrade- Устанавливает gem и/или гарантирует, что gem является последней версией.
Свойства
Ресурс chef_gem имеет следующие свойства:
-
clear_sources - Тип Ruby: true, false | Значение по умолчанию:
false unless `clear_gem_sources` set to true in the `client.rb` config.Установите в
true, чтобы загрузить gem из пути, указанного свойствомsource(а не из RubyGems).
-
gem_binary - Тип Ruby: Строка | Значение по умолчанию:
The `gem` binary included with Chef Infra Client.Путь к бинарному файлу gem, используемому для установки. По умолчанию используется та же версия Ruby, что и у Chef Infra Client.
-
include_default_source - Тип Ruby: true, false
Установите в
false, чтобы не включатьChef::Config[:rubygems_url]в источники.Новое в Chef Client 13.0
-
options - Тип Ruby: Строка, Хэш, Массив
Параметры для установки gem, либо в виде Хэша, либо в виде Строки. Если передается хэш, параметры передаются в
Gem::DependencyInstaller.new, и gem будет установлен через API gems. Если передается строка, gem будет установлен с помощью вызова команды gem. Использование хэша параметров с явным gem_binary приведет к неопределенному поведению.
-
package_name - Тип Ruby: Строка
Необязательное свойство для установки имени пакета, если оно отличается от имени блока ресурса.
-
source - Тип Ruby: Строка, Массив
Необязательно. URL или список URL, по которым находится пакет gem. Этот список добавляется к источнику, настроенному в
Chef::Config[:rubygems_url](см. также include_default_source) для построения полного списка источников rubygems. Пользователи в «отключенном» окружении должны установить Chef::Config[:rubygems_url] в свой локальный зеркало RubyGems.
-
timeout - Тип Ruby: Строка, Целое число
Время ожидания в секундах перед истечением таймаута.
-
version - Тип Ruby: Строка
Версия пакета, который необходимо установить или обновить.
Общие функции ресурсов
Ресурсы Chef включают общие свойства, уведомления и защитные механизмы ресурсов.
Общие свойства
Следующие свойства являются общими для всех ресурсов:
compile_time-
Тип Ruby: true, false | Значение по умолчанию:
falseУправляет фазой, в которой ресурс выполняется на узле. Установите в true, чтобы запустить во время построения коллекции ресурсов (
compile phase). Установите в false, чтобы запустить во время конфигурации узла Chef Infra Client (converge phase). ignore_failure-
Тип Ruby: true, false, :quiet | Значение по умолчанию:
falseПродолжать выполнение рецепта, если ресурс завершится неудачно по какой-либо причине.
:quietне будет отображать полный стек вызовов, и рецепт продолжит работу, если ресурс завершится неудачно. retries-
Тип Ruby: Целое число | Значение по умолчанию:
0Количество попыток перехватить исключения и повторить ресурс.
retry_delay-
Тип Ruby: Целое число | Значение по умолчанию:
2Задержка в секундах между попытками повтора.
sensitive-
Тип Ruby: true, false | Значение по умолчанию:
falseУбедиться, что конфиденциальные данные ресурса не регистрируются Chef Infra Client.
Уведомления
-
notifies -
Тип Ruby: Символ, 'Chef::Resource[Строка]'
Ресурс может уведомлять другой ресурс о выполнении действия при изменении его состояния. Укажите
'resource[name]', действие, которое должен выполнить:action, а затем:timerдля этого действия. Ресурс может уведомлять несколько ресурсов; используйте выражениеnotifiesдля каждого уведомляемого ресурса.Если указанный ресурс не существует, генерируется ошибка. В отличие от этого,
subscribesне завершится ошибкой, если исходный ресурс не найден.
Таймер определяет момент во время выполнения Chef Infra Client, в который выполняется уведомление. Доступны следующие таймеры:
:before-
Указывает, что действие над уведомленным ресурсом должно быть выполнено до обработки блока ресурса, в котором находится уведомление.
:delayed-
По умолчанию. Указывает, что уведомление должно быть помещено в очередь и выполнено в конце выполнения Chef Infra Client.
-
:immediate,:immediately -
Указывает, что уведомление должно быть выполнено немедленно, для каждого уведомленного ресурса.
Синтаксис для notifies:
notifies :action, 'resource[name]', :timer
-
subscribes -
Тип Ruby: Символ, 'Chef::Resource[Строка]'
Ресурс может следить за другим ресурсом и выполнять действие, если состояние отслеживаемого ресурса изменяется. Укажите 'resource[name]', действие, которое должно быть выполнено, а затем :timer для этого действия.
Обратите внимание, что subscribes не применяет указанное действие к ресурсу, за которым он следит — например:
file '/etc/nginx/ssl/example.crt' do
mode '0600'
owner 'root'
end
service 'nginx' do
subscribes :reload, 'file[/etc/nginx/ssl/example.crt]', :immediately
end
В этом случае свойство subscribes перезагружает службу nginx всякий раз, когда обновляется файл сертификата, расположенный по адресу /etc/nginx/ssl/example.crt. subscribes не вносит никаких изменений в сам файл сертификата, он просто отслеживает изменения в файле и выполняет действие :reload для своего ресурса (в этом примере nginx) при обнаружении изменения.
Если другой ресурс не существует, подписка не генерирует ошибку. В отличие от этого, более строгие семантика notifies приведет к ошибке, если другой ресурс не существует.
Таймер определяет момент во время выполнения Chef Infra Client, в который выполняется уведомление. Доступны следующие таймеры:
:before-
Указывает, что действие над уведомленным ресурсом должно быть выполнено до обработки блока ресурса, в котором находится уведомление.
:delayed-
По умолчанию. Указывает, что уведомление должно быть помещено в очередь и выполнено в конце выполнения Chef Infra Client.
-
:immediate,:immediately -
Указывает, что уведомление должно быть выполнено немедленно, для каждого уведомленного ресурса.
Синтаксис для subscribes:
subscribes :action, 'resource[name]', :timer
Защитные механизмы
Свойство-сторож может использоваться для оценки состояния узла во время выполнения Chef Infra Client. Основываясь на результатах этой оценки, свойство-сторож используется для указания Chef Infra Client, продолжать ли выполнение ресурса. Свойство-сторож принимает либо строковое значение, либо значение Ruby-блока:
- Строка выполняется как командная оболочка. Если команда возвращает
0, сторож применяется. Если команда возвращает любое другое значение, то свойство-сторож не применяется. Строковые сторожа в powershell_script выполняют команды Windows PowerShell и могут возвращатьtrueв дополнение к0. - Блок выполняется как код Ruby, который должен возвращать либо
trueилиfalse. Если блок возвращаетtrue, свойство-сторож применяется. Если блок возвращаетfalse, свойство-сторож не применяется.
Свойство-сторож полезно для обеспечения идемпотентности ресурса, позволяя этому ресурсу проверять желаемое состояние по мере выполнения, а затем, если желаемое состояние присутствует, Chef Infra Client ничего не делает.
СвойстваСледующие свойства могут быть использованы для определения сторожа, который оценивается во время выполнения Chef Infra Client:
not_if-
Запретить выполнение ресурса, когда условие возвращает
true. only_if-
Разрешить выполнение ресурса только если условие возвращает
true.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса chef_gem в рецептах:
Установка gem во время компиляции и слияния
Для установки gem во время конфигурации узла Chef Infra Client (фаза слияния), установите свойство compile_time в false:
chef_gem 'loofah' do
compile_time false
action :install
end
Для установки gem во время построения коллекции ресурсов (фаза компиляции), установите свойство compile_time в true:
chef_gem 'loofah' do
compile_time true
action :install
end
Установка gem MySQL в Chef Infra Client*
apt_update
build_essential 'install compilation tools' do
compile_time true
end
chef_gem 'mysql'
© 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/resources/chef_gem/