Spec-Zone.ru › Chef 18

Ресурс cookbook_file

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

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


Используйте ресурс cookbook_file для передачи файлов из подкаталога COOKBOOK_NAME/files/ в указанный путь на узле, на котором запущен Chef Infra Client. Файл выбирается в соответствии со специфичностью файла, что позволяет использовать разные исходные файлы в зависимости от имени узла, платформы узла (операционная система, дистрибутив или соответствующий вариант) или версии платформы. Файлы, расположенные в подкаталоге COOKBOOK_NAME/files/default, могут использоваться на любой платформе.

Во время выполнения Chef Infra Client вычисляется контрольная сумма каждого локального файла, а затем сравнивается с контрольной суммой того же файла, который в настоящее время хранится в кулинарной книге на сервере Chef Infra. Файл не передается, когда контрольные суммы совпадают. Только файлы, требующие обновления, передаются с сервера Chef Infra на узел.

Синтаксис


Блок ресурса cookbook_file управляет файлами, используя файлы, которые существуют в каталоге /files кулинарной книги. Например, чтобы записать домашнюю страницу веб-сайта Apache:

cookbook_file '/var/www/customers/public_html/index.php' do
  source 'index.php'
  owner 'web_admin'
  group 'web_admin'
  mode '0755'
  action :create
end

где:

  • '/var/www/customers/public_html/index.php' — путь к файлу, который будет создан
  • 'index.php' — файл в каталоге /files в кулинарной книге, который используется для создания этого файла (содержимое файла в кулинарной книге станет содержимым файла на узле)
  • owner, group, и mode определяют разрешения

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

cookbook_file 'name' do
  atomic_update              true, false
  backup                     Integer, false # default value: 5
  cookbook                   String
  force_unlink               true, false # default value: false
  group                      String, Integer
  inherits                   true, false
  manage_symlink_source      true, false
  mode                       String, Integer
  owner                      String, Integer
  path                       String # default value: 'name' unless specified
  rights                     Hash
  source                     String, Array
  verify                     String, Block
  action                     Symbol # defaults to :create if not specified
end

где:

  • cookbook_file — ресурс.
  • name — имя, заданное для блока ресурса.
  • action определяет действия, которые Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • atomic_update, backup, cookbook, force_unlink, group, inherits, manage_symlink_source, mode, owner, path, rights, source, и verify — свойства этого ресурса с указанным типом Ruby. См. раздел «Свойства» ниже, чтобы узнать больше о всех свойствах, которые можно использовать с этим ресурсом.

Действия


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

:create
По умолчанию. Создать файл. Если файл уже существует (но не соответствует), обновить этот файл, чтобы он соответствовал.
:create_if_missing
Создать файл только в том случае, если файла не существует. Когда файл существует, ничего не происходит.
:delete
Удалить файл.
:nothing
Этот блок ресурса не выполняет действий, пока не получит уведомление от другого ресурса о выполнении действия. После получения уведомления этот блок ресурса либо выполняется немедленно, либо ставится в очередь для выполнения в конце выполнения Chef Infra Client.
:touch
Обновить файл. Это обновляет время доступа (atime) и время изменения файла (mtime). (Это действие можно использовать с этим ресурсом, но обычно оно используется только с ресурсом file.)

Свойства


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

atomic_update
Тип Ruby: true, false | Значение по умолчанию: False if modifying /etc/hosts, /etc/hostname, or /etc/resolv.conf within Docker containers. Otherwise default to the client.rb 'file_atomic_update' config value.

Выполнять атомарные обновления файлов на основе каждого ресурса. Установите в значение true для атомарных обновлений файлов. Установите в значение false для неатомарных обновлений файлов. Это значение переопределяет значение file_atomic_update, которое является глобальным значением, найденным в файле client.rb.

backup
Тип Ruby: Целое число, false | Значение по умолчанию: 5

Количество резервных копий, которые будут сохранены в /var/chef/backup (для платформ на основе UNIX и Linux) или C:/chef/backup (для платформы Microsoft Windows). Установите значение false, чтобы предотвратить сохранение резервных копий.

cookbook
Тип Ruby: Строка | Значение по умолчанию: The current cookbook name

