Spec-Zone.ru › Chef 17

Ресурс yum_package

Эта страница сгенерирована из исходного кода Chef Infra Client. Чтобы предложить изменение, отредактируйте файл yum_package.rb и отправьте запрос на вытягивание в репозиторий Chef Infra Client.

Все страницы ресурсов Infra


Используйте ресурс yum_package для установки, обновления и удаления пакетов с помощью Yum для платформ Red Hat и CentOS. Ресурс yum_package способен разрешать provides данные для пакетов так же, как Yum может делать это при запуске из командной строки. Это позволяет различные варианты установки пакетов, такие как минимальные версии, виртуальные зависимости и имена библиотек.

Примечание

Поддержка использования имён файлов для установки пакетов (как в yum_package '/bin/sh') недоступна, потому что объём данных, необходимых для парсинга, чрезмерен.

Примечание

Во многих случаях лучше использовать ресурс package вместо этого. Это связано с тем, что при использовании ресурса package в рецепте Chef Infra Client будет использовать детали, собранные Ohai в начале выполнения Chef Infra Client, для определения правильного применения пакета. Использование ресурса 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 Client предпримет для приведения узла к желаемому состоянию.
  • allow_downgrade, arch, flush_cache, options, package_name, source, timeout, version, и yum_binary — это доступные свойства этого ресурса.

Действия


Ресурс yum_package имеет следующие действия:

:install
По умолчанию. Установка пакета. Если указана версия, устанавливается указанная версия пакета.
:lock
Фиксирует пакет yum на определённой версии.
:nothing
Этот блок ресурса не действует, пока не получит уведомление от другого ресурса о необходимости действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:purge
Удаление пакета. Это действие обычно удаляет конфигурационные файлы, а также сам пакет.
:remove
Удаление пакета.
:unlock
Разблокирует пакет yum, чтобы его можно было обновить до более новой версии.
:upgrade
Устанавливает пакет и/или гарантирует, что пакет является последней версией. Это действие проигнорирует атрибут version.

Свойства


Ресурс yum_package имеет следующие свойства:

allow_downgrade
Тип в Ruby: true, false | Значение по умолчанию: true

Разрешить понижение версии пакета для удовлетворения требуемых требований к версии.

arch
Тип в Ruby: Строка, Массив

Архитектура пакета, который необходимо установить или обновить. Это значение также может быть передано как часть имени пакета.

flush_cache
Тип в Ruby: Хэш | Значение по умолчанию: {"before"=>false, "after"=>false}

Очистить кэш в оперативной памяти перед или после операции Yum, которая устанавливает, обновляет или удаляет пакет. Принимает Хэш в формате: { :before => true/false, :after => true/false } или Массив в формате [ :before, :after ].

Yum автоматически синхронизирует удалённые метаданные с локальным кэшем. Chef Infra Client создаёт копию локального кэша и затем сохраняет его в оперативной памяти во время выполнения Chef Infra Client. Кэш в оперативной памяти позволяет устанавливать пакеты во время выполнения Chef Infra Client без необходимости продолжать синхронизацию удалённых метаданных с локальным кэшем во время выполнения Chef Infra Client.

В виде массива:

yum_package 'some-package' do
  #...
  flush_cache [ :before ]
  #...
end

и в виде хэша:

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: Строка, Массив

Один (или несколько) дополнительных параметров команды, передаваемых в команду.

package_name
Тип в Ruby: Строка, Массив

Одно из следующего: имя пакета, имя пакета и его архитектура, имя зависимости. Значение по умолчанию: name блока ресурса. См. раздел «Синтаксис» выше для получения дополнительной информации.

source
Тип в Ruby: Строка

Необязательный путь к пакету в локальной файловой системе.

timeout
Тип в Ruby: Строка, Целое число

Время ожидания в секундах перед истечением времени ожидания.

version
Тип в Ruby: Строка, Массив

Версия пакета, подлежащая установке или обновлению. Это свойство игнорируется при использовании действия :upgrade.

yum_binary
Тип в Ruby: Строка

Путь к исполняемому файлу yum.

Множественные пакеты

Ресурс может указать несколько пакетов и/или версий для платформ, использующих менеджеры пакетов 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

Удаление нескольких пакетов (purge):

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 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]', действие, которое должно быть выполнено, и :action для этого действия.

Обратите внимание, что 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, в котором выполняется уведомление. Доступны следующие таймеры:

:before

Указывает, что действие над уведомлённым ресурсом должно выполняться до обработки блока ресурсов, в котором расположено уведомление.

:delayed

По умолчанию. Указывает, что уведомление должно быть помещено в очередь и затем выполнено в конце выполнения клиента Chef Infra.

:immediate, :immediately

Указывает, что уведомление должно выполняться немедленно для каждого уведомлённого ресурса.

Синтаксис для subscribes:

subscribes :action, 'resource[name]', :timer

Защиты

Свойство защиты может использоваться для оценки состояния узла во время фазы выполнения клиента Chef Infra. На основе результатов этой оценки свойство защиты затем используется для указания клиенту Chef Infra, следует ли ему продолжать выполнение ресурса. Свойство защиты принимает либо строковое значение, либо значение блока Ruby:

  • Строка выполняется как командная строка. Если команда возвращает 0, защита применяется. Если команда возвращает любое другое значение, то свойство защиты не применяется. Строковые защиты в powershell_script выполняют команды Windows PowerShell и могут возвращать true помимо 0.
  • Блок выполняется как код Ruby, который должен вернуть либо true, либо false. Если блок возвращает true, свойство защиты применяется. Если блок возвращает false, свойство защиты не применяется.

Свойство защиты полезно для обеспечения идемпотентности ресурса, позволяя этому ресурсу проверить желаемое состояние во время выполнения, а затем, если желаемое состояние присутствует, не выполнять никаких действий клиенту Chef Infra.

Свойства

Следующие свойства могут использоваться для определения защиты, которая оценивается во время фазы выполнения клиента Chef Infra:

not_if

Препятствует выполнению ресурса, когда условие возвращает true.

only_if

Разрешает выполнение ресурса только в том случае, если условие возвращает true.

Несколько пакетов

Ресурс может указать несколько пакетов и/или версий для платформ, которые используют менеджеры пакетов 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.

Примеры


В следующих примерах показаны различные подходы к использованию ресурса 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/

Spec-Zone.ru

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