Spec-Zone.ru › Chef 16

Ресурс dnf_package

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

Страница справки по ресурсам


Используйте ресурс dnf_package для установки, обновления и удаления пакетов с помощью DNF для Fedora и RHEL 8+. Ресурс dnf_package способен разрешать данные provides для пакетов так же, как это может сделать DNF при выполнении из командной строки. Это позволяет использовать различные параметры для установки пакетов, такие как минимальные версии, виртуальные зависимости и имена библиотек.

Примечание

Во многих случаях лучше использовать ресурс package вместо этого. Это связано с тем, что при использовании ресурса package в рецепте Chef Infra Client будет использовать данные, собранные Ohai в начале выполнения Chef Infra Client, чтобы определить правильное применение пакета. Использование ресурса package позволяет автору рецепта использовать его на многих платформах.

Новое в Chef Infra Client 12.18.

Синтаксис


Блок ресурса dnf_package управляет пакетом на узле, обычно устанавливая его. Самый простой способ использования ресурса dnf_package:

dnf_package 'package_name'

который установит указанный пакет с использованием всех параметров по умолчанию и стандартным действием (:install).

Полный синтаксис всех свойств, доступных для ресурса dnf_package:

dnf_package 'name' do
  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
  action            Symbol # defaults to :install if not specified
end

где:

  • dnf_package — это ресурс.
  • name — это имя, данное блоку ресурса.
  • action определяет действия, которые Chef Infra Client предпримет, чтобы привести узел в желаемое состояние.
  • arch, flush_cache, options, package_name, source, timeout, и version — это доступные свойства этого ресурса.

Действия


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

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

Свойства


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

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

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

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

Очистить кэш в памяти перед или после операции DNF, устанавливающей, обновляющей или удаляющей пакет.

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

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

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

и в виде хэша:

dnf_package 'some-package' do
  #...
  flush_cache( { :after => true } )
  #...
end

Примечание

Свойство flush_cache не очищает локальный кэш DNF! Используйте инструменты dnf — dnf clean metadata, dnf clean packages, dnf clean all — для очистки локального кэша DNF.

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

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

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

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

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

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

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

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

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

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

Управление несколькими пакетами

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


Общие функции ресурсов


Ресурсы 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 InfraClient.

Уведомления

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, которое должно быть выполнено, и :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.

Примеры


В следующих примерах демонстрируются различные подходы к использованию ресурса dnf_package в рецептах:

Установка точной версии

dnf_package 'netpbm = 10.35.58-8.el5'

Установка минимальной версии

dnf_package 'netpbm >= 10.35.58-8.el5'

Установка минимальной версии с помощью действия по умолчанию

dnf_package 'netpbm'

Для установки пакета

dnf_package 'netpbm' do
  action :install
end

Для установки частичной минимальной версии

dnf_package 'netpbm >= 10'

Для установки пакета определённой архитектуры

dnf_package 'netpbm' do
  arch 'i386'
end

или:

dnf_package 'netpbm.x86_64'

Для установки пакета определённой версии-релиза

dnf_package 'netpbm' do
  version '10.35.58-8.el5'
end

Для установки определённой версии (даже если она старше текущей)

dnf_package 'tzdata' do
  version '2011b-1.el5'
end

Обработка ресурсов cookbook_file и dnf_package в одном рецепте

Когда ресурс cookbook_file и ресурс dnf_package оба вызываются из одного рецепта, используйте атрибут flush_cache, чтобы очистить кэш DNF в памяти, а затем используйте репозиторий сразу, чтобы убедиться, что установлен правильный пакет:

cookbook_file '/etc/yum.repos.d/custom.repo' do
  source 'custom'
  mode '0755'
end

dnf_package 'only-in-custom-repo' do
  action :install
  flush_cache [ :before ]
end
Ресурс dnf_package
  • Синтаксис
  • Действия
  • Свойства
    • Установка нескольких пакетов
  • Общие функции ресурса
    • Общие свойства
    • Уведомления
    • Фильтры
    • Установка нескольких пакетов
  • Примеры

© 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/dnf_package/

Spec-Zone.ru

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