Кулинарная книга, в которой находится файл (если он не находится в текущей кулинарной книге).

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

Как Chef Infra Client обрабатывает определенные ситуации, когда целевой файл оказывается не файлом. Например, когда целевой файл является фактически символической ссылкой. Установите значение true для Chef Infra Client, чтобы удалить целевой файл, который не является файлом, и заменить его указанным файлом. Установите значение false для Chef Infra Client, чтобы вывести ошибку.

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

Строка или идентификатор, определяющий владельца группы по имени группы или SID, включая полные имена групп, такие как domain\group или group@domain. Если это значение не указано, существующие группы остаются неизменными, а новые назначения групп используют группу по умолчанию POSIX (если доступна).

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

Только Microsoft Windows. Наследует ли файл права от родительского каталога.

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

(с предупреждением)

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

Поведение по умолчанию — true, но выводится предупреждение, что значение по умолчанию будет изменено на false в будущей версии; явное задание этого значения в true или false подавляет это предупреждение.

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

Если mode не указано и если файл уже существует, используется существующий режим файла. Если mode не указано, файла не существует, и указано действие :create, Chef Infra Client предполагает значение маски '0777' и затем применяет маску umask для системы, на которой файл должен быть создан, к значению mask. Например, если umask в системе составляет '022', Chef Infra Client использует значение по умолчанию '0755'.

Поведение отличается в зависимости от платформы.

Системы на основе UNIX и Linux: цитируемая строка из 3–5 символов, определяющая восьмеричный режим, который передаётся команде chmod. Например: '755', '0755', или 00755. Если значение указано как цитированная строка, оно работает точно так же, как будто была передана команда chmod. Если значение указано как целое число, добавьте ноль (0) к значению, чтобы убедиться, что оно интерпретируется как восьмеричное число. Например, чтобы назначить права чтения, записи и выполнения для всех пользователей, используйте '0777' или '777'; для тех же прав плюс бит «только для чтения» используйте 01777 или '1777'.

Microsoft Windows: цитируемая строка из 3–5 символов, определяющая восьмеричный режим, который преобразуется в права для безопасности Microsoft Windows. Например: '755', '0755', или 00755. Разрешены значения до '0777' (без бита «только для чтения») и означают то же самое в Microsoft Windows, что и в UNIX, где 4 равно GENERIC_READ, 2 равно GENERIC_WRITE, и 1 равно GENERIC_EXECUTE. Это свойство нельзя использовать для установки :full_control. Это свойство не имеет эффекта, если не указано, но когда оно и rights оба указаны, эффекты суммируются.

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

Строка или идентификатор, определяющий владельца группы по имени пользователя или SID, включая полные имена пользователей, такие как domain\user или user@domain. Если это значение не указано, существующие владельцы остаются неизменными, а новые назначения владельцев используют текущего пользователя (при необходимости).

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

Путь к целевому местоположению, в котором должен быть создан файл. Например: file.txt.

Microsoft Windows: путь, начинающийся с косой черты (/) укажет на корень текущей рабочей директории процесса Chef Infra Client. Этот путь может различаться в разных системах. Поэтому использование пути, начинающегося с косой черты (/) не рекомендуется.

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

Только Microsoft Windows. Разрешения для пользователей и групп в среде Microsoft Windows. Например: rights <permissions>, <principal>, <options>, где <permissions> определяет предоставляемые права субъекту, <principal> — имя группы или пользователя, а <options> — хэш с одним (или несколькими) расширенными параметрами прав.

source
Тип Ruby: Строка, Массив | Значение по умолчанию: The resource block's name

Имя файла в COOKBOOK_NAME/files/default или путь к файлу, расположенному в COOKBOOK_NAME/files. Путь должен включать имя файла и его расширение. Это можно использовать для распространения конкретных файлов в зависимости от используемой платформы — см. Специфика файлов для получения дополнительной информации.

verify
Тип Ruby: Строка, Блок

Блок или строка, которая возвращает true или false. Строка, когда true выполняется как системная команда.

Блок — произвольный код Ruby, определённый внутри блока ресурса с помощью свойства verify. Когда блок true, Chef Infra Client будет продолжать обновлять файл соответствующим образом.

