Spec-Zone.ru › Chef 18

Ресурс dnf_package

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

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


Используйте ресурс dnf_package для установки, обновления и удаления пакетов с помощью DNF для Fedora и RHEL 8+. Ресурс dnf_package может разрешать данные о предоставляемых пакетах, подобно тому, как это может делать 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
  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
  action               Symbol # defaults to :install if not specified
end

где:

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

Действия


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

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

Свойства


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

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

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

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 Infra Client.

Уведомления

notifies

Тип в Ruby: Символ, 'Chef::Resource[String]'

Ресурс может уведомить другой ресурс о выполнении действия при изменении его состояния. Укажите '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[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.

Примеры


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

© 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