Ресурс yum_package
Эта страница сгенерирована из исходного кода Chef. Чтобы предложить изменение, отредактируйте файл yum_package.rb и отправьте запрос на включение изменений в репозиторий Chef.
Страница справочника по ресурсам
Используйте ресурс yum_package для установки, обновления и удаления пакетов с помощью Yum для платформ Red Hat и CentOS. Ресурс yum_package может разрешать данные provides для пакетов так же, как это делает Yum при запуске из командной строки. Это позволяет использовать различные параметры для установки пакетов, такие как минимальные версии, виртуальные предоставления и имена библиотек.
Примечание
Поддержка использования имен файлов для установки пакетов (как в yum_package "/bin/sh") недоступна, поскольку объем данных, необходимых для их анализа, слишком велик.
Примечание
Во многих случаях лучше использовать ресурс package вместо этого. Это связано с тем, что при использовании ресурса package в рецепте, клиент Chef Infra будет использовать данные, собранные Ohai в начале запуска клиента Chef Infra, чтобы определить правильное приложение пакета. Использование ресурса package позволяет создавать рецепты, которые могут использоваться на многих платформах.
Синтаксис
Полный синтаксис для всех свойств, доступных ресурсу yum_package, следующий:
yum_package 'name' do
allow_downgrade true, false # default value: true
arch String, Array
flush_cache Hash # default value: {"before"=>false, "after"=>false}
options String, Array
package_name String, Array
source String
timeout String, Integer
version String, Array
yum_binary String
action Symbol # defaults to :install if not specified
endгде:
-
yum_package— это ресурс. -
name— это имя, данное блоку ресурса. -
actionопределяет, какие шаги предпримет клиент Chef Infra для приведения узла в желаемое состояние. -
allow_downgrade,arch,flush_cache,options,package_name,source,timeout,version, иyum_binary— это свойства, доступные для этого ресурса.
Действия
Ресурс yum_package имеет следующие действия:
:install- По умолчанию. Установить пакет. Если указана версия, установите указанную версию пакета.
:lock- Блокирует пакет yum до определенной версии.
:nothing- Этот блок ресурса не выполняет никаких действий, пока не получит уведомление от другого ресурса о необходимости выполнить действие. После получения уведомления этот блок ресурса либо запускается немедленно, либо помещается в очередь для запуска в конце запуска клиента Chef Infra.
:purge- Очистить пакет. Это действие обычно удаляет файлы конфигурации, а также сам пакет.
:remove- Удалить пакет.
:unlock- Разблокирует пакет yum, чтобы его можно было обновить до более новой версии.
:upgrade- Установить пакет и/или убедиться, что пакет имеет последнюю версию. Это действие будет игнорировать атрибут
version.
Свойства
Ресурс yum_package имеет следующие свойства:
allow_downgrade-
Тип Ruby: true, false | Значение по умолчанию:
trueРазрешить понижение версии пакета для удовлетворения требований к запрашиваемой версии.
arch-
Тип Ruby: String, Array
Архитектура пакета, который нужно установить или обновить. Это значение также может быть передано как часть имени пакета.
flush_cache-
Тип Ruby: Hash | Значение по умолчанию:
{"before"=>false, "after"=>false}Очистить кэш в памяти до или после операции Yum, которая устанавливает, обновляет или удаляет пакет. Принимает Hash в формате: { :before => true/false, :after => true/false } или Array в формате [ :before, :after ].
Yum автоматически синхронизирует удаленные метаданные с локальным кэшем. Клиент Chef Infra создает копию локального кэша, а затем сохраняет ее в памяти во время запуска клиента Chef Infra. Кэш в памяти позволяет устанавливать пакеты во время запуска клиента Chef Infra без необходимости продолжать синхронизацию удаленных метаданных с локальным кэшем, пока выполняется запуск клиента Chef Infra.
В виде массива:
yum_package 'some-package' do #... flush_cache [ :before ] #... endи в виде Hash:
yum_package 'some-package' do #... flush_cache( { :after => true } ) #... endПримечание
Свойство
flush_cacheне очищает локальный кэш Yum! Используйте инструменты Yum —yum clean headers,yum clean packages,yum clean all— для очистки локального кэша Yum.
options-
Тип Ruby: String, Array
Один (или несколько) дополнительных параметров командной строки, передаваемых в команду.
package_name-
Тип Ruby: String, Array
Один из следующих вариантов: имя пакета, имя пакета и его архитектура, имя зависимости. Значение по умолчанию:
nameблока ресурса. Для получения дополнительной информации см. раздел «Синтаксис» выше.
source-
Тип Ruby: String
Необязательный путь к пакету в локальной файловой системе.
timeout-
Тип Ruby: String, Integer
Время ожидания (в секундах) до истечения времени ожидания.
version-
Тип Ruby: String, Array
Версия пакета, который нужно установить или обновить. Это свойство игнорируется при использовании действия
:upgrade.
yum_binary-
Тип Ruby: String
Путь к двоичному файлу yum.
Несколько пакетов
Ресурс может указывать несколько пакетов и/или версий для платформ, использующих менеджеры пакетов Apt, Chocolatey, DNF, Homebrew, Pacman или Zypper. Указание нескольких пакетов и/или версий позволяет одной транзакции:
- Загрузить указанные пакеты и версии с помощью одной HTTP-транзакции
- Обновить или установить несколько пакетов с помощью одного ресурса во время запуска клиента Chef Infra
Например, установка нескольких пакетов:
package %w(package1 package2)
Установка нескольких пакетов с версиями:
package %w(package1 package2) do
version [ '1.3.4-2', '4.3.6-1']
end
Обновление нескольких пакетов:
package %w(package1 package2) do
action :upgrade
end
Удаление нескольких пакетов:
package %w(package1 package2) do
action :remove
end
Очистка нескольких пакетов:
package %w(package1 package2) do
action :purge
end
Уведомления, с помощью неявного имени:
package %w(package1 package2) do
action :nothing
end
log 'call a notification' do
notifies :install, 'package[package1, package2]', :immediately
end
Примечание
Уведомления и подписки не нужно обновлять, когда пакеты и версии добавляются или удаляются из свойств package_name или version.
Общие функции ресурса
Ресурсы Chef включают общие свойства, уведомления и средства защиты ресурсов.
Общие свойства
Следующие свойства являются общими для каждого ресурса:
compile_time-
Тип Ruby: true, false | Значение по умолчанию:
falseУправление фазой, во время которой ресурс выполняется на узле. Установите значение true для запуска во время построения коллекции ресурсов (
compile phase). Установите значение false для запуска во время настройки узла клиентом Chef Infra (converge phase). ignore_failure-
Тип Ruby: true, false, :quiet | Значение по умолчанию:
falseПродолжить выполнение рецепта, если ресурс не удался по какой-либо причине.
:quietне будет отображать полный трассировку стека, и рецепт будет продолжать выполняться, если ресурс не удался. retries-
Тип Ruby: Integer | Значение по умолчанию:
0Количество попыток перехватить исключения и повторить попытку использования ресурса.
retry_delay-
Тип Ruby: Integer | Значение по умолчанию:
2Задержка повтора (в секундах).
sensitive-
Тип Ruby: true, false | Значение по умолчанию:
falseУбедитесь, что конфиденциальные данные ресурса не регистрируются Chef InfraClient.
Уведомления
notifies-
Тип Ruby: Symbol, 'Chef::Resource[String]'
Ресурс может уведомить другой ресурс о необходимости выполнить действие, когда его состояние изменится. Укажите
'resource[name]',:action, которое должен выполнить ресурс, а затем:timerдля этого действия. Ресурс может уведомлять более одного ресурса; используйте операторnotifiesдля каждого ресурса, который должен быть уведомлен.Если указанный ресурс не существует, возникает ошибка. В отличие от этого,
subscribesне завершится ошибкой, если исходный ресурс не найден.
Таймер указывает момент во время запуска клиента Chef Infra, когда выполняется уведомление. Доступны следующие таймеры:
:beforeУказывает, что действие для уведомленного ресурса должно выполняться до обработки блока ресурса, в котором находится уведомление.
:delayedПо умолчанию. Указывает, что уведомление должно быть помещено в очередь, а затем выполнено в конце запуска клиента Chef Infra.
-
:immediate,:immediately Указывает, что уведомление должно выполняться немедленно для каждого уведомленного ресурса.
Синтаксис для notifies следующий:
notifies :action, 'resource[name]', :timer
subscribesТип Ruby: Symbol, 'Chef::Resource[String]'
Ресурс может прослушивать другой ресурс, а затем выполнять действие, если состояние прослушиваемого ресурса изменится. Укажите 'resource[name]', :action, которое будет выполнено, а затем :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.
Установка нескольких пакетов
Ресурс может указать несколько пакетов и/или версий для платформ, использующих менеджеры пакетов Apt, Chocolatey, DNF, Homebrew, Pacman или Zypper. Указание нескольких пакетов и/или версий позволяет одной транзакции:
- Загрузить указанные пакеты и версии через одну HTTP-транзакцию
- Обновить или установить несколько пакетов одним ресурсом во время запуска Chef Infra Client
Например, установка нескольких пакетов:
package %w(package1 package2)
Установка нескольких пакетов с версиями:
package %w(package1 package2) do
version [ '1.3.4-2', '4.3.6-1']
end
Обновление нескольких пакетов:
package %w(package1 package2) do
action :upgrade
end
Удаление нескольких пакетов:
package %w(package1 package2) do
action :remove
end
Очистка нескольких пакетов:
package %w(package1 package2) do
action :purge
end
Уведомления с неявным именем:
package %w(package1 package2) do
action :nothing
end
log 'call a notification' do
notifies :install, 'package[package1, package2]', :immediately
end
Примечание
Уведомления и подписки не нужно обновлять при добавлении или удалении пакетов и версий из свойств package_name или version.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса yum_package в рецептах:
Установка точной версии:
yum_package 'netpbm = 10.35.58-8.el8'
Установка минимальной версии:
yum_package 'netpbm >= 10.35.58-8.el8'
Установка минимальной версии с использованием действия по умолчанию:
yum_package 'netpbm'
Установка версии без учета точного выпуска:
yum_package 'netpbm-10.35*'
Установка пакета:
yum_package 'netpbm' do
action :install
end
Установка частичной минимальной версии:
yum_package 'netpbm >= 10'
Установка пакета с определенной архитектурой:
yum_package 'netpbm' do
arch 'i386'
end
или:
yum_package 'netpbm.x86_64'
Установка пакета с определенной версией-выпуском
yum_package 'netpbm' do
version '10.35.58-8.el8'
end
Обработка ресурсов cookbook_file и yum_package в одном рецепте:
Когда ресурс cookbook_file и ресурс yum_package вызываются в одном рецепте, используйте атрибут flush_cache для очистки кэша Yum в памяти, а затем используйте репозиторий сразу, чтобы убедиться, что установлен правильный пакет:
cookbook_file '/etc/yum.repos.d/custom.repo' do
source 'custom'
mode '0755'
end
yum_package 'pkg-that-is-only-in-custom-repo' do
action :install
flush_cache [ :before ]
end
© 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/yum_package/