Например, это должно вернуть true:

cookbook_file '/tmp/baz' do
  verify { 1 == 1 }
end

Это должно вернуть true:

cookbook_file '/etc/nginx.conf' do
  verify 'nginx -t -c %{path}'
end

Это должно вернуть true:

cookbook_file '/tmp/bar' do
  verify { 1 == 1}
end

А это должно вернуть true:

cookbook_file '/tmp/foo' do
  verify do |path|
    true
  end
end

В то время как это должно вернуть false:

cookbook_file '/tmp/turtle' do
  verify '/usr/bin/false'
end

Если строка или блок возвращают false, выполнение Chef Infra Client остановится и будет возвращено сообщение об ошибке.

Атомарные обновления файлов

Атомарные обновления используются с ресурсами типа file, чтобы обеспечить возможность обновления файла при обновлении бинарного файла или при недостатке дискового пространства.

Атомарные обновления включены по умолчанию. Их можно настроить глобально, используя настройку file_atomic_update в файле client.rb. Их можно настроить для каждого ресурса с помощью свойства atomic_update , доступного для ресурсов cookbook_file, file, remote_file и template.

Примечание

На некоторых платформах после перемещения файла в нужное место Chef Infra Client может изменить права доступа к файлу для поддержки функций, специфичных для этих платформ. На платформах с включенным SELinux Chef Infra Client исправит контексты безопасности после перемещения файла в нужное место, выполнив команду restorecon . На платформе Microsoft Windows Chef Infra Client создаст файлы таким образом, чтобы наследование списков управления доступом работало как ожидается.

Безопасность файлов в Windows

Для поддержки безопасности Microsoft Windows ресурсы template, file, remote_file, cookbook_file, directory и remote_directory поддерживают наследование и списки управления доступом (ACL) в рецептах. Списки управления доступом (ACL)

Свойство rights можно использовать в рецепте для управления списками управления доступом (ACL), которые позволяют предоставлять разрешения нескольким пользователям и группам. Свойство rights можно использовать любое количество раз; Chef Infra Client применит их к файлу или каталогу по мере необходимости. Синтаксис свойства rights следующий:

rights permission, principal, option_type => value

где

permission

Используется для указания прав, предоставляемых principal. Возможные значения: :read, :write, read_execute, :modify, :full_control, или целое число.

Целые числа, используемые для прав, должны соответствовать следующему списку FileSystemRights Enum поля.

These permissions are cumulative. If `:write` is specified, then it
includes `:read`. If `:full_control` is specified, then it includes
both `:write` and `:read`.

(For those who know the Microsoft Windows API: `:read` corresponds
to `GENERIC_READ`; `:write` corresponds to `GENERIC_WRITE`;
`:read_execute` corresponds to `GENERIC_READ` and `GENERIC_EXECUTE`;
`:modify` corresponds to `GENERIC_WRITE`, `GENERIC_READ`,
`GENERIC_EXECUTE`, and `DELETE`; `:full_control` corresponds to
`GENERIC_ALL`, which allows a user to change the owner and other
metadata about a file.)
principal

Используется для указания группы или пользователя. Субъект может быть указан либо по имени, либо по SID. При использовании имени это идентично тому, что вводится в поле входа в систему Microsoft Windows, например user_name, domain\user_name, или user_name@fully_qualified_domain_name. При использовании SID вы можете использовать либо стандартное строковое представление SID (S-R-I-S-S), либо одно из строковых констант SDDL. Chef Infra Client не нужно знать, является ли субъект пользователем или группой.

option_type

Хэш, содержащий расширенные параметры прав. Например, права на каталог, которые применяются только к первому уровню дочерних элементов, могут выглядеть примерно так: rights :write, 'domain\group_name', :one_level_deep => true. Возможные типы опций:

