Spec-Zone.ru › Chef 18

пакет Resource

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

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


Используйте ресурс package для управления пакетами. Если пакет устанавливается из локального файла (например, с помощью RubyGems, dpkg или RPM Package Manager), файл необходимо добавить в узел с помощью ресурсов remote_file или cookbook_file.

Этот ресурс является базовым ресурсом для нескольких других ресурсов, используемых для управления пакетами на определенных платформах. Хотя можно использовать каждый из этих специфичных ресурсов, рекомендуется использовать ресурс package как можно чаще.

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

  • apt_package
  • bff_package
  • cab_package
  • chef_gem
  • chocolatey_package
  • dmg_package
  • dnf_package
  • dpkg_package
  • freebsd_package
  • gem_package
  • homebrew_package
  • ips_package
  • macports_package
  • msu_package
  • openbsd_package
  • pacman_package
  • paludis_package
  • portage_package
  • rpm_package
  • smartos_package
  • snap_package
  • solaris_package
  • windows_package
  • yum_package
  • zypper_package

Синтаксис


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

package 'httpd'

что установит Apache со всеми значениями по умолчанию и по умолчанию (:install).

Для пакета с различными именами пакетов в зависимости от платформы используйте оператор case внутри package:

package 'Install Apache' do
  case node[:platform]
  when 'redhat', 'centos'
    package_name 'httpd'
  when 'ubuntu', 'debian'
    package_name 'apache2'
  end
end

где:

  • 'redhat', 'centos' установит Apache с пакетом httpd и 'ubuntu', 'debian' установит его с пакетом apache2

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

package 'name' do
  allow_downgrade            true, false # Yum, RPM packages only
  arch                       String, Array # Yum packages only
  default_release            String # Apt packages only
  flush_cache                Array
  gem_binary                 String
  homebrew_user              String, Integer # Homebrew packages only
  notifies                   # see description
  options                    String
  package_name               String, Array # defaults to 'name' if not specified
  response_file              String # Apt packages only
  response_file_variables    Hash # Apt packages only
  source                     String
  subscribes                 # see description
  timeout                    String, Integer
  version                    String, Array
  action                     Symbol # defaults to :install if not specified
end

где:

  • package сообщает Chef Infra Client о необходимости управления пакетом; Chef Infra Client определит правильного поставщика пакетов, исходя из платформы узла
  • 'name' — имя пакета
  • action определяет действия, которые Chef Infra Client предпримет для перевода узла в нужное состояние
  • allow_downgrade, arch, default_release, flush_cache, gem_binary, homebrew_user, options, package_name, response_file, response_file_variables, source, recursive, timeout, и version — свойства этого ресурса с указанным типом Ruby. Более подробную информацию о всех свойствах, которые можно использовать с этим ресурсом, см. в разделе «Свойства» ниже.

Опции пакета Gem

Поставщик пакетов RubyGems пытается использовать API RubyGems для установки gems без запуска нового процесса, когда это возможно. Команда gems для установки будет запущена в следующих случаях:

  • Когда свойство gem_binary указано (в виде массива, строки или файла .gemrc), Chef Infra Client запустит эту команду для проверки настроек среды, а затем снова для установки gems.
  • Когда параметры установки указаны в виде строки, Chef Infra Client запустит команду gems с этими параметрами при установке gems.
  • Инсталлятор Chef будет искать команду gems в PATH вместо того, чтобы использовать текущую среду gem. Как часть enforce_default_paths, каталоги bin добавляются в PATH, что означает, что при отсутствии других параметров RubyGems установка все равно будет выполняться с использованием этого каталога.

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

Вы должны предоставить параметры установки в виде массива, если вы не используете явный параметр gem_binary с ресурсом gem_package. Этот подход позволяет поставщику устанавливать gems без необходимости запуска внешнего процесса gem.

Доступны следующие параметры RubyGems для включения в массив, которые передаются в RubyGems DependencyInstaller:

  • :env_shebang
  • :force
  • :format_executable
  • :ignore_dependencies
  • :prerelease
  • :security_policy
  • :wrappers

Дополнительную информацию об этих параметрах см. в документации RubyGems: https://docs.ruby-lang.org/en/2.2.0/Gem/DependencyInstaller.html.

Пример
gem_package 'bundler' do
  options(prerelease: true, format_executable: false)
end

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

При использовании явного gem_binary, параметры должны передаваться в виде строки. При отсутствии явного gem_binary, Chef Infra Client вынужден запускать процесс gems для установки gems (что использует больше системных ресурсов), когда параметры передаются в виде строки. Строковые параметры передаются непосредственно в команду gems и должны быть указаны так же, как если бы они передавались в командной строке. Например, --prerelease для предварительной версии gems. Пример