Тип опции Описание
:applies_to_children Указывает, как права применяются к дочерним элементам. Возможные значения: true — наследовать как дочерние каталоги, так и файлы; false — не наследовать никакие дочерние каталоги или файлы; :containers_only — наследовать только дочерние каталоги (и не файлы); :objects_only — рекурсивно наследовать файлы (и не дочерние каталоги).
:applies_to_self Указывает, применяется ли разрешение к родительскому каталогу. Возможные значения: true — применить к родительскому каталогу или файлу и его дочерним элементам; false — применить только к дочерним каталогам и файлам.
:one_level_deep Указывает глубину, до которой будут применяться права. Возможные значения: true — применить только к первому уровню дочерних элементов; false — применить ко всем дочерним элементам.

Например:

resource 'x.txt' do
  rights :read, 'S-1-1-0'
  rights :write, 'domain\group'
  rights :full_control, 'group_name_or_user_name'
  rights :full_control, 'user_name', applies_to_children: true
end

или:

rights :read, %w(Administrators Everyone)
rights :full_control, 'Users', applies_to_children: true
rights :write, 'Sally', applies_to_children: :containers_only, applies_to_self: false, one_level_deep: true

Некоторые другие важные моменты, которые следует учитывать при использовании атрибута rights:

  • Остаются только унаследованные права. Все существующие явные права на объект удаляются и заменяются.
  • Если права не указаны, ничего не изменится. Chef Infra Client не очистит права на файл или каталог, если права не указаны.
  • Изменение унаследованных прав может быть дорогостоящим. Microsoft Windows будет рекурсивно распространять права на все дочерние элементы из-за наследования. Это нормальная особенность Microsoft Windows, поэтому подумайте о частоте необходимости этого типа действий и примите меры для управления такими действиями, если производительность является основным фактором.

Используйте свойство deny_rights для отказа от конкретных прав конкретным пользователям. Порядок независим от использования свойства rights. Например, не имеет значения, помещены ли права всем пользователям перед или после deny_rights :read, ['Julian', 'Lewis'], как Джулиан, так и Левис не смогут прочитать документ. Например:

resource 'x.txt' do
  rights :read, 'Everyone'
  rights :write, 'domain\group'
  rights :full_control, 'group_name_or_user_name'
  rights :full_control, 'user_name', applies_to_children: true
  deny_rights :read, %w(Julian Lewis)
end

или:

deny_rights :full_control, ['Sally']
Наследование

По умолчанию файл или каталог наследует права из родительского каталога. В большинстве случаев это предпочтительное поведение, но иногда может потребоваться принять меры для более точного управления правами. Свойство inherits можно использовать, чтобы специально указать Chef Infra Client применять (или не применять) унаследованные права из родительского каталога.

Например, следующий пример определяет права для каталога:

directory 'C:\mordor' do
  rights :read, 'MORDOR\Minions'
  rights :full_control, 'MORDOR\Sauron'
end

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

directory 'C:\mordor\mount_doom' do
  rights :full_control, 'MORDOR\Sauron'
  inherits false # Sauron is the only person who should have any sort of access
end

Если вместо этого было бы использовано разрешение deny_rights, что-то могло бы проскочить, если бы всем пользователям и группам не было отказано.

Еще один пример также показывает, как указать права для каталога:

directory 'C:\mordor' do
  rights :read, 'MORDOR\Minions'
  rights :full_control, 'MORDOR\Sauron'
  rights :write, 'SHIRE\Frodo' # Who put that there I didn't put that there
end

но затем не использовать свойство inherits для отказа от этих прав в дочернем каталоге:

directory 'C:\mordor\mount_doom' do
  deny_rights :read, 'MORDOR\Minions' # Oops, not specific enough
end

Поскольку свойство inherits не указано, Chef Infra Client по умолчанию установит его в значение true, что гарантирует сохранение неизменными параметров безопасности для существующих файлов.


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


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

Специфика файлов кулинарной книги

Кулинарная книга часто разрабатывается для работы на многих платформах и часто должна распространять определенный файл на определенную платформу. Кулинарная книга может быть разработана для поддержки распространения файлов через платформы, гарантируя, что правильный файл оказывается на каждой системе.

Шаблон для специфичности файла зависит от двух вещей: пути поиска и атрибута источника. Используется первый шаблон, который совпадает:

  1. /host-$fqdn/$source
  2. /$platform-$platform_version/$source
  3. /$platform/$source
  4. /default/$source
  5. /$source

Используйте массив с атрибутом source для определения явного пути поиска. Например:

file '/conf.py' do
  source ['#{node.chef_environment}.py', 'conf.py']
end

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

file '/conf.py' do
  source %W(
    host-#{node['fqdn']}/conf.py
#{node['platform']}-#{node['platform_version']}/conf.py
#{node['platform']}/conf.py
    default/conf.py
  )
end

Кулинарная книга может иметь структуру каталогов /files такого типа:

files/
   host-foo.example.com
   ubuntu-20.04
   ubuntu-20
   ubuntu
   redhat-8.2
   redhat-7.8
   ...
   default

и ресурс, который выглядит примерно так:

cookbook_file '/usr/local/bin/apache2_module_conf_generate.pl' do
  source 'apache2_module_conf_generate.pl'
  mode '0755'
  owner 'root'
  group 'root'
end

Этот ресурс сопоставляется в том же порядке, что и структура каталогов /files. Для узла, работающего под Ubuntu 20.04, вторым элементом будет соответствующий элемент и местоположение, в которое будет распространяться файл, указанный в ресурсе cookbook_file:

host-foo.example.com/apache2_module_conf_generate.pl
ubuntu-20.04/apache2_module_conf_generate.pl
ubuntu-20/apache2_module_conf_generate.pl
ubuntu/apache2_module_conf_generate.pl
default/apache2_module_conf_generate.pl

Если файл apache2_module_conf_generate.pl находился в каталоге кулинарной книги по адресу files/host-foo.example.com/, указанные файлы будут скопированы только на машину с доменным именем foo.example.com.

Нотация хоста

Названия папок в каталогах кулинарных книг должны точно соответствовать нотации хоста, используемой для сопоставления специфичности файлов. Например, если хост называется foo.example.com, папка должна называться host-foo.example.com.

Примеры


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

Передача файла

cookbook_file 'file.txt' do
  mode '0755'
end

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

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

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

package 'only-in-custom-repo' do
  action :install
  flush_cache [ :before ]
end

Установка репозиториев из файла, запуск команды и принудительная перезагрузка внутреннего кэша

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

execute 'create-yum-cache' do
 command 'yum -q makecache'
 action :nothing
end

ruby_block 'reload-internal-yum-cache' do
  block do
    Chef::Provider::Package::Yum::YumCache.instance.reload
  end
  action :nothing
end

cookbook_file '/etc/yum.repos.d/custom.repo' do
  source 'custom'
  mode '0755'
  notifies :run, 'execute[create-yum-cache]', :immediately
  notifies :create, 'ruby_block[reload-internal-yum-cache]', :immediately
end

Использование оператора case

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

cookbook_file 'application.pm' do
  path case node['platform']
    when 'centos','redhat'
      '/usr/lib/version/1.2.3/dir/application.pm'
    when 'arch'
      '/usr/share/version/core_version/dir/application.pm'
    else
      '/etc/version/dir/application.pm'
    end
  source "application-#{node['languages']['perl']['version']}.pm"
  owner 'root'
  group 'root'
  mode '0755'
end

Управление файлами dot

Следующий пример показывает использование ресурсов directory и cookbook_file для управления файлами dot. Файлы dot определяются структурой данных JSON, похожей на:

"files": {
  ".zshrc": {
    "mode": '0755',
    "source": "dot-zshrc"
    },
  ".bashrc": {
    "mode": '0755',
    "source": "dot-bashrc"
     },
  ".bash_profile": {
    "mode": '0755',
    "source": "dot-bash_profile"
    },
  }

а затем следующие ресурсы управляют файлами dot:

if u.has_key?('files')
  u['files'].each do |filename, file_data|

  directory "#{home_dir}/#{File.dirname(filename)}" do
    recursive true
    mode '0755'
  end if file_data['subdir']

  cookbook_file "#{home_dir}/#{filename}" do
    source "#{u['id']}/#{file_data['source']}"
    owner 'u['id']'
    group 'group_id'
    mode 'file_data['mode']'
    ignore_failure true
    backup 0
  end
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/cookbook_file/

Spec-Zone.ru

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