gem_package 'nokogiri' do
  gem_binary('/opt/ree/bin/gem')
  options('--prerelease --no-format-executable')
end

Указание с использованием файла .gemrc

Параметры можно указать в файле .gemrc. По умолчанию ресурс gem_package будет использовать интерфейс Ruby для установки gems, который проигнорирует файл .gemrc. Ресурс gem_package можно заставить использовать команду gems вместо этого (и читать файл .gemrc), добавив атрибут gem_binary в блок кода.

Шаблон с именем gemrc.erb находится в каталоге /templates кулинарной книги:

:sources:
- http://<%= node['gem_file']['host'] %>:<%= node['gem_file']['port'] %>/

Рецепты могут быть построены следующим образом:

  • Создает файл .gemrc на основе шаблона gemrc.erb
  • Выполняет команду Gem.configuration
  • Устанавливает пакет с использованием файла .gemrc
template '/root/.gemrc' do
  source 'gemrc.erb'
  action :create
  notifies :run, 'ruby_block[refresh_gemrc]', :immediately
end

ruby_block 'refresh_gemrc' do
  action :nothing
  block do
    Gem.configuration = Gem::ConfigFile.new []
  end
end

gem_package 'di-ruby-lvm' do
  gem_binary '/opt/chef/embedded/bin/gem'
  action :install
end

Действия


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

:install
По умолчанию. Установить пакет. Если версия указана, установить указанную версию пакета.
:nothing
Этот блок ресурса не действует, пока не получит уведомление от другого ресурса о выполнении действия. После получения уведомления этот блок ресурса либо выполняется немедленно, либо добавляется в очередь для выполнения в конце выполнения Chef Infra Client.
:purge
Удалить пакет. Это действие обычно удаляет конфигурационные файлы, а также сам пакет. (Только для платформы Debian; для других платформ используйте действие :remove.)
:reconfig
Переконфигурировать пакет. Для этого действия требуется файл отклика.
:remove
Удалить пакет.
:upgrade
Установить пакет и/или убедиться, что пакет является последней версией.

Свойства


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

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

Только для ресурса yum_package. Снизить версию пакета для удовлетворения запрошенных требований к версии.

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

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

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

Только для ресурса apt_package. Значение по умолчанию. Например: stable.

flush_cache
Тип Ruby: Массив

Очистить кеш в оперативной памяти до или после операции Yum по установке, обновлению или удалению пакета. Значение по умолчанию: [ :before, :after ]. Значение также может быть массивом: ( { :before => true/false, :after => true/false } ).

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.

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

Свойство для поставщика gem_package, которое используется для указания двоичного файла gems.

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

Только для ресурса homebrew_package. Имя владельца Homebrew, которое будет использоваться Chef Infra Client при выполнении команды.

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

Продолжать выполнение рецепта, если ресурс завершился ошибкой по любой причине.

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
options
Тип в Ruby: Строка

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

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

Имя пакета. Значение по умолчанию: имя блока ресурса. Подробнее см. раздел «Синтаксис» выше.

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

Только для ресурсов apt_package и dpkg_package. Прямой путь к файлу, используемому для предварительной загрузки пакета.

response_file_variables
Тип в Ruby: Словарь

Только для ресурсов apt_package и dpkg_package. Словарь переменных файла ответов в формате {"VARIABLE" => "VALUE"}.

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

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

Примечание

Для платформы AIX параметр source должен быть путём к локальному файлу, так как installp не получает пакеты через HTTP или FTP.

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
timeout
Тип в Ruby: Строка, Целое число

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

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

Версия пакета для установки или обновления.

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

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

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

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

Примеры


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

Установка файла gems для использования в рецептах

chef_gem 'right_aws' do
  action :install
end

require 'right_aws'

Установка файла gems из локальной файловой системы

gem_package 'right_aws' do
  source '/tmp/right_aws-1.11.0.gem'
  action :install
end

Установка пакета

package 'tar' do
  action :install
end

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

package 'tar' do
  version '1.16.1-1'
  action :install
end

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

package 'debian-archive-keyring' do
  action :install
  options '--force-yes'
end

Установка пакета с файлом ответов

Использование response_file в настоящее время поддерживается только на Debian и Ubuntu. Для поддержки использования response_file, содержащего ответы debconf на вопросы, обычно задаваемые менеджером пакетов при установке, необходимо написать собственные ресурсы. Поместите файл в /files/default кулинарной книги, где указан пакет, и Chef Infra Client использует ресурс cookbook_file для его получения.

Установка пакета с response_file:

package 'sun-java6-jdk' do
  response_file 'java.seed'
end

Установка указанной архитектуры с помощью именованного поставщика

yum_package 'glibc-devel' do
  arch 'i386'
end

Удаление пакета

package 'tar' do
  action :purge
end

Удаление пакета

package 'tar' do
  action :remove
end

Обновление пакета

package 'tar' do
  action :upgrade
end

Использование общего атрибута ignore_failure

gem_package 'syntax' do
  action :install
  ignore_failure true
end

Избегайте ненужной интерполяции строк

Делайте так:

package 'mysql-server' do
  version node['mysql']['version']
  action :install
end

а не так:

package 'mysql-server' do
  version "#{node['mysql']['version']}"
  action :install
end

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

Следующий пример демонстрирует, как использовать ресурс package для установки приложения под названием app и гарантировать установку правильных пакетов для правильной платформы:

package 'app_name' do
  action :install
end

case node[:platform]
when 'ubuntu','debian'
  package 'app_name-doc' do
    action :install
  end
when 'centos'
  package 'app_name-html' do
    action :install
  end
end

Установка sudo, затем настройка файла /etc/sudoers/

Следующий пример демонстрирует, как установить sudo и затем настроить файл /etc/sudoers:

#  the following code sample comes from the ``default`` recipe in the ``sudo`` cookbook: https://github.com/chef-cookbooks/sudo

package 'sudo' do
  action :install
end

if node['authorization']['sudo']['include_sudoers_d']
  directory '/etc/sudoers.d' do
    mode        '0755'
    owner       'root'
    group       'root'
    action      :create
  end

  cookbook_file '/etc/sudoers.d/README' do
    source      'README'
    mode        '0440'
    owner       'root'
    group       'root'
    action      :create
  end
end

template '/etc/sudoers' do
  source 'sudoers.erb'
  mode '0440'
  owner 'root'
  group platform?('freebsd') ? 'wheel' : 'root'
  variables(
    :sudoers_groups => node['authorization']['sudo']['groups'],
    :sudoers_users => node['authorization']['sudo']['users'],
    :passwordless => node['authorization']['sudo']['passwordless']
  )
end

где

  • ресурс package используется для установки sudo
  • оператор if используется для обеспечения доступности каталога /etc/sudoers.d
  • ресурс template сообщает Chef Infra Client, где найти шаблон sudoers
  • свойство variables — это словарь, передающий значения в файлы шаблонов (которые находятся в каталоге templates/ кулинарной книги)

Использование оператора case для указания платформы

Следующий пример демонстрирует, как использовать оператор case для указания Chef Infra Client, какие платформы и пакеты необходимо установить с помощью cURL.

package 'curl'
  case node[:platform]
  when 'redhat', 'centos'
    package 'package_1'
    package 'package_2'
    package 'package_3'
  when 'ubuntu', 'debian'
    package 'package_a'
    package 'package_b'
    package 'package_c'
  end
end

где node[:platform] каждого узла определяется Ohai во время каждого выполнения Chef Infra Client. Например:

package 'curl'
  case node[:platform]
  when 'redhat', 'centos'
    package 'zlib-devel'
    package 'openssl-devel'
    package 'libc6-dev'
  when 'ubuntu', 'debian'
    package 'openssl'
    package 'pkg-config'
    package 'subversion'
  end
end

Использование символов для ссылки на атрибуты

Символы могут быть использованы для ссылки на атрибуты:

package 'mysql-server' do
  version node[:mysql][:version]
  action :install
end

вместо строк:

package 'mysql-server' do
  version node['mysql']['version']
  action :install
end

Используйте массив пробелов для упрощения рецепта

Следующие примеры демонстрируют различные способы достижения одного и того же результата. Первый показывает серию пакетов, которые будут обновлены:

package 'package-a' do
  action :upgrade
end

package 'package-b' do
  action :upgrade
end

package 'package-c' do
  action :upgrade
end

package 'package-d' do
  action :upgrade
end

а следующий использует один ресурс пакета и массив пробелов (%w):

package %w{package-a package-b package-c package-d} do
  action :upgrade
end

Укажите пользователя Homebrew с UUID

homebrew_package 'emacs' do
  homebrew_user 1001
end

Укажите пользователя Homebrew со строкой

homebrew_package 'vim' do
  homebrew_user 'user1'
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/package/

Spec-Zone.ru

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