Spec-Zone.ru › Chef 17

Все ресурсы инфраструктуры

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

Общие возможности

Свойства и действия в этом разделе применяются ко всем ресурсам.

Действия

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

:nothing

Этот блок ресурса не выполняет никаких действий, пока не получит уведомление от другого ресурса о необходимости выполнить действие. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Примеры

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

Использование действия :nothing

service 'memcached' do
  action :nothing
end

Свойства

Следующие свойства являются общими для каждого ресурса:

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

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

retries
Тип Ruby: Целое число | Значение по умолчанию: 0

Количество попыток перехватить исключения и повторить ресурс.

retry_delay
Тип Ruby: Целое число | Значение по умолчанию: 2

Задержка в секундах между попытками повтора.

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

Обеспечить, чтобы конфиденциальные данные ресурса не регистрировались клиентом Chef Infra.

Примеры

Следующие примеры показывают, как использовать общие свойства в рецепте.

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

gem_package 'syntax' do
  action :install
  ignore_failure true
end

Использование общих свойств retries и retry_delay

service 'apache' do
  action [ :enable, :start ]
  retries 3
  retry_delay 5
end

Блокирующие условия

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

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

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

Свойства

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

not_if

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

only_if

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

Аргументы

Следующие аргументы могут использоваться со свойствами блокирующих условий not_if или only_if:

:user

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

not_if 'grep adam /etc/passwd', user: 'adam'
:group

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

not_if 'grep adam /etc/passwd', group: 'adam'
:environment

Укажите хеш переменных среды, которые должны быть установлены. Например:

not_if 'grep adam /etc/passwd', environment: {
  'HOME' => '/home/adam',
}
:cwd

Установите текущую рабочую директорию перед запуском команды. Например:

not_if 'grep adam passwd', cwd: '/etc'
:timeout

Установите таймаут для команды. Например:

not_if 'sleep 10000', timeout: 10

Примеры not_if

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

Создать файл, но не если атрибут имеет определенное значение

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

template '/tmp/somefile' do
  mode '0755'
  source 'somefile.erb'
  not_if { node['some_value'] }
end

Создать файл с Ruby-блоком, но не если “/etc/passwd” существует

Следующий пример демонстрирует, как использовать условие not_if для создания файла на основе шаблона и затем код Ruby для указания условия:

template '/tmp/somefile' do
  mode '0755'
  source 'somefile.erb'
  not_if do
    ::File.exist?('/etc/passwd')
  end
end

Создать файл с Ruby-блоком, имеющим фигурные скобки, но не если “/etc/passwd” существует

Следующий пример демонстрирует, как использовать условие not_if для создания файла на основе шаблона и использование Ruby-блока (с фигурными скобками) для указания условия:

template '/tmp/somefile' do
  mode '0755'
  source 'somefile.erb'
  not_if { ::File.exist?('/etc/passwd') }
end

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

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

template '/etc/some_config' do
  mode '0640'
  source 'some_config.erb'
  not_if 'some_app --check-config'
end

Примеры only_if

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

Создать файл, но только если атрибут имеет определенное значение

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

template '/tmp/somefile' do
  mode '0755'
  source 'somefile.erb'
  only_if { node['some_value'] }
end

Создать файл с Ruby-блоком, но только если “/etc/passwd” не существует

Следующий пример демонстрирует, как использовать условие only_if для создания файла на основе шаблона, а затем использовать Ruby для указания условия:

template '/etc/some_app/some_config' do
  mode '0640'
  source 'some_config.erb'
  only_if { ::File.exist?('/etc/some_app/') }
end

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

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

template '/tmp/somefile' do
  mode '0755'
  source 'somefile.erb'
  only_if 'test -f /etc/passwd'
end

Интерпретаторы блокирующих условий

Любой ресурс, который передает строковую команду, также может указать интерпретатор, который будет использоваться для оценки этой строковой команды. Это делается с помощью свойства guard_interpreter для указания ресурса на основе script.

Атрибуты

Свойство guard_interpreter может быть установлено на любое из следующих значений:

:bash

Вычисляет строковую команду с помощью ресурса bash.

:batch

Вычисляет строковую команду с помощью ресурса batch. Значение по умолчанию (внутри блока ресурса batch): :batch.

:csh

Вычисляет строковую команду с помощью ресурса csh.

:default

По умолчанию. Выполняет интерпретатор по умолчанию, определенный клиентом Chef Infra.

:perl

Вычисляет строковую команду с помощью ресурса perl.

:powershell_script

Вычисляет строковую команду с помощью ресурса powershell_script. Значение по умолчанию (внутри блока ресурса powershell_script): :powershell_script.

:python

Вычисляет строковую команду с помощью ресурса python.

:ruby

Вычисляет строковую команду с помощью ресурса ruby.

Наследование

Свойство guard_interpreter устанавливается по умолчанию на :default для ресурсов bash, csh, perl, python и ruby. Когда свойство guard_interpreter установлено на :default, not_if или only_if операторы блокирующих условий не наследуют свойства, определенные ресурсом на основе script.

Предупреждение

Ресурсы batch и powershell_script наследуют свойства по умолчанию. Свойство guard_interpreter устанавливается автоматически на :batch или :powershell_script при использовании оператора блокирующего условия not_if или only_if соответственно внутри ресурса batch или powershell_script.

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

bash 'javatooling' do
  environment 'JAVA_HOME' => '/usr/lib/java/jdk1.7/home'
  code 'java-based-daemon-ctl.sh -start'
  not_if 'java-based-daemon-ctl.sh -test-started'
end

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

bash 'javatooling' do
  environment 'JAVA_HOME' => '/usr/lib/java/jdk1.7/home'
  code 'java-based-daemon-ctl.sh -start'
  not_if 'java-based-daemon-ctl.sh -test-started', :environment => 'JAVA_HOME' => '/usr/lib/java/jdk1.7/home'
end

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

  • :bash для bash
  • :csh для csh
  • :perl для perl
  • :python для python
  • :ruby для ruby

Например, используя тот же пример, что и выше, но на этот раз добавляя свойство guard_interpreter и устанавливая его на :bash:

bash 'javatooling' do
  guard_interpreter :bash
  environment 'JAVA_HOME' => '/usr/lib/java/jdk1.7/home'
  code 'java-based-daemon-ctl.sh -start'
  not_if 'java-based-daemon-ctl.sh -test-started'
end

Оператор блокирующего условия not_if теперь наследует свойство environment и будет использовать путь JAVA_HOME в качестве части своего вычисления.

Примеры

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

resource 'name' do
  guard_interpreter :default
  # code
end

Ленивое вычисление

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

property_name lazy { code_block }

где lazy используется для того, чтобы указать Chef Infra Client на необходимость оценки содержимого блока кода позже в процессе оценки ресурса (а не сразу), а { code_block } — это произвольный код Ruby, предоставляющий значение.

Например, ресурс, который не использует ленивую оценку:

template 'template_name' do
  # some properties
  path '/foo/bar'
end

и блок ресурса, использующий ленивую оценку:

template 'template_name' do
  # some properties
  path lazy { ' some Ruby code ' }
end

В предыдущих примерах первый ресурс использует значение /foo/bar, а второй — значение, предоставляемое блоком кода, при условии, что содержимое этого блока кода является допустимым свойством ресурса.

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

template '/tmp/canvey_island.txt' do
  source 'canvey_island.txt.erb'
  variables(
    lazy do
      { canvey_island: node.run_state['sea_power'] }
    end
  )
end

Уведомления

Уведомление — это свойство ресурса, которое отслеживает другие ресурсы в коллекции ресурсов, а затем выполняет действия в зависимости от типа уведомления (notifies или subscribes).

Таймеры

Таймер определяет момент во время выполнения Chef Infra Client, в котором выполняется уведомление. Доступны следующие таймеры:

:before

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

:delayed

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

:immediate, :immediately

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

Уведомления (Notifies)

Ресурс может уведомлять другой ресурс о выполнении действия при изменении его состояния. Укажите 'resource[name]', действие, которое должен предпринять ресурс, и затем :timer для этого действия. Ресурс может уведомлять более одного ресурса; для каждого уведомляемого ресурса используйте инструкцию notifies.

Если указанный ресурс не существует, генерируется ошибка. В отличие от этого, subscribes не завершится ошибкой, если исходный ресурс не найден.

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

notifies :action, 'resource[name]', :timer
Примеры

В следующих примерах показано, как использовать уведомление notifies в рецепте.

Задержка уведомлений

template '/etc/nagios3/configures-nagios.conf' do
  # other parameters
  notifies :run, 'execute[test-nagios-config]', :delayed
end

Немедленное уведомление

По умолчанию уведомления :delayed, то есть они помещаются в очередь по мере их возникновения и выполняются в конце выполнения Chef Infra Client. Для немедленного выполнения действия используйте :immediately:

template '/etc/nagios3/configures-nagios.conf' do
  # other parameters
  notifies :run, 'execute[test-nagios-config]', :immediately
end

а затем Chef Infra Client немедленно выполнит следующее:

execute 'test-nagios-config' do
  command 'nagios3 --verify-config'
  action :nothing
end

Уведомление нескольких ресурсов

template '/etc/chef/server.rb' do
  source 'server.rb.erb'
  owner 'root'
  group 'root'
  mode '0755'
  notifies :restart, 'service[chef-elasticsearch]', :delayed
  notifies :restart, 'service[chef-server]', :delayed
end

Уведомление в определенном порядке

Для уведомления нескольких ресурсов и выполнения их в определенном порядке можно сделать следующее:

execute 'foo' do
  command '...'
  notifies :create, 'template[baz]', :immediately
  notifies :install, 'package[bar]', :immediately
  notifies :run, 'execute[final]', :immediately
end

template 'baz' do
  ...
  notifies :run, 'execute[restart_baz]', :immediately
end

package 'bar'

execute 'restart_baz'

execute 'final' do
  command '...'
end

где последовательность будет соответствовать порядку перечисления ресурсов в рецепте: execute 'foo', template 'baz', execute [restart_baz], package 'bar' и execute 'final'.

Перезагрузка службы

template '/tmp/somefile' do
  mode '0755'
  source 'somefile.erb'
  notifies :reload, 'service[apache]', :immediately
end

Перезапуск службы при изменении шаблона

template '/etc/www/configures-apache.conf' do
  notifies :restart, 'service[apache]', :immediately
end

Отправка уведомлений нескольким ресурсам

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

template '/etc/netatalk/netatalk.conf' do
  notifies :restart, 'service[afpd]', :immediately
  notifies :restart, 'service[cnid]', :immediately
end

service 'afpd'
service 'cnid'

Выполнение команды с использованием шаблона

Следующий пример демонстрирует настройку IPv4 пакетов переадресации с использованием ресурса execute для выполнения команды forward_ipv4, использующей шаблон, определенный ресурсом template:

execute 'forward_ipv4' do
  command 'echo > /proc/.../ipv4/ip_forward'
  action :nothing
end

template '/etc/file_name.conf' do
  source 'routing/file_name.conf.erb'
  notifies :run, 'execute[forward_ipv4]', :delayed
end

где свойство command ресурса execute содержит команду, которая должна быть выполнена, а свойство source ресурса template указывает, какой шаблон использовать. Свойство notifies для template указывает, что execute[forward_ipv4] (которое определено ресурсом execute) должно быть помещено в очередь и выполнено в конце выполнения Chef Infra Client.

Перезапуск одной службы и последующее уведомление другой службы

Следующий пример демонстрирует запуск службы example_service и немедленное уведомление службы Nginx о перезапуске.

service 'example_service' do
  action :start
  notifies :restart, 'service[nginx]', :immediately
end

Перезапуск одной службы до перезапуска другой

В этом примере используется уведомление :before для перезапуска службы php-fpm перед перезапуском nginx:

service 'nginx' do
  action :restart
  notifies :restart, 'service[php-fpm]', :before
end

С уведомлением :before действие, указанное для ресурса nginx, не будет выполнено, пока не будет выполнено действие для уведомленного ресурса (php-fpm).

Уведомление при изменении удаленного источника

remote_file '/tmp/couch.png' do
  source 'http://couchdb.apache.org/img/sketch.png'
  action :nothing
end

http_request 'HEAD http://couchdb.apache.org/img/sketch.png' do
  message ''
  url 'http://couchdb.apache.org/img/sketch.png'
  action :head
  if ::File.exist?('/tmp/couch.png')
    headers 'If-Modified-Since' => File.mtime('/tmp/couch.png').httpdate
  end
  notifies :create, 'remote_file[/tmp/couch.png]', :immediately
end

Подписки (Subscribes)

Ресурс может отслеживать другой ресурс и выполнять действие, если состояние отслеживаемого ресурса изменяется. Укажите 'resource[name]', действие, которое должно быть выполнено, и затем :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, которые генерируют ошибку, если другой ресурс не существует.

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

subscribes :action, 'resource[name]', :timer
Примеры

В следующих примерах показано, как использовать уведомление subscribes в рецепте.

Предотвращение перезапуска и переконфигурации при ошибке конфигурации

Используйте действие :nothing (общее для всех ресурсов) для предотвращения автоматического запуска теста, а затем используйте уведомление subscribes для выполнения теста конфигурации при обнаружении изменений в шаблоне:

execute 'test-nagios-config' do
  command 'nagios3 --verify-config'
  action :nothing
  subscribes :run, 'template[/etc/nagios3/configures-nagios.conf]', :immediately
end

Перезагрузка службы с использованием шаблона

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

template '/tmp/somefile' do
  mode '0755'
  source 'somefile.erb'
end

service 'apache' do
  action :enable
  subscribes :reload, 'template[/tmp/somefile]', :immediately
end

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

Хранение файла в пакете данных

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

# the following code sample comes from the ``seed`` recipe
# in the following cookbook: https://github.com/mattray/bittorrent-cookbook

ruby_block 'share the torrent file' do
  block do
    f = File.open(node['bittorrent']['torrent'], 'rb')
    #read the .torrent file and base64 encode it
    enc = Base64.encode64(f.read)
    data = {
      'id' => bittorrent_item_id(node['bittorrent']['file']),
      'seed' => node['ipaddress'],
      'torrent' => enc,
    }
    item = Chef::DataBagItem.new
    item.data_bag('bittorrent')
    item.raw_data = data
    item.save
  end
  action :nothing
  subscribes :create, "bittorrent_torrent[#{node['bittorrent']['torrent']}]", :immediately
end

Относительные пути

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

#{ENV['HOME']}

Используется для возвращения пути ~ в Linux и macOS или пути %HOMEPATH% в Microsoft Windows.

Примеры

template "#{ENV['HOME']}/chef-getting-started.txt" do
  source 'chef-getting-started.txt.erb'
  mode '0755'
end

Выполнение в фазе компиляции

Chef Infra Client обрабатывает рецепты в двух фазах:

  1. Сначала каждый ресурс в объекте узла идентифицируется, и создается коллекция ресурсов. Все рецепты загружаются в определенном порядке, а затем идентифицируются действия, указанные в каждом из них. Это также называется «фазой компиляции».
  2. Затем Chef Infra Client настраивает систему в соответствии с порядком ресурсов в коллекции ресурсов. Каждый ресурс затем анализирует узел и выполняет необходимые шаги для завершения действия. Это также называется «фазой выполнения».

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

Примечание

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

run_action

Используйте .run_action(:some_action) в конце блока ресурса, чтобы выполнить указанное действие на фазе компиляции. Например:

build_essential 'Install compilers' do
  action :nothing
end.run_action(:install)

где action установлено в :nothing, чтобы убедиться, что run_action выполняется на фазе компиляции, а не позже на фазе выполнения.

Это можно упростить, используя флаг compile_time в Chef Infra Client 16 и более поздних версиях:

build_essential 'Install compilers' do
  compile_time true
end

Этот флаг как вынуждает ресурс работать во время компиляции, так и устанавливает действие слияния на :nothing.

Следующие примеры показывают, когда (и когда не нужно) использовать run_action.

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

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

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

build_essential 'Install compilers' do
  compile_time true
end

chef_gem 'aws-dsk' do
  compile_time true
end

require 'aws-sdk'

Лучшая стратегия — перемещение кода, которому требуется этот gem, в пользовательский ресурс. Поскольку все действия пользовательских ресурсов выполняются во время слияния, это откладывает необходимость в gem до более позднего этапа выполнения Chef Infra Client. Режим унификации также может быть использован в ресурсе для полного устранения проблем с режимами компиляции/слияния:

unified_mode true

action :run do
  build_essential 'Install compilers'

  chef_gem 'aws-sdk'

  require 'aws-sdk'
end

Загрузка и парсинг файла конфигурации

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

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

Для загрузки и парсинга JSON-файла и его отображения в шаблоне целесообразно загружать файл во время компиляции:

  # the remote_file is being downloaded to a temporary file
  remote_file "#{Chef::Config[:file_cache_path]}/users.json" do
    source "https://jsonplaceholder.typicode.com/users"
    compile_time true
  end

  # this parsing needs to happen after the remote_file is downloaded, but will
  # be executed at compile time.
  array = JSON.parse(IO.read("#{Chef::Config[:file_cache_path]}/users.json")

  # the `array.last["phone"]` expression here will also be evaluated at compile
  # time and must be lazied via wrapping the expresssion in `lazy {}`
  file "/tmp/phone_number.txt" do
    content array.last["phone"]
  end

Это значительно чище, чем альтернативный подход с отложенной оценкой как парсинга JSON, так и отображения данных в файловом шаблоне, что произойдёт, если ресурс remote_file не запущен во время компиляции:

  # the execution of this is now deferred
  remote_file "#{Chef::Config[:file_cache_path]}/users.json" do
    source "https://jsonplaceholder.typicode.com/users"
  end

  # it is necessary due to lexical scoping issues to create this variable here
  array = nil

  # the parsing of the JSON is now deferred due to the ruby_block
  ruby_block "parse JSON" do
    block do
      array = JSON.parse(IO.read("#{Chef::Config[:file_cache_path]}/users.json")
    end
  end

  # the argument to the content property must now also be deferred
  file "/tmp/phone_number.txt" do
    content lazy { array.last["phone"] }
  end

Это пример кода, чрезмерно использующего отложенное выполнение, больше «ленивой» оценки и значительно сложнее для понимания и корректного написания.

Уведомления не будут работать

Ресурсы, выполняемые на стадии компиляции, не могут отправлять уведомления другим ресурсам. Например:

execute 'ifconfig'

package 'vim-enhanced' do
  compile_time true
  notifies :run, 'execute[ifconfig]', :immediately
end

Лучшим подходом в такой ситуации является установка пакета до построения коллекции ресурсов, чтобы он был доступен другим ресурсам впоследствии.

Наиболее подходящим решением является использование unified mode, что устраняет различие между временем компиляции и слияния, при этом позволяя уведомлениям работать корректно.

Ресурсы, по умолчанию выполняемые на стадии компиляции

Ресурсы ohai_hint и hostname по умолчанию выполняются на стадии компиляции.

Это связано с тем, что последующие ресурсы могут использовать атрибуты узла, устанавливаемые этими ресурсами, что приводит к чрезмерному использованию lazy в последующих ресурсах (и проблемам, аналогичным примеру remote_file выше).

Ресурс chef_gem ранее по умолчанию выполнялся во время компиляции, но теперь рекомендуется пользователям переносить код, выполняемый на этапе компиляции, в пользовательские ресурсы.

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

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

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

Безопасность файлов в 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 Infra Client встроенные следующие ресурсы:

ресурс alternatives

страница ресурса alternatives

Используйте ресурс alternatives для настройки альтернатив команд в Linux, используя пакеты alternatives или update-alternatives.

Новое в Chef Infra Client 16.0.

Синтаксис


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

alternatives 'name' do
  link           String # default value: "/usr/bin/LINK_NAME"
  link_name      String # default value: 'name' unless specified
  path           String
  priority       String, Integer
  action         Symbol # defaults to :install if not specified
end

где:

  • alternatives — это ресурс.
  • name — это имя, данное блоку ресурса.
  • action определяет действия Chef Infra Client для приведения узла в желаемое состояние.
  • link, link_name, path и priority — доступные свойства этого ресурса.

Действия


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

:auto
Установите альтернативу в автоматическом режиме с автоматически выбранным наивысшим приоритетом.
:install
Установите альтернативу в системе, включая символические ссылки. (по умолчанию)
:nothing
Этот блок ресурсов не действует, пока другой ресурс не сообщит ему о необходимости выполнить действие. После уведомления этот блок ресурсов либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:refresh
Обновить альтернативы.
:remove
Удалить альтернативу и все связанные ссылки.
:set
Установить символическую ссылку для альтернативы.

Свойства


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

link
Тип Ruby: Строка | Значение по умолчанию: /usr/bin/LINK_NAME

Путь к ссылке альтернатив.

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

Имя создаваемой ссылки. Это будет команда, которую вы наберете в командной строке, например, ruby или gcc.

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

Абсолютный путь к исходному бинарному файлу приложения, например, /usr/bin/ruby27.

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

Приоритет альтернативы.


Общие функциональные возможности ресурсов


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

Примеры


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

Установка альтернативы:

alternatives 'python install 2' do
  link_name 'python'
  path '/usr/bin/python2.7'
  priority 100
  action :install
end

Установить альтернативу:

alternatives 'python set version 3' do
  link_name 'python'
  path '/usr/bin/python3'
  action :set
end

Установить автоматическое состояние альтернативы:

alternatives 'python auto' do
  link_name 'python'
  action :auto
end

Обновить альтернативу:

alternatives 'python refresh' do
  link_name 'python'
  action :refresh
end

Удалить альтернативу:

alternatives 'python remove' do
  link_name 'python'
  path '/usr/bin/python3'
  action :remove
end

ресурс apt_package

страница ресурса apt_package

Используйте ресурс apt_package для управления пакетами на платформах Debian, Ubuntu и других платформах, использующих систему пакетов APT.

Примечание

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

Синтаксис


Блок ресурса apt_package управляет пакетом на узле, обычно устанавливая его. Самое простое использование ресурса apt_package: apt_package 'package_name', что установит указанный пакет с использованием всех параметров по умолчанию и по умолчанию :install.

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

apt_package 'name' do
  default_release              String
  options                      String, Array
  overwrite_config_files       true, false # default value: false
  package_name                 String, Array
  response_file                String
  response_file_variables      Hash # default value: {}
  timeout                      String, Integer
  version                      String, Array
  action                       Symbol # defaults to :install if not specified
end

где:

  • apt_package — это ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет, какие шаги выполнит Chef Infra Client для приведения узла в нужное состояние.
  • default_release, options, overwrite_config_files, package_name, response_file, response_file_variables, timeout и version — доступные свойства этого ресурса.

Действия


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

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

Свойства


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

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

Значение по умолчанию для релиза. Например: stable.

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

Один или несколько дополнительных параметров, передаваемых команде. Например, обычные директивы apt-get, такие как --no-install-recommends. Полный список см. в документации apt-get.

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

Перезаписывать существующие конфигурационные файлы файлами, предоставленными пакетом, если об этом запросит APT.

Новое в Chef Client 14.0

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

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

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

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

response_file_variables
Тип в Ruby: Словарь | Значение по умолчанию: {}

Словарь переменных файла ответа в формате {‘ПЕРЕМЕННАЯ’ => ‘ЗНАЧЕНИЕ’}.

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

Общие свойства

Следующие свойства являются общими для всех ресурсов:

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

Примеры


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

Установка пакета с помощью менеджера пакетов:

apt_package 'name of package' do
  action :install
end

Установка пакета без указания действия по умолчанию:

apt_package 'name of package'

Установка нескольких пакетов сразу:

apt_package %w(package1 package2 package3)

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

package 'apache2' do
  options '--no-install-recommends'
end

Ресурс apt_preference

Страница ресурса apt_preference

Используйте ресурс apt_preference для создания файлов предпочтений APT файлы предпочтений. Файлы предпочтений используются для управления тем, какие версии пакетов и источники имеют приоритет при установке.

Новое в Chef Infra Client 13.3.

Синтаксис


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

apt_preference 'name' do
  glob              String
  package_name      String # default value: 'name' unless specified
  pin               String
  pin_priority      String, Integer
  action            Symbol # defaults to :add if not specified
end

где:

  • apt_preference — это ресурс.
  • name — имя, заданное для блока ресурса.
  • action определяет, какие действия Chef Infra Client выполнит для приведения узла к желаемому состоянию.
  • glob, package_name, pin и pin_priority — доступные свойства этого ресурса.

Действия


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

:add
Создаёт файл предпочтений в /etc/apt/preferences.d. (по умолчанию)
:nothing
Этот блок ресурса не выполняет действий, пока не получит уведомление от другого ресурса. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:remove
Удаляет файл предпочтений, тем самым отменяя привязку пакета.

Свойства


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

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

Привязка с помощью выражения glob() или с помощью регулярного выражения, заключённого в /.

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

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

pin
Тип Ruby: Строка | REQUIRED

Версия пакета или репозиторий для привязки.

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

Устанавливает приоритет привязки для пакета. Подробнее см. https://wiki.debian.org/AptPreferences.


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


Ресурсы 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, которое нужно выполнить, и :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_preference в рецептах:

Привязка libmysqlclient16 к версии 5.1.49-3:

apt_preference 'libmysqlclient16' do
  pin          'version 5.1.49-3'
  pin_priority '700'
end

Примечание: pin_priority 700 гарантирует, что эта версия будет предпочтительнее любых других доступных версий.

Отмена привязки libmysqlclient16:

apt_preference 'libmysqlclient16' do
  action :remove
end

Привяжите все пакеты, чтобы предпочесть репозиторий packages.dotdeb.org:

apt_preference 'dotdeb' do
  glob         '*'
  pin          'origin packages.dotdeb.org'
  pin_priority '700'
end

Ресурс apt_repository

Страница ресурса apt_repository

Используйте ресурс apt_repository для указания дополнительных репозиториев APT. Добавление нового репозитория немедленно обновит кэш пакетов APT.

Новое в Chef Infra Client 12.9.

Синтаксис


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

apt_repository 'name' do
  arch               String, false
  cache_rebuild      true, false # default value: true
  components         Array # default value: `main` if using a PPA repository.
  cookbook           String, false
  deb_src            true, false # default value: false
  distribution       String, false # default value: The LSB codename of the node such as 'focal'.
  key                String, Array, false # default value: []
  key_proxy          String, false
  keyserver          String, false # default value: "keyserver.ubuntu.com"
  repo_name          String # default value: 'name' unless specified
  trusted            true, false # default value: false
  uri                String
  action             Symbol # defaults to :add if not specified
end

где:

  • apt_repository — это ресурс.
  • name — это имя, присвоенное блоку ресурса.
  • action определяет, какие действия Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • arch, cache_rebuild, components, cookbook, deb_src, distribution, key, key_proxy, keyserver, repo_name, trusted и uri — это доступные свойства для этого ресурса.

Действия


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

:add
Создает файл репозитория в /etc/apt/sources.list.d/ и строит список репозитория. (по умолчанию)
:nothing
Этот блок ресурса не выполняет действий, пока не получит уведомление от другого ресурса. После получения уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:remove
Удаляет список репозитория.

Свойства


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

arch
Тип Ruby: Строка, false

Ограничить пакеты определённой архитектурой процессора, такой как i386 или amd64.

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

Определяет, следует ли перестроить кэш пакетов APT.

components
Тип Ruby: Массив | Значение по умолчанию: `main` if using a PPA repository.

Группировки пакетов, такие как ‘main’ и ‘stable’.

cookbook
Тип Ruby: Строка, false

Если ключ должен быть cookbook_file, укажите кулинарную книгу, где находится ключ для файлов/default. Значение по умолчанию — nil, поэтому будет использована кулинарная книга, в которой используется ресурс.

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

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

distribution
Тип Ruby: Строка, false | Значение по умолчанию: The LSB codename of the node such as 'focal'.

Обычно кодовое имя дистрибутива, например, xenial, bionic или focal.

key
Тип Ruby: Строка, Массив, false | Значение по умолчанию: []

Если указан сервер ключей, предполагается, что это отпечаток; в противном случае это может быть URI ключа GPG для репозитория или cookbook_file.

key_proxy
Тип Ruby: Строка, false

Если задано, указанный прокси передается GPG через http-proxy=.

keyserver
Тип Ruby: Строка, false | Значение по умолчанию: keyserver.ubuntu.com

Сервер ключей GPG, где должен быть получен ключ репозитория.

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

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

Новое в Chef Client 14.1

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

Определяет, следует ли рассматривать все пакеты из этого репозитория как проверенные независимо от подписи.

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

Базовая часть дистрибутива Debian.


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


Ресурсы 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_repository в рецептах:

Добавить репозиторий со стандартными настройками:

apt_repository 'nginx' do
  uri        'http://nginx.org/packages/ubuntu/'
  components ['nginx']
end

Включить репозитории Ubuntu multiverse:

apt_repository 'security-ubuntu-multiverse' do
  uri          'http://security.ubuntu.com/ubuntu'
  distribution 'xenial-security'
  components   ['multiverse']
  deb_src      true
end

Добавить PPA Nginx, автоматически определить ключ и URL репозитория:

apt_repository 'nginx-php' do
  uri          'ppa:nginx/stable'
end

Добавить PPA JuJu, получить ключ с сервера ключей Ubuntu и добавить репозиторий источников:

apt_repository 'juju' do
  uri 'ppa:juju/stable'
  components ['main']
  distribution 'xenial'
  key 'C8068B11'
  action :add
  deb_src true
end

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

apt_repository 'rundeck' do
  uri 'https://dl.bintray.com/rundeck/rundeck-deb'
  distribution '/'
  key ['379CE192D401AB61', 'http://rundeck.org/keys/BUILD-GPG-KEY-Rundeck.org.key']
  keyserver 'keyserver.ubuntu.com'
  action :add
end

Добавить репозиторий Cloudera Repo пакетов CDH4 для Ubuntu 16.04 на архитектуре AMD64:

apt_repository 'cloudera' do
  uri          'http://archive.cloudera.com/cdh4/ubuntu/xenial/amd64/cdh'
  arch         'amd64'
  distribution 'xenial-cdh4'
  components   ['contrib']
  key          'http://archive.cloudera.com/debian/archive.key'
end

Удалить репозиторий из списка:

apt_repository 'zenoss' do
  action :remove
end

Ресурс apt_update

Страница ресурса apt_update

Используйте ресурс apt_update для управления обновлениями репозиториев APT на платформах Debian и Ubuntu.

Новое в Chef Infra Client 12.7.

Синтаксис


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

apt_update 'name' do
  frequency      Integer # default value: 86400
  action         Symbol # defaults to :periodic if not specified
end

где:

  • apt_update — это ресурс.
  • name — это имя, присваиваемое блоку ресурса.
  • action определяет, какие действия Chef Infra Client предпримет для приведения узла в нужное состояние.
  • frequency — это свойство, доступное для данного ресурса.

Без имени

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

apt_update

будет работать так же, как:

apt_update 'update'

Действия


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

:nothing
Этот блок ресурса не действует, пока не получит уведомление от другого ресурса о выполнении действия. После получения уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:periodic
Обновить репозиторий Apt с интервалом, указанным свойством frequency. (по умолчанию)
:update
Обновить репозиторий Apt в начале выполнения Chef Infra Client.

Свойства


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

frequency
Тип в Ruby: Целое число | Значение по умолчанию: 86400

Определяет, как часто (в секундах) выполняются обновления репозиториев APT. Используйте это свойство, когда задано действие :periodic.


Общие функциональные возможности ресурсов


Ресурсы 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, который необходимо выполнить, а затем :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_update в рецептах:

Обновить репозиторий Apt с указанным интервалом:

apt_update 'all platforms' do
  frequency 86400
  action :periodic
end

Обновить репозиторий Apt в начале выполнения Chef Infra Client:

apt_update 'update'

Ресурс archive_file

Страница ресурса archive_file

Используйте ресурс archive_file для извлечения файлов архивов в диск. Этот ресурс использует библиотеку libarchive для извлечения нескольких форматов архивов, включая tar, gzip, bzip и zip.

Новое в Chef Infra Client 15.0.

Синтаксис


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

archive_file 'name' do
  destination           String
  group                 String
  mode                  String, Integer # default value: "'755'"
  options               Array, Symbol
  overwrite             true, false, auto # default value: false
  owner                 String
  path                  String # default value: 'name' unless specified
  strip_components      Integer # default value: 0
  action                Symbol # defaults to :extract if not specified
end

где:

  • archive_file — это ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет действия, которые Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • destination, group, mode, options, overwrite, owner, path и strip_components — доступные свойства для данного ресурса.

Действия


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

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

Свойства


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

destination
Тип в Ruby: Строка | REQUIRED

Путь к файлу, в который будет извлечён архивный файл.

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

Группа извлечённых файлов.

mode
Тип в Ruby: Строка, Целое число | Значение по умолчанию: '755'

Режим извлечённых файлов. Целые значения устарели, так как восьмеричные значения (например, 0755) не будут интерпретированы правильно.

options
Тип в Ruby: Массив, Символ | Значение по умолчанию: lazy default

Массив символов, представляющих флаги извлечения. Например: :no_overwrite, чтобы предотвратить перезапись файлов на диске. По умолчанию правильно устанавливается :time, что сохраняет отметки времени изменения файлов в архиве при записи их на диск.

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

Нужно ли ресурсу перезаписывать содержимое файла назначения, если он уже существует? Если установлено значение :auto, то будет сравниваться отметка времени файлов в архиве с отметками на диске, и содержимое диска будет перезаписано, если они отличаются. Это может привести к непредвиденным последствиям, если отметки времени на диске меняются между запусками, что приведёт к перезаписи файлов во время каждого запуска клиента. Убедитесь, что вы правильно протестировали любые изменения в этом свойстве.

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

Владелец извлечённых файлов.

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

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

strip_components
Тип в Ruby: Целое число | Значение по умолчанию: 0

Удаление указанного количества ведущих элементов пути. Пути с меньшим количеством элементов будут пропущены без ошибок. Это поведение аналогично команде командной строки tar –strip-components.

Новое в Chef Infra Client 17.5


Общие функциональные возможности ресурсов


Ресурсы 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 и затем :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.

Примеры


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

Извлечение zip-файла в указанную директорию:

archive_file 'Precompiled.zip' do
  path '/tmp/Precompiled.zip'
  destination '/srv/files'
end

Установка определённых разрешений на извлечённые файлы:

archive_file 'Precompiled.zip' do
  owner 'tsmith'
  group 'staff'
  mode '700'
  path '/tmp/Precompiled.zip'
  destination '/srv/files'
end

Ресурс bash

Страница ресурса bash

Используйте ресурс bash для выполнения скриптов с помощью интерпретатора Bash. Этот ресурс также может использовать любые действия и свойства, доступные для ресурса execute. Команды, выполняемые с помощью этого ресурса, по своей природе не идемпотентны, так как они обычно уникальны для среды, в которой они выполняются. Используйте not_if и only_if для защиты этого ресурса от идемпотентности.

Синтаксис


Блок ресурса bash выполняет скрипты с помощью Bash:

bash 'extract_module' do
  cwd ::File.dirname(src_filepath)
  code <<-EOH
    mkdir -p #{extract_path}
    tar xzf #{src_filename} -C #{extract_path}
    mv #{extract_path}/*/* #{extract_path}/
  EOH
  not_if { ::File.exist?(extract_path) }
end

где:

  • cwd указывает каталог, из которого выполняется команда
  • code указывает команду для выполнения

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

bash 'name' do
  code                       String
  creates                    String
  cwd                        String
  environment                Hash
  flags                      String
  group                      String, Integer
  path                       Array
  returns                    Integer, Array
  timeout                    Integer, Float
  user                       String, Integer
  umask                      String, Integer
  action                     Symbol # defaults to :run if not specified
end

где:

  • bash — это ресурс.
  • name — имя блока ресурса.
  • action определяет, какие шаги Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • code, creates, cwd, environment, flags, group, path, returns, timeout, user и umask — свойства этого ресурса с указанным типом Ruby. Подробную информацию обо всех свойствах, которые можно использовать с этим ресурсом, см. в разделе «Свойства» ниже.

Действия


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

:nothing
Этот блок ресурса не выполняет действий, пока не получит уведомление от другого ресурса о необходимости выполнить действие. После получения уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:run
По умолчанию. Выполняет скрипт.

Свойства


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

code
Тип Ruby: Строка | REQUIRED

Строка кода, заключённая в кавычки (" “), который будет выполнен.

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

Препятствует созданию файла командой, если такой файл уже существует.

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

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

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

Словарь переменных среды в формате ({'ENV_VARIABLE' => 'VALUE'}). Примечание: эти переменные должны существовать для успешного выполнения команды.

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

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

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

Имя или идентификатор группы, которые должны быть изменены перед выполнением команды.

returns
Тип Ruby: Целое число, Массив | Значение по умолчанию: 0

Значение возврата команды. Это может быть массив допустимых значений. При несоответствии значения(й) возврата генерируется исключение.

timeout
Тип Ruby: Целое число, Строка, Вещественное число | Значение по умолчанию: 3600

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

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

Имя или идентификатор пользователя, которые должны быть изменены перед выполнением команды.

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

Маска создания файла или umask.


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


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

Примеры


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

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

bash 'install_something' do
  user 'root'
  cwd '/tmp'
  code <<-EOH
    wget http://www.example.com/tarball.tar.gz
    tar -zxf tarball.tar.gz
    cd tarball
    ./configure
    make
    make install
  EOH
end

Установка файла из удалённого расположения с помощью bash

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

  • Объявляет три переменные
  • Получает файл Nginx из удалённого расположения
  • Устанавливает файл с помощью Bash по пути, указанному переменной src_filepath
# the following code sample is similar to the ``upload_progress_module``
# recipe in the ``nginx`` cookbook:
# https://github.com/chef-cookbooks/nginx

src_filename = "foo123-nginx-module-v#{
  node['nginx']['foo123']['version']
}.tar.gz"
src_filepath = "#{Chef::Config['file_cache_path']}/#{src_filename}"
extract_path = "#{
  Chef::Config['file_cache_path']
  }/nginx_foo123_module/#{
  node['nginx']['foo123']['checksum']
}"

remote_file 'src_filepath' do
  source node['nginx']['foo123']['url']
  checksum node['nginx']['foo123']['checksum']
  owner 'root'
  group 'root'
  mode '0755'
end

bash 'extract_module' do
  cwd ::File.dirname(src_filepath)
  code <<-EOH
    mkdir -p #{extract_path}
    tar xzf #{src_filename} -C #{extract_path}
    mv #{extract_path}/*/* #{extract_path}/
  EOH
  not_if { ::File.exist?(extract_path) }
end

Установка приложения из git с помощью bash

Следующий пример демонстрирует, как Bash можно использовать для установки плагина для rbenv под названием ruby-build, расположенного в системе контроля версий git. Сначала приложение синхронизируется, затем Bash меняет рабочий каталог на расположение, где находится ruby-build, и выполняет команду.

git "#{Chef::Config[:file_cache_path]}/ruby-build" do
  repository 'git://github.com/sstephenson/ruby-build.git'
  revision 'master'
  action :sync
end

bash 'install_ruby_build' do
  cwd "#{Chef::Config[:file_cache_path]}/ruby-build"
  user 'rbenv'
  group 'rbenv'
  code <<-EOH
    ./install.sh
  EOH
  environment 'PREFIX' => '/usr/local'
end

Чтобы узнать больше о ruby-build, посетите: https://github.com/sstephenson/ruby-build.

Хранение определённых настроек

Следующий рецепт демонстрирует, как файл атрибутов можно использовать для хранения определённых настроек. Файл атрибутов расположен в каталоге attributes/ в том же кулинарном сборнике, что и рецепт, который его вызывает. В данном примере файл атрибутов определяет определённые настройки для Python, которые затем используются на всех узлах, на которых будет выполняться этот рецепт.

У пакетов Python есть версии, каталоги установки, URL-адреса и файлы контрольных сумм. Файл атрибутов, предназначенный для поддержки такого типа рецепта, будет содержать настройки, подобные следующим:

default['python']['version'] = '2.7.1'

if python['install_method'] == 'package'
  default['python']['prefix_dir'] = '/usr'
else
  default['python']['prefix_dir'] = '/usr/local'
end

default['python']['url'] = 'http://www.python.org/ftp/python'
default['python']['checksum'] = '80e387...85fd61'

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

  • Определить каждый пакет для установки (в данном примере подразумевается, но не показано)
  • Определить переменные для пакета version и install_path
  • Получить пакет из удалённого расположения, но только если пакет ещё не существует на целевой системе
  • Использовать ресурс bash для установки пакета на узел, но только если пакет ещё не установлен
#  the following code sample comes from the ``oc-nginx`` cookbook on |github|: https://github.com/cookbooks/oc-nginx

version = node['python']['version']
install_path = "#{node['python']['prefix_dir']}/lib/python#{version.split(/(^\d+\.\d+)/)[1]}"

remote_file "#{Chef::Config[:file_cache_path]}/Python-#{version}.tar.bz2" do
  source "#{node['python']['url']}/#{version}/Python-#{version}.tar.bz2"
  checksum node['python']['checksum']
  mode '0755'
  not_if { ::File.exist?(install_path) }
end

bash 'build-and-install-python' do
  cwd Chef::Config[:file_cache_path]
  code <<-EOF
    tar -jxvf Python-#{version}.tar.bz2
    (cd Python-#{version} && ./configure #{configure_options})
    (cd Python-#{version} && make && make install)
  EOF
  not_if { ::File.exist?(install_path) }
end

Ресурс пакетной обработки

Страница ресурса пакетной обработки

Используйте ресурс batch для выполнения пакетного сценария с помощью интерпретатора cmd.exe в Windows. Ресурс batch создаёт и выполняет временный файл (подобно тому, как ведёт себя ресурс script), а не выполняет команду непосредственно. Команды, которые выполняются с этим ресурсом, по своей природе не идемпотентны, так как они обычно уникальны для среды, в которой они выполняются. Используйте not_if и only_if для защиты этого ресурса от идемпотентности.

Синтаксис


Блок ресурса batch выполняет пакетный сценарий с помощью интерпретатора cmd.exe:

batch 'echo some env vars' do
  code <<-EOH
    echo %TEMP%
    echo %SYSTEMDRIVE%
    echo %PATH%
    echo %WINDIR%
  EOH
end

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

batch 'name' do
  architecture               Symbol
  code                       String
  command                    String, Array
  creates                    String
  cwd                        String
  flags                      String
  group                      String, Integer
  guard_interpreter          Symbol
  interpreter                String
  returns                    Integer, Array
  timeout                    Integer, Float
  user                       String
  password                   String
  domain                     String
  action                     Symbol # defaults to :run if not specified
end

где:

  • batch — это ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет действия, которые Chef Infra Client предпримет, чтобы привести узел в желаемое состояние.
  • architecture, code, command, creates, cwd, flags, group, guard_interpreter, interpreter, returns, timeout, user, password и domain — свойства этого ресурса с указанным типом Ruby. См. раздел «Свойства» ниже для получения дополнительной информации обо всех свойствах, которые можно использовать с этим ресурсом.

Действия


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

:nothing
Этот блок ресурса не действует, пока не получит уведомление от другого ресурса о выполнении действия. После получения уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:run
Выполнение пакетного файла.

Свойства


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

architecture
Тип Ruby: Символ

Архитектура процесса, в котором выполняется сценарий. Если значение не указано, Chef Infra Client по умолчанию использует правильное значение для архитектуры, определённое Ohai. Возникает исключение, если для 32-разрядного процесса указано что-либо кроме :i386. Возможные значения: :i386 (для 32-разрядных процессов) и :x86_64 (для 64-разрядных процессов).

code
Тип Ruby: Строка | REQUIRED

Строка кода в кавычках, подлежащая выполнению.

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

Имя команды, подлежащей выполнению.

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

Предотвращение создания команды файла, если этот файл уже существует.

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

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

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

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

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

Имя группы или идентификатор группы, которые необходимо изменить перед запуском команды.

guard_interpreter
Тип Ruby: Символ | Значение по умолчанию: :batch

Если это свойство установлено в :batch, будет использована 64-битная версия оболочки cmd.exe для оценки строковых значений свойств not_if и only_if. Установите это значение в :default для использования 32-битной версии оболочки cmd.exe.

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

Интерпретатор сценария, используемый во время выполнения кода. Изменение значения этого свойства по умолчанию не поддерживается.

returns
Тип Ruby: Целое число, Массив | Значение по умолчанию: 0

Возвращаемое значение команды. Это может быть массив допустимых значений. Возникает исключение, если возвращаемое значение(я) не совпадают.

timeout
Тип Ruby: Целое число, Строка, Вещественное число | Значение по умолчанию: 3600

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

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

Имя пользователя пользователя, с которым запускается новый процесс. Имя пользователя может быть необязательно указано с доменом, например имяпользователядомена или пользователь@мой.домен.com в формате Universal Principal Name (UPN). Также его можно указать без домена просто как имяпользователя, если домен задан атрибутом домен. Только в Windows, если это свойство указано, свойство пароль должно быть указано.

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

Только для Windows: Пароль пользователя, указанный свойством имяпользователя. Это свойство обязательно, если имяпользователя указано в Windows и может быть указано только при указании имяпользователя. Свойство confidential для этого ресурса автоматически будет установлено в true, если указан пароль.

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

Только для Windows: Домен пользователя, указанный свойством имяпользователя. Если не указано, имя пользователя и пароль, указанные свойствами имяпользователя и пароль, будут использоваться для поиска этого пользователя в домене, к которому присоединена система, выполняющая Chef Infra Client, или, если эта система не присоединена к домену, она будет искать пользователя как локальную учётную запись в этой системе. Альтернативный способ указать домен — оставить это свойство незаданным и указать домен в свойстве имяпользователя.


Общие функциональные возможности ресурса


Ресурсы 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[Строка]'

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

Примеры


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

Разархивировать файл и затем переместить его

Для выполнения пакетного файла, который разархивирует и затем переместит Ruby, выполните:

batch 'unzip_and_move_ruby' do
  code <<-EOH
    7z.exe x #{Chef::Config[:file_cache_path]}/ruby-1.8.7-p352-i386-mingw32.7z
      -oC:\\source -r -y
    xcopy C:\\source\\ruby-1.8.7-p352-i386-mingw32 C:\\ruby /e /y
  EOH
end

batch 'echo some env vars' do
  code <<-EOH
    echo %TEMP%
    echo %SYSTEMDRIVE%
    echo %PATH%
    echo %WINDIR%
  EOH
end

или:

batch 'unzip_and_move_ruby' do
  code <<-EOH
    7z.exe x #{Chef::Config[:file_cache_path]}/ruby-1.8.7-p352-i386-mingw32.7z
      -oC:\\source -r -y
    xcopy C:\\source\\ruby-1.8.7-p352-i386-mingw32 C:\\ruby /e /y
  EOH
end

batch 'echo some env vars' do
  code 'echo %TEMP%\\necho %SYSTEMDRIVE%\\necho %PATH%\\necho %WINDIR%'
end

Выполнить команду от имени другого пользователя

Примечание: При запуске Chef в качестве службы эта функция требует, чтобы пользователь, под которым запускается Chef, имел право «SeAssignPrimaryTokenPrivilege» (также известное как «SE_ASSIGNPRIMARYTOKEN_NAME»). По умолчанию этим правом обладают только LocalSystem и NetworkService при запуске в качестве службы. Это необходимо даже если пользователь является администратором.

Это право можно добавить и проверить в рецепте, используя этот пример:

# Add 'SeAssignPrimaryTokenPrivilege' for the user
Chef::ReservedNames::Win32::Security.add_account_right('<user>', 'SeAssignPrimaryTokenPrivilege')

# Check if the user has 'SeAssignPrimaryTokenPrivilege' rights
Chef::ReservedNames::Win32::Security.get_account_right('<user>').include?('SeAssignPrimaryTokenPrivilege')

Следующий пример демонстрирует, как запустить mkdir test_dir из выполнения Chef Infra Client от имени другого пользователя.

# Passing only username and password
batch 'mkdir test_dir' do
 code "mkdir test_dir"
 cwd Chef::Config[:file_cache_path]
 user "username"
 password "password"
end

# Passing username and domain
batch 'mkdir test_dir' do
 code "mkdir test_dir"
 cwd Chef::Config[:file_cache_path]
 domain "domain"
 user "username"
 password "password"
end

# Passing username = 'domain-name\\username'. No domain is passed
batch 'mkdir test_dir' do
 code "mkdir test_dir"
 cwd Chef::Config[:file_cache_path]
 user "domain-name\\username"
 password "password"
end

# Passing username = 'username@domain-name'. No domain is passed
batch 'mkdir test_dir' do
 code "mkdir test_dir"
 cwd Chef::Config[:file_cache_path]
 user "username@domain-name"
 password "password"
end

Ресурс bff_package

Страница ресурса bff_package

Используйте ресурс bff_package для управления пакетами для платформы AIX с помощью утилиты installp. При установке пакета из локального файла, его необходимо добавить в узел, используя ресурсы remote_file или cookbook_file.

Примечание

Пакет Backup File Format (BFF) может не иметь расширения файла .bff. Chef Infra Client по-прежнему определит правильный поставщик, независимо от расширения файла, исходя из платформы.

Примечание

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

Синтаксис


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

bff_package 'name' do
  options           String, Array
  package_name      String
  source            String
  timeout           String, Integer
  version           String
  action            Symbol # defaults to :install if not specified
end

где:

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

Действия


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

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

Свойства


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

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

Дополнительные параметры команды, которые передаются команде.

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

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

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

Обязательное. Путь к пакету в локальной файловой системе. Платформа AIX требует, чтобы source был путем к локальной файловой системе, потому что installp не извлекает пакеты по протоколам HTTP или FTP.

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

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

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

Версия пакета, который нужно установить или обновить.


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


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

Примеры


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

Ресурс bff_package — это поставщик пакетов по умолчанию на платформе AIX. Базовый ресурс package может быть использован, и затем, когда платформа — AIX, Chef Infra Client определит правильного поставщика пакетов. Следующие примеры показывают, как установить часть компилятора IBM XL C/C++.

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

package 'xlccmp.13.1.0' do
  source '/var/tmp/IBM_XL_C_13.1.0/usr/sys/inst.images/xlccmp.13.1.0'
  action :install
end

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

bff_package 'xlccmp.13.1.0' do
  source '/var/tmp/IBM_XL_C_13.1.0/usr/sys/inst.images/xlccmp.13.1.0'
  action :install
end

ресурс breakpoint

страница ресурса breakpoint

Используйте ресурс breakpoint для добавления точек останова в рецепты. Запустите chef-shell в режиме Chef Infra Client, а затем используйте эти точки останова для отладки рецептов. Точки останова игнорируются chef-client во время фактического выполнения chef-client. Тем не менее, точки останова обычно используются для отладки рецептов только в непроизводственной среде, после чего они удаляются из этих рецептов перед загрузкой родительского кулинарного сборника на сервер Chef.

Новое в Chef Infra Client 12.0.

Синтаксис


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

breakpoint 'name' do
  action      Symbol # defaults to :break if not specified
end

где:

  • breakpoint — это ресурс.
  • name — это имя, присвоенное блоку ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет для перевода узла в желаемое состояние.

Действия


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

:break
Добавить точку останова для использования с chef-shell (по умолчанию)
:nothing
Этот блок ресурса не выполняется, если не уведомлен другим ресурсом о необходимости действия. После уведомления этот блок ресурса выполняется немедленно или помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Этот ресурс не имеет свойств.

Отладка рецептов с помощью chef-shell

chef-shell — это инструмент для отладки рецептов, который позволяет использовать точки останова внутри рецептов. chef-shell выполняется как сеанс Interactive Ruby (IRb). chef-shell поддерживает синтаксис файлов рецептов и атрибутов, а также интерактивные функции отладки.

Режимы

chef-shell — это инструмент, выполняемый с помощью сеанса Interactive Ruby (IRb). В настоящее время chef-shell поддерживает синтаксис файлов рецептов и атрибутов, а также интерактивные функции отладки. chef-shell имеет три режима работы:

Режим Описание
Автономный По умолчанию. Никакие кулинарные книги не загружаются, и список выполнения пустой.
Соло chef-shell действует как клиент Chef Solo. Он пытается загрузить файл конфигурации chef-solo по адресу ~/.chef/config.rb и любые переданные атрибуты JSON. Если атрибуты JSON задают список выполнения, он будет учтен. Кулинарные книги будут загружаться так же, как chef-solo загружает их. Режим chef-solo активируется с помощью опции командной строки -s или --solo, а атрибуты JSON указываются так же, как и для chef-solo, с помощью -j /path/to/chef-solo.json.
Клиент chef-shell действует как клиент Chef Infra Client. Во время запуска он читает файл конфигурации Chef Infra Client из ~/.chef/client.rb и обращается к серверу Chef Infra для получения списка выполнения узла, атрибутов и кулинарных книг. Режим Chef Infra Client активируется с помощью опций -z или --client. Также можно указать файл конфигурации с помощью -c CONFIG и URL сервера с помощью -S SERVER_URL.

Настройка

chef-shell определяет, какой файл конфигурации загрузить, исходя из следующего:

  1. Если файл конфигурации указан с помощью опции -c, chef-shell будет использовать указанный файл конфигурации
  2. Если задан NAMED_CONF, chef-shell загрузит ~/.chef/NAMED_CONF/chef_shell.rb
  3. Если NAMED_CONF не задан, chef-shell загрузит ~/.chef/chef_shell.rb, если он существует
  4. Если chef_shell.rb не найден, chef-shell возвращается к загрузке:
    • /etc/chef/client.rb, если задана опция -z.
    • /etc/chef/solo.rb, если задана опция –solo-legacy-mode.
    • .chef/config.rb, если задана опция -s.
    • .chef/knife.rb, если задана опция -s.
chef-shell.rb

Файл chef-shell.rb можно использовать для настройки chef-shell так же, как файл client.rb используется для настройки Chef Infra Client. Например, для настройки chef-shell для аутентификации на сервере Chef Infra скопируйте настройки node_name, client_key и chef_server_url из файла config.rb:

node_name                'your-knife-clientname'
client_key               File.expand_path('~/.chef/my-client.pem')
chef_server_url          'https://api.opscode.com/organizations/myorg'

а затем добавьте их в файл chef-shell.rb. Другие возможности настройки включают отключение плагинов Ohai (что ускорит загрузку chef-shell) или включение произвольного кода Ruby в файл chef-shell.rb.

Запуск как Chef Infra Client

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

chef-shell может использовать те же учетные данные, что и knife, при подключении к серверу Chef Infra. Убедитесь, что настройки в chef-shell.rb совпадают с настройками в config.rb, а затем используйте опцию -z в качестве части команды. Например:

chef-shell -z

Управление

При настройке chef-shell для доступа к серверу Chef Infra, chef-shell может перечислять, отображать, искать и редактировать кулинарные книги, клиентов, узлы, роли, среды, файлы политики и пакеты данных.

Синтаксис для управления объектами на сервере Chef Infra:

chef-shell -z named_configuration

Где:

  • named_configuration — это существующий файл конфигурации в ~/.chef/named_configuration/chef_shell.rb, например, production, staging или test.

После входа в chef-shell команды могут быть выполнены над объектами следующим образом:

chef (preprod) > items.command

Где:

  • items — тип элемента для поиска: cookbooks, clients, nodes, roles, environments или пакет данных.
  • command — команда: list, show, find или edit.

Например, для вывода всех узлов в конфигурации с именем «preprod» введите:

chef (preprod) > nodes.list

Что вернёт результат, похожий на:

=> [node[i-f09a939b], node[i-049a936f], node[i-eaaaa581], node[i-9154b1fb],
    node[i-6a213101], node[i-c2687aa9], node[i-7abeaa11], node[i-4eb8ac25],
    node[i-9a2030f1], node[i-a06875cb], node[i-145f457f], node[i-e032398b],
    node[i-dc8c98b7], node[i-6afdf401], node[i-f49b119c], node[i-5abfab31],
    node[i-78b8ac13], node[i-d99678b3], node[i-02322269], node[i-feb4a695],
    node[i-9e2232f5], node[i-6e213105], node[i-cdde3ba7], node[i-e8bfb083],
    node[i-743c2c1f], node[i-2eaca345], node[i-aa7f74c1], node[i-72fdf419],
    node[i-140e1e7f], node[i-f9d43193], node[i-bd2dc8d7], node[i-8e7f70e5],
    node[i-78f2e213], node[i-962232fd], node[i-4c322227], node[i-922232f9],
    node[i-c02728ab], node[i-f06c7b9b]]

Команда list может принимать блок кода, который будет применяться (но не сохраняться) к каждому объекту, возвращаемому сервером. Например:

chef (preprod) > nodes.list {|n| puts "#{n.name}: #{n.run_list}" }

вернёт результат, похожий на:

=> i-f09a939b: role[lb], role[preprod], recipe[aws]
   i-049a936f: role[lb], role[preprod], recipe[aws]
   i-9154b1fb: recipe[erlang], role[base], role[couchdb], role[preprod],
   i-6a213101: role[chef], role[preprod]
   # more...

Команда show может использоваться для отображения конкретного узла. Например:

chef (preprod) > load_balancer = nodes.show('i-f09a939b')

вернёт результат, похожий на:

=> node[i-f09a939b]

Или:

chef (preprod) > load_balancer.ec2.public_hostname

вернёт результат, похожий на:

=> "ec2-111-22-333-44.compute-1.amazonaws.com"

Команда find может использоваться для поиска в сервере Chef Infra из chef-shell. Например:

chef (preprod) > pp nodes.find(:ec2_public_hostname => 'ec2*')

Также можно отформатировать результаты с помощью блока кода. Например:

chef (preprod) > pp nodes.find(:ec2_public_hostname => 'ec2*') {|n| n.ec2.ami_id } and nil

вернёт результат, похожий на:

=> ["ami-f8927a91",
    "ami-f8927a91",
    "ami-a89870c1",
    "ami-a89870c1",
    "ami-a89870c1",
    "ami-a89870c1",
    "ami-a89870c1"
    # and more...

Или:

chef (preprod) > amis = nodes.find(:ec2_public_hostname => 'ec2*') {|n| n.ec2.ami_id }
chef (preprod) > puts amis.uniq.sort

вернёт результат, похожий на:

=> ami-4b4ba522
   ami-a89870c1
   ami-eef61587
   ami-f8927a91

Использование точек останова

chef-shell позволяет управлять текущей позицией в списке выполнения во время работы Chef Infra Client. Добавляйте точки останова в рецепты, чтобы воспользоваться этой функциональностью.
Пошаговое выполнение списка выполнения

Чтобы изучить использование точки останова для ручного пошагового выполнения работы Chef Infra Client в chef-shell, создайте простой рецепт:

chef > recipe_mode
  chef:recipe > echo off
  chef:recipe > file "/tmp/before-breakpoint"
  chef:recipe > breakpoint "foo"
  chef:recipe > file "/tmp/after-breakpoint"

а затем запустите Chef Infra Client:

chef:recipe > run_chef
  [Fri, 15 Jan 2020 14:17:49 -0800] DEBUG: Processing file[/tmp/before-breakpoint]
  [Fri, 15 Jan 2020 14:17:49 -0800] DEBUG: file[/tmp/before-breakpoint] using Chef::Provider::File
  [Fri, 15 Jan 2020 14:17:49 -0800] INFO: Creating file[/tmp/before-breakpoint] at /tmp/before-breakpoint
  [Fri, 15 Jan 2020 14:17:49 -0800] DEBUG: Processing [./bin/../lib/chef/mixin/recipe_definition_dsl_core.rb:56:in 'new']
  [Fri, 15 Jan 2020 14:17:49 -0800] DEBUG: [./bin/../lib/chef/mixin/recipe_definition_dsl_core.rb:56:in 'new'] using Chef::Provider::Breakpoint

Chef Infra Client выполнил первый ресурс до точки останова (file[/tmp/before-breakpoint]), а затем остановился после выполнения. Chef Infra Client пытался назвать точку останова по её позиции в исходном файле, но Chef Infra Client запутался, потому что ресурс был введён интерактивно. Отсюда chef-shell может продолжить прерванное выполнение Chef Infra Client:

chef:recipe > chef_run.resume
  [Fri, 15 Jan 2020 14:27:08 -0800] INFO: Creating file[/tmp/after-breakpoint] at /tmp/after-breakpoint

Быстрый просмотр каталога /tmp показывает, что были созданы следующие файлы:

after-breakpoint
before-breakpoint

Вы можете откатиться и выполнить работу Chef Infra Client пошагово:

chef:recipe > Chef::Log.level = :debug # debug logging won't turn on automatically in this case
    => :debug
  chef:recipe > chef_run.rewind
    => 0
  chef:recipe > chef_run.step
  [Fri, 15 Jan 2020 14:40:52 -0800] DEBUG: Processing file[/tmp/before-breakpoint]
  [Fri, 15 Jan 2020 14:40:52 -0800] DEBUG: file[/tmp/before-breakpoint] using Chef::Provider::File
    => 1
  chef:recipe > chef_run.step
  [Fri, 15 Jan 2020 14:40:54 -0800] DEBUG: Processing [./bin/../lib/chef/mixin/recipe_definition_dsl_core.rb:56:in 'new']
  [Fri, 15 Jan 2020 14:40:54 -0800] DEBUG: [./bin/../lib/chef/mixin/recipe_definition_dsl_core.rb:56:in 'new'] using Chef::Provider::Breakpoint
    => 2
  chef:recipe > chef_run.step
  [Fri, 15 Jan 2020 14:40:56 -0800] DEBUG: Processing file[/tmp/after-breakpoint]
  [Fri, 15 Jan 2020 14:40:56 -0800] DEBUG: file[/tmp/after-breakpoint] using Chef::Provider::File
    => 3

Из вывода видно, что список выполнения откатён, но при повторном выполнении ресурсов они снова проверят существование файлов. Если файлы существуют, Chef Infra Client пропустит их создание. Если файлы удалены, тогда:

chef:recipe > ls("/tmp").grep(/breakpoint/).each {|f| rm "/tmp/#{f}" }
    => ["after-breakpoint", "before-breakpoint"]

Откатитесь и продолжите выполнение Chef Infra Client, чтобы получить ожидаемые результаты:

chef:recipe > chef_run.rewind
  chef:recipe > chef_run.resume
  [Fri, 15 Jan 2020 14:48:56 -0800] DEBUG: Processing file[/tmp/before-breakpoint]
  [Fri, 15 Jan 2020 14:48:56 -0800] DEBUG: file[/tmp/before-breakpoint] using Chef::Provider::File
  [Fri, 15 Jan 2020 14:48:56 -0800] INFO: Creating file[/tmp/before-breakpoint] at /tmp/before-breakpoint
  [Fri, 15 Jan 2020 14:48:56 -0800] DEBUG: Processing [./bin/../lib/chef/mixin/recipe_definition_dsl_core.rb:56:in 'new']
  [Fri, 15 Jan 2020 14:48:56 -0800] DEBUG: [./bin/../lib/chef/mixin/recipe_definition_dsl_core.rb:56:in 'new'] using Chef::Provider::Breakpoint
  chef:recipe > chef_run.resume
  [Fri, 15 Jan 2020 14:49:20 -0800] DEBUG: Processing file[/tmp/after-breakpoint]
  [Fri, 15 Jan 2020 14:49:20 -0800] DEBUG: file[/tmp/after-breakpoint] using Chef::Provider::File
  [Fri, 15 Jan 2020 14:49:20 -0800] INFO: Creating file[/tmp/after-breakpoint] at /tmp/after-breakpoint
Отладка существующего рецепта

chef-shell можно использовать для отладки существующих рецептов. Рецепт сначала нужно добавить в список выполнения для узла, чтобы он был кэширован при запуске chef-shell и затем использован для отладки. chef-shell сообщит, какие рецепты кэшируются при запуске:

loading configuration: none (standalone session)
Session type: standalone
Loading.............done.

Welcome to the chef-shell 15.8.23
For usage see https://docs.chef.io/chef_shell.html

run `help' for help, `exit' or ^D to quit.

chef (15.8.23)>

Для загрузки только одного рецепта из списка выполнения перейдите в рецепт и используйте команду include_recipe. Например:

chef > recipe_mode
  chef:recipe > include_recipe "getting-started"
    => [#< Chef::Recipe:0x10256f9e8 @cookbook_name="getting-started",
  ... output truncated ...

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

node.run_list.expand(node.chef_environment).recipes.each do |r|
  include_recipe r
end

После загрузки рецептов, которые нужно отладить, используйте команду run_chef для их выполнения.

Расширенная отладка

В chef-shell можно получить подробную отладку, используя функцию отслеживания в Interactive Ruby (IRb). chef-shell предоставляет ярлык для включения и выключения отслеживания. Например:

chef > tracing on
tracing is on
=> nil
chef >

и:

chef > tracing off
#0:(irb):2:Object:-: tracing off
#0:/opt/chef-workstation/embedded/lib/ruby/gems/2.6.0/gems/chef-15.8.23/lib/chef/shell/ext.rb:109:Shell::Extensions::ObjectCoreExtensions:>:       def off
#0:/opt/chef-workstation/embedded/lib/ruby/gems/2.6.0/gems/chef-15.8.23/lib/chef/shell/ext.rb:110:Shell::Extensions::ObjectCoreExtensions:-:         :off
#0:/opt/chef-workstation/embedded/lib/ruby/gems/2.6.0/gems/chef-15.8.23/lib/chef/shell/ext.rb:111:Shell::Extensions::ObjectCoreExtensions:<:       end
#0:/opt/chef-workstation/embedded/lib/ruby/gems/2.6.0/gems/chef-15.8.23/lib/chef/shell/ext.rb:272:main:>:       def tracing(on_or_off)
#0:/opt/chef-workstation/embedded/lib/ruby/gems/2.6.0/gems/chef-15.8.23/lib/chef/shell/ext.rb:273:main:-:         conf.use_tracer = on_or_off.on_off_to_bool
#0:/opt/chef-workstation/embedded/lib/ruby/gems/2.6.0/gems/chef-15.8.23/lib/chef/shell/ext.rb:162:Shell::Extensions::Symbol:>:       def on_off_to_bool
#0:/opt/chef-workstation/embedded/lib/ruby/gems/2.6.0/gems/chef-15.8.23/lib/chef/shell/ext.rb:163:Shell::Extensions::Symbol:-:         to_s.on_off_to_bool
#0:/opt/chef-workstation/embedded/lib/ruby/gems/2.6.0/gems/chef-15.8.23/lib/chef/shell/ext.rb:149:Shell::Extensions::String:>:       def on_off_to_bool
#0:/opt/chef-workstation/embedded/lib/ruby/gems/2.6.0/gems/chef-15.8.23/lib/chef/shell/ext.rb:150:Shell::Extensions::String:-:         case self
#0:/opt/chef-workstation/embedded/lib/ruby/gems/2.6.0/gems/chef-15.8.23/lib/chef/shell/ext.rb:154:Shell::Extensions::String:-:           false
#0:/opt/chef-workstation/embedded/lib/ruby/gems/2.6.0/gems/chef-15.8.23/lib/chef/shell/ext.rb:158:Shell::Extensions::String:<:       end
#0:/opt/chef-workstation/embedded/lib/ruby/gems/2.6.0/gems/chef-15.8.23/lib/chef/shell/ext.rb:164:Shell::Extensions::Symbol:<:       end
tracing is off
=> nil
chef >

Примеры отладки

Следующие примеры показывают, как использовать chef-shell.

"Привет, мир"

Этот пример демонстрирует запуск chef-shell в автономном режиме. (Для chef-solo или Chef Infra Client режимов, вам нужно будет запустить chef-shell с помощью командной строки -s или -z, а затем учесть необходимые параметры конфигурации.)

Когда Chef Infra Client установлен с помощью RubyGems или менеджера пакетов, chef-shell уже должен быть установлен. Когда Chef Infra Client запущен из git clone, он будет находиться в chef/bin/chef shell. Чтобы запустить chef-shell, просто запустите его без каких-либо параметров. Вы увидите сообщение загрузки, затем баннер, а затем приглашение chef-shell:

bin/chef-shell

  loading configuration: none (standalone session)
  Session type: standalone
  Loading.............done.

  Welcome to the chef-shell 15.8.23
  For usage see https://docs.chef.io/chef_shell.html

  run `help' for help, `exit' or ^D to quit.

  chef (15.8.23)>

(Используйте команду help, чтобы получить список поддерживаемых команд.) Используйте команду recipe_mode, чтобы переключиться в контекст рецепта:

chef > recipe_mode
  chef:recipe_mode >

Ввод оценивается в том же контексте, что и рецепты. Создайте ресурс файла:

chef:recipe_mode > file "/tmp/ohai2u_shef"
    => #< Chef::Resource::File:0x1b691ac
       @enclosing_provider=nil,
       @resource_name=:file,
       @before=nil,
       @supports={},
       @backup=5,
       @allowed_actions=[:nothing, :create, :delete, :touch, :create_if_missing],
       @only_if=nil,
       @noop=nil,
       @collection=#< Chef::ResourceCollection:0x1b9926c
       @insert_after_idx=nil,
       @resources_by_name={"file[/tmp/ohai2u_shef]"=>0},
       @resources=[#< Chef::Resource::File:0x1b691ac ...>]>,
       @updated=false,
       @provider=nil,
       @node=< Chef::Node:0xdeeaae
       @name="eigenstate.local">,
       @recipe_name=nil,
       @not_if=nil,
       @name="/tmp/ohai2u_shef",
       @action="create",
       @path="/tmp/ohai2u_shef",
       @source_line="/Users/username/ruby/chef/chef/(irb#1) line 1",
       @params={},
       @actions={},
       @cookbook_name=nil,
       @ignore_failure=false>

(Предыдущий пример был отформатирован для представления.) На этом этапе chef-shell создал ресурс и поместил его в список выполнения, но ещё не создал файл. Для запуска выполнения Chef Infra Client используйте команду run_chef:

chef:recipe_mode > run_chef
  [Fri, 15 Jan 2020 10:42:47 -0800] DEBUG: Processing file[/tmp/ohai2u_shef]
  [Fri, 15 Jan 2020 10:42:47 -0800] DEBUG: file[/tmp/ohai2u_shef] using Chef::Provider::File
  [Fri, 15 Jan 2020 10:42:47 -0800] INFO: Creating file[/tmp/ohai2u_shef] at /tmp/ohai2u_shef
    => true

chef-shell также может переключиться на тот же контекст, что и файлы атрибутов. Установите атрибут с помощью следующего синтаксиса:

chef:recipe_mode > attributes_mode
  chef:attributes > default[:hello] = "ohai2u-again"
    => "ohai2u-again"
  chef:attributes >

Вернитесь в контекст recipe_mode и используйте атрибуты:

chef:attributes > recipe_mode
    => :attributes
  chef:recipe_mode > file "/tmp/#{node.hello}"

Теперь запустите Chef Infra Client ещё раз:

chef:recipe_mode > run_chef
  [Fri, 15 Jan 2020 10:53:22 -0800] DEBUG: Processing file[/tmp/ohai2u_shef]
  [Fri, 15 Jan 2020 10:53:22 -0800] DEBUG: file[/tmp/ohai2u_shef] using Chef::Provider::File
  [Fri, 15 Jan 2020 10:53:22 -0800] DEBUG: Processing file[/tmp/ohai2u-again]
  [Fri, 15 Jan 2020 10:53:22 -0800] DEBUG: file[/tmp/ohai2u-again] using Chef::Provider::File
  [Fri, 15 Jan 2020 10:53:22 -0800] INFO: Creating file[/tmp/ohai2u-again] at /tmp/ohai2u-again
    => true
  chef:recipe_mode >

Поскольку первый ресурс (file[/tmp/ohai2u_shef]) всё ещё находится в списке выполнения, он выполняется ещё раз. И поскольку этот файл уже существует, Chef Infra Client не пытается его снова создать. Наконец, файлы были созданы с помощью метода ls:

chef:recipe_mode > ls("/tmp").grep(/ohai/)
    => ["ohai2u-again", "ohai2u_shef"]
  Shell Tutorial
Получение конкретных узлов

Чтобы получить список узлов с использованием рецепта с именем postfix, используйте search(:node,"recipe:postfix"). Чтобы получить список узлов с использованием подрецепта с именем delivery, используйте chef-shell. Например:

search(:node, 'recipes:postfix\:\:delivery')

Примечание

Единократная (' ‘) и двойная (" “) кавычки важны. Это потому, что обратный слэш (\) должен быть включён в строку, а не интерпретирован Ruby как символ экранирования.

Примеры


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

Рецепт без точки останова

yum_key node['yum']['elrepo']['key'] do
  url  node['yum']['elrepo']['key_url']
  action :add
end

yum_repository 'elrepo' do
  description 'ELRepo.org Community Enterprise Linux Extras Repository'
  key node['yum']['elrepo']['key']
  mirrorlist node['yum']['elrepo']['url']
  includepkgs node['yum']['elrepo']['includepkgs']
  exclude node['yum']['elrepo']['exclude']
  action :create
end

Тот же рецепт с точками останова

В следующем примере имя каждой точки останова — произвольная строка.

breakpoint "before yum_key node['yum']['repo_name']['key']" do
  action :break
end

yum_key node['yum']['repo_name']['key'] do
  url  node['yum']['repo_name']['key_url']
  action :add
end

breakpoint "after yum_key node['yum']['repo_name']['key']" do
  action :break
end

breakpoint "before yum_repository 'repo_name'" do
  action :break
end

yum_repository 'repo_name' do
  description 'description'
  key node['yum']['repo_name']['key']
  mirrorlist node['yum']['repo_name']['url']
  includepkgs node['yum']['repo_name']['includepkgs']
  exclude node['yum']['repo_name']['exclude']
  action :create
end

breakpoint "after yum_repository 'repo_name'" do
  action :break
end

В предыдущих примерах имена используются для указания, находится ли точка останова перед или после ресурса, а также для указания, какой именно ресурс она предшествует или следует за ним.

ресурс build_essential

страница ресурса build_essential

Используйте ресурс build_essential для установки пакетов, необходимых для компиляции программного обеспечения C из исходных кодов.

Новое в Chef Infra Client 14.0.

Синтаксис


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

build_essential 'name' do
  raise_if_unsupported      true, false # default value: false
  action                    Symbol # defaults to :install if not specified
end

где:

  • build_essential — ресурс.
  • name — имя, данное блоку ресурса.
  • action определяет, какие действия Chef Infra Client предпримет для приведения узла в нужное состояние.
  • raise_if_unsupported — свойство, доступное для этого ресурса.

Без имени

Этот ресурс может быть без имени. Добавьте сам ресурс в свой рецепт, чтобы получить поведение по умолчанию:

build_essential

будет вести себя так же, как:

build_essential 'install tools'

Действия


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

:install
Установить пакеты build essential. (по умолчанию)
:nothing
Этот блок ресурса не действует, пока не будет уведомлён другим ресурсом для выполнения действия. После уведомления этот блок ресурса либо выполняется сразу, либо помещается в очередь для выполнения в конце работы Chef Infra Client.
:upgrade
Обновить Xcode CLI Tools на узлах macOS. Новое в Chef Infra Client 16

Свойства


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

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

Вызвать ошибку при работе на платформах, где этот ресурс не поддерживается.

Новое в Chef Infra Client 15.5


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


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

Примеры


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

Установка пакетов компиляции:

build_essential

Установка пакетов компиляции во время фазы компиляции:

build_essential 'Install compilation tools' do
  compile_time true
end

Обновление пакетов компиляции на системах macOS:

build_essential 'Install compilation tools' do
  action :upgrade
end

Ресурс cab_package

Страница ресурса cab_package

Используйте ресурс cab_package для установки или удаления пакетов Microsoft Windows cabinet (.cab).

Новое в Chef Infra Client 12.15.

Синтаксис


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

cab_package 'name' do
  options           String, Array
  package_name      String
  source            String # default value: The package name.
  timeout           String, Integer
  version           String
  action            Symbol # defaults to :install if not specified
end

где:

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

Действия


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

:install
Устанавливает пакет cabinet.
:nothing
Этот блок ресурса не действует, пока не будет уведомлен другим ресурсом для выполнения действия. После уведомления этот блок ресурса выполняется немедленно или помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:remove
Удаляет пакет cabinet.

Свойства


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

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

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

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

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

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

Локальный путь к файлу или URL-адрес пакета CAB.

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

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

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

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


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


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

Примеры


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

Использование локального пути в источнике

cab_package 'Install .NET 3.5 sp1 via KB958488' do
  source 'C:\Users\xyz\AppData\Local\Temp\Windows6.1-KB958488-x64.cab'
  action :install
end

cab_package 'Remove .NET 3.5 sp1 via KB958488' do
  source 'C:\Users\xyz\AppData\Local\Temp\Windows6.1-KB958488-x64.cab'
  action :remove
end

Использование URL в источнике

cab_package 'Install .NET 3.5 sp1 via KB958488' do
  source 'https://s3.amazonaws.com/my_bucket/Windows6.1-KB958488-x64.cab'
  action :install
end

cab_package 'Remove .NET 3.5 sp1 via KB958488' do
  source 'https://s3.amazonaws.com/my_bucket/Temp\Windows6.1-KB958488-x64.cab'
  action :remove
end

ресурс chef_acl

страница ресурса chef_acl

Используйте ресурс chef_acl для взаимодействия с списками управления доступом (ACL), которые существуют на сервере Chef.

Синтаксис


Синтаксис использования ресурса chef_acl в рецепте:

chef_acl 'name' do
  attribute 'value' # see properties section below
  ...
  action :action # see actions section below
end

где:

  • chef_acl указывает Chef Infra Client использовать поставщика Chef::Provider::ChefAcl во время выполнения Chef Infra Client
  • name — имя блока ресурса; если свойство path не указано в рецепте, то name также является именем Chef Infra Client.
  • attribute — ноль или более свойств, доступных для этого ресурса
  • action определяет действия, которые Chef Infra Client предпримет для приведения узла в желаемое состояние

Действия


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

:create
По умолчанию.
:nothing
Этот блок ресурса не действует, пока другой ресурс не уведомит его о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


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

chef_server

URL сервера Chef.

complete

Указывает, определяет ли этот ресурс полностью chef-клиент. При значении true все свойства, не указанные в этом ресурсе, будут сброшены до значений по умолчанию.

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

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

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

Ресурс может уведомлять другой ресурс о выполнении действия при изменении его состояния. Укажите 'resource[name]', действие, которое должен выполнить ресурс, и :timer для этого действия. Ресурс может уведомлять несколько ресурсов; используйте оператор notifies для каждого уведомляемого ресурса.

Если указанный ресурс не существует, генерируется ошибка. В отличие от этого, subscribes не завершится ошибкой, если исходный ресурс не найден.

Таймер определяет момент во время выполнения Chef Infra Client, в который выполняется уведомление. Доступны следующие таймеры:

:before

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

:delayed

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

:immediate, :immediately

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

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

notifies :action, 'resource[name]', :timer
path

Путь к каталогу в chef-repo, к которому применяется ACL. Например: nodes, nodes/*, nodes/my_node, */*, **, roles/base, data/secrets, cookbooks/apache2, /users/* и т. д.

raw_json

Данные Chef Infra Client в формате JSON. Например:

{
  "clientname": "client_name",
  "orgname": "org_name",
  "validator": false,
  "certificate": "-----BEGIN CERTIFICATE-----\n
                  ...
                  1234567890abcdefghijklmnopq\n
                  ...
                  -----END CERTIFICATE-----\n",
  "name": "node_name"
}
recursive

Используется для применения изменений к дочерним объектам. Используйте :on_change для применения изменений к дочерним объектам только если изменяется родительский объект. Установите в true, чтобы применять изменения даже если родительский объект не изменяется. Установите в false, чтобы предотвратить любые изменения. Значение по умолчанию: :on_change.

remove_rights

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

remove_rights :read, :users => 'jkeiser', :groups => [ 'admins', 'users' ]

или:

remove_rights [ :create, :read ], :users => [ 'jkeiser', 'adam' ]

или:

remove_rights :all, :users => [ 'jkeiser', 'adam' ]
rights

Используется для добавления прав. Синтаксис: :right, :right => 'user', :groups => [ 'group', 'group']. Например:

rights :read, :users => 'jkeiser', :groups => [ 'admins', 'users' ]

или:

rights [ :create, :read ], :users => [ 'jkeiser', 'adam' ]

или:

rights :all, :users => 'jkeiser'
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_client

страница ресурса chef_client

Используйте ресурс chef_client для создания клиентов на вашем сервере Chef Infra из кода кулинарной книги Chef Infra.

Синтаксис


Синтаксис использования ресурса chef_client в рецепте:

chef_client 'name' do
  attribute 'value' # see properties section below
  ...
  action :action # see actions section below
end

где:

  • chef_client указывает Chef Infra Client использовать провайдер Chef::Provider::ChefClient во время выполнения Chef Infra Client
  • name — имя блока ресурса; когда свойство name не указано в рецепте, name также является именем Chef Infra Client
  • attribute — ноль или более свойств, доступных для данного ресурса
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла к желаемому состоянию

Действия


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

:create
По умолчанию. Используется для создания chef-клиента.
:delete
Используется для удаления chef-клиента.
:nothing
Этот блок ресурса не действует, пока не будет уведомлен другим ресурсом о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:regenerate_keys
Используется для перегенерации открытого ключа RSA для chef-клиента.

Свойства


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

admin

Указывает, является ли Chef Infra Client клиентом API.

chef_server

URL сервера Chef Infra.

complete

Указывает, определяет ли этот ресурс chef-клиента полностью. При значении true любые свойства, не указанные этим ресурсом, будут сброшены до значений по умолчанию.

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

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

name

Имя 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
output_key_format

Указывает формат открытого ключа. Возможные значения: pem, der или openssh. Значение по умолчанию: openssh.

output_key_path

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

raw_json

Chef Infra Client в формате JSON. Например:

{
  "clientname": "client_name",
  "orgname": "org_name",
  "validator": false,
  "certificate": "-----BEGIN CERTIFICATE-----\n
                  ...
                  1234567890abcdefghijklmnopq\n
                  ...
                  -----END CERTIFICATE-----\n",
  "name": "node_name"
}
source_key

Копирует открытый или закрытый ключ, но применяет другой format и password. Используется совместно с source_key_pass_phrase и source_key_path.

source_key_pass_phrase

Пароль для открытого ключа. Используется совместно с source_key и source_key_path.

source_key_path

Путь к открытому ключу. Используется совместно с source_key и source_key_pass_phrase.

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
validator

Указывает, является ли Chef Infra Client chef-валидатором.

Примеры


У этого ресурса нет примеров.

ресурс chef_client_config

страница ресурса chef_client_config

Используйте ресурс chef_client_config для создания файла client.rb в директории конфигурации Chef Infra Client. Подробности о доступных параметрах в файле конфигурации client.rb см. в документации client.rb.

Впервые появился в Chef Infra Client 16.6.

Синтаксис


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

chef_client_config 'name' do
  additional_config              String
  chef_license                   String
  chef_server_url                String
  config_directory               String
  data_collector_server_url      String
  data_collector_token           String
  event_loggers                  Array # default value: []
  exception_handlers             Array # default value: []
  file_backup_path               String
  file_cache_path                String
  file_staging_uses_destdir      String
  formatters                     Array # default value: []
  ftp_proxy                      String
  group                          String
  http_proxy                     String
  https_proxy                    String
  log_level                      Symbol
  log_location                   String, Symbol
  minimal_ohai                   true, false
  named_run_list                 String
  no_proxy                       String, Array # default value: []
  node_name                      String
  ohai_disabled_plugins          Array # default value: []
  ohai_optional_plugins          Array # default value: []
  pid_file                       String
  policy_group                   String
  policy_name                    String
  policy_persist_run_list        true, false
  report_handlers                Array # default value: []
  ssl_verify_mode                Symbol, String
  start_handlers                 Array # default value: []
  user                           String
  action                         Symbol # defaults to :create if not specified
end

где:

  • chef_client_config — ресурс.
  • name — имя, данное блоку ресурса.
  • action определяет действия Chef Infra Client для приведения узла к желаемому состоянию.
  • additional_config, chef_license, chef_server_url, config_directory, data_collector_server_url, data_collector_token, event_loggers, exception_handlers, file_backup_path, file_cache_path, file_staging_uses_destdir, formatters, ftp_proxy, group, http_proxy, https_proxy, log_level, log_location, minimal_ohai, named_run_list, no_proxy, node_name, ohai_disabled_plugins, ohai_optional_plugins, pid_file, policy_group, policy_name, policy_persist_run_list, report_handlers, ssl_verify_mode, start_handlers и user — доступные свойства этого ресурса.

Действия


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

:create
Создайте файл конфигурации client.rb для настройки Chef Infra Client. (по умолчанию)
:nothing
Этот блок ресурсов не действует, пока другой ресурс не сообщит ему о необходимости выполнения действия. После получения уведомления этот блок ресурсов либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:remove
Удалите файл конфигурации client.rb для настройки Chef Infra Client.

Свойства


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

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

Дополнительный текст для добавления в конец файла конфигурации client.rb. Это может быть использовано для выполнения пользовательского Ruby или для добавления менее распространённых параметров конфигурации

chef_license
Тип Ruby: Строка Допустимые значения: "accept", "accept-no-persist", "accept-silent"

Принять EULA Chef

chef_server_url
Тип Ruby: Строка | REQUIRED

URL сервера Chef Infra.

config_directory
Тип Ruby: Строка | Значение по умолчанию: `/etc/chef/` on *nix-like systems and `C:\chef\` on Windows

Директория для хранения client.rb.

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

URL коллектора данных (обычно automate) для отправки данных узла, сходимости и соответствия.

Примечание

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

Новое в Chef Infra Client 17.8

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

Токен коллектора данных для взаимодействия с URL-адресом сервера коллектора данных (Automate).

Примечание

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

Новое в Chef Infra Client 17.8

event_loggers
Тип Ruby: Массив | Значение по умолчанию: []
exception_handlers
Тип Ruby: Массив | Значение по умолчанию: []

Массив словарей, содержащих класс обработчика исключений и аргументы, которые необходимо передать этому классу при инициализации. Словарь должен содержать ключи class и argument, где class — строка, а argument — массив строк в кавычках. Например: [{'class' => 'MyHandler', %w('"argument1"', '"argument2"')}]

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

Местоположение, в котором хранятся резервные файлы. Если это значение пустое, резервные файлы хранятся в каталоге целевого файла.

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

Расположение, в котором хранятся кулинарии (и другие временные данные) файлы при синхронизации. Это значение также может использоваться в рецептах для загрузки файлов с помощью ресурса remote_file.

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

Как осуществляется размещение файлов (через временные файлы). При значении true временные файлы создаются в каталоге, в котором будут находиться файлы. При значении false временные файлы создаются в ENV['TMP']

formatters
Тип Ruby: Массив | Значение по умолчанию: []

Форматтеры протоколирования клиента для загрузки.

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

Прокси-сервер для использования при FTP-соединениях.

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

Группа, которой должен принадлежать файл client.rb и каталог конфигурации, если он должен быть создан.

Примечание

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

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

Прокси-сервер для использования при HTTP-соединениях.

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

Прокси-сервер для использования при HTTPS-соединениях.

log_level
Тип Ruby: Символ Допустимые значения: :auto, :debug, :fatal, :info, :trace, :warn

Уровень ведения журнала, выполняемый Chef Infra Client.

log_location
Тип Ruby: Строка, Символ

Местоположение для сохранения журналов. Это может быть путь к файлу журнала на диске :syslog, для записи в Syslog, :win_evt для записи в журнал событий Windows или 'STDERR'/'STDOUT' для записи в текстовые потоки *nix.

minimal_ohai
Тип Ruby: true, false

Запустить минимальный набор плагинов Ohai, предоставляющих данные, необходимые для выполнения встроенных ресурсов Chef Infra Client. Установка этого значения в true пропустит многие большие и ресурсоемкие наборы данных, такие как cloud или packages. Установка этого значения в true может нарушить работу кулинарных книг, которые предполагают, что все данные Ohai будут присутствовать.

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

Конкретный именованный список задач, определённый в применённом Policyfile узла, который должен быть использован при запуске Chef Infra Client.

no_proxy
Тип Ruby: Строка, Массив | Значение по умолчанию: []

Список URL-адресов через запятую или массив URL-адресов, которые не требуют прокси.

node_name
Тип Ruby: Строка | Значение по умолчанию: The `node.name` value reported by Chef Infra Client.

Имя узла. Эта настройка устанавливает значение node.name, используемое в кулинарных книгах, и значение client_name, используемое при аутентификации на сервере Chef Infra, для определения применяемой конфигурации.

Примечание

По умолчанию эта конфигурация использует значение node.name, которое устанавливается во время загрузки. Жесткая кодировка этого значения в конфигурации client.rb избегает логики внутри сервера Chef Infra, выполняющей DNS-поиск, и может завершиться неудачей в случае сбоя DNS. Чтобы пропустить это значение по умолчанию и вместо этого использовать встроенную логику сервера Chef Infra, установите это свойство в nil

ohai_disabled_plugins
Тип Ruby: Массив | Значение по умолчанию: []

Плагины Ohai, которые следует отключить, чтобы ускорить выполнение Chef Infra Client и уменьшить размер данных узла, отправляемых в Chef Infra Client

ohai_optional_plugins
Тип Ruby: Массив | Значение по умолчанию: []

Дополнительные плагины Ohai, которые следует включить, чтобы предоставить дополнительные данные Ohai для использования в кулинарных книгах.

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

Расположение, в котором сохраняется идентификатор процесса (PID). Исполняемый файл, запущенный в качестве демона, записывает PID в указанный файл.

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

Имя policy group, которое существует на сервере Chef Infra. policy_name также должен быть указан при установке этого свойства.

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

Имя политики, определённое настройкой name в файле Policyfile.rb. policy_group при установке этого свойства.

policy_persist_run_list
Тип Ruby: true, false

Переопределить списки задач, определённые в Policyfile, списками задач, определёнными на сервере Chef Infra.

Новое в Chef Infra Client 17.3

report_handlers
Тип Ruby: Массив | Значение по умолчанию: []

Массив словарей, содержащих класс обработчика отчётов и аргументы, которые необходимо передать этому классу при инициализации. Словарь должен содержать ключи class и argument, где class — строка, а argument — массив строк в кавычках. Например: [{'class' => 'MyHandler', %w('"argument1"', '"argument2"')}]

ssl_verify_mode
Тип Ruby: Символ, Строка Допустимые значения: :verify_none, :verify_peer

Установите режим проверки для HTTPS-запросов.

  • Используйте :verify_none для отключения проверки сертификатов SSL.
  • Используйте :verify_peer для проверки всех сертификатов SSL, включая подключения к серверу Chef Infra, подключения к S3 и любые URL-адреса HTTPS remote_file, используемые в запусках Chef Infra Client. Это рекомендуемая настройка.
start_handlers
Тип Ruby: Массив | Значение по умолчанию: []

Массив словарей, содержащих класс обработчика отчётов и аргументы, которые необходимо передать этому классу при инициализации. Словарь должен содержать ключи class и argument, где class — строка, а argument — массив строк в кавычках. Например: [{'class' => 'MyHandler', %w('"argument1"', '"argument2"')}]

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

Пользователь, которому должен принадлежать файл client.rb и каталог конфигурации, если он должен быть создан.

Примечание

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


Общие функциональные возможности ресурсов


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

Примеры


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

Минимальная конфигурация Chef Infra Client client.rb:

Абсолютно минимальная конфигурация, необходимая для связи узла с сервером Chef Infra Server, — это URL сервера Chef Infra Server. Все другие параметры конфигурации либо имеют значения на стороне сервера (Политики, Роли, Среды и т. д.), либо имеют значения по умолчанию, определяемые при запуске клиента.

chef_client_config 'Create client.rb' do
  chef_server_url 'https://chef.example.dmz'
end

Более сложная конфигурация Chef Infra Client client.rb:

chef_client_config 'Create client.rb' do
  chef_server_url 'https://chef.example.dmz'
  log_level :info
  log_location :syslog
  http_proxy 'proxy.example.dmz'
  https_proxy 'proxy.example.dmz'
  no_proxy %w(internal.example.dmz)
end

Добавление дополнительного конфигурационного содержимого в client.rb:

Этот ресурс предназначен для предоставления общих параметров конфигурации. Некоторые параметры конфигурации отсутствуют, и некоторые пользователи могут захотеть использовать произвольный код Ruby в своей конфигурации. Для этого мы предлагаем свойство additional_config, которое можно использовать для добавления любой конфигурации или кода в конец файла client.rb. Кроме того, имейте в виду, что в каталоге конфигурации есть каталог client.d, где вы можете разместить дополнительные файлы .rb, содержащие параметры конфигурации. Их можно создавать, используя ресурсы file или template в ваших кулинарных книгах по мере необходимости.

chef_client_config 'Create client.rb' do
  chef_server_url 'https://chef.example.dmz'
  additional_config <<~CONFIG
    # Extra config code to safely load a gem into the client run.
    # Since the config is Ruby you can run any Ruby code you want via the client.rb.
    # It's a great way to break things, so be careful
    begin
      require 'aws-sdk'
    rescue LoadError
      Chef::Log.warn "Failed to load aws-sdk."
    end
  CONFIG
end

Настройка двух обработчиков отчетов в client.rb:

chef_client_config 'Create client.rb' do
  chef_server_url 'https://chef.example.dmz'
  report_handlers [
    {
     'class' => 'ReportHandler1Class',
     'arguments' => ["'FirstArgument'", "'SecondArgument'"],
    },
    {
     'class' => 'ReportHandler2Class',
     'arguments' => ["'FirstArgument'", "'SecondArgument'"],
    },
  ]
end

Отчет напрямую в конечную точку сборщика данных Chef Automate:

chef_client_config 'Create client.rb' do
  chef_server_url 'https://chef.example.dmz'
  data_collector_server_url 'https://automate.example.dmz'
  data_collector_token 'TEST_TOKEN_TEST'
end

Ресурс chef_client_cron

Страница ресурса chef_client_cron

Используйте ресурс chef_client_cron для настройки Chef Infra Client для запуска как задачи cron. Этот ресурс также создаст указанный каталог журналов, если он еще не существует.

Новое в Chef Infra Client 16.0.

Синтаксис


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

chef_client_cron 'name' do
  accept_chef_license      true, false # default value: false
  append_log_file          true, false # default value: true
  chef_binary_path         String # default value: "/opt/chef/bin/chef-client"
  comment                  String
  config_directory         String # default value: "/etc/chef"
  daemon_options           Array # default value: []
  day                      Integer, String # default value: "*"
  environment              Hash # default value: {}
  hour                     Integer, String # default value: "*"
  job_name                 String # default value: "chef-client"
  log_directory            String
  log_file_name            String # default value: "client.log"
  mailto                   String
  minute                   Integer, String # default value: "0,30"
  month                    Integer, String # default value: "*"
  nice                     Integer, String
  splay                    Integer, String # default value: 300
  user                     String # default value: "root"
  weekday                  Integer, String # default value: "*"
  action                   Symbol # defaults to :add if not specified
end

где:

  • chef_client_cron — ресурс.
  • name — имя, заданное для блока ресурса.
  • action — идентификатор шагов, которые Chef Infra Client выполнит, чтобы привести узел в желаемое состояние.
  • accept_chef_license, append_log_file, chef_binary_path, comment, config_directory, daemon_options, day, environment, hour, job_name, log_directory, log_file_name, mailto, minute, month, nice, splay, user и weekday — доступные свойства этого ресурса.

Действия


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

:add
Добавить задачу cron для запуска Chef Infra Client. (по умолчанию)
:nothing
Этот блок ресурса не выполняется, пока другой ресурс не выполнит действия. После уведомления этот блок ресурса выполняется немедленно или помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:remove
Удалить задачу cron для Chef Infra Client.

Свойства


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

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

Принять Соглашение об использовании и лицензии сервисов Chef Online Master. См. https://www.chef.io/online-master-agreement

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

Добавить в файл журнала вместо перезаписи файла журнала при каждом запуске.

chef_binary_path
Тип Ruby: Строка | Значение по умолчанию: /opt/chef/bin/chef-client

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

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

Комментарий для вставки в файл cron.d.

config_directory
Тип Ruby: Строка | Значение по умолчанию: /etc/chef

Путь к каталогу конфигурации.

daemon_options
Тип Ruby: Массив | Значение по умолчанию: []

Массив опций для передачи команде chef-client.

day
Тип Ruby: Целое число, строка | Значение по умолчанию: *

День месяца, в который должен выполняться Chef Infra Client (1—31) или шаблон cron, например, ‘1,7,14,21,28’.

environment
Тип Ruby: Словарь | Значение по умолчанию: {}

Словарь с дополнительными произвольными переменными окружения, в которых будет выполняться задача cron в формате ({'ENV_VARIABLE' => 'VALUE'}).

hour
Тип Ruby: Целое число, строка | Значение по умолчанию: *

Час, в который должен выполняться Chef Infra Client (0—23) или шаблон cron, например, ‘0,12’.

job_name
Тип Ruby: Строка | Значение по умолчанию: chef-client

Имя задачи cron для создания.

log_directory
Тип Ruby: Строка | Значение по умолчанию: /Library/Logs/Chef on macOS and /var/log/chef otherwise

Путь к каталогу для создания файла журнала.

log_file_name
Тип Ruby: Строка | Значение по умолчанию: client.log

Имя файла журнала для использования.

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

Электронный адрес для отправки сообщений об ошибках задач cron.

minute
Тип Ruby: Целое число, строка | Значение по умолчанию: 0,30

Минута, в которую должен выполняться Chef Infra Client (0—59) или шаблон cron, например, ‘0,30’.

month
Тип Ruby: Целое число, строка | Значение по умолчанию: *

Месяц в году, в который должен выполняться Chef Infra Client (1—12, jan-dec или *).

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

Приоритет процесса для выполнения процесса chef-client. Значение -20 — наивысший приоритет, 19 — наименьший.

Новая функция в Chef Infra Client 16.5

splay
Тип Ruby: Целое число, строка | Значение по умолчанию: 300

Случайное количество секунд от 0 до X, добавляемое к интервалу, чтобы все команды chef-client не выполнялись одновременно.

user
Тип Ruby: Строка | Значение по умолчанию: root

Имя пользователя, от имени которого выполняется Chef Infra Client.

weekday
Тип Ruby: Целое число, строка | Значение по умолчанию: *

День недели, в который должен выполняться Chef Infra Client (0—7, mon-sun или *), где воскресенье — это 0 и 7.


Функциональность общего ресурса


Ресурсы 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 для выполнения, а затем :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.

Примеры


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

Настройка Chef Infra Client для выполнения с помощью стандартной частоты 30 минут:

chef_client_cron 'Run Chef Infra Client as a cron job'

Выполнение Chef Infra Client два раза в день:

chef_client_cron 'Run Chef Infra Client every 12 hours' do
  minute 0
  hour '0,12'
end

Выполнение Chef Infra Client с дополнительными опциями, передаваемыми клиенту:

chef_client_cron 'Run an override recipe' do
  daemon_options ['--override-runlist mycorp_base::default']
end

Ресурс chef_client_launchd

Страница ресурса chef_client_launchd

Используйте ресурс chef_client_launchd для настройки запуска Chef Infra Client по расписанию на системах macOS.

Новая функция в Chef Infra Client 16.5.

Синтаксис


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

chef_client_launchd 'name' do
  accept_chef_license      true, false # default value: false
  chef_binary_path         String # default value: "/opt/chef/bin/chef-client"
  config_directory         String # default value: "/etc/chef"
  daemon_options           Array # default value: []
  environment              Hash # default value: {}
  interval                 Integer, String # default value: 30
  log_directory            String # default value: "/Library/Logs/Chef"
  log_file_name            String # default value: "client.log"
  low_priority_io          true, false # default value: true
  nice                     Integer, String
  splay                    Integer, String # default value: 300
  user                     String # default value: "root"
  working_directory        String # default value: "/var/root"
  action                   Symbol # defaults to :enable if not specified
end

где:

  • chef_client_launchd — это ресурс.
  • name — имя блока ресурса.
  • action определяет, какие шаги Chef Infra Client предпримет для приведения узла в нужное состояние.
  • accept_chef_license, chef_binary_path, config_directory, daemon_options, environment, interval, log_directory, log_file_name, low_priority_io, nice, splay, user и working_directory — это доступные для этого ресурса свойства.

Действия


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

:disable
Отключить выполнение Chef Infra Client по расписанию с использованием launchd
:enable
Включить выполнение Chef Infra Client по расписанию с использованием launchd. (по умолчанию)
:nothing
Этот блок ресурса не выполняет действий, пока не будет уведомлен другим ресурсом о необходимости действия. После получения уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


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

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

Принять Лицензионное соглашение и Условия обслуживания Chef Online Master. См. https://www.chef.io/online-master-agreement

chef_binary_path
Тип Ruby: Строка | Значение по умолчанию: /opt/chef/bin/chef-client

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

config_directory
Тип Ruby: Строка | Значение по умолчанию: /etc/chef

Путь к каталогу конфигурации.

daemon_options
Тип Ruby: Массив | Значение по умолчанию: []

Массив параметров для передачи команде chef-client.

environment
Тип Ruby: Хеш | Значение по умолчанию: {}

Хеш, содержащий дополнительные произвольные переменные окружения, в которых будет выполняться демон launchd в формате ({'ENV_VARIABLE' => 'VALUE'}).

interval
Тип Ruby: Целое число, строка | Значение по умолчанию: 30

Время в минутах между запусками Chef Infra Client.

log_directory
Тип Ruby: Строка | Значение по умолчанию: /Library/Logs/Chef

Путь к каталогу для создания файла журнала.

log_file_name
Тип Ruby: Строка | Значение по умолчанию: client.log

Имя файла журнала.

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

Запустить процесс chef-client с низким приоритетом дисковых операций ввода-вывода

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

Приоритет процесса для запуска процесса chef-client. Значение -20 — наивысший приоритет, 19 — наименьший приоритет.

splay
Тип Ruby: Целое число, строка | Значение по умолчанию: 300

Случайное количество секунд от 0 до X, добавляемое к интервалу, чтобы все команды chef-client не выполнялись одновременно.

user
Тип Ruby: Строка | Значение по умолчанию: root

Имя пользователя, от имени которого выполняется Chef Infra Client.

working_directory
Тип Ruby: Строка | Значение по умолчанию: /var/root

Рабочий каталог для выполнения Chef Infra Client.


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


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

Примеры


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

Настройка запуска Chef Infra Client по расписанию:

chef_client_launchd 'Setup the Chef Infra Client to run every 30 minutes' do
  interval 30
  action :enable
end

Отключение запуска Chef Infra Client по расписанию:

chef_client_launchd 'Prevent the Chef Infra Client from running on a schedule' do
  action :disable
end

Ресурс chef_client_scheduled_task

Страница ресурса chef_client_scheduled_task

Используйте ресурс chef_client_scheduled_task для настройки запуска Chef Infra Client в виде задачи планировщика Windows. Этот ресурс также создаст указанную директорию журнала, если она не существует.

Новое в Chef Infra Client 16.0.

Синтаксис


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

chef_client_scheduled_task 'name' do
  accept_chef_license       true, false # default value: false
  chef_binary_path          String # default value: "C:/opscode/chef/bin/chef-client"
  config_directory          String # default value: "/etc/chef"
  daemon_options            Array # default value: []
  frequency                 String # default value: "minute"
  frequency_modifier        Integer, String # default value: "30 if frequency is 'minute', 1 otherwise"
  log_directory             String # default value: "CONFIG_DIRECTORY/log"
  log_file_name             String # default value: "client.log"
  password                  String
  priority                  Integer # default value: 7
  run_on_battery            true, false # default value: true
  splay                     Integer, String # default value: 300
  start_date                String
  start_time                String
  task_name                 String # default value: "chef-client"
  use_consistent_splay      true, false # default value: false
  user                      String # default value: "System"
  action                    Symbol # defaults to :add if not specified
end

где:

  • chef_client_scheduled_task — это ресурс.
  • name — имя, данное блоку ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла в нужное состояние.
  • accept_chef_license, chef_binary_path, config_directory, daemon_options, frequency, frequency_modifier, log_directory, log_file_name, password, priority, run_on_battery, splay, start_date, start_time, task_name, use_consistent_splay и user — доступные свойства этого ресурса.

Действия


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

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

Свойства


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

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

Принять соглашение об использовании и услугах мастера Chef Online. См. https://www.chef.io/online-master-agreement

chef_binary_path
Тип Ruby: Строка | Значение по умолчанию: C:/opscode/chef/bin/chef-client

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

config_directory
Тип Ruby: Строка | Значение по умолчанию: /etc/chef

Путь к каталогу конфигурации.

daemon_options
Тип Ruby: Массив | Значение по умолчанию: []

Массив параметров для передачи команде chef-client.

frequency
Тип Ruby: Строка | Значение по умолчанию: minute Допустимые значения: "daily", "hourly", "minute", "monthly", "on_idle", "on_logon", "once", "onstart"

Частота выполнения задачи.

frequency_modifier
Тип Ruby: Целое число, Строка | Значение по умолчанию: 30 if frequency is 'minute', 1 otherwise

Числовое значение для частоты выполнения задачи

log_directory
Тип Ruby: Строка | Значение по умолчанию: CONFIG_DIRECTORY/log

Путь к директории для создания файла журнала.

log_file_name
Тип Ruby: Строка | Значение по умолчанию: client.log

Имя файла журнала.

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

Пароль пользователя, от имени которого выполняется Chef Infra Client.

priority
Тип Ruby: Целое число | Значение по умолчанию: 7

Используйте для задания уровней приоритета в диапазоне от 0 до 10.

Новое в Chef Infra Client 17.5

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

Выполнять задачу Chef Infra Client, когда система работает от батарей.

splay
Тип Ruby: Целое число, Строка | Значение по умолчанию: 300

Случайное количество секунд от 0 до X для добавления к интервалу, чтобы все команды chef-client не выполнялись одновременно.

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

Дата начала задачи в формате дд.мм.гггг (например: 17.12.2020).

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

Время начала задачи в формате ЧЧ:мм (например: 14:00). Если частота — минута, время начала по умолчанию будет Time.now плюс значение frequency_modifier в минутах.

task_name
Тип Ruby: Строка | Значение по умолчанию: chef-client

Имя создаваемой задачи планировщика.

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

Всегда использовать одинаковое случайное значение разброса для каждого узла, чтобы обеспечить согласованные частоты выполнения chef-client.

Новое в Chef Infra Client 17.5

user
Тип Ruby: Строка | Значение по умолчанию: System

Имя пользователя, от имени которого выполняется Chef Infra Client.


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


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

Примеры


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

Настройка Chef Infra Client для выполнения с дефолтной периодичностью 30 минут:

chef_client_scheduled_task 'Run Chef Infra Client as a scheduled task'

Выполнение Chef Infra Client при запуске системы:

chef_client_scheduled_task 'Chef Infra Client on start' do
  frequency 'onstart'
end

Выполнение Chef Infra Client с дополнительными параметрами, передаваемыми клиенту:

chef_client_scheduled_task 'Run an override recipe' do
  daemon_options ['--override-runlist mycorp_base::default']
end

Выполнение Chef Infra Client ежедневно в 01:00, указав имя списка задач:

chef_client_scheduled_task 'Run chef-client named run-list daily' do
  frequency 'daily'
  start_time '01:00'
  daemon_options ['-n audit_only']
end

Выполнение Chef Infra Client с постоянной задержкой на каждом запуске, вычисленной один раз, аналогично тому, как работает ресурс chef_client_cron:

chef_client_scheduled_task 'Run chef-client with persistent splay' do
  use_consistent_splay true
end

Ресурс chef_client_systemd_timer

Страница ресурса chef_client_systemd_timer

Используйте ресурс chef_client_systemd_timer для настройки Chef Infra Client на выполнение в качестве таймера systemd.

Новинка в Chef Infra Client 16.0.

Синтаксис


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

chef_client_systemd_timer 'name' do
  accept_chef_license      true, false # default value: false
  chef_binary_path         String # default value: "/opt/chef/bin/chef-client"
  config_directory         String # default value: "/etc/chef"
  cpu_quota                Integer, String
  daemon_options           Array # default value: []
  delay_after_boot         String # default value: "1min"
  description              String # default value: "Chef Infra Client periodic execution"
  environment              Hash # default value: {}
  interval                 String # default value: "30min"
  job_name                 String # default value: "chef-client"
  run_on_battery           true, false # default value: true
  splay                    String # default value: "5min"
  user                     String # default value: "root"
  action                   Symbol # defaults to :add if not specified
end

где:

  • chef_client_systemd_timer — это ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла в нужное состояние.
  • accept_chef_license, chef_binary_path, config_directory, cpu_quota, daemon_options, delay_after_boot, description, environment, interval, job_name, run_on_battery, splay и user — доступные свойства этого ресурса.

Действия


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

:add
Добавить таймер systemd, который запускает Chef Infra Client. (по умолчанию)
:nothing
Этот блок ресурса не действует, пока не будет уведомлен другим ресурсом о действии. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:remove
Удалить таймер systemd, который запускает Chef Infra Client.

Свойства


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

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

Принять соглашение об использовании и обслуживании онлайн-мастера Chef. См. https://www.chef.io/online-master-agreement

chef_binary_path
Тип Ruby: Строка | Значение по умолчанию: /opt/chef/bin/chef-client

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

config_directory
Тип Ruby: Строка | Значение по умолчанию: /etc/chef

Путь к каталогу конфигурации.

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

systemd CPUQuota для запуска процесса chef-client. Это процентное значение от общего времени процессора, доступного в системе. Если система имеет более 1 ядра, это может быть значение больше 100.

Новое в Chef Infra Client 16.5

daemon_options
Тип Ruby: Массив | Значение по умолчанию: []

Массив параметров для передачи команде chef-client.

delay_after_boot
Тип Ruby: Строка | Значение по умолчанию: 1min

Время ожидания после загрузки, прежде чем интервал начнется. Это выражается как временной интервал systemd, например, 300seconds, 1hr или 1m. См. https://www.freedesktop.org/software/systemd/man/systemd.time.html для полного списка разрешенных значений временных интервалов.

description
Тип Ruby: Строка | Значение по умолчанию: Chef Infra Client periodic execution

Описание, добавляемое к таймеру systemd. Это будет отображено при запуске systemctl status для таймера.

environment
Тип Ruby: Хеш | Значение по умолчанию: {}

Хеш, содержащий дополнительные произвольные переменные среды, в которых будет выполняться таймер systemd в форме ({'ENV_VARIABLE' => 'VALUE'}).

interval
Тип Ruby: Строка | Значение по умолчанию: 30min

Интервал ожидания между выполнениями. Это выражается как временной интервал systemd, например, 300seconds, 1hr или 1m. См. https://www.freedesktop.org/software/systemd/man/systemd.time.html для полного списка разрешенных значений временных интервалов.

job_name
Тип Ruby: Строка | Значение по умолчанию: chef-client

Имя таймера системы для создания.

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

Запустить таймер Chef Infra Client, если система работает от батареи.

splay
Тип Ruby: Строка | Значение по умолчанию: 5min

Интервал между 0 и X для добавления к интервалу, чтобы все команды chef-client не выполнялись одновременно. Это выражается как временной интервал systemd, например, 300seconds, 1hr или 1m. См. https://www.freedesktop.org/software/systemd/man/systemd.time.html для полного списка разрешенных значений временных интервалов.

user
Тип Ruby: Строка | Значение по умолчанию: root

Имя пользователя, от имени которого запускается Chef Infra Client.


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


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

Примеры


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

Настройка Chef Infra Client для запуска с шагом по умолчанию 30 минут:

chef_client_systemd_timer 'Run Chef Infra Client as a systemd timer'

Запуск Chef Infra Client каждые 1 час:

chef_client_systemd_timer 'Run Chef Infra Client every 1 hour' do
  interval '1hr'
end

Запуск Chef Infra Client с дополнительными параметрами, переданными клиенту:

chef_client_systemd_timer 'Run an override recipe' do
  daemon_options ['--override-runlist mycorp_base::default']
end

Ресурс chef_client_trusted_certificate

Страница ресурса chef_client_trusted_certificate

Используйте ресурс chef_client_trusted_certificate для добавления сертификатов в каталог доверенных сертификатов Chef Infra Client. Это позволит Chef Infra Client взаимодействовать с внутренними зашифрованными ресурсами без ошибок.

Новое в Chef Infra Client 16.5.

Синтаксис


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

chef_client_trusted_certificate 'name' do
  cert_name        String # default value: 'name' unless specified
  certificate      String
  action           Symbol # defaults to :add if not specified
end

где:

  • chef_client_trusted_certificate — это ресурс.
  • name — имя, данное блоку ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла в нужное состояние.
  • cert_name и certificate — доступные свойства данного ресурса.

Действия


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

:add
Добавление доверенного сертификата в каталог доверенных сертификатов Chef Infra Client (по умолчанию)
:nothing
Этот блок ресурса не выполняется, если не уведомлен другим ресурсом о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце работы Chef Infra Client.
:remove
Удаление доверенного сертификата из каталога доверенных сертификатов Chef Infra Client

Свойства


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

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

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

certificate
Тип в Ruby: Строка | REQUIRED

Текст файла сертификата, включая комментарии BEGIN/END.


Общие функциональные возможности ресурсов


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

Примеры


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

Доверие к самозаверенному сертификату:

chef_client_trusted_certificate 'self-signed.badssl.com' do
  certificate <<~CERT
  -----BEGIN CERTIFICATE-----
  MIIDeTCCAmGgAwIBAgIJAPziuikCTox4MA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNV
  BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1TYW4gRnJhbmNp
  c2NvMQ8wDQYDVQQKDAZCYWRTU0wxFTATBgNVBAMMDCouYmFkc3NsLmNvbTAeFw0x
  OTEwMDkyMzQxNTJaFw0yMTEwMDgyMzQxNTJaMGIxCzAJBgNVBAYTAlVTMRMwEQYD
  VQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1TYW4gRnJhbmNpc2NvMQ8wDQYDVQQK
  DAZCYWRTU0wxFTATBgNVBAMMDCouYmFkc3NsLmNvbTCCASIwDQYJKoZIhvcNAQEB
  BQADggEPADCCAQoCggEBAMIE7PiM7gTCs9hQ1XBYzJMY61yoaEmwIrX5lZ6xKyx2
  PmzAS2BMTOqytMAPgLaw+XLJhgL5XEFdEyt/ccRLvOmULlA3pmccYYz2QULFRtMW
  hyefdOsKnRFSJiFzbIRMeVXk0WvoBj1IFVKtsyjbqv9u/2CVSndrOfEk0TG23U3A
  xPxTuW1CrbV8/q71FdIzSOciccfCFHpsKOo3St/qbLVytH5aohbcabFXRNsKEqve
  ww9HdFxBIuGa+RuT5q0iBikusbpJHAwnnqP7i/dAcgCskgjZjFeEU4EFy+b+a1SY
  QCeFxxC7c3DvaRhBB0VVfPlkPz0sw6l865MaTIbRyoUCAwEAAaMyMDAwCQYDVR0T
  BAIwADAjBgNVHREEHDAaggwqLmJhZHNzbC5jb22CCmJhZHNzbC5jb20wDQYJKoZI
  hvcNAQELBQADggEBAGlwCdbPxflZfYOaukZGCaxYK6gpincX4Lla4Ui2WdeQxE95
  w7fChXvP3YkE3UYUE7mupZ0eg4ZILr/A0e7JQDsgIu/SRTUE0domCKgPZ8v99k3A
  vka4LpLK51jHJJK7EFgo3ca2nldd97GM0MU41xHFk8qaK1tWJkfrrfcGwDJ4GQPI
  iLlm6i0yHq1Qg1RypAXJy5dTlRXlCLd8ufWhhiwW0W75Va5AEnJuqpQrKwl3KQVe
  wGj67WWRgLfSr+4QG1mNvCZb2CkjZWmxkGPuoP40/y7Yu5OFqxP5tAjj4YixCYTW
  EVA0pmzIzgBg+JIe3PdRy27T0asgQW/F4TY61Yk=
  -----END CERTIFICATE-----
  CERT
end

ресурс chef_container

страница ресурса chef_container

Используйте ресурс chef_container для взаимодействия с объектами контейнеров, которые существуют на сервере Chef Infra.

Синтаксис


Синтаксис использования ресурса chef_container в рецепте следующий:

chef_container 'name' do
  attribute 'value' # see properties section below
  ...
  action :action # see actions section below
end

где:

  • chef_container сообщает Chef Infra Client использовать поставщика Chef::Provider::ChefContainer во время выполнения Chef Infra Client
  • name — имя блока ресурса
  • attribute — ноль (или более) свойств, доступных для этого ресурса
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла в нужное состояние

Действия


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

:create
По умолчанию.
:delete
:nothing
Этот блок ресурса не действует, если не уведомлен другим ресурсом о необходимости выполнения действия. После уведомления этот блок ресурса выполняется либо немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


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

chef_server

URL сервера Chef Infra.

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

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

name

Имя контейнера.

notifies
Тип Ruby: Symbol, Chef::Resource\[String\]

Ресурс может уведомить другой ресурс о выполнении действия, когда изменится его состояние. Укажите 'resource[name]', :action, которое должен выполнить ресурс, а затем :timer для этого действия. Ресурс может уведомлять несколько ресурсов; используйте оператор notifies для каждого ресурса, который необходимо уведомить.

Если указанный ресурс не существует, возникает ошибка. В отличие от этого, subscribes не завершается ошибкой, если исходный ресурс не найден.

Таймер определяет момент во время выполнения Chef Infra Client, в котором выполняется уведомление. Доступны следующие таймеры:

:before

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

:delayed

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

:immediate, :immediately

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

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

subscribes :action, 'resource[name]', :timer
subscribes
Тип Ruby: Symbol, 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_data_bag

страница ресурса chef_data_bag

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

Используйте ресурс chef_data_bag для управления хранилищами данных.

Синтаксис


Синтаксис использования ресурса chef_data_bag в рецепте следующий:

chef_data_bag 'name' do
  attribute 'value' # see properties section below
  ...
  action :action # see actions section below
end

где:

  • chef_data_bag сообщает Chef Infra Client использовать поставщика Chef::Provider::ChefDataBag во время выполнения Chef Infra Client
  • name — имя блока ресурса и также имя хранилища данных
  • attribute — ноль (или более) свойств, доступных для этого ресурса
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла в нужное состояние

Действия


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

:create
По умолчанию. Используется для создания хранилища данных.
:delete
Используется для удаления хранилища данных.
:nothing
Этот блок ресурса не действует, если не уведомлен другим ресурсом о необходимости выполнения действия. После уведомления этот блок ресурса выполняется либо немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


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

chef_server

URL сервера Chef Infra.

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

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

name

Имя хранилища данных.

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_data_bag_item

Страница ресурса chef_data_bag_item

Data bag — это контейнер, содержащий связанные элементы data bag item, где каждый отдельный элемент data bag item — это файл JSON. knife может загрузить элемент data bag item, указав имя data bag, к которому он относится, и имя файла элемента data bag item. Единственное структурное требование к элементу data bag item заключается в том, что он должен иметь id:

{
  /* This is a supported comment style */
  // This style is also supported
  "id": "ITEM_NAME",
  "key": "value"
}

где

  • key и value — это пара key:value для каждого дополнительного атрибута в элементе data bag item
  • /* ... */ и // ... показывают два способа добавления комментариев в элемент data bag item

Используйте ресурс chef_data_bag_item для управления элементами data bag.

Синтаксис


Синтаксис использования ресурса chef_data_bag_item в рецепте следующий:

chef_data_bag_item 'name' do
  attribute 'value' # see properties section below
  ...
  action :action # see actions section below
end

где:

  • chef_data_bag_item сообщает Chef Infra Client использовать поставщик Chef::Provider::ChefDataBagItem во время выполнения Chef Infra Client
  • name — это имя блока ресурса и также имя элемента data bag item
  • attribute — это ноль (или более) свойств, доступных для этого ресурса
  • action определяет действия, которые Chef Infra Client предпримет для приведения узла в желаемое состояние

Действия


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

:create
По умолчанию. Используется для создания элемента data bag item.
:delete
Используется для удаления элемента data bag item.
:nothing
Этот блок ресурса не выполняет никаких действий, пока не будет уведомлен другим ресурсом. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


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

chef_server

URL сервера Chef Infra.

complete

Указывает, определяет ли этот ресурс элемент data bag item полностью. Если true, любые свойства, не указанные в этом ресурсе, будут сброшены до значений по умолчанию.

encrypt

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

encryption_version

Минимальная требуемая версия шифрования data bag. Возможные значения: 0, 1, 2 и 3. При использовании машин с chef-client версии 13.0.113 (или выше) рекомендуется установить это значение в 3.

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
raw_data

Используется для создания data bag из локального файла из ./data_bags/bag_name/file.

raw_json

Элемент data bag item в формате JSON. Например:

{
  "id": "adam",
  "real_name": "Adam Brent Jacob"
}
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_environment

Страница ресурса chef_environment

Окружение — это способ сопоставления реального рабочего процесса организации с тем, что можно настроить и управлять с помощью Chef Infra. Это сопоставление выполняется путем задания атрибутов и фиксации кулинарных книг на уровне среды. С помощью сред вы можете изменять конфигурации кулинарных книг в зависимости от назначения системы. Например, определив различные среды разработки и производства, вы можете определить правильный URL сервера базы данных для каждой среды. Среды также позволяют организациям уверенно перемещать новые релизы кулинарных книг из среды разработки в производство, проходя этапы релизов через тестовые среды, прежде чем переходить в производство.

END_OF_DOCUMENT_MARKER

Используйте ресурс chef_environment для управления средами.

Синтаксис


Синтаксис использования ресурса chef_environment в рецепте:

chef_environment 'name' do
  attribute 'value' # see properties section below
  ...
  action :action # see actions section below
end

где:

  • chef_environment сообщает Chef Infra Client использовать поставщик Chef::Provider::ChefEnvironment во время выполнения
  • name — имя блока ресурса; если свойство name не указано в рецепте, то name также является именем среды
  • attribute — ноль или более свойств, доступных для данного ресурса
  • action определяет действия Chef Infra Client для достижения желаемого состояния узла

Действия


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

:create
По умолчанию. Используется для создания среды.
:delete
Используется для удаления среды.
:nothing
Блок ресурса не выполняется, пока не получит уведомление от другого ресурса. После уведомления, блок либо выполняется немедленно, либо добавляется в очередь на выполнение в конце работы Chef Infra Client.

Свойства


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

chef_server

URL сервера Chef Infra.

complete

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

cookbook_versions

Версии кулинарных книг, используемые в среде. Значение по умолчанию: {}.

default_attributes

Атрибут default автоматически сбрасывается в начале каждого выполнения Chef Infra Client и имеет наименьший приоритет среди атрибутов. Используйте атрибуты default в кулинарных книгах как можно чаще.

Значение по умолчанию: {}.

description

Описание среды. Это значение заполняет поле описания среды на сервере Chef Infra.

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

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

name

Имя среды.

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
override_attributes

Атрибут override автоматически сбрасывается в начале каждого выполнения Chef Infra Client и имеет более высокий приоритет, чем атрибуты default, force_default и normal. Атрибут override чаще всего указывается в рецепте, но может быть указан в файле атрибутов, для роли и/или среды. Кулинарная книга должна быть разработана таким образом, чтобы использовать атрибуты override только при необходимости.

Значение по умолчанию: {}.

raw_json

Среда в формате JSON. Например:

{
  "name":"backend",
  "description":"",
  "cookbook_versions":{},
  "json_class":"Chef::Environment",
  "chef_type":"environment",
  "default_attributes":{},
  "override_attributes":{}
}
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_gem

Страница ресурса chef_gem

Используйте ресурс chef_gem для установки драгоценного камня только для экземпляра Ruby, предназначенного для chef-клиента. Если драгоценный камень устанавливается из локального файла, его необходимо добавить в узел с помощью ресурсов remote_file или cookbook_file.

Ресурс chef_gem работает со всеми теми же свойствами и параметрами, что и ресурс gem_package, но не принимает свойство gem_binary, так как всегда использует CurrentGemEnvironment, в котором выполняется chef-client. В дополнение к выполнению действий, аналогичных ресурсу gem_package, ресурс chef_gem выполняет следующие действия:

  • Выполняет свои действия немедленно, до схождения, позволяя использовать драгоценный камень в рецепте сразу после его установки.
  • Выполняет Gem.clear_paths после действия, обеспечивая, что драгоценный камень осведомлён о изменениях, чтобы его можно было использовать сразу после установки.

Предупреждение

Ресурсы chef_gem и gem_package оба используются для установки драгоценных камней Ruby. На любой машине, на которой установлен Chef Infra Client, есть два экземпляра Ruby. Один — стандартный, системный экземпляр Ruby, а другой — выделенный экземпляр, доступный только для Chef Infra Client. Используйте ресурс chef_gem для установки драгоценных камней в экземпляр Ruby, выделенный для Chef Infra Client. Используйте ресурс gem_package для установки всех остальных драгоценных камней (т. е. установите драгоценные камни в системе).

Синтаксис


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

chef_gem 'name' do
  clear_sources               true, false
  gem_binary                  String
  include_default_source      true, false
  options                     String, Hash, Array
  package_name                String
  source                      String, Array
  timeout                     String, Integer
  version                     String
  action                      Symbol # defaults to :install if not specified
end

где:

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

Действия


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

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

Свойства


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

clear_sources
Тип Ruby: true, false | Значение по умолчанию: false unless `clear_gem_sources` set to true in the `client.rb` config.

Установите в true, чтобы загрузить драгоценный камень из пути, указанного в свойстве source (а не из RubyGems).

gem_binary
Тип Ruby: Строка | Значение по умолчанию: The `gem` binary included with Chef Infra Client.

Путь к исполняемому файлу драгоценного камня, используемому для установки. По умолчанию используется та же версия Ruby, что и в Chef Infra Client.

include_default_source
Тип Ruby: true, false

Установлено в значение false, чтобы не включать Chef::Config[:rubygems_url] в источники.

Новая функция в Chef Client 13.0

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

Параметры для установки gem, либо в виде хэша, либо в виде строки. Если передаётся хэш, параметры передаются в Gem::DependencyInstaller.new, и gem будет установлен через API gems. Если передаётся строка, gem будет установлен с помощью вызова команды gem. Использование хэша параметров с явным gem_binary приведёт к неопределённому поведению.

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

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

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

Необязательно. URL или список URL, по которым расположен пакет gem. Этот список добавляется к источнику, настроенному в Chef::Config[:rubygems_url] (см. также include_default_source), чтобы составить полный список источников rubygems. Пользователи в «изолированной» среде должны установить Chef::Config[:rubygems_url] на свой локальный зеркало RubyGems.

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

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

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

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


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


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

Примеры


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

Установка gem во время компиляции или слияния

Для установки gem во время конфигурации узла Chef Infra Client (фаза слияния), установите свойство compile_time в значение false:

chef_gem 'loofah' do
  compile_time false
  action :install
end

Для установки gem во время построения коллекции ресурсов (фаза компиляции), установите свойство compile_time в значение true:

chef_gem 'loofah' do
  compile_time true
  action :install
end

Установка gem MySQL в Chef Infra Client*

apt_update

build_essential 'install compilation tools' do
  compile_time true
end

chef_gem 'mysql'

Ресурс chef_group

Страница ресурса chef_group

Используйте ресурс chef_group для взаимодействия с объектами групп, которые существуют на сервере Chef.

Синтаксис


Синтаксис использования ресурса chef_group в рецепте:

chef_group 'name' do
  attribute 'value' # see properties section below
  ...
  action :action # see actions section below
end

где:

  • chef_group сообщает Chef Infra Client использовать поставщик Chef::Provider::ChefGroup во время выполнения Chef Infra Client
  • name — имя блока ресурса
  • attribute — ноль или более доступных свойств этого ресурса
  • action определяет действия, которые Chef Infra Client предпримет, чтобы привести узел в нужное состояние

Действия


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

:create
По умолчанию.
:delete
:nothing
Этот блок ресурса не выполняет действия, пока не будет уведомлен другим ресурсом. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


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

chef_server

URL сервера Chef.

clients

&mldr;

complete

Используется для указания, определяет ли этот ресурс полностью chef-клиент. Если true, любое свойство, не указанное в этом ресурсе, будет сброшено до значений по умолчанию.

groups

&mldr;

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
raw_json

Группа в формате JSON-данных. Например:

{
  :groupname => "chef"
}
remove_clients

&mldr;

remove_groups

&mldr;

remove_users

&mldr;

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
users

&mldr;

Примеры


У этого ресурса нет примеров.

Ресурс chef_handler

Страница ресурса chef_handler

Используйте ресурс chef_handler для включения обработчиков во время выполнения Chef Infra Client. Ресурс позволяет передавать аргументы в Chef Infra Client, который затем применяет условия, определённые пользовательским обработчиком, к данным атрибутов узла, собранным во время выполнения Chef Infra Client, и затем обрабатывает обработчик на основе этих данных. Ресурс chef_handler обычно определяется в начале списка запуска узла (часто как первый элемент). Это гарантирует, что все обработчики будут доступны на протяжении всего выполнения Chef Infra Client.

Новое в Chef Infra Client 14.0.

Типы обработчиков

Существует три типа обработчиков:

Обработчик Описание
exception Обработчик исключений используется для определения ситуаций, которые привели к завершению выполнения Chef Infra Client с ошибкой. Обработчик исключений можно загрузить в начале выполнения Chef Infra Client, добавив в список запуска узла рецепт, содержащий ресурс chef_handler. Обработчик исключений выполняется, когда свойство failed? для объекта run_status возвращает true.
report Обработчик отчётов используется, когда выполнение Chef Infra Client завершается успешно и сообщает о некоторых деталях этого выполнения. Обработчик отчётов можно загрузить в начале выполнения Chef Infra Client, добавив в список запуска узла рецепт, содержащий ресурс chef_handler. Обработчик отчётов выполняется, когда свойство success? для объекта run_status возвращает true.
start Обработчик запуска используется для выполнения событий в начале выполнения Chef Infra Client. Обработчик запуска можно загрузить в начале выполнения Chef Infra Client, добавив обработчик в настройку start_handlers в файле client.rb или установив gem, содержащий обработчик, используя ресурс chef_gem в рецепте в кулинарной книге chef-client. (Обработчик запуска не может быть загружен с помощью ресурса chef_handler.)

Исключение/Отчёт

Обработчики исключений и отчётов используются для запуска определённого поведения в ответ на конкретные ситуации, как правило, выявленные во время выполнения Chef Infra Client.

  • Обработчик исключений используется для запуска поведения при сбое определённого аспекта выполнения Chef Infra Client.
  • Обработчик отчётов используется для запуска поведения при успешном выполнении определённого аспекта выполнения Chef Infra Client.

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

Обработчики исключений и отчётов становятся доступными для выполнения Chef Infra Client одним из следующих способов:

  • Добавление ресурса chef_handler в рецепт и добавление этого рецепта в список запуска для узла. (Ресурс chef_handler доступен из кулинарной книги chef_handler.)
  • Добавление обработчика в одну из следующих настроек в файле client.rb узла: exception_handlers и/или report_handlers

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

Чтобы использовать ресурс chef_handler в рецепте, добавьте код, подобный следующему:

chef_handler 'name_of_handler' do
  source '/path/to/handler/handler_name'
  action :enable
end

Например, обработчик Growl должен быть включён в начале выполнения Chef Infra Client:

chef_gem 'chef-handler-growl'

и затем активируется в рецепте с помощью ресурса chef_handler:

chef_handler 'Chef::Handler::Growl' do
  source 'chef/handler/growl'
  action :enable
end

Запуск

Обработчик запуска не загружается в выполнение Chef Infra Client из рецепта, а вместо этого перечисляется в файле client.rb с помощью атрибута start_handlers. Обработчик запуска должен быть установлен на узле и доступен для Chef Infra Client до начала выполнения Chef Infra Client. Используйте кулинарную книгу chef-client для установки обработчика запуска.

Обработчики запуска становятся доступными для выполнения Chef Infra Client одним из следующих способов:

  • Добавление обработчика запуска в кулинарную книгу chef-client, которая устанавливает обработчик на узел, чтобы он был доступен Chef Infra Client в начале выполнения Chef Infra Client
  • Добавление обработчика в одну из следующих настроек в файле client.rb узла: start_handlers

Кулинарную книгу chef-client можно настроить на автоматическую установку и конфигурацию gem, необходимых для обработчика запуска. Например:

node.override['chef_client']['load_gems']['chef-reporting'] = {
  require_name: 'chef_reporting',
  action: :install,
}

node.override['chef_client']['config']['start_handlers'] = [
  {
    class: 'Chef::Reporting::StartHandler',
    arguments: [],
  },
]

include_recipe 'chef-client::config'

Синтаксис


Блок ресурса chef_handler включает обработчики во время выполнения chef-client. Два обработчика — JsonFile и ErrorReport — встроенны в Chef:

chef_handler 'Chef::Handler::JsonFile' do
  source 'chef/handler/json_file'
  arguments :path => '/var/chef/reports'
  action :enable
end

и:

chef_handler 'Chef::Handler::ErrorReport' do
  source 'chef/handler/error_report'
  action :enable
end

показывают, как включить эти обработчики в рецепте.

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

chef_handler 'name' do
  arguments       Array, Hash # default value: []
  class_name      String # default value: 'name' unless specified
  source          String
  type            Hash # default value: {"report"=>true, "exception"=>true}
  action          Symbol # defaults to :enable if not specified
end

где:

  • chef_handler — это ресурс.
  • name — это имя, присвоенное блоку ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • arguments, class_name, source и type — доступные свойства этого ресурса.

Действия


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

:disable
Отключает обработчик для текущего выполнения Chef Infra Client на текущем узле.
:enable
Включает обработчик для текущего выполнения Chef Infra Client на текущем узле. (по умолчанию)
:nothing
Этот блок ресурса не выполняется, если он не уведомлён другим ресурсом о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


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

arguments
Тип Ruby: Массив, Хеш | Значение по умолчанию: []

Массив аргументов, которые передаются в инициализатор класса обработчика. Например:

arguments :key1 => 'val1'

или:

arguments [:key1 => 'val1', :key2 => 'val2']
class_name
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Имя класса обработчика. Может быть именем модуля.

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

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

type
Тип Ruby: Словарь | Значение по умолчанию: {"report"=>true, "exception"=>true}

Тип регистрируемого обработчика, т.е. :report, :exception или оба.


Общие функциональные возможности ресурсов


Ресурсы Chef включают общие свойства, уведомления и защитные механизмы ресурсов.

Общие свойства

Следующие свойства являются общими для всех ресурсов:

compile_time

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

Управляет фазой, в которой ресурс выполняется на узле. Установите в значение true, чтобы запустить его во время построения коллекции ресурсов (compile phase). Установите в значение false, чтобы запустить его во время конфигурации узла клиентом Chef Infra (converge phase).

ignore_failure

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

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

retries

Тип Ruby: Целое число | Значение по умолчанию: 0

Количество попыток перехватить исключения и повторить ресурс.

retry_delay

Тип Ruby: Целое число | Значение по умолчанию: 2

Задержка в секундах между попытками повтора.

sensitive

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

Убедиться, что конфиденциальные данные ресурсов не регистрируются клиентом Chef Infra.

Уведомления

notifies

Тип Ruby: Символ, 'Chef::Resource[Строка]'

Ресурс может уведомить другой ресурс о выполнении действия при изменении его состояния. Укажите 'resource[name]', :action, которое должен выполнить ресурс, и затем :timer для этого действия. Ресурс может уведомлять несколько ресурсов; используйте оператор notifies для каждого уведомляемого ресурса.

Если указанный ресурс не существует, возникает ошибка. В отличие от этого, subscribes не завершается ошибкой, если исходный ресурс не найден.

Таймер указывает момент во время выполнения клиента Chef Infra, в котором выполняется уведомление. Доступны следующие таймеры:

:before

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

:delayed

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

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

: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.

Примеры


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

Включить обработчик ‘MyHandler’

Следующий пример демонстрирует, как включить вымышленный обработчик ‘MyHandler’, который находится на диске по адресу /etc/chef/my_handler.rb. Обработчик будет настроен на выполнение с клиентом Chef Infra и будет получать значения для метода инициализации обработчика:

chef_handler 'MyHandler' do
  source '/etc/chef/my_handler.rb' # the file should already be at this path
  arguments path: '/var/chef/reports'
  action :enable
end

Включить обработчики во время фазы компиляции

chef_handler 'Chef::Handler::JsonFile' do
  source 'chef/handler/json_file'
  arguments path: '/var/chef/reports'
  action :enable
  compile_time true
end

Обработать только исключения

chef_handler 'Chef::Handler::JsonFile' do
  source 'chef/handler/json_file'
  arguments path: '/var/chef/reports'
  type exception: true
  action :enable
end

Версии кулинарных книг (пользовательский обработчик)

@juliandunn создал пользовательский обработчик отчетов, который регистрирует все кулинарные книги и версии кулинарных книг, которые использовались во время выполнения клиента Chef Infra, а затем предоставляет отчет после завершения выполнения.

cookbook_versions.rb:

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

require 'chef/log'

module Chef
  class CookbookVersionsHandler < Chef::Handler
    def report
      cookbooks = run_context.cookbook_collection
      Chef::Log.info('Cookbooks and versions run: #{cookbooks.map {|x| x.name.to_s + ' ' + x.version }}')
    end
  end
end

default.rb:

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

cookbook_file '/etc/chef/cookbook_versions.rb' do
  source 'cookbook_versions.rb'
  action :create
end

chef_handler 'Chef::CookbookVersionsHandler' do
  source '/etc/chef/cookbook_versions.rb'
  type report: true
  action :enable
end

Этот рецепт сгенерирует отчет, подобный следующему:

[2013-11-26T03:11:06+00:00] INFO: Chef Infra Client Run complete in 0.300029878 seconds
[2013-11-26T03:11:06+00:00] INFO: Running report handlers
[2013-11-26T03:11:06+00:00] INFO: Cookbooks and versions run: ["cookbook_versions_handler 1.0.0"]
[2013-11-26T03:11:06+00:00] INFO: Report handlers complete

Обработчик JsonFile

Обработчик JsonFile доступен из кулинарной книги chef_handler и может использоваться с исключениями и отчетами. Он сериализует данные состояния выполнения в файл JSON. Этот обработчик можно включить одним из следующих способов.

Добавив следующие строки кода Ruby в файл client.rb или solo.rb, в зависимости от того, как запускается клиент Chef Infra:

require 'chef/handler/json_file'
report_handlers << Chef::Handler::JsonFile.new(path: '/var/chef/reports')
exception_handlers << Chef::Handler::JsonFile.new(path: '/var/chef/reports')

Используя ресурс chef_handler в рецепте, аналогично следующему:

chef_handler 'Chef::Handler::JsonFile' do
  source 'chef/handler/json_file'
  arguments path: '/var/chef/reports'
  action :enable
end

После выполнения данные состояния выполнения можно загрузить и проверить с помощью Interactive Ruby (IRb):

irb(main):002:0> require 'json' => true
irb(main):003:0> require 'chef' => true
irb(main):004:0> r = JSON.parse(IO.read('/var/chef/reports/chef-run-report-20110322060731.json')) => ... output truncated
irb(main):005:0> r.keys => ['end_time', 'node', 'updated_resources', 'exception', 'all_resources', 'success', 'elapsed_time', 'start_time', 'backtrace']
irb(main):006:0> r['elapsed_time'] => 0.00246

Зарегистрировать обработчик JsonFile

chef_handler 'Chef::Handler::JsonFile' do
  source 'chef/handler/json_file'
  arguments path: '/var/chef/reports'
  action :enable
end

Обработчик ErrorReport

Обработчик ErrorReport встроен в клиент Chef Infra и может использоваться как для исключений, так и для отчетов. Он сериализует данные отчета об ошибках в файл JSON. Этот обработчик можно включить одним из следующих способов.

Добавив следующие строки кода Ruby в файл client.rb или solo.rb, в зависимости от того, как запускается клиент Chef Infra:

require 'chef/handler/error_report'
report_handlers << Chef::Handler::ErrorReport.new
exception_handlers << Chef::Handler::ErrorReport.new

Используя ресурс chef_handler в рецепте, аналогично следующему:

chef_handler 'Chef::Handler::ErrorReport' do
  source 'chef/handler/error_report'
  action :enable
end

ресурс chef_node

страница ресурса chef_node

Узел — это любое устройство (физическое, виртуальное, облачное, сетевое устройство и т. д.), которое управляется Chef Infra.

Используйте ресурс chef_node для управления узлами.

Синтаксис


Синтаксис использования ресурса chef_node в рецепте следующий:

chef_node 'name' do
  attribute 'value' # see properties section below
  ...
  action :action # see actions section below
end

где:

  • chef_node сообщает Chef Infra Client, что следует использовать поставщик Chef::Provider::ChefNode во время выполнения Chef Infra Client
  • name — имя блока ресурса
  • attribute — ноль или более свойств, доступных для этого ресурса
  • action определяет шаги, которые Chef Infra Client предпримет для перевода узла в желаемое состояние

Действия


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

:create
По умолчанию. Используется для создания узла.
:delete
Используется для удаления узла.
:nothing
Этот блок ресурса не выполняет действий, пока не получит уведомление от другого ресурса. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


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

automatic_attributes

Атрибут automatic содержит данные, идентифицированные Ohai в начале каждого выполнения Chef Infra Client. Атрибут automatic нельзя изменить, и он всегда имеет наивысший приоритет среди атрибутов.

Значение по умолчанию: {}.

chef_environment

Среда Chef Infra Server, в которой должен (или в которой уже существует) этот узел.

chef_server

URL сервера Chef Infra Server.

complete

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

default_attributes

Атрибут default автоматически сбрасывается в начале каждого выполнения Chef Infra Client и имеет наименьший приоритет среди атрибутов. Используйте атрибуты default в кулинарных книгах как можно чаще.

Значение по умолчанию: {}.

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

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

name

Уникальный идентификатор узла.

normal_attributes

Атрибут normal — это настройка, которая сохраняется в объекте узла. Атрибут normal имеет более высокий приоритет, чем атрибут default.

Значение по умолчанию: {}.

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
override_attributes

Атрибут override автоматически сбрасывается в начале каждого выполнения Chef Infra Client и имеет более высокий приоритет, чем атрибуты default, force_default и normal. Атрибут override чаще всего указывается в рецепте, но может быть указан в файле атрибутов, для роли и/или для среды. Кулинарная книга должна быть разработана таким образом, чтобы использовать атрибуты override только по необходимости.

Значение по умолчанию: {}.

raw_json

Узел в формате JSON. Например:

{
  "overrides": {},
  "name": "latte",
  "chef_type": "node",
  "json_class": "Chef::Node",
  "attributes": {
    "hardware_type": "laptop"
  },
  "run_list": [
    "recipe[apache2]"
  ],
  "defaults": {}
}
run_list

Список ролей и/или рецептов, которые должны быть применены, разделённый запятыми. Значение по умолчанию: []. Например: ["recipe[default]","recipe[apache2]"]

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_organization

Страница ресурса chef_organization

Используйте ресурс chef_organization для взаимодействия с объектами организаций, которые существуют на сервере Chef Infra Server.

Синтаксис


Синтаксис использования ресурса chef_organization в рецепте:

chef_organization 'name' do
  attribute 'value' # see attributes section below
  ...
  action :action # see actions section below
end

где:

  • chef_organization сообщает Chef Infra Client, что следует использовать поставщик Chef::Provider::ChefOrganization во время выполнения Chef Infra Client
  • name — имя блока ресурса
  • attribute — ноль или более атрибутов, доступных для этого ресурса
  • action определяет шаги, которые Chef Infra Client предпримет для перевода узла в желаемое состояние

Действия


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

:create
По умолчанию.
:delete
:nothing
Этот блок ресурса не выполняет действий, пока не получит уведомление от другого ресурса. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


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

chef_server

URL сервера Chef Infra Server.

complete

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

full_name

Полное имя должно начинаться с не пробельного символа и иметь длину от 1 до 1023 символов. Например: Chef Software, Inc..

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

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

invites

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

members

Используется для указания списка пользователей, которые ДОЛЖНЫ быть членами организации. Эти пользователи будут добавлены в организацию напрямую. Пользователь, инициирующий эту операцию, ДОЛЖЕН также иметь разрешение на добавление пользователей в указанную организацию.

members_specified

Используется для определения, является ли пользователь членом организации. Возвращает true, если пользователь является членом.

name

Имя должно начинаться с маленькой буквы или цифры, может содержать только маленькие буквы, цифры, дефисы и нижние подчеркивания, и иметь длину от 1 до 255 символов. Например: chef.

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
raw_json

Организация в формате JSON. Например:

{
  "name": "chef",
  "full_name": "Chef Software, Inc",
  "guid": "f980d1asdfda0331235s00ff36862
  ...
}
remove_members

Используйте для удаления указанных пользователей из организации. Приглашения, которые не были приняты, будут отменены.

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_role

Страница ресурса chef_role

Роль — это способ определить определённые шаблоны и процессы, которые существуют на узлах в организации и относятся к одной конкретной функции. Каждая роль состоит из нуля (или более) атрибутов и списка выполнения. Каждому узлу может быть назначена нуль (или более) ролей. Когда роль применяется к узлу, детали конфигурации этого узла сравниваются с атрибутами роли, а затем содержимое списка выполнения роли применяется к деталям конфигурации узла. При выполнении Chef Infra Client он объединяет собственные атрибуты и списки выполнения с теми, которые содержатся в каждой назначенной роли.

Используйте ресурс chef_role для управления ролями.

Синтаксис


Синтаксис использования ресурса chef_role в рецепте:

chef_role 'name' do
  attribute 'value' # see properties section below
  ...
  action :action # see actions section below
end

где:

  • chef_role указывает Chef Infra Client использовать поставщика Chef::Provider::ChefRole во время выполнения Chef Infra Client
  • name — имя блока ресурса; если свойство name не указано в рецепте, то name также является именем роли
  • attribute — ноль (или более) доступных свойств для данного ресурса
  • action определяет действия, которые Chef Infra Client предпримет, чтобы привести узел к желаемому состоянию

Действия


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

:create
По умолчанию. Используется для создания роли.
:delete
Используется для удаления роли.
:nothing
Этот блок ресурса не действует, пока не будет уведомлен другим ресурсом о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


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

chef_server

URL сервера Chef Infra.

complete

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

default_attributes

Атрибут default автоматически сбрасывается в начале каждого выполнения Chef Infra Client и имеет самый низкий приоритет атрибутов. Используйте атрибуты default в кулинарных книгах как можно чаще.

Значение по умолчанию: {}.

description

Описание роли. Это значение заполняет поле описания роли на сервере Chef Infra.

env_run_lists

Список выполнения, специфичный для среды, для роли. Значение по умолчанию: []. Например: ["env_run_lists[webserver]"]

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

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

name

Имя роли.

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
override_attributes

Атрибут override автоматически сбрасывается в начале каждого выполнения Chef Infra Client и имеет более высокий приоритет атрибутов, чем default, force_default и normal атрибуты. Атрибут override чаще всего указывается в рецепте, но может быть указан в файле атрибутов, для роли и/или для среды. Кулинарная книга должна быть составлена так, чтобы использовать атрибуты override только при необходимости.

Значение по умолчанию: {}.

raw_json

Роль в формате JSON. Например:

{
  "name": "webserver",
  "chef_type": "role",
  "json_class": "Chef::Role",
  "default_attributes": {},
  "description": "A webserver",
  "run_list": [
    "recipe[apache2]"
  ],
  "override_attributes": {}
}
run_list

Список ролей и/или рецептов, которые нужно применить, разделённых запятыми. Значение по умолчанию: []. Например: ["recipe[default]","recipe[apache2]"]

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_sleep

Страница ресурса chef_sleep

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

Новое в Chef Infra Client 15.5.

Синтаксис


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

chef_sleep 'name' do
  seconds      String, Integer # default value: 'name' unless specified
  action       Symbol # defaults to :sleep if not specified
end

где:

  • chef_sleep — ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action — идентификатор шагов, которые Chef Infra Client выполнит для приведения узла к желаемому состоянию.
  • seconds — свойство, доступное для этого ресурса.

Действия


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

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

Свойства


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

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

Количество секунд сна.


Общие функциональные возможности ресурсов


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

Примеры


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

Спящий 10 секунд:

chef_sleep '10'

Спящий 10 секунд с описательным именем ресурса для ведения журнала:

chef_sleep 'wait for the service to start' do
  seconds 10
end

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

service 'Service that is slow to start and reports as started' do
  service_name 'my_database'
  action :start
  notifies :sleep, chef_sleep['wait for service start']
end

chef_sleep 'wait for service start' do
  seconds 30
  action :nothing
end

Ресурс chef_user

Страница ресурса chef_user

Используйте ресурс chef_user для управления пользователями.

Синтаксис


Синтаксис использования ресурса chef_user в рецепте следующий:

chef_user 'value' # see properties section below
  ...
  action :action # see actions section below
end

где:

  • chef_user сообщает Chef Infra Client использовать провайдер Chef::Provider::ChefUser во время выполнения Chef Infra Client
  • name — имя блока ресурса; если свойство name не указано в рецепте, то name также является именем пользователя
  • attribute — ноль или более свойств, доступных для данного ресурса
  • action определяет действия Chef Infra Client для приведения узла в нужное состояние

Действия


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

:create
По умолчанию. Используется для создания пользователя.
:delete
Используется для удаления пользователя.
:nothing
Этот блок ресурса не выполняет действий, пока не получит уведомление от другого ресурса о необходимости выполнить действие. После получения уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


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

admin

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

chef_server

URL сервера Chef Infra.

complete

Указывает, определяет ли этот ресурс пользователя полностью. Если true, любые свойства, не указанные в этом ресурсе, будут сброшены до значений по умолчанию.

email

Электронный адрес пользователя.

external_authentication_uid

&mldr;

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

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

name

Имя пользователя.

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
output_key_format

Указывает формат открытого ключа. Возможные значения: pem, der или openssh. Значение по умолчанию: openssh.

output_key_path

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

raw_json

Пользователь в формате JSON. Например:

{
  "name": "Robert Forster"
}
recovery_authentication_enabled

&mldr;

source_key

Используется для копирования открытого или закрытого ключа, но с применением другого format и password. Используйте совместно с source_key_pass_phrase и source_key_path.

source_key_pass_phrase

Фраза доступа к открытому ключу. Используйте совместно с source_key и source_key_path.

source_key_path

Путь к открытому ключу. Используйте совместно с source_key и source_key_pass_phrase.

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_vault_secret

Страница ресурса chef_vault_secret

Используйте ресурс chef_vault_secret для хранения секретов в элементах Chef Vault. По возможности и по мере необходимости этот ресурс пытается сопоставить поведение и функциональность с подкомандами knife vault.

Новинка в Chef Infra Client 16.0.

Синтаксис


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

chef_vault_secret 'name' do
  admins           String, Array
  clients          String, Array
  data_bag         String
  environment      String
  id               String # default value: 'name' unless specified
  raw_data         Hash, Mash (Hash-like) # default value: {}
  search           String # default value: "*:*"
  action           Symbol # defaults to :create if not specified
end

где:

  • chef_vault_secret — ресурс.
  • name — имя, данное блоку ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла в нужное состояние.
  • admins, clients, data_bag, environment, id, raw_data и search — доступные свойства этого ресурса.

Действия


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

:create
Создаёт элемент или обновляет его, если он уже существует. (по умолчанию)
:create_if_missing
Вызывает действие создания, если элемент не существует.
:delete
Удаляет элемент и его ключи (‘id’_keys).
:nothing
Этот блок ресурса не выполняет действий, пока не получит уведомление от другого ресурса о необходимости выполнить действие. После получения уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


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

admins
Тип Ruby: Строка, Массив | REQUIRED

Список административных пользователей, которые должны иметь доступ к элементу. Соответствует параметру «admin» при использовании плагина chef-vault knife. Может быть указан как строка через запятые или как массив.

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

Запрос поиска API-клиентов узлов, которые должны иметь доступ к элементу.

data_bag
Тип Ruby: Строка | REQUIRED

Мешок данных, содержащий элемент.

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

Chef-среда данных, если хранятся значения по средам.

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

Имя элемента мешка данных, если оно отличается от имени блока ресурса.

raw_data
Тип Ruby: Хэш, Маш (похожий на хэш) | Значение по умолчанию: {}

Необработанные данные в виде хэша Ruby, которые будут храниться в элементе.

search
Тип Ruby: Строка | Значение по умолчанию: *:*

Запрос поиска, который соответствует запросу, используемому для клиентов, сохраняется как поле в элементе.


Общая функциональность ресурса


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

Защитные механизмы

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

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

Свойство guard полезно для обеспечения идемпотентности ресурса, позволяя ресурсу проверять желаемое состояние во время его выполнения, и если желаемое состояние присутствует, чтобы Chef Infra Client ничего не делал.

Свойства

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

not_if

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

only_if

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

Примеры


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

Для создания элемента ‘foo’ в существующем пакете данных ‘bar’:

chef_vault_secret 'foo' do
  data_bag 'bar'
  raw_data({ 'auth' => 'baz' })
  admins 'jtimberman'
  search '*:*'
end

Для предоставления множеству администраторов доступа к элементу:

chef_vault_secret 'root-password' do
  admins 'jtimberman,paulmooring'
  data_bag 'secrets'
  raw_data({ 'auth' => 'DoNotUseThisPasswordForRoot' })
  search '*:*'
end

ресурс chocolatey_config

страница ресурса chocolatey_config

Используйте ресурс chocolatey_config для добавления или удаления ключей конфигурации Chocolatey.

Примечание

Менеджер пакетов Chocolatey по умолчанию не установлен в Windows. Вам необходимо установить его перед использованием этого ресурса, добавив кулинарную книгу Chocolatey в список запуска вашего узла.

Новое в Chef Infra Client 14.3.

Синтаксис


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

chocolatey_config 'name' do
  config_key      String # default value: 'name' unless specified
  value           String
  action          Symbol # defaults to :set if not specified
end

где:

  • chocolatey_config — ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет действия, которые Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • config_key и value — доступные свойства этого ресурса.

Действия


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

:nothing
Этот блок ресурса не выполняется, пока не будет уведомлен другим ресурсом. После уведомления, этот блок либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:set
Устанавливает значение конфигурации Chocolatey. (По умолчанию)
:unset
Сбрасывает значение конфигурации Chocolatey.

Свойства


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

config_key
Тип данных Ruby: Строка | Значение по умолчанию: The resource block's name

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

value
Тип данных Ruby: Строка

Значение для установки.


Общие возможности ресурсов


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

Примеры


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

Установка конфигурации Chocolatey cacheLocation:

chocolatey_config 'Set cacheLocation config' do
  config_key 'cacheLocation'
  value 'C:\temp\choco'
end

Удаление конфигурации Chocolatey:

chocolatey_config 'BogusConfig' do
  action :unset
end

Ресурс chocolatey_feature

Страница ресурса chocolatey_feature

Используйте ресурс chocolatey_feature для включения и отключения функций Chocolatey.

Примечание

Менеджер пакетов Chocolatey по умолчанию не установлен на Windows. Вам необходимо установить его перед использованием этого ресурса, добавив кулинарную книгу Chocolatey в список запуска узла.

Новое в Chef Infra Client 15.1.

Синтаксис


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

chocolatey_feature 'name' do
  feature_name      String # default value: 'name' unless specified
  action            Symbol # defaults to :enable if not specified
end

где:

  • chocolatey_feature — это ресурс.
  • name — это имя, заданное для блока ресурса.
  • action определяет действия, которые Chef Infra Client выполнит для приведения узла в желаемое состояние.
  • feature_name — это доступное для этого ресурса свойство.

Действия


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

:disable
Отключает указанную функцию Chocolatey.
:enable
Включает указанную функцию Chocolatey. (по умолчанию)
:nothing
Этот блок ресурса не выполняет действий, пока не будет уведомлен другим ресурсом. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце работы Chef Infra Client.

Свойства


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

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

Название функции Chocolatey, которую нужно включить или отключить.


Общие возможности ресурса


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

Примеры


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

Включить функцию Chocolatey checksumFiles

chocolatey_feature 'checksumFiles' do
  action :enable
end

Отключить функцию Chocolatey checksumFiles

chocolatey_feature 'checksumFiles' do
  action :disable
end

Ресурс chocolatey_package

Страница ресурса chocolatey_package

Используйте ресурс chocolatey_package для управления пакетами с помощью менеджера пакетов Chocolatey на платформе Microsoft Windows.

Примечание

Менеджер пакетов Chocolatey не установлен по умолчанию в Windows. Вам необходимо установить его, добавив кулинарную книгу chocolatey в список запуска вашего узла.

Предупреждение

Ресурс chocolatey_package должен быть указан как chocolatey_package и не может быть сокращён до package в рецепте.

Новое в Chef Infra Client 12.7.

Синтаксис


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

chocolatey_package 'name' do
  list_options      String
  options           String, Array
  package_name      String, Array
  password          String
  returns           Integer, Array # default value: [0, 2]
  source            String
  timeout           String, Integer
  user              String
  version           String, Array
  action            Symbol # defaults to :install if not specified
end

где:

  • chocolatey_package — это ресурс.
  • name — это имя, присвоенное блоку ресурса.
  • action определяет, какие шаги Chef Infra Client предпримет для приведения узла к желаемому состоянию.
  • list_options, options, package_name, password, returns, source, timeout, user и version — это доступные свойства этого ресурса.

Действия


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

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

Свойства


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

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

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

Новое в Chef Infra Client 15.3

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

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

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

Имя пакета. Значение по умолчанию: имя блока ресурса.

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

Пароль для аутентификации с источником.

Новое в Chef Infra Client 15.3

returns
Тип Ruby: Целое число, Массив | Значение по умолчанию: [0, 2]

Код(ы) возврата команды choco, указывающий успешное действие. См. Коды возврата Chocolatey для полного списка кодов возврата, используемых Chocolatey.

Новое в Chef Client 12.18

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

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

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

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

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

Имя пользователя для аутентификации каналов.

Новое в Chef Infra Client 15.3

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

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


Общая функциональность ресурсов


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

Примеры


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

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

chocolatey_package 'name of package' do
  action :install
end

Установка пакета с параметрами с помощью опции --checksum Chocolatey:

chocolatey_package 'name of package' do
  options '--checksum 1234567890'
  action :install
end

Ресурс chocolatey_source

Страница ресурса chocolatey_source

Используйте ресурс chocolatey_source для добавления, удаления, включения или выключения источников Chocolatey.

Примечание

Менеджер пакетов Chocolatey не установлен по умолчанию в Windows. Вам необходимо установить его перед использованием этого ресурса, добавив кулинарную книгу Chocolatey в список выполнения вашего узла.

Новое в Chef Infra Client 14.3.

Синтаксис


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

chocolatey_source 'name' do
  admin_only              true, false # default value: false
  allow_self_service      true, false # default value: false
  bypass_proxy            true, false # default value: false
  cert                    String
  cert_password           String
  password                String
  priority                Integer # default value: 0
  source                  String
  source_name             String # default value: 'name' unless specified
  username                String
  action                  Symbol # defaults to :add if not specified
end

где:

  • chocolatey_source — это ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет действия, которые Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • admin_only, allow_self_service, bypass_proxy, cert, cert_password, password, priority, source, source_name и username — доступные свойства этого ресурса.

Действия


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

:add
Добавляет источник Chocolatey (по умолчанию)
:disable
Отключает источник Chocolatey. Новое в Chef Infra Client 15.1.
:enable
Включает источник Chocolatey. Новое в Chef Infra Client 15.1.
:nothing
Этот блок ресурсов не действует, пока другой ресурс не уведомит его о необходимости предпринять действие. После уведомления этот блок ресурсов выполняется немедленно или ставится в очередь для выполнения в конце выполнения Chef Infra Client.
:remove
Удаляет источник Chocolatey.

Свойства


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

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

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

Новое в Chef Infra Client 15.1

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

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

Новое в Chef Infra Client 15.1

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

Пропускать ли системные настройки прокси для доступа к источнику.

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

Сертификат, используемый при аутентификации на источнике

Новое в Chef Infra Client 17.7

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

Пароль для сертификата, используемого при аутентификации на источнике

Новое в Chef Infra Client 17.7

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

Пароль для аутентификации на источнике

Новое в Chef Infra Client 17.7

priority
Тип Ruby: Целое число | Значение по умолчанию: 0

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

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

URL источника.

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

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

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

Имя пользователя для аутентификации на источнике

Новое в Chef Infra Client 17.7


Общие функциональные возможности ресурса


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

Примеры


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

Добавление источника Chocolatey

chocolatey_source 'MySource' do
  source 'http://example.com/something'
  action :add
end

Удаление источника Chocolatey

chocolatey_source 'MySource' do
  action :remove
end

Ресурс cookbook_file

Страница ресурса cookbook_file

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

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

Синтаксис


Блок ресурса 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_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 будет создавать файлы таким образом, чтобы наследование ACL работало как ожидается.

Безопасность файлов в 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 не удаляет права на файл или директорию, если права не указаны.
  • Изменение унаследованных прав может быть затратным. 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 применять (или не применять) унаследованные права от родительской директории.

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

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


Общие возможности ресурсов


Ресурсы Chef включают общие свойства, уведомления и защитные механизмы ресурсов.

Общие свойства

Следующие свойства общие для всех ресурсов:

compile_time

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

Управление фазой, в которой ресурс выполняется на узле. Установите в значение true, чтобы запустить во время построения коллекции ресурсов (compile phase). Установите в значение false, чтобы запустить во время конфигурации узла клиентом Chef Infra (converge phase).

ignore_failure

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

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

retries

Тип Ruby: Целое число | Значение по умолчанию: 0

Количество попыток перехватить исключения и повторить ресурс.

retry_delay

Тип Ruby: Целое число | Значение по умолчанию: 2

Задержка в секундах между попытками повтора.

sensitive

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

Гарантия, что конфиденциальные данные ресурса не будут записываться клиентом Chef Infra.

Уведомления

notifies

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

Ресурс может уведомить другой ресурс о выполнении действия при изменении его состояния. Укажите 'resource[name]', действие, которое должен выполнить :action, и затем :timer для этого действия. Ресурс может уведомить более одного ресурса; используйте оператор notifies для каждого уведомляемого ресурса.

Если указанный ресурс не существует, возникает ошибка. В отличие от subscribes, которая не завершится ошибкой, если исходный ресурс не найден.

Таймер указывает момент выполнения уведомления во время выполнения клиента Chef Infra. Доступны следующие таймеры:

:before

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

:delayed

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

:immediate, :immediately

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

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

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

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

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

: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.

Специфичность файла

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

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

  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

ресурс cron

страница ресурса cron

Используйте ресурс cron для управления записями cron для планирования задач по времени. Свойства расписания будут по умолчанию равны * если не указано иное. Ресурс cron требует доступа к программе crontab, обычно cron.

Предупреждение

Ресурс cron следует использовать только для изменения записи в файле crontab. Ресурс cron_d напрямую управляет файлами cron.d. Этот ресурс поставляется с Chef Infra Client 14.4 и более поздними версиями, а также может быть найден в кулинарной книге cron для предыдущих версий Chef Infra Client.

Синтаксис


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

cron 'name' do
  command          String
  day              Integer, String # default value: "*"
  environment      Hash # default value: {}
  home             String
  hour             Integer, String # default value: "*"
  mailto           String
  minute           Integer, String # default value: "*"
  month            Integer, String # default value: "*"
  path             String
  shell            String
  time             Symbol
  time_out         Hash # default value: {}
  user             String # default value: "root"
  weekday          Integer, String, Symbol # default value: "*"
  action           Symbol # defaults to :create if not specified
end

где:

  • cron — это ресурс.
  • name — имя, данное блоку ресурса.
  • action определяет, какие действия Chef Infra Client предпримет для приведения узла в нужное состояние.
  • command, day, environment, home, hour, mailto, minute, month, path, shell, time, time_out, user и weekday — доступные свойства этого ресурса.

Действия


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

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

Свойства


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

command
Тип Ruby: Строка | REQUIRED

Команда для выполнения или путь к файлу, содержащему команду для выполнения.

day
Тип Ruby: Целое число, строка | Значение по умолчанию: *

День месяца, в который должна выполняться запись cron (1 - 31).

environment
Тип Ruby: Хэш | Значение по умолчанию: {}

Хэш, содержащий дополнительные произвольные переменные окружения, в которых будет выполняться задача cron в формате ({'ENV_VARIABLE' => 'VALUE'}). Примечание: эти переменные должны существовать для успешного выполнения команды.

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

Установите переменную окружения HOME.

hour
Тип Ruby: Целое число, строка | Значение по умолчанию: *

Час, в который должна выполняться запись cron (0 - 23).

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

Установите переменную окружения MAILTO.

minute
Тип Ruby: Целое число, строка | Значение по умолчанию: *

Минута, в которую должна выполняться запись cron (0 - 59).

month
Тип Ruby: Целое число, строка | Значение по умолчанию: *

Месяц в году, в который должна выполняться запись cron (1 - 12, jan-dec или *).

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

Установите переменную окружения PATH.

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

Установите переменную окружения SHELL.

time
Тип Ruby: Символ Допустимые значения: :annually, :daily, :hourly, :midnight, :monthly, :reboot, :weekly, :yearly

Интервал времени.

time_out
Тип Ruby: Хэш | Значение по умолчанию: {}

Хэш таймаутов в формате ({'OPTION' => 'VALUE'}). Допустимые параметры:

  • preserve-status (BOOL, по умолчанию: 'false'),
  • foreground (BOOL, по умолчанию: 'false'),
  • kill-after (в секундах),
  • signal (имя, например, 'HUP', или число)

Новое в Chef Infra Client 15.7

user
Тип Ruby: Строка | Значение по умолчанию: root

Имя пользователя, выполняющего команду. Если свойство user изменено, исходный пользователь для программы crontab продолжает работать до тех пор, пока программа crontab не будет удалена. Это свойство не применимо к платформе AIX.

weekday
Тип Ruby: Целое число, строка, символ | Значение по умолчанию: *

День недели, в который должна выполняться эта запись (0-7, mon-sun, monday-sunday или *), где воскресенье — это 0 и 7.


Общие функциональные возможности ресурсов


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

Примеры


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

Запуск программы через определенные интервалы

cron 'noop' do
  hour '5'
  minute '0'
  command '/bin/true'
end

Запуск записи, если папка существует

cron 'ganglia_tomcat_thread_max' do
  command "/usr/bin/gmetric
    -n 'tomcat threads max'
    -t uint32
    -v '/usr/local/bin/tomcat-stat --thread-max'"
  only_if { ::File.exist?('/home/jboss') }
end

Запуск каждую субботу в 8:00 утра

Следующий пример демонстрирует расписание, которое будет выполняться каждый час в 8:00 каждую субботу утром и затем отправлять электронное письмо на адрес “admin@example.com” после каждого выполнения.

cron 'name_of_cron_entry' do
  minute '0'
  hour '8'
  weekday '6'
  mailto 'admin@example.com'
  action :create
end

Запуск один раз в неделю

cron 'cookbooks_report' do
  minute '0'
  hour '0'
  weekday '1'
  user 'chefio'
  mailto 'sysadmin@example.com'
  home '/srv/supermarket/shared/system'
  command %W{
    cd /srv/supermarket/current &&
    env RUBYLIB="/srv/supermarket/current/lib"
    RAILS_ASSET_ID=`git rev-parse HEAD` RAILS_ENV="#{rails_env}"
    bundle exec rake cookbooks_report
  }.join(' ')
  action :create
end

Запуск только в ноябре

Следующий пример демонстрирует расписание, которое будет выполняться в 20:00 каждый будний день (с понедельника по пятницу), но только в ноябре:

cron 'name_of_cron_entry' do
  minute '0'
  hour '20'
  day '*'
  month '11'
  weekday '1-5'
  action :create
end

ресурс cron_access

страница ресурса cron_access

Используйте ресурс cron_access для управления файлами cron.allow и cron.deny.

Примечание

Этот ресурс ранее поставлялся в кулинарной книге cron как cron_manage, который по-прежнему может быть использован для обратной совместимости со старыми версиями Chef Infra Client.

Новое в Chef Infra Client 14.4.

Синтаксис


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

cron_access 'name' do
  user      String # default value: 'name' unless specified
  action    Symbol # defaults to :allow if not specified
end

где:

  • cron_access — это ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • user — свойство, доступное для данного ресурса.

Действия


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

:allow
Добавить пользователя в файл cron.allow. (по умолчанию)
:deny
Добавить пользователя в файл cron.deny.
:nothing
Этот блок ресурса не действует, пока не будет уведомлен другим ресурсом о необходимости выполнить действие. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


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

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

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


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


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

Примеры


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

Добавить пользователя mike в cron.allow

cron_access 'mike'

Добавить пользователя mike в cron.deny

cron_access 'mike' do
  action :deny
end

Указать имя пользователя со свойством user

cron_access 'Deny the jenkins user access to cron for security purposes' do
  user 'jenkins'
  action :deny
end

Ресурс cron_d

Страница ресурса cron_d

Используйте ресурс cron_d для управления файлами задач cron в каталоге /etc/cron.d.

Предупреждение

Chef Infra Client также поставляется с ресурсом cron для управления монолитным файлом /etc/crontab на платформах, которые не поддерживают cron.d. См. ресурс cron для получения информации об использовании этого ресурса.

Новинка в Chef Infra Client 14.4.

Синтаксис


Блок ресурса cron_d управляет файлами cron.d. Например, чтобы получить еженедельный отчет о кулинарной книге из Chef Supermarket:

cron_d 'cookbooks_report' do
  action :create
  minute '0'
  hour '0'
  weekday '1'
  user 'getchef'
  mailto 'sysadmin@example.com'
  home '/srv/supermarket/shared/system'
  command %W{
    cd /srv/supermarket/current &&
    env RUBYLIB="/srv/supermarket/current/lib"
    RAILS_ASSET_ID=`git rev-parse HEAD` RAILS_ENV="#{rails_env}"
    bundle exec rake cookbooks_report
  }.join(' ')
end

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

cron_d 'name' do
  command               String
  comment               String
  cron_name             String # default value: 'name' unless specified
  day                   Integer, String # default value: "*"
  environment           Hash # default value: {}
  home                  String
  hour                  Integer, String # default value: "*"
  mailto                String
  minute                Integer, String # default value: "*"
  mode                  String, Integer # default value: "0600"
  month                 Integer, String # default value: "*"
  path                  String
  predefined_value      String
  random_delay          Integer
  shell                 String
  time_out              Hash # default value: {}
  user                  String # default value: "root"
  weekday               Integer, String, Symbol # default value: "*"
  action                Symbol # defaults to :create if not specified
end

где:

  • cron_d — это ресурс.
  • name — имя, заданное для блока ресурса.
  • action определяет действия, которые Chef Infra Client предпримет для приведения узла к желаемому состоянию.
  • command, comment, cron_name, day, environment, home, hour, mailto, minute, mode, month, path, predefined_value, random_delay, shell, time_out, user и weekday — доступные свойства этого ресурса.

Действия


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

:create
(по умолчанию)
:create_if_missing
Добавить файл определения cron в /etc/cron.d, но не обновлять существующий файл.
:delete
Удалить файл определения cron из /etc/cron.d, если он существует.
:nothing
Этот блок ресурса не действует, пока не получит уведомление от другого ресурса о выполнении действия. После получения уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


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

command
Тип Ruby: Строка | REQUIRED

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

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

Комментарий, который нужно поместить в файл cron.d.

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

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

day
Тип Ruby: Целое число, Строка | Значение по умолчанию: *

День месяца, в который должна выполняться запись cron (1 - 31).

environment
Тип Ruby: Hash | Значение по умолчанию: {}

Хэш, содержащий дополнительные произвольные переменные среды, в которых будет выполняться задача cron в формате ({'ENV_VARIABLE' => 'VALUE'}). Примечание: эти переменные должны существовать для успешного выполнения команды.

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

Установите переменную среды HOME.

hour
Тип Ruby: Целое число, Строка | Значение по умолчанию: *

Час, в который должна выполняться запись cron (0 - 23).

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

Установите переменную среды MAILTO.

minute
Тип Ruby: Целое число, Строка | Значение по умолчанию: *

Минута, в которую должна выполняться запись cron (0 - 59).

mode
Тип Ruby: Строка, Целое число | Значение по умолчанию: 0600

Восьмеричный режим создаваемого файла crontab.

month
Тип Ruby: Целое число, Строка | Значение по умолчанию: *

Месяц в году, в который должна выполняться запись cron (1 - 12, jan-dec или *).

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

Установите переменную среды PATH.

predefined_value
Тип Ruby: Строка Допустимые значения: "@annually", "@daily", "@hourly", "@midnight", "@monthly", "@reboot", "@weekly", "@yearly"

Запланируйте задачу cron с одним из специальных предопределенных значений вместо шаблона ** *.

random_delay
Тип Ruby: Целое число

Установите переменную среды RANDOM_DELAY в файле cron.d.

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

Установите переменную среды SHELL.

time_out
Тип Ruby: Хэш | Значение по умолчанию: {}

Хэш таймаутов в формате ({'OPTION' => 'VALUE'}). Принимаются следующие допустимые опции:

  • preserve-status (BOOL, по умолчанию: ‘false’),
  • foreground (BOOL, по умолчанию: ‘false’),
  • kill-after (в секундах),
  • signal (имя, например, ‘HUP’, или число)

Новое в Chef Infra Client 15.7

user
Тип Ruby: Строка | Значение по умолчанию: root

Имя пользователя, который выполняет команду.

weekday
Тип Ruby: Целое число, Строка, Символ | Значение по умолчанию: *

День недели, в который должна выполняться эта запись (0-7, mon-sun, monday-sunday или *), где воскресенье — это и 0, и 7.


Общие функциональные возможности ресурсов


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

Примеры


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

Запуск программы в пятом часу дня

cron_d 'noop' do
  hour '5'
  minute '0'
  command '/bin/true'
end

Запуск записи, если папка существует

cron_d 'ganglia_tomcat_thread_max' do
  command "/usr/bin/gmetric
    -n 'tomcat threads max'
    -t uint32
    -v '/usr/local/bin/tomcat-stat
    --thread-max'"
  only_if { ::File.exist?('/home/jboss') }
end

Запуск записи каждое субботнее утро в 8:00

cron_d 'name_of_cron_entry' do
  minute '0'
  hour '8'
  weekday '6'
  mailto 'admin@example.com'
  command '/bin/true'
  action :create
end

Запуск записи в 20:00 каждый будний день (понедельник-пятница), но только в ноябре

cron_d 'name_of_cron_entry' do
  minute '0'
  hour '20'
  day '*'
  month '11'
  weekday '1-5'
  command '/bin/true'
  action :create
end

Удаление задачи cron по имени:

cron_d 'job_to_remove' do
  action :delete
end

Ресурс csh

Страница ресурса csh

Используйте ресурс csh для выполнения скриптов с помощью интерпретатора csh. Этот ресурс также может использовать любые действия и свойства, доступные для ресурса execute. Команды, выполняемые с помощью этого ресурса, по своей природе не идемпотентны, так как они обычно уникальны для среды, в которой они выполняются. Используйте not_if и only_if, чтобы защитить этот ресурс от идемпотентности.

Синтаксис


Блок ресурса csh выполняет скрипты с помощью csh:

csh 'hello world' do
  code <<-EOH
    echo "Hello world!"
    echo "Current directory: " $cwd
  EOH
end

где:

  • code определяет команду для выполнения

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

csh 'name' do
  code                       String
  creates                    String
  cwd                        String
  environment                Hash
  flags                      String
  group                      String, Integer
  path                       Array
  returns                    Integer, Array
  timeout                    Integer, Float
  user                       String, Integer
  umask                      String, Integer
  action                     Symbol # defaults to :run if not specified
end

где:

  • csh — это ресурс.
  • name — это имя, присвоенное блоку ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • code, creates, cwd, environment, flags, group, path, returns, timeout, user и umask — это свойства этого ресурса, со значениями типа Ruby. См. раздел «Свойства» ниже для получения дополнительной информации обо всех свойствах, которые могут использоваться с этим ресурсом.

Действия


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

:nothing
Препятствует запуску команды. Это действие используется для указания, что команда запускается только тогда, когда другой ресурс уведомляет её.
:run
По умолчанию. Выполнить скрипт.

Свойства


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

code
Тип в Ruby: Строка | REQUIRED

Строка кода, заключенная в кавычки (" “), подлежащая выполнению.

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

Предотвращает создание файла командой, если этот файл уже существует.

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

Текущая рабочая директория, из которой будет выполнена команда.

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

Массив переменных окружения в формате ({'ENV_VARIABLE' => 'VALUE'}). **Примечание**: Эти переменные должны существовать для успешного выполнения команды.

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

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

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

Имя или идентификатор группы, которые должны быть изменены перед выполнением команды.

returns
Тип в Ruby: Целое число, Массив | Значение по умолчанию: 0

Возвращаемое значение команды. Может быть массивом допустимых значений. Возникает исключение, если возвращаемое значение(я) не соответствуют.

timeout
Тип в Ruby: Целое число, Вещественное число | Значение по умолчанию: 3600

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

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

Имя или идентификатор пользователя, которые должны быть изменены перед выполнением команды.

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

Маска создания режима файла, или umask.


Общее функциональное назначение ресурсов


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

Примеры


У этого ресурса нет примеров.

ресурс директории

страница ресурса директории

Используйте ресурс directory для управления директорией, которая представляет собой иерархию папок, содержащих всю информацию на компьютере. Корневая директория — это верхний уровень, под которым организована остальная часть директории. Ресурс директории использует свойство name для указания пути к расположению в директории. Обычно требуется разрешение доступа к этому расположению в директории.

Синтаксис


Блок ресурса directory объявляет директорию и необходимые разрешения для этой директории. Например:

directory '/etc/apache2' do
  owner 'root'
  group 'root'
  mode '0755'
  action :create
end

где:

  • '/etc/apache2' определяет директорию
  • owner, group и mode определяют разрешения

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

directory 'name' do
  group                      String, Integer
  inherits                   true, false
  mode                       String, Integer
  owner                      String, Integer
  path                       String # defaults to 'name' if not specified
  recursive                  true, false
  rights                     Hash
  action                     Symbol # defaults to :create if not specified
end

где:

  • directory — это ресурс.
  • name — это имя блока ресурса; когда свойство path не указано, name также является путем к директории от корня
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла в желаемое состояние
  • group, inherits, mode, owner, path, recursive и rights — это свойства этого ресурса со указанным типом Ruby. Подробную информацию обо всех свойствах, которые могут использоваться с этим ресурсом, см. в разделе «Свойства» ниже.

Действия


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

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

Свойства


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

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

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

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

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

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

Строка из 3-5 символов в кавычках, определяющая восьмеричный режим. Например: '755', '0755' или 00755. Если 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: Строка | Значение по умолчанию: The resource block's name

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

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

Рекурсивно создавать или удалять родительские директории. Для свойств owner, group и mode значение этого свойства применяется только к директории-листу.

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

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

Рекурсивные директории

Ресурс remote_directory может использоваться для рекурсивного создания пути вне структуры удаленных директорий, но права доступа к этим внешним путям не управляются. Это связано с тем, что атрибут recursive применяется только к атрибутам group, mode и owner для самой удалённой директории и любых вложенных директорий, которые копирует ресурс.

Структура директорий:

/foo
  /bar
    /baz

Следующий пример демонстрирует способ создания файла в директории /baz:

remote_directory '/foo/bar/baz' do
  owner 'root'
  group 'root'
  mode '0755'
  action :create
end

Но в этом примере значения атрибутов group, mode и owner будут применены только к /baz. Это нормально, если именно этого вы хотите. Но в большинстве случаев, когда вся структура директорий /foo/bar/baz отсутствует, необходимо явно указать каждую директорию. Например:

%w( /foo /foo/bar /foo/bar/baz ).each do |path|
  remote_directory path do
    owner 'root'
    group 'root'
    mode '0755'
  end
end

Этот подход создаст правильную иерархию — /foo, затем /bar в /foo, а затем /baz в /bar — а также с правильными значениями атрибутов для group, mode и owner.

Безопасность файлов в 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'], оба 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[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.

Примеры


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

Создание каталога

directory '/tmp/something' do
  owner 'root'
  group 'root'
  mode '0755'
  action :create
end

Создание каталога в Microsoft Windows

directory "C:\\tmp\\something" do
  rights :full_control, "DOMAIN\\User"
  inherits false
  action :create
end

или:

directory 'C:\tmp\something' do
  rights :full_control, 'DOMAIN\User'
  inherits false
  action :create
end

Примечание

Разница между двумя предыдущими примерами заключается в использовании одинарных и двойных кавычек, где при использовании двойных кавычек символ обратной косой черты (\) должен быть экранирован с помощью символа экранирования Ruby (который является обратной косой чертой).

Рекурсивное создание каталога

%w{dir1 dir2 dir3}.each do |dir|
  directory "/tmp/mydirs/#{dir}" do
    mode '0755'
    owner 'root'
    group 'root'
    action :create
    recursive true
  end
end

Удаление каталога

directory '/tmp/something' do
  recursive true
  action :delete
end

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

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

user_home = "/#{node[:matching_node][:user]}"

directory user_home do
  owner 'node[:matching_node][:user]'
  group 'node[:matching_node][:group]'
  mode '0755'
  action :create
end

где matching_node представляет тип узла. Например, если переменная user_home указывает {node[:nginx]...}, рецепт может выглядеть примерно так:

user_home = "/#{node[:nginx][:user]}"

directory user_home do
  owner 'node[:nginx][:user]'
  group 'node[:nginx][:group]'
  mode '0755'
  action :create
end

Установить права доступа к каталогу для определенного типа узла

Следующий пример показывает, как установить права для каталога /certificates на любом узле, на котором выполняется Nginx. В этом примере права устанавливаются для свойств owner и group как root, а затем права чтения/записи предоставляются для root.

directory "#{node[:nginx][:dir]}/shared/certificates" do
  owner 'root'
  group 'root'
  mode '0755'
  recursive true
end

Перезагрузка конфигурации

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

  • использования оператора if для проверки, являются ли плагины на узле последними версиями
  • определения местоположения, в котором хранятся плагины Ohai
  • использования свойства notifies и ресурса ruby_block для запуска обновления (при необходимости) и последующей перезагрузки файла client.rb.
directory 'node[:ohai][:plugin_path]' do
  owner 'chef'
  recursive true
end

ruby_block 'reload_config' do
  block do
    Chef::Config.from_file('/etc/chef/client.rb')
  end
  action :nothing
end

if node[:ohai].key?(:plugins)
  node[:ohai][:plugins].each do |plugin|
    remote_file node[:ohai][:plugin_path] +"/#{plugin}" do
      source plugin
      owner 'chef'
      notifies :run, 'ruby_block[reload_config]', :immediately
    end
  end
end

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

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

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

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

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

Ресурс dmg_package

Страница ресурса dmg_package

Используйте ресурс dmg_package для установки пакета из файла .dmg. Ресурс получит файл dmg из удаленного URL-адреса, смонтирует его с помощью hdidutil macOS, скопирует приложение (.app каталог) в указанный пункт назначения (/Applications) и отсоединит образ с помощью hdiutil. Файл dmg будет храниться в Chef::Config[:file_cache_path].

Новое в Chef Infra Client 14.0.

Синтаксис


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

dmg_package 'name' do
  accept_eula          true, false # default value: false
  allow_untrusted      true, false # default value: false
  app                  String # default value: 'name' unless specified
  checksum             String
  destination          String # default value: "/Applications"
  dmg_name             String # default value: The value passed for the application name.
  dmg_passphrase       String
  file                 String
  headers              Hash
  owner                String, Integer
  package_id           String
  source               String
  type                 String # default value: "app"
  volumes_dir          String # default value: The value passed for the application name.
  action               Symbol # defaults to :install if not specified
end

где:

  • dmg_package — это ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • accept_eula, allow_untrusted, app, checksum, destination, dmg_name, dmg_passphrase, file, headers, owner, package_id, source, type и volumes_dir — доступные свойства этого ресурса.

Действия


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

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

Свойства


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

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

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

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

Разрешить установку пакетов, у которых нет надёжных сертификатов.

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

Имя приложения, которое отображается в каталоге /Volumes, если оно отличается от имени блока ресурсов.

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

Контрольная сумма sha256 файла .dmg для загрузки.

destination
Тип в Ruby: Строка | Значение по умолчанию: /Applications

Каталог для копирования .app.

dmg_name
Тип в Ruby: Строка | Значение по умолчанию: The value passed for the application name.

Имя файла .dmg, если оно отличается от имени приложения или содержит пробелы.

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

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

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

Абсолютный путь к файлу .dmg на локальной системе.

headers
Тип в Ruby: Хэш

Позволяет задавать пользовательские HTTP-заголовки (например, cookie) для ресурса remote_file.

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

Пользователь, которому должна принадлежать установленная установка пакета.

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

Идентификатор пакета, зарегистрированный в pkgutil при установке pkg или mpkg.

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

Удаленный URL, используемый для загрузки файла .dmg, если указан.

type
Тип в Ruby: Строка | Значение по умолчанию: app Разрешенные значения: "app", "mpkg", "pkg"

Тип пакета.

volumes_dir
Тип в Ruby: Строка | Значение по умолчанию: The value passed for the application name.

Каталог в /Volumes, где смонтирован dmg, если он отличается от имени файла .dmg.


Общие функциональные возможности ресурса


Ресурсы Chef включают общие свойства, уведомления и защитные свойства ресурсов.

Общие свойства

Следующие свойства общие для всех ресурсов:

compile_time

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

Управление фазой, в которой ресурс выполняется на узле. Установите в значение true, чтобы запустить во время построения коллекции ресурсов (compile phase). Установите в значение false, чтобы запустить во время конфигурирования узла Клиентом Chef Infra (converge phase).

ignore_failure

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

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

retries

Тип в Ruby: Целое число | Значение по умолчанию: 0

Количество попыток перехвата исключений и повторной попытки ресурса.

retry_delay

Тип в Ruby: Целое число | Значение по умолчанию: 2

Задержка в секундах между попытками повтора.

sensitive

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

Обеспечить, чтобы конфиденциальные данные ресурсов не регистрировались Клиентом Chef Infra.

Уведомления

notifies

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

Ресурс может уведомлять другой ресурс о необходимости выполнить действие при изменении его состояния. Укажите 'resource[name]', :action, которое должен выполнить ресурс, и :timer для этого действия. Ресурс может уведомлять более одного ресурса; используйте оператор notifies для каждого ресурса, который должен быть уведомлен. Если указанный ресурс не существует, генерируется ошибка. В отличие от этого, subscribes не завершится неудачно, если исходный ресурс не найден.

Таймер указывает момент во время выполнения Клиента Chef Infra, когда выполняется уведомление. Доступны следующие таймеры:

:before

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

:delayed

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

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

: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.

Примеры


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

Установка Google Chrome через пакет DMG:

dmg_package 'Google Chrome' do
  dmg_name 'googlechrome'
  source   'https://dl-ssl.google.com/chrome/mac/stable/GGRM/googlechrome.dmg'
  checksum '7daa2dc5c46d9bfb14f1d7ff4b33884325e5e63e694810adc58f14795165c91a'
  action   :install
end

Установка VirtualBox из .mpkg:

dmg_package 'Virtualbox' do
  source 'http://dlc.sun.com.edgesuite.net/virtualbox/4.0.8/VirtualBox-4.0.8-71778-OSX.dmg'
  type   'mpkg'
end

Установка pgAdmin и автоматическое принятие EULA:

dmg_package 'pgAdmin3' do
  source   'http://wwwmaster.postgresql.org/redir/198/h/pgadmin3/release/v1.12.3/osx/pgadmin3-1.12.3.dmg'
  checksum '9435f79d5b52d0febeddfad392adf82db9df159196f496c1ab139a6957242ce9'
  accept_eula true
end

Ресурс dnf_package

Страница ресурса dnf_package

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

Примечание

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

Новое в 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[Строка]'

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

Ресурс dpkg_package

Страница ресурса dpkg_package

Используйте ресурс dpkg_package для управления пакетами платформы dpkg. При установке пакета из локального файла его необходимо добавить в узел с помощью ресурсов remote_file или cookbook_file.

Синтаксис


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

dpkg_package 'package_name'

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

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

dpkg_package 'name' do
  options                      String, Array
  package_name                 String, Array
  response_file                String
  response_file_variables      Hash
  source                       String, Array
  timeout                      String, Integer
  version                      String, Array
  action                       Symbol # defaults to :install if not specified
end

где:

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

Действия


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

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

Свойства


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

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

Дополнительные параметры команды, которые передаются в команду.

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

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

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

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

response_file_variables
Тип Ruby: Словарь | Значение по умолчанию: {}

Словарь переменных файла ответов в формате {‘ПЕРЕМЕННАЯ’ => ‘ЗНАЧЕНИЕ’}.

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

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

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

Общие свойства

Следующие свойства являются общими для всех ресурсов:

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.

Примеры


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

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

dpkg_package 'wget_1.13.4-2ubuntu1.4_amd64.deb' do
  source '/foo/bar/wget_1.13.4-2ubuntu1.4_amd64.deb'
  action :install
end

dsc_resource ресурс

страница ресурса dsc_resource

Windows PowerShell — это основанная на задачах командная оболочка и язык сценариев, разработанный Microsoft. Windows PowerShell использует подход, ориентированный на документы, для управления машинами на базе Microsoft Windows, аналогично подходу к управлению машинами на базе Unix и Linux. Windows PowerShell — это платформа, не зависящая от инструментов, которая поддерживает использование Chef для управления конфигурацией.

Desired State Configuration (DSC) — это функция Windows PowerShell, предоставляющая набор расширений языка, командлетов и ресурсов, которые можно использовать для декларативной конфигурации программного обеспечения. DSC похож на Chef, так как оба инструмента являются идемпотентными, используют похожие подходы к концепции ресурсов, описывают конфигурацию системы и выполняют необходимые шаги для ее конфигурации. Самое важное различие между Chef и DSC заключается в том, что Chef использует Ruby, а DSC представлен как данные конфигурации внутри Windows PowerShell.

Ресурс dsc_resource позволяет использовать любые ресурсы DSC в рецепте Chef, а также любые пользовательские ресурсы, добавленные в вашу среду Windows PowerShell. Microsoft часто добавляет новые ресурсы в коллекцию ресурсов DSC.

Предупреждение

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

  • Windows Management Framework (WMF) 5.0 (или выше)

  • Ресурс dsc_resource может использовать только ресурсы на основе бинарных файлов или скриптов. Композиционные ресурсы DSC использовать нельзя.

    Это связано с тем, что составные ресурсы не являются «реальными» ресурсами с точки зрения Local Configuration Manager (LCM). Составные ресурсы используются ключевым словом «configuration» из модуля PSDesiredStateConfiguration и затем оцениваются в этом контексте. При использовании DSC для создания документа конфигурации (файла Managed Object Framework (MOF)) из команды конфигурации составной ресурс оценивается. Любые отдельные ресурсы из этого составного ресурса записываются в документ Managed Object Framework (MOF). Что касается Local Configuration Manager (LCM), составных ресурсов не существует. Пока это не изменится, ресурс dsc_resource и/или команда Invoke-DscResource не могут их напрямую использовать.

Синтаксис


Блок ресурса dsc_resource позволяет использовать ресурсы DSC в рецепте Chef. Например, ресурс DSC Archive:

Archive ExampleArchive {
  Ensure = "Present"
  Path = "C:\Users\Public\Documents\example.zip"
  Destination = "C:\Users\Public\Documents\ExtractionPath"
}

и затем тот же dsc_resource с Chef:

dsc_resource 'example' do
   resource :archive
   property :ensure, 'Present'
   property :path, "C:\Users\Public\Documents\example.zip"
   property :destination, "C:\Users\Public\Documents\ExtractionPath"
 end```

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

dsc_resource 'name' do
  module_name                String
  module_version             String
  property                   Symbol
  reboot_action              Symbol # default value: :nothing
  resource                   Symbol
  timeout                    Integer
  action                     Symbol # defaults to :run if not specified
end

где:

  • dsc_resource — это ресурс.
  • name — это имя, данное блоку ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла в нужное состояние.
  • property — это ноль (или больше) свойств в ресурсе DSC, где каждое свойство вводится в отдельной строке, :dsc_property_name — это имя свойства, нечувствительное к регистру, а "property_value" — это значение Ruby, которое будет применено Chef Infra Client.
  • module_name, module_version, property, reboot_action, resource и timeout — это свойства этого ресурса с указанным типом Ruby. Более подробную информацию обо всех свойствах, которые можно использовать с этим ресурсом, см. в разделе «Свойства» ниже.

Действия


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

:nothing
Этот блок ресурса не выполняет никаких действий, пока не получит уведомление от другого ресурса о необходимости выполнить действие. После получения уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:run
Значение по умолчанию. Используется для запуска конфигурации DSC, определенной в этом ресурсе.

Свойства


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

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

Имя модуля, из которого происходит DSC-ресурс. Если это свойство не указано, оно будет определено неявно.

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

Номер версии модуля для использования. PowerShell 5.0.10018.0 (или выше) поддерживает установку нескольких версий модуля. Это свойство должно быть указано вместе с module_name.

Новое в Chef Client 12.21

property
Тип Ruby: Символ

Свойство из ресурса конфигурации желаемого состояния (DSC). Используйте это свойство несколько раз, по одному для каждого свойства в ресурсе конфигурации желаемого состояния (DSC). Формат этого свойства должен соответствовать property :dsc_property_name, "property_value" для каждого свойства DSC, добавленного в блок ресурса.

:dsc_property_name должно быть символом.

Используйте следующие типы Ruby для определения property_value:

Ruby Windows PowerShell
Array Object[]
Chef::Util::Powershell:PSCredential PSCredential
False bool($false)
Fixnum Integer
Float Double
Hash Hashtable
True bool($true)

Эти типы преобразуются в соответствующие типы Windows PowerShell во время выполнения Chef Infra Client.

reboot_action
Тип Ruby: Символ | Значение по умолчанию: :nothing Допустимые значения: :nothing, :reboot_now, :request_reboot

Используется для запроса немедленного перезапуска или для помещения перезапуска в очередь с использованием действий :reboot_now (немедленный перезапуск) или :request_reboot (помещение в очередь перезапуска), встроенных в ресурс перезапуска.

Новое в Chef Client 12.6

resource
Тип Ruby: Символ

Имя DSC-ресурса. Это значение нечувствительно к регистру и должно быть символом, соответствующим имени DSC-ресурса.

Для встроенных DSC-ресурсов используйте следующие значения:

Значение Описание
:archive Используется для распаковки архивов (.zip).
:environment Используется для управления переменными среды системы.
:file Используется для управления файлами и каталогами.
:group Используется для управления локальными группами.
:log Используется для регистрации сообщений конфигурации.
:package Используется для установки и управления пакетами.
:registry Используется для управления ключами реестра и значениями ключей реестра.
:script Используется для выполнения блоков сценариев PowerShell.
:service Используется для управления службами.
:user Используется для управления локальными учетными записями пользователей.
:windowsfeature Используется для добавления или удаления функций и ролей Windows.
:windowsoptionalfeature Используется для настройки необязательных функций Microsoft Windows.
:windowsprocess Используется для настройки процессов Windows.

Любой DSC-ресурс можно использовать в рецепте Chef. Например, комплект DSC-ресурсов содержит ресурсы для настройки компонентов Active Directory, таких как xADDomain, xADDomainController и xADUser. Предполагая, что эти ресурсы доступны для Chef Infra Client, соответствующие значения для атрибута resource будут: :xADDomain, :xADDomainController и xADUser.

timeout
Тип Ruby: Целое число

Время ожидания команды (в секундах) перед завершением из-за истечения времени.


Общие возможности ресурсов


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

Примеры


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

Открыть Zip файл

dsc_resource 'example' do
   resource :archive
   property :ensure, 'Present'
   property :path, 'C:\Users\Public\Documents\example.zip'
   property :destination, 'C:\Users\Public\Documents\ExtractionPath'
 end

Управление пользователями и группами

dsc_resource 'demogroupadd' do
  resource :group
  property :groupname, 'demo1'
  property :ensure, 'present'
end

dsc_resource 'useradd' do
  resource :user
  property :username, 'Foobar1'
  property :fullname, 'Foobar1'
  property :password, ps_credential('P@assword!')
  property :ensure, 'present'
end

dsc_resource 'AddFoobar1ToUsers' do
  resource :Group
  property :GroupName, 'demo1'
  property :MembersToInclude, ['Foobar1']
end

Создание и регистрация службы Windows

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

dsc_resource 'NAME' do
  resource :service
  property :name, 'NAME'
  property :startuptype, 'Disabled'
  property :path, 'D:\\Sites\\Site_name\file_to_run.exe'
  property :ensure, 'Present'
  property :state, 'Stopped'
end

Создание очереди сообщений для тестирования

Следующий пример создаёт файл на узле (на основе файла из кулинарной книги), распаковывает модуль Windows PowerShell MessageQueue.zip, а затем использует dsc_resource для обеспечения установки подфункций очереди сообщений (MSMQ), создания тестовой очереди и установки разрешений на тестовую очередь:

cookbook_file 'cMessageQueue.zip' do
  path "#{Chef::Config[:file_cache_path]}\\MessageQueue.zip"
  action :create_if_missing
end

windows_zipfile "#{ENV['PROGRAMW6432']}\\WindowsPowerShell\\Modules" do
  source "#{Chef::Config[:file_cache_path]}\\MessageQueue.zip"
  action :unzip
end

dsc_resource 'install-sub-features' do
  resource :windowsfeature
  property :ensure, 'Present'
  property :name, 'msmq'
  property :IncludeAllSubFeature, true
end

dsc_resource 'create-test-queue' do
  resource :cPrivateMsmqQueue
  property :ensure, 'Present'
  property :name, 'Test_Queue'
end

dsc_resource 'set-permissions' do
  resource :cPrivateMsmqQueuePermissions
  property :ensure, 'Present'
  property :name, 'Test_Queue_Permissions'
  property :QueueNames, 'Test_Queue'
  property :ReadUsers, node['msmq']['read_user']
end

Пример использования свойств модуля

dsc_resource 'test-cluster' do
  resource :xCluster
  module_name 'xFailOverCluster'
  module_version '1.6.0.0'
  property :name, 'TestCluster'
  property :staticipaddress, '10.0.0.3'
  property :domainadministratorcredential, ps_credential('abcd')
end

Ресурс dsc_script

Страница ресурса dsc_script

Windows PowerShell — это основанная на задачах командная оболочка и язык сценариев, разработанный компанией Microsoft. Windows PowerShell использует ориентированный на документы подход к управлению машинами на базе Microsoft Windows, аналогично подходу, используемому для управления машинами на базе Unix и Linux. Windows PowerShell — платформа, не зависящая от инструментов, которая поддерживает использование Chef для управления конфигурацией.

Desired State Configuration (DSC) — это функция Windows PowerShell, которая предоставляет набор расширений языка, командлетов и ресурсов, которые можно использовать для декларативного конфигурирования программного обеспечения. DSC аналогичен Chef, поскольку оба инструмента идемпотентны, используют похожие подходы к концепции ресурсов, описывают конфигурацию системы и затем выполняют шаги, необходимые для этой конфигурации. Самое важное различие между Chef и DSC заключается в том, что Chef использует Ruby, а DSC представлен как данные конфигурации внутри Windows PowerShell.

Многие ресурсы DSC сопоставимы с встроенными ресурсами Chef Infra. Например, как DSC, так и Chef имеют ресурсы file, package и service. Ресурс dsc_script наиболее полезен для тех ресурсов DSC, которые не имеют прямого соответствия ресурсу в Chef, например, ресурс Archive, пользовательский ресурс DSC, существующий скрипт DSC, выполняющий важную задачу и т. д. Используйте ресурс dsc_script для встраивания кода, определяющего конфигурацию DSC непосредственно в рецепт Chef Infra.

Примечание

Для использования ресурса dsc_script с Chef Infra требуется Windows PowerShell 4.0.

Примечание

Необходимо включить службу WinRM. (Используйте winrm quickconfig для включения службы.)

Предупреждение

Ресурс dsc_script не может быть использован в одной очереди выполнения с dsc_resource. Это связано с тем, что ресурс dsc_script требует, чтобы RefreshMode в локальном диспетчере конфигурации был установлен в Push, тогда как ресурс dsc_resource требует его установки в Disabled.

Синтаксис


Блок ресурса dsc_script встраивает код, определяющий конфигурацию DSC непосредственно в рецепт Chef:

dsc_script 'get-dsc-resource-kit' do
  code <<-EOH
    Archive reskit
    {
      ensure = 'Present'
      path = "#{Chef::Config[:file_cache_path]}\\DSCResourceKit620082014.zip"
      destination = "#{ENV['PROGRAMW6432']}\\WindowsPowerShell\\Modules"
    }
  EOH
end

где:

  • ресурс remote_file используется для загрузки файла DSCResourceKit620082014.zip.

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

dsc_script 'name' do
  code                       String
  command                    String
  configuration_data         String
  configuration_data_script  String
  configuration_name         String
  cwd                        String
  environment                Hash
  flags                      Hash
  imports                    Array
  timeout                    Integer
  action                     Symbol # defaults to :run if not specified
end

где:

  • dsc_script — это ресурс.
  • name — это имя, данное блоку ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • code, command, configuration_data, configuration_data_script, configuration_name, cwd, environment, flags, imports и timeout — это свойства данного ресурса с указанным типом Ruby. Подробнее о всех свойствах, которые можно использовать с этим ресурсом, см. в разделе «Свойства».

Действия


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

:nothing
Этот блок ресурса не действует, пока не будет уведомлён другим ресурсом о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:run
По умолчанию. Используется для выполнения конфигурации DSC, определённой в этом ресурсе.

Свойства


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

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

Код скрипта конфигурации DSC. Это свойство не может быть использовано совместно со свойством command.

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

Путь к допустимому файлу данных Windows PowerShell, содержащему скрипт конфигурации DSC. Этот файл данных должен быть способен работать независимо от Chef и должен генерировать действительную конфигурацию DSC. Это свойство не может быть использовано совместно со свойством code.

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

Данные конфигурации для скрипта DSC. Данные конфигурации должны быть допустимым файлом данных Windows PowerShell. Это свойство не может быть использовано совместно со свойством configuration_data_script.

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

Путь к допустимому файлу данных Windows PowerShell, который также содержит узел, называемый localhost. Это свойство не может быть использовано совместно со свойством configuration_data.

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

Имя допустимого командлета Windows PowerShell. Имя может содержать только буквы (a-z, A-Z), цифры (0-9) и знак подчеркивания (_) и должно начинаться с буквы. Имя не может быть null или пустым. Это свойство не может быть использовано совместно со свойством code.

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

Текущая рабочая директория.

environment
Тип Ruby: Хэш

Хэш переменных среды в виде ({‘ENV_VARIABLE’ => ‘VALUE’}). (Эти переменные должны существовать для успешного выполнения команды).

flags
Тип Ruby: Хэш

Передача параметров скрипту DSC, указанному свойством command. Параметры определяются как пары ключ-значение, где значение каждого ключа — передаваемый параметр. Это свойство не может быть использовано в одном рецепте со свойством code. Например: flags ({ :EditorChoice => 'emacs', :EditorFlags => '--maximized' }).

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

Предупреждение

Это свойство ДОЛЖНО использоваться с атрибутом code.

Используется для импорта ресурсов DSC из модуля.

Для импорта всех ресурсов из модуля укажите только имя модуля:

imports 'module_name'

Для импорта определенных ресурсов укажите имя модуля, а затем имя каждого ресурса в этом модуле для импорта:

imports 'module_name', 'resource_name_a', 'resource_name_b', ...

Например, для импорта всех ресурсов из модуля под названием cRDPEnabled:

imports 'cRDPEnabled'

Для импорта только ресурса PSHOrg_cRDPEnabled:

imports 'cRDPEnabled', 'PSHOrg_cRDPEnabled'
timeout
Тип Ruby: Целое число

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

ps_credential Helper

Используйте помощника ps_credential для встраивания объекта PSCredential — набор учетных данных безопасности, таких как имя пользователя или пароль — в скрипт, что позволит запускать этот скрипт с учетными данными безопасности.

Например, предполагая, что CertificateID настроен в локальном менеджере конфигураций, объект SeaPower1@3 создается и встраивается в скрипт seapower-user:

dsc_script 'seapower-user' do
  code <<-EOH
    User AlbertAtom
    {
      UserName = 'AlbertAtom'
      Password = #{ps_credential('SeaPower1@3')}
    }
  EOH
  configuration_data <<-EOH
    @{
      AllNodes = @(
        @{
          NodeName = "localhost";
          CertificateID = 'A8D1234559F349F7EF19104678908F701D4167'
        }
      )
    }
  EOH
end

Общие функциональные возможности ресурсов


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

Примеры


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

Укажите код DSC напрямую

Данные DSC могут быть указаны непосредственно в рецепте:

dsc_script 'emacs' do
  code <<-EOH
  Environment 'texteditor'
  {
    Name = 'EDITOR'
    Value = 'c:\\emacs\\bin\\emacs.exe'
  }
  EOH
end

Укажите код DSC с помощью файла данных Windows PowerShell

Используйте свойство command для указания пути к файлу данных Windows PowerShell. Например, следующий скрипт Windows PowerShell определяет DefaultEditor:

Configuration 'DefaultEditor'
{
  Environment 'texteditor'
    {
      Name = 'EDITOR'
      Value = 'c:\emacs\bin\emacs.exe'
    }
}

Используйте следующий рецепт для указания расположения этого файла данных:

dsc_script 'DefaultEditor' do
  command 'c:\dsc_scripts\emacs.ps1'
end

Передача параметров конфигурациям DSC

Если скрипт DSC содержит данные конфигурации, принимающие параметры, эти параметры можно передать с помощью свойства flags. Например, следующий скрипт Windows PowerShell принимает параметры для настроек EditorChoice и EditorFlags:

$choices = @{'emacs' = 'c:\emacs\bin\emacs';'vi' = 'c:\vim\vim.exe';'powershell' = 'powershell_ise.exe'}
  Configuration 'DefaultEditor'
    {
      [CmdletBinding()]
      param
        (
          $EditorChoice,
          $EditorFlags = ''
        )
      Environment 'TextEditor'
      {
        Name = 'EDITOR'
        Value =  "$($choices[$EditorChoice]) $EditorFlags"
      }
    }

Используйте следующий рецепт для установки этих параметров:

dsc_script 'DefaultEditor' do
  flags ({ :EditorChoice => 'emacs', :EditorFlags => '--maximized' })
  command 'c:\dsc_scripts\editors.ps1'
end

Использование пользовательских данных конфигурации

Данные конфигурации в скриптах DSC могут быть настраиваемыми из рецепта. Например, скрипты обычно настраиваются для установки поведения для типов данных учетных данных Windows PowerShell. Данные конфигурации могут быть указаны тремя способами:

  • С помощью атрибута configuration_data
  • С помощью атрибута configuration_data_script
  • Указывая путь к валидному файлу данных Windows PowerShell

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

dsc_script 'BackupUser' do
  configuration_data <<-EOH
    @{
     AllNodes = @(
          @{
          NodeName = "localhost";
          PSDscAllowPlainTextPassword = $true
          })
     }
  EOH
  code <<-EOH
    $user = 'backup'
    $password = ConvertTo-SecureString -String "YourPass$(random)" -AsPlainText -Force
    $cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $user, $password

   User $user
     {
       UserName = $user
       Password = $cred
       Description = 'Backup operator'
       Ensure = "Present"
       Disabled = $false
       PasswordNeverExpires = $true
       PasswordChangeRequired = $false
     }
   EOH
end

Следующий пример показывает, как указать пользовательские данные конфигурации с помощью свойства configuration_name. Например, следующий скрипт Windows PowerShell определяет конфигурацию vi:

Configuration 'emacs'
  {
    Environment 'TextEditor'
    {
      Name = 'EDITOR'
      Value = 'c:\emacs\bin\emacs.exe'
    }
}

Configuration 'vi'
{
    Environment 'TextEditor'
    {
      Name = 'EDITOR'
      Value = 'c:\vim\bin\vim.exe'
    }
}

Используйте следующий рецепт для указания этой конфигурации:

dsc_script 'EDITOR' do
  configuration_name 'vi'
  command 'C:\dsc_scripts\editors.ps1'
end

Использование DSC с другими ресурсами Chef

Ресурс dsc_script можно использовать с другими ресурсами. Следующий пример показывает, как загрузить файл с помощью ресурса remote_file, а затем распаковать его с помощью ресурса DSC Archive:

remote_file "#{Chef::Config[:file_cache_path]}\\DSCResourceKit620082014.zip" do
  source 'http://gallery.technet.microsoft.com/DSC-Resource-Kit-All-c449312d/file/124481/1/DSC%20Resource%20Kit%20Wave%206%2008282014.zip'
end

dsc_script 'get-dsc-resource-kit' do
  code <<-EOH
    Archive reskit
    {
      ensure = 'Present'
      path = "#{Chef::Config[:file_cache_path]}\\DSCResourceKit620082014.zip"
      destination = "#{ENV['PROGRAMW6432']}\\WindowsPowerShell\\Modules"
    }
  EOH
end

ресурс execute

страница ресурса execute

Используйте ресурс execute для выполнения одной команды. Команды, выполняемые с помощью этого ресурса, по своей природе не идемпотентны, поскольку они обычно уникальны для среды, в которой они выполняются. Используйте not_if и only_if для защиты этого ресурса от идемпотентности.

Примечание

Используйте ресурс script для выполнения скрипта с использованием определённого интерпретатора (Ruby, Python, Perl, csh или Bash).

Синтаксис


Блок ресурса execute обычно выполняет одну команду, уникальную для среды, в которой будет выполняться рецепт. Некоторые команды ресурса execute выполняются сами по себе, но часто они выполняются в сочетании с другими ресурсами Chef. Например, одна команда, выполняемая сама по себе:

execute 'apache_configtest' do
  command '/usr/sbin/apachectl configtest'
end

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

execute 'name' do
  command          String, Array # default value: 'name' unless specified
  creates          String
  cwd              String
  default_env      true, false # default value: false
  domain           String
  elevated         true, false # default value: false
  environment      Hash
  group            String, Integer
  input            String
  live_stream      true, false # default value: false
  login            true, false # default value: false
  password         String
  returns          Integer, Array # default value: 0
  timeout          Integer, String, Float # default value: 3600
  user             String, Integer
  action           Symbol # defaults to :run if not specified
end

где:

  • execute — это ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет действия, которые Chef Infra Client предпримет для перевода узла в желаемое состояние.
  • command, creates, cwd, default_env, domain, elevated, environment, group, input, live_stream, login, password, returns, timeout и user — это доступные свойства этого ресурса.

Действия


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

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

Свойства


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

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

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

Примечание

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

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

Препятствует созданию файла командой, если этот файл уже существует.

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

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

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

При значении true это позволяет магии ENV добавить path_sanity в PATH и принудительно установить локаль на английский+UTF-8 для разбора вывода

Новое в Chef Client 14.2

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

Только для Windows: домен пользователя, указанного в свойстве user. Если не указано, имя пользователя и пароль, указанные в свойствах user и password, будут использованы для разрешения этого пользователя в домене, к которому присоединена система, выполняющая Chef Infra Client, или если эта система не присоединена к домену, то пользователь будет разрешён как локальная учётная запись в этой системе. Альтернативный способ указать домен — оставить это свойство незаполненным и указать домен в свойстве user.

Новое в Chef Client 12.21

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

Определяет, будет ли скрипт выполняться с повышенными правами для обхода User Access Control (UAC) от взаимодействия по блокировке процесса. Это заставит процесс запускаться под сеансом пакетного входа вместо интерактивного сеанса. Пользователю, выполняющему chef-client, необходимы права «Заменить маркер процесса на уровне пользователя» и «Изменять квоты памяти для процесса». Пользователю, выполняющему команду, необходимо право «Вход как пакетная работа». Поскольку это требует входа, свойства user и password обязательны.

Новое в Chef Client 13.3

environment
Тип в Ruby: Hash

Хэш переменных окружения в формате ({'ENV_VARIABLE' => 'VALUE'}). Примечание: Эти переменные должны существовать для успешного выполнения команды.

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

Имя или идентификатор группы, которые необходимо изменить перед выполнением команды.

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

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

Новое в Chef Infra Client 16.2

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

Отправить вывод команды, запущенной этим блоком ресурса execute, в поток событий Chef Infra Client.

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

Использовать оболочку входа для выполнения команд вместо наследования существующей среды выполнения.

Новое в Chef Infra Client 17.0

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

Только для Windows: пароль пользователя, указанного в свойстве user. Это свойство обязательно, если user указано на Windows и может быть указано только, если указано user. Чувствительное свойство для этого ресурса автоматически устанавливается в true, если указан пароль.

Новое в Chef Client 12.21

returns
Тип в Ruby: Целое число, Массив | Значение по умолчанию: 0

Возвращаемое значение команды. Это может быть массив допустимых значений. При несоответствии возвращаемого значения(ий) возникает исключение.

timeout
Тип в Ruby: Целое число, Строка, Вещественное число | Значение по умолчанию: 3600

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

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

Имя пользователя идентификатора пользователя, с которым следует запустить новый процесс. Имя пользователя может быть необязательно указано с доменом, например domain\user или user@my.dns.domain.com в формате Universal Principal Name (UPN). Его также можно указать без домена просто как user, если домен вместо этого указан с помощью свойства domain. Только для Windows, если это свойство указано, свойство password должно быть указано.


Общие функциональные возможности ресурсов


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

Примеры


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

Выполнение команды при уведомлении:

execute 'slapadd' do
  command 'slapadd < /tmp/something.ldif'
  creates '/var/lib/slapd/uid.bdb'

  action :nothing
end

template '/tmp/something.ldif' do
  source 'something.ldif'

  notifies :run, 'execute[slapadd]', :immediately
end

Выполнение команды touch файла только один раз во время выполнения команды:

execute 'upgrade script' do
  command 'php upgrade-application.php && touch /var/application/.upgraded'

  creates '/var/application/.upgraded'
  action :run
end

Выполнение команды, требующей переменной окружения:

execute 'slapadd' do
  command 'slapadd < /tmp/something.ldif'
  creates '/var/lib/slapd/uid.bdb'

  action :run
  environment ({'HOME' => '/home/my_home'})
end

Удаление репозитория с помощью yum для очистки кэша:

# the following code sample thanks to gaffneyc @ https://gist.github.com/918711
execute 'clean-yum-cache' do
  command 'yum clean all'
  action :nothing
end

file '/etc/yum.repos.d/bad.repo' do
  action :delete
  notifies :run, 'execute[clean-yum-cache]', :immediately
end

Предотвращение перезапуска и переконфигурации, если конфигурация повреждена:

Используйте действие :nothing (общее для всех ресурсов) для предотвращения автоматического запуска проверки, а затем используйте уведомление subscribes для выполнения проверки конфигурации при обнаружении изменений в шаблоне.

execute 'test-nagios-config' do
  command 'nagios3 --verify-config'
  action :nothing
  subscribes :run, 'template[/etc/nagios3/configures-nagios.conf]', :immediately
end

Уведомление в определенном порядке:

Для уведомления нескольких ресурсов и последующего выполнения этих ресурсов в определенном порядке сделайте следующее.

execute 'foo' do
  command '...'
  notifies :create, 'template[baz]', :immediately
  notifies :install, 'package[bar]', :immediately
  notifies :run, 'execute[final]', :immediately
end

template 'baz' do
  #...
  notifies :run, 'execute[restart_baz]', :immediately
end

package 'bar'
  execute 'restart_baz'
  execute 'final' do
  command '...'
end

где последовательность будет соответствовать порядку перечисления ресурсов в рецепте: execute 'foo', template 'baz', execute [restart_baz], package 'bar' и execute 'final'.

Выполнение команды с использованием шаблона:

Следующий пример демонстрирует, как настроить IPv4 пакетную передачу с использованием ресурса execute для выполнения команды с именем forward_ipv4, которая использует шаблон, определенный ресурсом template.

execute 'forward_ipv4' do
  command 'echo > /proc/.../ipv4/ip_forward'
  action :nothing
end

template '/etc/file_name.conf' do
  source 'routing/file_name.conf.erb'

 notifies :run, 'execute[forward_ipv4]', :delayed
end

где свойство command для ресурса execute содержит команду, которая должна быть выполнена, а свойство source для ресурса template указывает, какой шаблон использовать. Свойство notifies для template указывает, что execute[forward_ipv4] (определенное ресурсом execute) должно быть помещено в очередь и выполнено в конце выполнения Chef Infra Client.

Добавление правила в таблицу IP:

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

execute 'test_rule' do
  command "command_to_run
    --option value
    --option value
    --source #{node[:name_of_node][:ipsec][:local][:subnet]}    -j test_rule"

  action :nothing
end

template '/etc/file_name.local' do
  source 'routing/file_name.local.erb'
  notifies :run, 'execute[test_rule]', :delayed
end

где свойство command для ресурса execute содержит команду, которая должна быть выполнена, а свойство source для ресурса template указывает, какой шаблон использовать. Свойство notifies для template указывает, что execute[test_rule] (определенное ресурсом execute) должно быть помещено в очередь и выполнено в конце выполнения Chef Infra Client.

Остановка службы, выполнение задач и последующий перезапуск:

Следующий пример демонстрирует, как использовать ресурсы execute, service и mount вместе, чтобы гарантировать, что узел, работающий на Amazon EC2, запускает MySQL. В этом примере выполняется следующее:

  • Проверяется, есть ли у узла Amazon EC2 MySQL
  • Если у узла есть MySQL, MySQL останавливается
  • MySQL устанавливается
  • Узел монтируется
  • MySQL перезапускается
# the following code sample comes from the ``server_ec2``
# recipe in the following cookbook:
# https://github.com/chef-cookbooks/mysql

if (node.attribute?('ec2') && !FileTest.directory?(node['mysql']['ec2_path']))
  service 'mysql' do
    action :stop
  end

  execute 'install-mysql' do
    command "mv #{node['mysql']['data_dir']}#{node['mysql']['ec2_path']}"
    not_if { ::File.directory?(node['mysql']['ec2_path']) }
  end

  [node['mysql']['ec2_path'], node['mysql']['data_dir']].each do |dir|
    directory dir do
      owner 'mysql'
      group 'mysql'
    end
  end

  mount node['mysql']['data_dir'] do
    device node['mysql']['ec2_path']
    fstype 'none'
    options 'bind,rw'
    action [:mount, :enable]
  end

  service 'mysql' do
    action :start
  end
end

где

  • два ресурса service используются для остановки и последующего перезапуска службы MySQL
  • ресурс execute используется для установки MySQL
  • ресурс mount используется для монтирования узла и включения MySQL

Использование метода platform_family?:

Следующий пример демонстрирует использование метода platform_family? в DSL рецепта для создания переменной, которая может использоваться с другими ресурсами в том же рецепте. В этом примере platform_family? используется для обеспечения использования определенного двоичного файла для определенной платформы перед использованием ресурса remote_file для загрузки файла из удаленного расположения и последующим использованием ресурса execute для установки этого файла путем выполнения команды.

if platform_family?('rhel')
  pip_binary = '/usr/bin/pip'
else
  pip_binary = '/usr/local/bin/pip'
end

remote_file "#{Chef::Config[:file_cache_path]}/distribute_setup.py" do
  source 'http://python-distribute.org/distribute_setup.py'
  mode '0755'
  not_if { ::File.exist?(pip_binary) }
end

execute 'install-pip' do
  cwd Chef::Config[:file_cache_path]
  command <<~EOF
    # command for installing Python goes here
  EOF
  not_if { ::File.exist?(pip_binary) }
end

где команда для установки Python может выглядеть примерно так:

#{node['python']['binary']} distribute_setup.py #{::File.dirname(pip_binary)}/easy_install pip

Управление службой с помощью ресурса execute:

Предупреждение

Это пример того, чего делать не следует. Используйте ресурс **service** для управления службой, а не ресурс **execute**.

Сделайте что-то вроде этого:

service 'tomcat' do
  action :start
end

а НЕ что-то вроде этого:

execute 'start-tomcat' do
  command '/etc/init.d/tomcat start'
  action :run
end

Нет причин использовать ресурс execute для управления службой, потому что ресурс service напрямую предоставляет свойство start_command, что дает рецепту полный контроль над выданной командой гораздо более чистым и прямым способом.

Использование вспомогательной функции поиска Infra Language для поиска пользователей:

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

#  the following code sample comes from the openvpn cookbook:

search("users", "*:*") do |u|
  execute "generate-openvpn-#{u['id']}" do
    command "./pkitool #{u['id']}"
    cwd '/etc/openvpn/easy-rsa'
  end

  %w{ conf ovpn }.each do |ext|
    template "#{node['openvpn']['key_dir']}/#{u['id']}.#{ext}" do
      source 'client.conf.erb'
      variables :username => u['id']
    end
  end
end

где

  • данные поиска будут использоваться для создания ресурсов execute
  • ресурс template указывает Chef Infra Client, какой шаблон использовать

Включение удаленного входа для macOS:

execute 'enable ssh' do
  command '/usr/sbin/systemsetup -setremotelogin on'
  not_if '/usr/sbin/systemsetup -getremotelogin | /usr/bin/grep On'
  action :run
end

Немедленное выполнение кода на основе ресурса шаблона:

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

template '/etc/nagios3/configures-nagios.conf' do
  # other parameters
  notifies :run, 'execute[test-nagios-config]', :immediately
end

и тогда Chef Infra Client немедленно выполнит следующее:

execute 'test-nagios-config' do
  command 'nagios3 --verify-config'
  action :nothing
end

Получение файла:

Ресурс execute не может использоваться для получения файла (например, command 'source filename'). Следующий пример завершится ошибкой, потому что source не является исполняемым файлом:

execute 'foo' do
  command 'source /tmp/foo.sh'
end

Вместо этого используйте ресурс script или один из ресурсов, основанных на script (bash, csh, perl, python или ruby). Например:

bash 'foo' do
  code 'source /tmp/foo.sh'
end

Выполнение команды Knife:

execute 'create_user' do
  command <<~EOM
    knife user create #{user}
      --admin
      --password password
      --disable-editing
      --file /home/vagrant/.chef/user.pem
      --config /tmp/knife-admin.rb
    EOM
end

Выполнение команды установки в виртуальную среду:

Следующий пример показывает, как установить легкий JavaScript-фреймворк в Vagrant:

execute "install q and zombiejs" do
  cwd "/home/vagrant"
  user "vagrant"
  environment ({'HOME' => '/home/vagrant', 'USER' => 'vagrant'})
  command "npm install -g q zombie should mocha coffee-script"
  action :run
end

Выполнение команды от имени указанного пользователя:

Следующий пример демонстрирует, как запустить bundle install из выполнения Chef Infra Client от имени определенного пользователя. Это поместит gem в путь пользователя (vagrant) вместо пользователя root (под которым выполняется Chef Infra Client):

execute '/opt/chefdk/embedded/bin/bundle install' do
  cwd node['chef_workstation']['bundler_path']
  user node['chef_workstation']['user']

  environment ({
    'HOME' => "/home/#{node['chef_workstation']['user']}",
    'USER' => node['chef_workstation']['user']
  })
  not_if 'bundle check'
end

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

Примечание: Когда Chef работает как служба, эта функция требует, чтобы у пользователя, под которым работает Chef, был правом «SeAssignPrimaryTokenPrivilege» (или «SE_ASSIGNPRIMARYTOKEN_NAME»). По умолчанию этим правом обладают только LocalSystem и NetworkService при работе в качестве службы. Это необходимо даже если пользователь является администратором.

Это право можно добавить и проверить в рецепте, используя этот пример:

# Add 'SeAssignPrimaryTokenPrivilege' for the user
Chef::ReservedNames::Win32::Security.add_account_right('<user>', 'SeAssignPrimaryTokenPrivilege')

# Check if the user has 'SeAssignPrimaryTokenPrivilege' rights
Chef::ReservedNames::Win32::Security.get_account_right('<user>').include?('SeAssignPrimaryTokenPrivilege')

Следующий пример демонстрирует, как запустить mkdir test_dir из выполнения Chef Infra Client в качестве альтернативного пользователя.

# Passing only username and password
execute 'mkdir test_dir' do
  cwd Chef::Config[:file_cache_path]

  user "username"
  password "password"
end

# Passing username and domain
execute 'mkdir test_dir' do
  cwd Chef::Config[:file_cache_path]

  domain "domain-name"
  user "user"
  password "password"
end

# Passing username = 'domain-name\username'. No domain is passed
execute 'mkdir test_dir' do
  cwd Chef::Config[:file_cache_path]

  user "domain-name\username"
  password "password"
end

# Passing username = 'username@domain-name'.  No domain is passed
execute 'mkdir test_dir' do
  cwd Chef::Config[:file_cache_path]

  user "username@domain-name"
  password "password"
end

Запуск команды с внешним файлом ввода:

execute ‘md5sum’ do input File.read(FILE) end

Ресурс файла

Страница ресурса файла

Используйте ресурс file для непосредственного управления файлами на узле.

Примечание

Используйте ресурс cookbook_file для копирования файла из каталога /files кулинарной книги. Используйте ресурс template для создания файла на основе шаблона в каталоге /templates кулинарной книги. Используйте ресурс remote_file для передачи файла на узел из удалённого расположения.

Синтаксис


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

file '/var/www/customers/public_html/index.php' do
  content '<html>This is a placeholder for the home page.</html>'
  mode '0755'
  owner 'web_admin'
  group 'web_admin'
end

где:

  • '/var/www/customers/public_html/index.php' — путь к файлу, а также имя файла для управления
  • content определяет содержимое файла

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

file 'name' do
  atomic_update              true, false
  backup                     false, Integer
  checksum                   String
  content                    String
  force_unlink               true, false
  group                      String, Integer
  inherits                   true, false
  manage_symlink_source      true, false
  mode                       String, Integer
  owner                      String, Integer
  path                       String # defaults to 'name' if not specified
  rights                     Hash
  verify                     String, Block, Symbol
  action                     Symbol # defaults to :create if not specified
end

где:

  • file — ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • atomic_update, backup, checksum, content, force_unlink, group, inherits, manage_symlink_source, mode, owner, path, rights, sensitive, и verify — свойства данного ресурса с показанным типом Ruby. Подробную информацию обо всех свойствах этого ресурса см. в разделе «Свойства» ниже.

Действия


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

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

Свойства


Ресурс 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, чтобы предотвратить сохранение резервных копий.

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

Контрольная сумма SHA-256 файла. Используется для обеспечения использования конкретного файла. Если контрольная сумма не совпадает, файл не используется.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Полный путь к файлу, включая имя файла и его расширение. Например: /files/file.txt. Значение по умолчанию: name блока ресурса. Дополнительную информацию см. в разделе «Синтаксис» выше.

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

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

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

verify
Тип Ruby: Строка, блок, символ

Позволяет проверить содержимое файла перед его созданием. Создаёт временный файл и затем позволяет выполнить команды или код Ruby. Если этот код оценивается как true, файл создаётся. Если код оценивается как false, генерируется ошибка.

Типы для этого свойства — блок, строка или символ. При указании в виде блока он возвращает true или false. При указании в виде строки он выполняется как системная команда. Он возвращает true, если команда возвращает 0 в качестве кода возврата, и false, если команда возвращает код возврата, отличный от нуля. При использовании встроенного символа верификатора он возвращает true, если верификатор успешен, иначе он возвращает false. В настоящее время поддерживаются верификаторы :yaml, :json и :systemd_unit.

Примечание

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

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

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

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

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

В этом примере часть %{path} этой команды расширяется до временного местоположения, где существует копия создаваемого файла. Это позволит использовать функцию проверки синтаксиса Nginx для обеспечения того, что файл является допустимым конфигурационным файлом Nginx перед записью файла. Ошибка будет сгенерирована, если выполняемая команда вернёт код возврата, отличный от нуля.

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

file '/tmp/foo' do
  content "hello"
  verify do |path|
    open(path).read.include?       "hello"
  end
end

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

file '/tmp/foo' do
  content "goodbye"
  verify do |path|
    open(path).read.include?       "hello"
  end
end

При использовании одного из встроенных символов (:json, :yaml, :systemd_unit) Это должно вернуть true:

file 'foo.json' do
  content '{"foo": "bar"}'
  verify :json
end

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

file 'foo.yaml' do
    content "--- foo: 'foo-"
    verify :yaml
end

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

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

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

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

Безопасность файлов в 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 fields.

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[Строка]'

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

Примеры


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

Создать файл

file '/tmp/something' do
  owner 'root'
  group 'root'
  mode '0755'
  action :create
end

Создать файл в Microsoft Windows

Для создания файла в Microsoft Windows убедитесь, что вы добавили символ экранирования — \ — перед обратными косыми чертами в путях:

file 'C:\\tmp\\something.txt' do
  rights :read, 'Everyone'
  rights :full_control, 'DOMAIN\\User'
  action :create
end

Удалить файл

file '/tmp/something' do
  action :delete
end

Установить режимы файла

file '/tmp/something' do
  mode '0755'
end

Удалить репозиторий с помощью yum для очистки кэша

# the following code sample thanks to gaffneyc @ https://gist.github.com/918711

execute 'clean-yum-cache' do
  command 'yum clean all'
  action :nothing
end

file '/etc/yum.repos.d/bad.repo' do
  action :delete
  notifies :run, 'execute[clean-yum-cache]', :immediately
  notifies :create, 'ruby_block[reload-internal-yum-cache]', :immediately
end

Добавить значение элемента из набора данных в файл

Следующий пример демонстрирует, как получить содержимое элемента набора данных с именем impossible_things, создать файл .pem по адресу some/directory/path/, а затем использовать атрибут content для обновления содержимого этого файла значением элемента набора данных impossible_things:

private_key = data_bag_item('impossible_things', private_key_name)['private_key']

file "some/directory/path/#{private_key_name}.pem" do
  content private_key
  owner 'root'
  group 'group'
  mode '0755'
end

Записать файл YAML

Следующий пример показывает, как использовать свойство content для записи файла YAML:

file "#{app['deploy_to']}/shared/config/settings.yml" do
  owner "app['owner']"
  group "app['group']"
  mode '0755'
  content app.to_yaml
end

Записать строку в файл

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

status_file = '/path/to/file/status_file'

file status_file do
  owner 'root'
  group 'root'
  mode '0755'
  content 'My favourite foremost coastal Antarctic shelf, oh Larsen B!'
end

Создать файл из копии

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

file '/root/1.txt' do
  content IO.read('/tmp/1.txt')
  action :create
end

где атрибут content использует метод Ruby IO.read для получения содержимого файла /tmp/1.txt.

Ресурс freebsd_package

Страница ресурса freebsd_package

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

Примечание

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

Синтаксис


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

freebsd_package 'package_name'

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

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

freebsd_package 'name' do
  options           String
  package_name      String
  source            String
  timeout           String, Integer
  version           String
  action            Symbol # defaults to :install if not specified
end

где:

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

Действия


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

:install
По умолчанию. Устанавливает пакет. Если указана версия, устанавливается указанная версия пакета.
:nothing
Этот блок ресурса не действует, пока не будет уведомлен другим ресурсом о необходимости выполнить действие. После уведомления этот блок ресурса выполняется немедленно или помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:remove
Удаляет пакет.

Свойства


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

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

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

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

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

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

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

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

Количество времени (в секундах), которое нужно подождать, прежде чем произойдет таймаут.

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

Версия пакета, который необходимо установить или обновить.


Общие функциональные возможности ресурсов


Ресурсы Chef включают общие свойства, уведомления и средства защиты ресурсов.

Общие свойства

Следующие свойства являются общими для всех ресурсов:

compile_time

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

Управление фазой, в которой ресурс выполняется на узле. Установите в true, чтобы запустить ресурс во время построения коллекции ресурсов (compile phase). Установите в false, чтобы запустить ресурс во время настройки узла клиентом Chef Infra (converge phase).

ignore_failure

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

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

retries

Тип Ruby: Целое число | Значение по умолчанию: 0

Количество попыток перехватить исключения и повторить ресурс.

retry_delay

Тип Ruby: Целое число | Значение по умолчанию: 2

Задержка в секундах между попытками повтора.

sensitive

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

Обеспечить, чтобы конфиденциальные данные ресурса не регистрировались клиентом Chef Infra.

Уведомления

notifies

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

Ресурс может уведомить другой ресурс о выполнении действия при изменении его состояния. Укажите 'resource[name]', :action, который должен выполнить ресурс, а затем :timer для этого действия. Ресурс может уведомлять несколько ресурсов; используйте инструкцию notifies для каждого уведомляемого ресурса.

Если указанный ресурс не существует, возникает ошибка. В отличие от этого, subscribes не завершится ошибкой, если исходный ресурс не найден.

Таймер указывает момент во время выполнения клиента Chef Infra, в котором выполняется уведомление. Доступны следующие таймеры:

:before

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

:delayed

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

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

: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.

Примеры


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

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

freebsd_package 'name of package' do
  action :install
end

ресурс gem_package

Страница ресурса gem_package

Используйте ресурс gem_package для управления пакетами gem, которые включены только в рецепты. При установке gem из локального файла его необходимо добавить к узлу с помощью ресурсов remote_file или cookbook_file.

Примечание

Ресурс gem_package должен быть указан как gem_package и не может быть сокращен до package в рецепте.

Предупреждение

Ресурсы chef_gem и gem_package оба используются для установки Ruby gem. Для любой машины, на которой установлен клиент Chef Infra, существует два экземпляра Ruby. Один — стандартный, системный экземпляр Ruby, а другой — выделенный экземпляр, доступный только клиенту Chef Infra. Используйте ресурс chef_gem для установки gem в экземпляр Ruby, выделенный для клиента Chef Infra. Используйте ресурс gem_package для установки всех других gem (т.е. для установки gem в системе).

Синтаксис


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

gem_package 'name' do
  clear_sources               true, false
  gem_binary                  String
  include_default_source      true, false
  options                     String, Hash, Array
  package_name                String
  source                      String, Array
  timeout                     String, Integer
  version                     String
  action                      Symbol # defaults to :install if not specified
end

где:

  • gem_package — ресурс.
  • name — имя, данное блоку ресурса.
  • action — идентификатор действий, которые клиент Chef Infra выполнит для приведения узла к желаемому состоянию.
  • clear_sources, gem_binary, include_default_source, options, package_name, source, timeout и version — доступные свойства этого ресурса.

Действия


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

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

Свойства


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

clear_sources
Тип Ruby: true, false | Значение по умолчанию: false unless `clear_gem_sources` set to true in the `client.rb` config.

Установите в true, чтобы загрузить gem из пути, указанного свойством source (а не из RubyGems).

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

Путь к двоичному файлу gem, который будет использоваться для установки. По умолчанию используется та же версия Ruby, которая используется клиентом Chef Infra.

include_default_source
Тип Ruby: true, false

Установите в false, чтобы не включать Chef::Config[:rubygems_url] в источники.

Новое в Chef Client 13.0

options
Тип Ruby: Строка, хэш, массив

Параметры для установки драгоценного камня, либо хэш, либо строка. При передаче хэша, параметры передаются в Gem::DependencyInstaller.new, и драгоценный камень будет установлен через API драгоценных камней. При передаче строки, драгоценный камень будет установлен с помощью команды gem. Использование хэша параметров с явным gem_binary приведёт к неопределённому поведению.

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

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

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

Необязательно. URL или список URL-адресов, на которых расположен пакет драгоценного камня. Этот список добавляется к источнику, настроенному в Chef::Config[:rubygems_url] (см. также include_default_source), для построения полного списка источников rubygems. Пользователи в «изолированной» среде должны установить Chef::Config[:rubygems_url] в свой локальный зеркало RubyGems.

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

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

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

Версия пакета, который нужно установить или обновить.


Функциональность общего ресурса


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

Примеры


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

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

Установить файл драгоценного камня из локальной файловой системы

gem_package 'loofah' do
  source '/tmp/loofah-2.7.0.gem'
  action :install
end

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

gem_package 'syntax' do
  action :install
  ignore_failure true
end

ресурс git

страница ресурса git

Используйте ресурс git для управления ресурсами систем контроля версий, которые существуют в репозитории git. Для использования всех функций ресурса git требуется git версии 1.6.5 (или выше).

Синтаксис


Блок ресурса git управляет ресурсами системы контроля версий, которые существуют в репозитории git:

git "#{Chef::Config[:file_cache_path]}/app_name" do
  repository node[:app_name][:git_repository]
  revision node[:app_name][:git_revision]
  action :sync
end

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

git 'name' do
  additional_remotes      Hash # default value: {}
  checkout_branch         String
  depth                   Integer
  destination             String # default value: 'name' unless specified
  enable_checkout         true, false # default value: true
  enable_submodules       true, false # default value: false
  environment             Hash
  group                   String, Integer
  remote                  String # default value: "origin"
  repository              String
  revision                String # default value: "HEAD"
  ssh_wrapper             String
  timeout                 Integer
  user                    String, Integer
  action                  Symbol # defaults to :sync if not specified
end

где:

  • git — это ресурс.
  • name — это имя, данное блоку ресурса.
  • action определяет действия Chef Infra Client для приведения узла в желаемое состояние.
  • additional_remotes, checkout_branch, depth, destination, enable_checkout, enable_submodules, environment, group, remote, repository, revision, ssh_wrapper, timeout и user — это доступные свойства этого ресурса.

Действия


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

:checkout
Клонирование или проверка состояния исходного кода. При наличии варианта проверки, этот провайдер ничего не делает.
:export
Экспорт исходного кода, исключая или удаляя артефакты системы контроля версий.
:nothing
Этот блок ресурса не действует, пока не будет уведомлен другим ресурсом о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:sync
По умолчанию. Обновление исходного кода до указанной версии или получение нового клонирования или проверки. Это действие приводит к жёсткому сбросу индекса и рабочей области, удаляя любые несохранённые изменения.

Свойства


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

additional_remotes
Тип Ruby: Хэш | Значение по умолчанию: {}

Хэш дополнительных удаленных репозиториев, которые добавляются в конфигурацию git репозитория.

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

Выполнить однократную проверку из git или использовать, когда ветка в репозитории upstream называется deploy. Чтобы предотвратить попытку ресурса git выполнить проверку из master в master, установите enable_checkout в значение false при использовании свойства checkout_branch. См. revision.

depth
Тип в Ruby: Целое число

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

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

Путь к расположению, в которое необходимо клонировать, проверить или экспортировать исходный код. Значение по умолчанию: имя блока ресурса.

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

Проверить репозиторий из master. Установите в значение false при использовании атрибута checkout_branch, чтобы предотвратить попытку ресурса git проверить master из master.

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

Выполнить инициализацию и обновление подмодулей.

environment
Тип в Ruby: Хэш

Хэш переменных среды в формате ({"ENV_VARIABLE" => "VALUE"}). (Эти переменные должны существовать для успешного выполнения команды.)

Примечание

Провайдер git автоматически устанавливает переменные среды ENV['HOME'] и ENV['GIT_SSH']. Чтобы переопределить это поведение и указать другие значения, добавьте ENV['HOME'] и/или ENV['GIT_SSH'] в хэш environment.

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

Группа системы, которая будет владеть проверено кодом.

remote
Тип в Ruby: Строка | Значение по умолчанию: origin

Удаленный репозиторий, который следует использовать при синхронизации существующего клона.

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

URI репозитория кода.

revision
Тип в Ruby: Строка | Значение по умолчанию: HEAD

Ветка, метка или коммит, которые нужно синхронизировать с git. Это может быть символическое значение, например, HEAD, или это может быть идентификатор ревизии, специфичный для системы управления версиями. См. checkout_branch.

Значение атрибута revision может со временем изменяться. От одной ветки к другой, к метке, к конкретному SHA для коммита и обратно к ветке. Атрибут revision может даже изменяться таким образом, что история переписывается.

Вместо отслеживания конкретной ветки или выполнения проверки без создания головы, Chef Infra Client поддерживает свою собственную ветку (через ресурс git), которая не существует в репозитории upstream. Затем Chef Infra Client может произвольно проверить эту ветку до любого коммита, не уничтожая локальную историю существующей ветки.

Например, чтобы явно отслеживать ветку master репозитория upstream:

revision 'master'

Используйте команды git rev-parse и git ls-remote, чтобы проверить, правильно ли Chef Infra Client синхронизирует коммиты. (Chef Infra Client всегда выполняет git ls-remote в репозитории upstream, чтобы проверить, что коммит выполнен в правильном репозитории.)

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

Путь к скрипту оболочки, используемому при запуске SSH с git. Эта переменная устанавливается для переменной среды GIT_SSH.

timeout
Тип в Ruby: Целое число

Время (в секундах), которое нужно подождать для выполнения команды, прежде чем истечёт время ожидания. При указании этого свойства с помощью ресурса deploy значение свойства timeout передаётся из ресурса deploy в ресурс git.

user
Тип в Ruby: Строка, Целое число | Значение по умолчанию: `HOME` environment variable of the user running chef-client

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


Общие функциональные возможности ресурса


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

not_if

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

only_if

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

Примеры


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

Использование git зеркала

git '/opt/my_sources/couch' do
  repository 'git://git.apache.org/couchdb.git'
  revision 'master'
  action :sync
end

Использование различных ветвей

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

branch_name = if node.chef_environment == 'QA'
                'staging'
              else
                'master'
              end

git '/home/user/deployment' do
   repository 'git@github.com:git_site/deployment.git'
   revision branch_name
   action :sync
   user 'user'
   group 'test'
end

Где переменная branch_name устанавливается в staging или master в зависимости от окружения узла. После определения переменной, переменная branch_name используется для установки ревизии репозитория. Если после выполнения примера выше использовать команду git status, она вернёт имя ветви как deploy, так как это значение по умолчанию. Запустите Chef Infra Client в режиме отладки, чтобы убедиться, что проверяются правильные ветви:

sudo chef-client -l debug

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

Следующий пример демонстрирует, как Bash может быть использован для установки плагина для rbenv под названием ruby-build, который находится в git системе контроля версий. Сначала приложение синхронизируется, затем Bash меняет текущую рабочую директорию на местоположение, где находится ruby-build, и затем выполняет команду.

git "/Users/tsmith/.chef/cache/ruby-build" do
  repository 'git://github.com/rbenv/ruby-build.git'
  revision 'master'
  action :sync
end

bash 'install_ruby_build' do
  cwd "/Users/tsmith/.chef/cache/ruby-build"
  user 'rbenv'
  group 'rbenv'
  code <<-EOH
    ./install.sh
    EOH
  environment 'PREFIX' => '/usr/local'
end

Уведомление о ресурсе после выполнения checkout

git "/Users/tsmith/.chef/cache/my_app" do
  repository node['my_app']['git_repository']
  revision node['my_app']['git_revision']
  action :sync
  notifies :run, 'bash[compile_my_app]', :immediately
end

Передача переменных окружения

git '/opt/my_sources/couch' do
  repository 'git://git.apache.org/couchdb.git'
  revision 'master'
  environment 'VAR' => 'whatever'
  action :sync
end

ресурс группы

страница ресурса группы

Используйте ресурс group для управления локальной группой.

Синтаксис


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

group 'name' do
  append                true, false # default value: false
  comment               String
  excluded_members      String, Array # default value: []
  gid                   String, Integer
  group_name            String # default value: 'name' unless specified
  members               String, Array # default value: []
  non_unique            true, false # default value: false
  system                true, false # default value: false
  action                Symbol # defaults to :create if not specified
end

где:

  • group — это ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла в нужное состояние.
  • append, comment, excluded_members, gid, group_name, members, non_unique и system — доступные свойства этого ресурса.

Действия


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

:create
По умолчанию. Создает группу. Если группа уже существует (но не совпадает), обновляет эту группу, чтобы она соответствовала.
:manage
Управляет существующей группой. Это действие ничего не делает, если группа не существует.
:modify
Изменяет существующую группу. Это действие вызывает исключение, если группа не существует.
:nothing
Этот блок ресурса не действует, пока другой ресурс не уведомит его о необходимости выполнить действие. После уведомления, этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:remove
Удаляет группу.

Свойства


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

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

Как члены должны быть добавлены и/или удалены из группы. При значении true, members добавляются, а excluded_members удаляются. При значении false, члены группы сбрасываются до значения свойства members.

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

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

Новое в Chef Client 14.9

excluded_members
Тип Ruby: Строка, массив | Значение по умолчанию: []

Удаляет пользователей из группы. Может использоваться только тогда, когда append установлено в true.

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

Идентификатор группы.

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

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

members
Тип Ruby: Строка, массив | Значение по умолчанию: []

Пользователи, которые должны быть установлены или добавлены в группу. При указании более одного члена группы, список членов должен быть массивом: members ['user1', 'user2'].

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

Разрешить дублирование gid. Может использоваться только с поставщиком ресурса пользователя Groupadd.

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

Установить в 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[Строка]'

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

Примеры


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

Добавление пользователей в группы\n\n ruby\n group 'www-data' do\n \ \ action :modify\n members 'maintenance'\n append true\n end\n \n\n \ Добавление пользователя в группу в среде Windows\n\n ruby\n group 'Administrators'\ \ do\n members ['domain\\foo']\n append true\n action :modify\n end\n\ \ \n"

ресурс habitat_config

страница ресурса habitat_config

Используйте ресурс habitat_config для применения конфигурации к сервису Chef Habitat.

Новое в Chef Infra Client 17.3.

Синтаксис


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

habitat_config 'name' do
  config                  Mash (Hash-like)
  gateway_auth_token      String
  remote_sup              String # default value: "127.0.0.1:9632"
  remote_sup_http         String # default value: "127.0.0.1:9631"
  service_group           String # default value: 'name' unless specified
  user                    String
  action                  Symbol # defaults to :apply if not specified
end

где:

  • habitat_config — это ресурс.
  • name — имя, заданное для блока ресурса.
  • action определяет действия, которые Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • config, gateway_auth_token, remote_sup, remote_sup_http, service_group и user — доступные свойства этого ресурса.

Действия


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

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

Свойства


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

config
Тип Ruby: Mash (похож на Hash) | REQUIRED

Конфигурация для применения в виде ruby hash, например, { worker_count: 2, http: { keepalive_timeout: 120 } }.

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

Токен аутентификации для доступа к http-порту удаленного диспетчера.

remote_sup
Тип Ruby: Строка | Значение по умолчанию: 127.0.0.1:9632

Адрес контрольного шлюза удаленного диспетчера.

remote_sup_http
Тип Ruby: Строка | Значение по умолчанию: 127.0.0.1:9631

Адрес http-порта удаленного диспетчера. Используется для извлечения существующих.

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

Группа сервисов, к которой должна быть применена конфигурация. Например, nginx.default

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

Имя ключа пользователя для использования в шифровании. Передает --user в hab config apply.


Общие функциональные возможности ресурсов


Ресурсы 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 и затем :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.

Примеры


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

Настройка по умолчанию для nginx

habitat_config 'nginx.default' do
  config({
    worker_count: 2,
    http: {
      keepalive_timeout: 120
    }
    })
  end

Ресурс habitat_install

Страница ресурса habitat_install

Используйте ресурс habitat_install для установки Chef Habitat.

Новое в Chef Infra Client 17.3.

Синтаксис


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

habitat_install 'name' do
  bldr_url         String
  create_user      true, false # default value: true
  hab_version      String
  install_url      String
  license          String
  tmp_dir          String
  action           Symbol # defaults to :install if not specified
end

где:

  • habitat_install — это ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла в нужное состояние.
  • bldr_url, create_user, hab_version, install_url, license и tmp_dir — доступные свойства этого ресурса.

Действия


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

:install
Устанавливает Habitat. Ничего не делает, если бинарник hab найден в стандартном расположении для системы (/bin/hab в Linux, /usr/local/bin/hab в macOS, C:/habitat/hab.exe в Windows) (по умолчанию)
:nothing
Этот блок ресурса не действует, пока не получит уведомление от другого ресурса о выполнении действия. После уведомления, этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


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

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

Необязательный URL для альтернативного Habitat Builder.

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

Создаёт системного пользователя hab.

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

Укажите версию Habitat, которую вы хотите установить.

install_url
Тип Ruby: Строка | Значение по умолчанию: https://raw.githubusercontent.com/habitat-sh/habitat/main/components/hab/install.sh

URL скрипта установки, по умолчанию из хранилища habitat.

license
Тип Ruby: Строка Разрешенные значения: "accept"

Указывает на принятие лицензии habitat, если установлено значение accept.

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

Устанавливает переменную среды TMPDIR для расположения временных файлов.

Примечание

Это необходимо, если /tmp и /var/tmp смонтированы noexec.


Общие функциональные возможности ресурсов


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

Примеры


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

Установка без имени ресурса

habitat_install

Установка, указав URL для habitat builder

habitat_install 'install habitat' do
  bldr_url 'http://localhost'
end

Установка, указав версию и URL для habitat builder

habitat_install 'install habitat' do
  bldr_url 'http://localhost'
  hab_version '1.5.50'
end

Ресурс habitat_package

Страница ресурса habitat_package

Используйте habitat_package для установки или удаления пакетов Chef Habitat из Habitat Builder.

Новое в Chef Infra Client 17.3.

Синтаксис


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

habitat_package 'name' do
  auth_token        String
  binlink           true, false, force # default value: false
  bldr_url          String # default value: "https://bldr.habitat.sh"
  channel           String # default value: "stable"
  exclude           String
  keep_latest       String
  no_deps           true, false # default value: false
  options           String
  package_name      String, Array
  source            String
  timeout           String, Integer
  version           String, Array
  action            Symbol # defaults to :install if not specified
end

где:

  • habitat_package — это ресурс.
  • name — имя, данное блоку ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет, чтобы привести узел в желаемое состояние.
  • auth_token, binlink, bldr_url, channel, exclude, keep_latest, no_deps, options, package_name, source, timeout и version — доступные для этого ресурса свойства.

Действия


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

:install
(по умолчанию)
:lock
:nothing
Этот блок ресурса не выполняет никаких действий, пока не получит уведомление от другого ресурса о необходимости выполнить действие. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:purge
:reconfig
:remove
:unlock
:upgrade

Свойства


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

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

Токен аутентификации для установки пакета из частной организации на Habitat builder.

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

Если habitat должен попытаться выполнить binlink пакета. Допустимые значения: true, false, :force. При установке в true и наличии бинарного файла или binlink произойдёт ошибка при binlinking.

bldr_url
Тип Ruby: Строка | Значение по умолчанию: https://bldr.habitat.sh

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

channel
Тип Ruby: Строка | Значение по умолчанию: stable

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

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

Идентификатор одного или нескольких пакетов, которые не должны быть удалены. (например: core/redis, core/busybox-static/1.42.2/21120102031201)

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

Возможность удаления с сохранением указанной версии Эта функция работает только в Habitat 1.5.86+

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

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

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

Передать любые дополнительные параметры команде habitat package.

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

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

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

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

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

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

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

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


Общие функциональные возможности ресурса


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

Примеры


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

Установить core/redis

habitat_package 'core/redis'

Установить конкретную версию пакета из канала unstable

habitat_package 'core/redis' do
  version '3.2.3'
  channel 'unstable'
end

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

habitat_package 'core/redis' do
  version '3.2.3/20160920131015'
end

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

habitat_package 'core/nginx' do
  binlink :force
end

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

habitat_package 'core/nginx' do
  options '--binlink'
end

Удалить пакет и все его версии

habitat_package 'core/nginx'
  action :remove
end

Удалить указанную версию пакета

habitat_package 'core/nginx/3.2.3'
  action :remove
end

Удалить пакет, но сохранить некоторые версии. Примечание: Доступно начиная с Habitat 1.5.86

habitat_package 'core/nginx'
  keep_latest '2'
  action :remove
end
**Remove package but keep dependencies**
habitat_package 'core/nginx'
  no_deps false
  action :remove
end

ресурс habitat_service

страница ресурса habitat_service

Используйте ресурс habitat_service для управления службами Chef Habitat. Это требует, чтобы core/hab-sup работала как служба. См. документацию ресурса habitat_sup для получения дополнительной информации.

Примечание

Приложения могут работать как определенный пользователь. Часто с Habitat, значение по умолчанию — hab или root. Если приложение требует другого пользователя, он должен быть создан с помощью ресурса user Chef.

Новое в Chef Infra Client 17.3.

Синтаксис


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

habitat_service 'name' do
  bind                       String, Array # default value: []
  binding_mode               Symbol, String # default value: :strict
  bldr_url                   String # default value: "https://bldr.habitat.sh/"
  channel                    Symbol, String # default value: :stable
  gateway_auth_token         String
  health_check_interval      Integer # default value: 30
  remote_sup                 String # default value: "127.0.0.1:9632"
  remote_sup_http            String # default value: "127.0.0.1:9631"
  service_group              String # default value: "default"
  service_name               String # default value: 'name' unless specified
  shutdown_timeout           Integer # default value: 8
  strategy                   Symbol, String # default value: :none
  topology                   Symbol, String # default value: :standalone
  update_condition           Symbol, String # default value: :latest
  action                     Symbol # defaults to :load if not specified
end

где:

  • habitat_service — это ресурс.
  • name — имя блока ресурса.
  • action определяет, какие шаги Chef Infra Client предпримет для приведения узла к нужному состоянию.
  • bind, binding_mode, bldr_url, channel, gateway_auth_token, health_check_interval, remote_sup, remote_sup_http, service_group, service_name, shutdown_timeout, strategy, topology и update_condition — это свойства, доступные для этого ресурса.

Действия


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

:load
(действие по умолчанию) выполняет hab service load для загрузки и запуска указанной службы приложения (по умолчанию)
:nothing
Этот блок ресурса не действует, пока не получит уведомление от другого ресурса о действии. После получения уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:reload
выполняет действия :unload и затем :load
:restart
выполняет действия :stop и затем :start
:start
выполняет hab service start для запуска указанной службы приложения
:stop
выполняет hab service stop для остановки указанной службы приложения
:unload
выполняет hab service unload для разгрузки и остановки указанной службы приложения

Свойства


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

bind
Тип Ruby: Строка, Массив | Значение по умолчанию: []

Передает --bind с указанными службами для привязки к команде hab. Если указан массив нескольких привязок служб, то для каждой добавляется флаг --bind.

binding_mode
Тип Ruby: Символ, Строка | Значение по умолчанию: :strict Допустимые значения: :strict, "strict", :relaxed, "relaxed"

Передает --binding-mode с указанным режимом привязки. По умолчанию :strict. Варианты: :strict или :relaxed

bldr_url
Тип Ruby: Строка | Значение по умолчанию: https://bldr.habitat.sh/

Передает --url с указанным URL Habitat Builder к команде hab. В зависимости от типа Habitat Builder, к которому вы подключаетесь, этот URL будет отличаться. Вот 3 текущих типа: - Общедоступный Habitat Builder (по умолчанию) - https://bldr.habitat.sh - Habitat Builder на локальной машине, установленный с помощью метода установки из исходного кода Source Install Method - https://your.bldr.url - Habitat Builder на локальной машине, установленный с помощью установщика Automate Automate Installer - https://your.bldr.url/bldr/v1

channel
Тип Ruby: Символ, Строка | Значение по умолчанию: :stable

Передает --channel с указанным каналом в команду hab

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

Токен аутентификации для доступа к http-порту удалённого Supervisor.

health_check_interval
Тип Ruby: Целое число | Значение по умолчанию: 30

Интервал (секунды) для выполнения проверок состояния.

remote_sup
Тип Ruby: Строка | Значение по умолчанию: 127.0.0.1:9632

Адрес удалённого шлюза управления Supervisor.

remote_sup_http
Тип Ruby: Строка | Значение по умолчанию: 127.0.0.1:9631

IP-адрес и порт, используемые для связи с удалённым Supervisor. Если это значение некорректно, ресурс будет обновлять конфигурацию Supervisor каждый раз при запуске Chef Infra Server.

service_group
Тип Ruby: Строка | Значение по умолчанию: default

Передает --group с указанной группой служб в команду hab

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

Имя службы, должно быть в формате origin/name

shutdown_timeout
Тип Ruby: Целое число | Значение по умолчанию: 8

Таймаут в секундах, разрешённый при завершении работы.

strategy
Тип Ruby: Символ, Строка | Значение по умолчанию: :none Допустимые значения: :none, "none", :"at-once", "at-once", :rolling, "rolling"

Передает --strategy с указанной стратегией обновления в команду hab. По умолчанию :none. Другие варианты: :'at-once' и :rolling

topology
Тип Ruby: Символ, Строка | Значение по умолчанию: :standalone Допустимые значения: :standalone, "standalone", :leader, "leader"

Передает --topology с указанной топологией службы в команду hab

update_condition
Тип Ruby: Символ, Строка | Значение по умолчанию: :latest Допустимые значения: :latest, "latest", :"track-channel", "track-channel"

Передает --update-condition, определяя, когда служба должна обновляться. По умолчанию latest. Варианты: latest или track-channel **_

Примечание

Это требует минимальной версии Habitat 1.5.71_** - latest: Запускает последнюю доступную версию пакета из настроенного канала и локальных пакетов. - track-channel: Всегда запускает пакет, находящийся в начале заданного канала. Это позволяет откат службы, где понижение пакета из канала приведет к откату пакета до более ранней версии. Следствием включения этого условия является то, что пакеты, которые новее пакета в начале канала, также будут удалены во время отката службы.


Общие функциональные возможности ресурса


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

Примеры


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

Установка и загрузка nginx

habitat_package 'core/nginx'
habitat_service 'core/nginx'

habitat_service 'core/nginx unload' do
  service_name 'core/nginx'
  action :unload
end

Передача параметров strategy и topology командам hab service

habitat_service 'core/redis' do
  strategy 'rolling'
  topology 'standalone'
end

Использование update_condition

habitat_service 'core/redis' do
  strategy 'rolling'
  update_condition 'track-channel'
  topology 'standalone'
end

Если у сервиса указан свой пользователь, отличный от пользователя hab, не создавайте пользователя hab при установке, а вместо этого создайте пользователя приложения с помощью ресурса Chef’s user

habitat_install 'install habitat' do
  create_user false
end

user 'acme-apps' do
  system true
end

habitat_service 'acme/apps'

ресурс habitat_sup

страница ресурса habitat_sup

Используйте ресурс habitat_sup для запуска диспетчера Chef Habitat supervisor для одного или нескольких сервисов Chef Habitat. Ресурс обычно используется совместно с habitat_service, который будет управлять сервисами, загруженными и запущенными в рамках диспетчера.

Новое в Chef Infra Client 17.3.

Синтаксис


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

habitat_sup 'name' do
  auth_token                    String
  auto_update                   true, false # default value: false
  bldr_url                      String
  event_stream_application      String
  event_stream_cert             String
  event_stream_environment      String
  event_stream_site             String
  event_stream_token            String
  event_stream_url              String
  gateway_auth_token            String
  hab_channel                   String
  health_check_interval         String, Integer
  keep_latest                   String
  launcher_version              String
  license                       String
  limit_no_files                String
  listen_ctl                    String
  listen_gossip                 String
  listen_http                   String
  org                           String # default value: "default"
  peer                          String, Array
  permanent_peer                true, false # default value: false
  ring                          String
  service_version               String
  sup_version                   String
  toml_config                   true, false # default value: false
  update_condition              String
  action                        Symbol # defaults to :run if not specified
end

где:

  • habitat_sup — это ресурс.
  • name — это имя, заданное для блока ресурса.
  • action определяет, какие шаги Chef Infra Client предпримет, чтобы привести узел в нужное состояние.
  • auth_token, auto_update, bldr_url, event_stream_application, event_stream_cert, event_stream_environment, event_stream_site, event_stream_token, event_stream_url, gateway_auth_token, hab_channel, health_check_interval, keep_latest, launcher_version, license, limit_no_files, listen_ctl, listen_gossip, listen_http, org, peer, permanent_peer, ring, service_version, sup_version, toml_config и update_condition — это доступные свойства для этого ресурса.

Действия


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

:nothing
Этот блок ресурса не действует, пока не получит уведомление от другого ресурса о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:run
Действие run обрабатывает установку Habitat с помощью ресурса habitat_install, гарантирует, что установлены соответствующие версии пакетов core/hab-sup и core/hab-launcher с помощью habitat_package, а затем выдает соответствующие определения системы инициализации и управляет службой. (по умолчанию)

Свойства


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

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

Токен аутентификации для доступа к частной организации на bldr. Это значение подставляется в соответствующий файл сервиса.

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

Передает --auto-update. Это установит диспетчер Habitat supervisor на автоматическое обновление всякий раз, когда выпущена стабильная версия.

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

URL Habitat Builder для ресурса habitat_package, если необходимо.

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

Название вашего приложения, которое будет отображаться в панели приложений Chef Automate.

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

В случае использования Intermediary Certificates или, Automate 2, для использования TLS с действительным сертификатом, вам необходимо предоставить Habitat свой сертификат для работы коммуникации с Automate. Следуйте этим шагам!.

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

Среда приложения для диспетчера, это для группировки в панели приложений.

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

Метка панели приложений для «сайта» приложения — можно фильтровать на панели.

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

Токен Chef Automate для отправки данных потока событий приложения.

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

AUTOMATE_HOSTNAME:4222 — URL Chef Automate с указанным портом 4222

Примечание

Порт можно изменить при необходимости.

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

Токен аутентификации для доступа к HTTP-шлюзу диспетчера. Это значение подставляется в соответствующий файл сервиса.

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

Канал установки Habitat. По умолчанию stable

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

Интервал (секунды) выполнения проверок работоспособности.

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

Автоматически удаляет старые пакеты. Если этот флаг включен, запуск сервиса инициирует удаление всех предыдущих версий связанного пакета. Это также применяется при перезапуске сервиса из-за обновления. Если в этот аргумент передано число, будет сохраняться указанное количество последних версий. Та же логика применяется к пакету Supervisor env:HAB_KEEP_LATEST_PACKAGES=1

Примечание

Требуется версия Habitat 1.5.86+

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

Позволяет выбрать, какую версию запускателя установить.

license
Тип Ruby: Строка Допустимые значения: "accept"

Указывает на принятие лицензии на использование среды обитания, если установлено значение accept.

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

позволяет установить LimitNOFILE в службе systemd при использовании

Примечание

Только для Linux.

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

Действительно только для действия :run, передает --listen-ctl со указанным адресом и портом, например, 0.0.0.0:9632, команде hab.

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

Действительно только для действия :run, передает --listen-gossip со указанным адресом и портом, например, 0.0.0.0:9638, команде hab.

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

Действительно только для действия :run, передает --listen-http со указанным адресом и портом, например, 0.0.0.0:9631, команде hab.

org
Тип Ruby: Строка | Значение по умолчанию: default

Действительно только для действия :run, передает --org с указанным именем организации команде hab.

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

Действительно только для действия :run, передает --peer с указанным начальным узлом команде hab.

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

Действительно только для действия :run, передает --permanent-peer команде hab.

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

Действительно только для действия :run, передает --ring с указанным именем ключа кольца команде hab.

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

Позволяет выбрать версию службы Windows для установки.

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

Позволяет выбрать версию установленного вами supervisora.

Примечание

Если версия указана, также будет установлена соответствующая версия habitat, если она ранее не была установлена.

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

Поддерживает использование конфигурации Supervisor toml вместо передачи параметров exec в службу, ссылка.

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

Передает --update-condition, определяя, когда эта служба должна обновляться. По умолчанию latest. Варианты latest или track-channel **_

Примечание

Требуется минимальная версия habitat 1.5.71_** - latest: Запускает последнюю доступную версию пакета в конфигурированном канале и локальных пакетах. - track-channel: Всегда запускает версию из начала заданного канала. Это позволяет откатывать службы, где понижение пакета из канала приведет к откату пакета к более ранней версии. Последствием включения этого условия является автоматическое удаление пакетов, более новых, чем пакет в начале канала, во время отката службы.


Общие функциональные возможности ресурсов


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

Примеры


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

Настройка по умолчанию

habitat_sup 'default'

Обновление портов прослушивания и использование конфигурации Supervisor toml

habitat_sup 'test-options' do
  listen_http '0.0.0.0:9999'
  listen_gossip '0.0.0.0:9998'
  toml_config true
end

Использование с локальным Habitat Builder. Примечание: доступ к общедоступному билдеру может быть недоступен из-за политики вашей компании

habitat_sup 'default' do
  bldr_url 'https://bldr.private.net'
end

Использование update_condition

habitat_sup 'default' do
  bldr_url 'https://bldr.private.net'
  habitat_channel 'dev'
  update_condition 'track-channel'
end

Предоставьте информацию об event_stream_*

habitat_sup 'default' do
  license 'accept'
  event_stream_application 'myapp'
  event_stream_environment 'production'
  event_stream_site 'MySite'
  event_stream_url 'automate.private.net:4222'
  event_stream_token 'myawesomea2clitoken='
  event_stream_cert '/hab/cache/ssl/mycert.crt'
end

Предоставьте конкретные версии

habitat_sup 'default' do
  bldr_url 'https://bldr.private.net'
  sup_version '1.5.50'
  launcher_version '13458'
  service_version '0.6.0' # WINDOWS ONLY
end

Установите последнюю версию пакетов для сохранения

habitat_sup ‘default’ do bldr_url ‘https://bldr.private.net’ sup_version ‘1.5.86’ launcher_version ‘13458’ service_version ‘0.6.0’ # WINDOWS ONLY keep_latest ‘2’ end

Ресурс habitat_user_toml

Страница ресурса habitat_user_toml

Используйте habitat_user_toml для шаблонизации user.toml для служб Chef Habitat. Настройки, заданные в user.toml, переопределяют default.toml для данного пакета, что делает его альтернативой применению конфигурации на уровне группы служб.

Новое в Chef Infra Client 17.3.

Синтаксис


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

habitat_user_toml 'name' do
  config            Mash (Hash-like)
  service_name      String # default value: 'name' unless specified
  action            Symbol # defaults to :create if not specified
end

где:

  • habitat_user_toml — ресурс.
  • name — имя, заданное для блока ресурса.
  • action определяет действия Chef Infra Client для приведения узла в нужное состояние.
  • config и service_name — доступные свойства этого ресурса.

Действия


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

:create
(действие по умолчанию) Создаёт user.toml из указанной конфигурации. (по умолчанию)
:delete
Удаляет user.toml
:nothing
Этот блок ресурса не выполняется, пока не будет уведомлён другим ресурсом о выполнении действия. После уведомления этот блок ресурса выполняется немедленно или помещается в очередь для выполнения в конце работы Chef Infra Client.

Свойства


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

config
Тип Ruby: Mash (Hash-подобный) | REQUIRED

Действительно только для действия :create. Конфигурация для применения в виде ruby хеша, например, { worker_count: 2, http: { keepalive_timeout: 120 } }.

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

Группа служб, к которой применяется конфигурация, например, nginx.default.


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


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

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса habitat_user_toml в рецептах:

Настройка пользовательских настроек для nginx

habitat_user_toml 'nginx' do
  config({
    worker_count: 2,
    http: {
      keepalive_timeout: 120
    }
    })
  end

Ресурс homebrew_cask

Страница ресурса homebrew_cask

Используйте ресурс homebrew_cask для установки бинарных файлов, распространяемых через менеджер пакетов Homebrew.

Новое в Chef Infra Client 14.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса homebrew_cask:

homebrew_cask 'name' do
  cask_name          String # default value: 'name' unless specified
  homebrew_path      String # default value: "/usr/local/bin/brew"
  install_cask       true, false # default value: true
  options            String
  owner              String, Integer # default value: "Calculated default username"
  action             Symbol # defaults to :install if not specified
end

где:

  • homebrew_cask — ресурс.
  • name — имя, заданное для блока ресурса.
  • action определяет шаги, которые Chef Infra Client выполнит для приведения узла в нужное состояние.
  • cask_name, homebrew_path, install_cask, options, и owner — доступные свойства этого ресурса.

Действия


Ресурс homebrew_cask имеет следующие действия:

:install
Установить приложение, упакованное как Homebrew cask. (по умолчанию)
:nothing
Этот блок ресурсов не действует, пока другой ресурс не уведомит его о необходимости выполнить действие. После уведомления, этот блок ресурсов либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:remove
Удалить приложение, упакованное как Homebrew cask.

Свойства


Ресурс homebrew_cask имеет следующие свойства:

cask_name
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для установки имени cask, если оно отличается от имени блока ресурсов.

homebrew_path
Тип Ruby: Строка | Значение по умолчанию: /usr/local/bin/brew

Путь к бинарному файлу homebrew.

install_cask
Тип Ruby: true, false | Значение по умолчанию: true

Автоматически установить репозиторий Homebrew cask tap, если необходимо.

options
Тип Ruby: Строка

Параметры для передачи команде brew во время установки.

owner
Тип Ruby: Строка, Целое число | Значение по умолчанию: Calculated default username

Владелец установки Homebrew.


Общие функциональные возможности ресурсов


Ресурсы 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.

Примеры


Этот ресурс не имеет примеров.

Ресурс homebrew_package

Страница ресурса homebrew_package

Используйте ресурс homebrew_package для управления пакетами для платформы macOS.

Примечание

Начиная с Chef Infra Client 16, ресурс homebrew теперь принимает массив пакетов для установки нескольких пакетов одновременно.

Примечание

В большинстве случаев лучше использовать ресурс package вместо этого. Это связано с тем, что когда ресурс package используется в рецепте, Chef Infra Client будет использовать данные, собранные Ohai в начале выполнения Chef Infra Client, чтобы определить правильное приложение пакета. Использование ресурса package позволяет написать рецепт таким образом, чтобы он мог быть использован на нескольких платформах.

Новое в Chef Infra Client 12.0.

Синтаксис


Полный синтаксис всех доступных свойств ресурса homebrew_package:

homebrew_package 'name' do
  homebrew_user      String, Integer
  options            String, Array
  package_name       String, Array
  source             String
  timeout            String, Integer
  version            String, Array
  action             Symbol # defaults to :install if not specified
end

где:

  • homebrew_package — это ресурс.
  • name — имя, заданное для блока ресурсов.
  • action определяет, какие шаги предпримет Chef Infra Client для приведения узла в желаемое состояние.
  • homebrew_user, options, package_name, source, timeout и version — доступные свойства этого ресурса.

Действия


Ресурс homebrew_package имеет следующие действия:

:install
Установить пакет. Если указана версия, установить указанную версию пакета. (по умолчанию)
:nothing
Этот блок ресурсов не действует, пока другой ресурс не уведомит его о необходимости выполнить действие. После уведомления, этот блок ресурсов либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:purge
Очистить пакет. Это действие обычно удаляет конфигурационные файлы, а также сам пакет.
:remove
Удалить пакет.
:upgrade
Установить пакет и/или убедиться, что пакет — последней версии.

Свойства


Ресурс homebrew_package имеет следующие свойства:

homebrew_user
Тип Ruby: Строка, Целое число

Имя или uid владельца Homebrew, который будет использоваться клиентом Chef Infra при выполнении команды.

Клиент Chef Infra по умолчанию попытается выполнить команду Homebrew от имени владельца исполняемого файла /usr/local/bin/brew. Если этот исполняемый файл не существует, клиент Chef Infra попытается найти пользователя, выполнив which brew. Если этот исполняемый файл также не будет найден, клиент Chef Infra выведет сообщение об ошибке: Could not find the 'brew' executable in /usr/local/bin or anywhere on the path..

Установите это свойство, чтобы указать владельца Homebrew в ситуациях, когда клиент Chef Infra не может автоматически определить правильного владельца.

options
Тип Ruby: Строка, Массив

Один (или несколько) дополнительных параметров команды, которые передаются команде.

package_name
Тип Ruby: Строка, Массив

Необязательное свойство для установки имени пакета, если оно отличается от имени блока ресурса.

source
Тип Ruby: Строка

Необязательный путь к пакету в локальной файловой системе.

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 включают общие свойства, уведомления и защитные механизмы ресурсов.

Общие свойства

Следующие свойства общие для всех ресурсов:

compile_time

Тип Ruby: true, false | Значение по умолчанию: false

Управление фазой, в которой ресурс выполняется на узле. Установите в значение true, чтобы запустить его при построении коллекции ресурсов (compile phase). Установите в значение false, чтобы запустить его при конфигурировании узла клиентом Chef Infra (converge phase).

ignore_failure

Тип Ruby: true, false, :quiet | Значение по умолчанию: false

Продолжить выполнение рецепта, если ресурс завершился ошибкой по любой причине. :quiet не будет отображать полный стек вызовов, и рецепт продолжит выполнение, если ресурс завершился ошибкой.

retries

Тип Ruby: Целое число | Значение по умолчанию: 0

Количество попыток перехватить исключения и повторить ресурс.

retry_delay

Тип Ruby: Целое число | Значение по умолчанию: 2

Задержка в секундах между попытками повторения.

sensitive

Тип Ruby: true, false | Значение по умолчанию: false

Гарантировать, что конфиденциальные данные ресурса не регистрируются клиентом Chef Infra.

Уведомления

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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса homebrew_package в рецептах:

Установка пакета:

homebrew_package 'git'

Установка нескольких пакетов сразу:

homebrew_package %w(git fish ruby)

Укажите пользователя Homebrew с UUID

homebrew_package 'git' do
  homebrew_user 1001
end

Укажите пользователя Homebrew со строкой:

homebrew_package 'vim' do
  homebrew_user 'user1'
end

Ресурс homebrew_tap

Страница ресурса homebrew_tap

Используйте ресурс homebrew_tap для добавления дополнительных формулярных репозиториев в менеджер пакетов Homebrew.

Новое в Chef Infra Client 14.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса homebrew_tap:

homebrew_tap 'name' do
  full               true, false # default value: false
  homebrew_path      String # default value: "/usr/local/bin/brew"
  owner              String # default value: "Calculated default username"
  tap_name           String # default value: 'name' unless specified
  url                String
  action             Symbol # defaults to :tap if not specified
end

где:

  • homebrew_tap — это ресурс.
  • name — имя, заданное для блока ресурса.
  • action определяет, какие шаги Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • full, homebrew_path, owner, tap_name и url — доступные для этого ресурса свойства.

Действия


Ресурс homebrew_tap имеет следующие действия:

:nothing
Этот блок ресурса не выполняет действий, пока не будет уведомлён другим ресурсом о необходимости действий. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:tap
Добавить Homebrew tap. (по умолчанию)
:untap
Удалить Homebrew tap.

Свойства


Ресурс homebrew_tap имеет следующие свойства:

full
Тип Ruby: true, false | Значение по умолчанию: false

Выполнить полное клонирование tap, а не поверхностное.

homebrew_path
Тип Ruby: Строка | Значение по умолчанию: /usr/local/bin/brew

Путь к бинарному файлу Homebrew.

owner
Тип Ruby: Строка | Значение по умолчанию: Calculated default username

Владелец установки Homebrew.

tap_name
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для задания имени tap, если оно отличается от имени блока ресурса.

url
Тип Ruby: Строка

URL tap.


Общие функциональные возможности ресурсов


Ресурсы 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, которое следует выполнить, и затем :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.

Примеры


У этого ресурса нет примеров.

Ресурс homebrew_update

Страница ресурса homebrew_update

Используйте ресурс homebrew_update для управления обновлениями репозиториев Homebrew на macOS.

Новое в Chef Infra Client 16.2.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса homebrew_update:

homebrew_update 'name' do
  frequency      Integer # default value: 86400
  action         Symbol # defaults to :periodic if not specified
end

где:

  • homebrew_update — это ресурс.
  • name — имя, заданное для блока ресурса.
  • action определяет, какие шаги Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • frequency — доступное для этого ресурса свойство.

Действия


Ресурс homebrew_update имеет следующие действия:

:nothing
Этот блок ресурса не выполняет действий, пока не будет уведомлён другим ресурсом о необходимости действий. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:periodic
Выполнить периодическое обновление на основе свойства частоты. (по умолчанию)
:update
Выполнить немедленное обновление.

Свойства


frequency
Тип Ruby: Целое число | Значение по умолчанию: 86400

Определяет частоту (в секундах) обновления Homebrew. Используйте этот параметр, когда указано действие :periodic.


Общие возможности ресурса


Ресурсы 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]', действие, которое должно быть выполнено, и :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.

Примеры


В следующих примерах демонстрируются различные подходы к использованию ресурса homebrew_update в рецептах:

Обновление данных репозитория homebrew с указанным интервалом:

homebrew_update 'all platforms' do
  frequency 86400
  action :periodic
end

Обновление репозитория Homebrew в начале выполнения Chef Infra Client:

homebrew_update 'update'

ресурс hostname

страница ресурса hostname

Используйте ресурс hostname для установки имени узла системы, конфигурации файла имени узла и файла hosts, а также повторного запуска плагина Ohai hostname, чтобы имя узла было доступно в последующих кулинариях.

Новое в Chef Infra Client 14.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса hostname, выглядит следующим образом:

hostname 'name' do
  aliases              Array
  compile_time         true, false # default value: true
  domain_password      String
  domain_user          String
  fqdn                 String
  hostname             String # default value: 'name' unless specified
  ipaddress            String # default value: The node's IP address as determined by Ohai.
  windows_reboot       true, false # default value: true
  action               Symbol # defaults to :set if not specified
end

где:

  • hostname — это ресурс.
  • name — это имя, заданное для блока ресурса.
  • action определяет действия, которые Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • aliases, compile_time, domain_password, domain_user, fqdn, hostname, ipaddress и windows_reboot — это доступные свойства для этого ресурса.

Действия


Ресурс hostname имеет следующие действия:

:nothing
Этот блок ресурса не выполняется, если не уведомлен другим ресурсом о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:set
Устанавливает имя узла узла. (по умолчанию)

Свойства


Ресурс hostname имеет следующие свойства:

aliases
Тип Ruby: Массив

Массив псевдонимов имени узла, которые следует использовать при конфигурировании файла hosts.

compile_time
Тип Ruby: true, false | Значение по умолчанию: true

Определяет, должен ли ресурс выполняться во время компиляции.

domain_password
Тип Ruby: Строка

Пароль для параметра domain_user

Новое в Chef Infra Client 17.2

compile_time
Тип Ruby: Строка

Учетная запись домена в формате DOMAIN\user, используемая при переименовании устройства, входящего в домен

Новое в Chef Infra Client 17.2

fqdn
Тип Ruby: Строка

Необязательное свойство для установки fqdn, если оно отличается от имени узла блока ресурса.

Новое в Chef Infra Client 17.0

hostname
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для установки имени узла, если оно отличается от имени блока ресурса.

ipaddress
Тип Ruby: Строка | Значение по умолчанию: The node's IP address as determined by Ohai.

IP-адрес, используемый при конфигурировании файла hosts.

windows_reboot
Тип Ruby: true, false | Значение по умолчанию: true

Определяет, будет ли Windows перезагружаться после изменения имени узла, поскольку это необходимо для вступления изменения в силу.


Общие возможности ресурса


Ресурсы 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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса hostname в рецептах:

Установить имя узла с помощью IP-адреса, обнаруженного Ohai:

hostname 'example'

Вручную указать имя узла и IP-адрес:

hostname 'statically_configured_host' do
  hostname 'example'
  ipaddress '198.51.100.2'
end

Изменить имя узла узла Windows, не входящего в домен:

hostname 'renaming a workgroup computer' do
  hostname 'Foo'
end

Изменить имя узла узла Windows, входящего в домен (новое в 17.2):

hostname 'renaming a domain-joined computer' do
  hostname 'Foo'
  domain_user "Domain\Someone"
  domain_password 'SomePassword'
end

Ресурс http_request

Страница ресурса http_request

Используйте ресурс http_request для отправки HTTP-запроса (GET, PUT, POST, DELETE, HEAD или OPTIONS) с произвольным сообщением. Этот ресурс часто полезен, когда необходимы пользовательские обратные вызовы.

Синтаксис


Блок ресурса http_request отправляет HTTP-запросы с произвольным сообщением. Например, отправьте запрос DELETE на 'http://www.chef.io/some_page?message=please_delete_me'.

http_request 'please_delete_me' do
  url 'http://www.chef.io/some_page'
  action :delete
end

Полный синтаксис для всех свойств, доступных для ресурса http_request:

http_request 'name' do
  headers                    Hash
  message                    Object # defaults to 'name' if not specified
  url                        String
  action                     Symbol # defaults to :get if not specified
end

где:

  • http_request — это ресурс.
  • name — это имя, данное блоку ресурса.
  • action определяет, какие шаги Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • headers, message и url — это свойства этого ресурса, с указанным типом Ruby. Подробнее о всех свойствах, которые могут использоваться с этим ресурсом, см. раздел «Свойства» ниже.

Действия


Ресурс http_request имеет следующие действия:

:delete
Отправить запрос DELETE.
:get
По умолчанию. Отправить запрос GET. Изменено в Chef Client 12.0 для устаревания жестко закодированной строки запроса из более ранних версий. Кулинарные книги, которые полагаются на эту строку, должны быть обновлены, чтобы вручную добавить ее в URL, как это передается ресурсу.
:head
Отправить запрос HEAD.
:nothing
Этот блок ресурса не действует, пока другой ресурс не уведомит его о действии. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:options
Отправить запрос OPTIONS.
:post
Отправить запрос POST.
:put
Отправить запрос PUT.

Свойства


Ресурс http_request имеет следующие свойства:

headers
Тип Ruby: Hash

Хэш пользовательских заголовков.

message
Тип Ruby: Объект

Сообщение, отправляемое HTTP-запросом. Значение по умолчанию: name блока ресурса. Подробнее см. раздел «Синтаксис» выше.

url
Тип Ruby: Строка

URL, на который отправляется HTTP-запрос.


Общие функциональные возможности ресурса


Ресурсы 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.

Примеры


В следующих примерах демонстрируются различные подходы к использованию ресурса http_request в рецептах:

Отправить запрос GET

http_request 'some_message' do
  url 'http://example.com/check_in'
end

Сообщение отправляется как http://example.com/check_in?message=some_message.

Отправить запрос POST

Чтобы отправить запрос POST в формате JSON, преобразуйте сообщение в JSON и укажите правильный заголовок content-type. Например:

http_request 'posting data' do
  action :post
  url 'http://example.com/check_in'
  message ({:some => 'data'}.to_json)
  headers({'AUTHORIZATION' => "Basic #{
    Base64.encode64('username:password')}",
    'Content-Type' => 'application/data'
  })
end

Передать файл только при изменении удаленного источника

remote_file '/tmp/couch.png' do
  source 'http://couchdb.apache.org/img/sketch.png'
  action :nothing
end

http_request 'HEAD http://couchdb.apache.org/img/sketch.png' do
  message ''
  url 'http://couchdb.apache.org/img/sketch.png'
  action :head
  if ::File.exist?('/tmp/couch.png')
    headers 'If-Modified-Since' => File.mtime('/tmp/couch.png').httpdate
  end
  notifies :create, 'remote_file[/tmp/couch.png]', :immediately
end

Ресурс ifconfig

Страница ресурса ifconfig

Используйте ресурс ifconfig для управления интерфейсами на Unix и Linux системах.

Примечание

Этот ресурс требует наличия утилиты ifconfig на системе и может потребовать предварительной установки дополнительных пакетов. В Ubuntu 18.04 и более поздних версиях необходимо установить пакет ifupdown, который отключает встроенную функциональность Netplan.

Предупреждение

Этот ресурс не будет работать с Fedora релизом 33 и более поздними.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса ifconfig:

ifconfig 'name' do
  bcast             String
  bonding_opts      String
  bootproto         String
  bridge            String
  device            String
  ethtool_opts      String
  family            String # default value: "inet"
  gateway           String
  hwaddr            String
  inet_addr         String
  mask              String
  master            String
  metric            String
  mtu               String
  network           String
  onboot            String
  onparent          String
  slave             String
  target            String # default value: 'name' unless specified
  vlan              String
  action            Symbol # defaults to :add if not specified
end

где:

  • ifconfig — ресурс.
  • name — имя, заданное для блока ресурса.
  • action определяет, какие шаги выполнит Chef Infra Client для приведения узла в желаемое состояние.
  • bcast, bonding_opts, bootproto, bridge, device, ethtool_opts, family, gateway, hwaddr, inet_addr, mask, master, metric, mtu, network, onboot, onparent, slave, target и vlan — доступные свойства этого ресурса.

Действия


Ресурс ifconfig имеет следующие действия:

:add
Выполняет ifconfig для конфигурации сетевого интерфейса и (на некоторых платформах) записи файла конфигурации для этого сетевого интерфейса. (по умолчанию)
:delete
Выполняет ifconfig для отключения сетевого интерфейса и (на некоторых платформах) удаления файла конфигурации этого сетевого интерфейса.
:disable
Выполняет ifconfig для отключения сетевого интерфейса.
:enable
Выполняет ifconfig для включения сетевого интерфейса.
:nothing
Этот блок ресурса не выполняется, пока другой ресурс не уведомит его о необходимости выполнить действие. После уведомления этот блок ресурса выполняется либо немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс ifconfig имеет следующие свойства:

bcast
Тип Ruby: Строка

Адрес широковещательной передачи для сетевого интерфейса. На некоторых платформах это свойство не устанавливается с помощью ifconfig, а добавляется в файл конфигурации запуска сетевого интерфейса.

bonding_opts
Тип Ruby: Строка

Параметры объединения, которые передаются через BONDING_OPTS на RHEL и CentOS. Например: mode=active-backup miimon=100.

Новое в Chef Client 13.4

bootproto
Тип Ruby: Строка

Протокол загрузки, используемый сетевым интерфейсом.

bridge
Тип Ruby: Строка

Интерфейс моста, к которому принадлежит этот интерфейс, в системах на основе Red Hat.

Новое в Chef Infra Client 16.7

device
Тип Ruby: Строка

Сетевой интерфейс, подлежащий конфигурации.

ethtool_opts
Тип Ruby: Строка

Параметры, передаваемые в ethtool(8). Например: -A eth0 autoneg off rx off tx off.

Новое в Chef Client 13.4

family
Тип Ruby: String | Значение по умолчанию: inet

Вариант семейства сетей для систем на базе Debian; например: inet или inet6.

Новое в Chef Client 14.0

gateway
Тип Ruby: String

Шлюз для использования интерфейсом.

Новое в Chef Client 14.4

hwaddr
Тип Ruby: String

Физический адрес сетевого интерфейса.

inet_addr
Тип Ruby: String

Адрес хоста в Интернете для сетевого интерфейса.

mask
Тип Ruby: String

Десятичное представление маски сети. Например: 255.255.255.0.

master
Тип Ruby: String

Указывает интерфейс связки каналов, к которому привязан Ethernet-интерфейс.

Новое в Chef Client 13.4

metric
Тип Ruby: String

Метрика маршрутизации для интерфейса.

mtu
Тип Ruby: String

Максимальный размер блока передачи (MTU) для сетевого интерфейса.

network
Тип Ruby: String

Адрес сетевого интерфейса.

onboot
Тип Ruby: String

Включить сетевой интерфейс при загрузке.

onparent
Тип Ruby: String

Включить сетевой интерфейс, когда включен его родительский интерфейс.

slave
Тип Ruby: String

Если установлено в yes, это устройство контролируется интерфейсом связки каналов, который указан с помощью свойства master.

Новое в Chef Client 13.4

target
Тип Ruby: String | Значение по умолчанию: The resource block's name

IP-адрес, который должен быть назначен сетевому интерфейсу. Если не указано, будет использоваться имя ресурса.

vlan
Тип Ruby: String

VLAN для назначения интерфейса.

Новое в Chef Client 14.4


Общие функции ресурса


Ресурсы 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.

Примеры


В следующих примерах демонстрируются различные подходы к использованию ресурса ifconfig в рецептах:

Настройка сетевого интерфейса со статическим IP-адресом

ifconfig '33.33.33.80' do
  device 'eth1'
end

создаст следующую конфигурацию интерфейса:

iface eth1 inet static
  address 33.33.33.80

Настройка интерфейса для использования DHCP

ifconfig 'Set eth1 to DHCP' do
  device 'eth1'
  bootproto 'dhcp'
end

создаст следующую конфигурацию интерфейса:

iface eth1 inet dhcp

Обновление статического IP-адреса с протоколом загрузки

ifconfig "33.33.33.80" do
  bootproto "dhcp"
  device "eth1"
end

обновит конфигурацию интерфейса со статического на dhcp:

iface eth1 inet dhcp
  address 33.33.33.80

inspec_input resource

inspec_input страница ресурса

Используйте ресурс inspec_input для добавления ввода в фазу соответствия.

Новое в Chef Infra Client 17.5.

Синтаксис


Полный синтаксис всех свойств, доступных ресурсу inspec_input:

inspec_input 'name' do
  input       Hash, String # default value: 'name' unless specified
  source      Hash, String # default value: 'name' unless specified
  action      Symbol # defaults to :add if not specified
end

где:

  • inspec_input — это ресурс.
  • name — имя, данное блоку ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • input и source — доступные свойства этого ресурса.

Действия


Ресурс inspec_input имеет следующие действия:

:add
Добавить входной параметр в фазу соответствия (по умолчанию)
:nothing
Этот блок ресурсов не действует, пока другой ресурс не уведомит его о необходимости выполнить действие. После уведомления этот блок ресурсов либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс inspec_input имеет следующие свойства:

input
Тип Ruby: Хэш, строка | Значение по умолчанию: The resource block's name
source
Тип Ruby: Хэш, строка | Значение по умолчанию: The resource block's name

Общие функции ресурсов


Ресурсы 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.

Примеры


В следующих примерах показаны различные подходы к использованию ресурса inspec_input в рецептах:

Активировать входной параметр по умолчанию в сегменте соответствия кулинарии openssh:

  inspec_input 'openssh' do
    action :add
  end

Активировать все входные параметры в сегменте соответствия кулинарии openssh:

  inspec_input 'openssh::.*' do
    action :add
  end

Добавить входной параметр InSpec в фазу соответствия из хэша:

  inspec_input { ssh_custom_path: '/whatever2' }

Добавить входной параметр InSpec в фазу соответствия, используя свойство ‘name’ для идентификации входного параметра:

  inspec_input "setting my input" do
    source( { ssh_custom_path: '/whatever2' })
  end

Добавить входной параметр InSpec в фазу соответствия, используя файл TOML, JSON или YAML:

  inspec_input "/path/to/my/input.yml"

Добавить входной параметр InSpec в фазу соответствия, используя файл TOML, JSON или YAML, используя свойство ‘name’:

  inspec_input "setting my input" do
    source "/path/to/my/input.yml"
  end

Обратите внимание, что ресурс inspec_input не обновляется и не будет генерировать уведомления (подобно ресурсу журнала). Это сделано для сохранения возможности использования ресурса без увеличения количества обновленного ресурса более нуля. Поскольку ресурс не обновляет состояние управляемого узла, это поведение все еще соответствует модели управления конфигурацией. Вместо этого вы должны использовать события для наблюдения за изменениями конфигурации для фазы соответствия. Можно использовать ресурс notify_group для цепочки уведомлений двух ресурсов, но уведомления — не правильная модель, и вы должны использовать чистые условные выражения Ruby вместо этого. Конфигурация соответствия должна быть независимой от других ресурсов и должна зависеть только от состояния/атрибутов, а не от других ресурсов.

ресурс inspec_waiver

страница ресурса inspec_waiver

Используйте ресурс inspec_waiver для добавления исключения в фазу соответствия.

Новое в Chef Infra Client 17.5.

Синтаксис


Полный синтаксис для всех свойств, доступных для ресурса inspec_waiver:

inspec_waiver 'name' do
  control            String # default value: 'name' unless specified
  expiration         String
  justification      String
  run_test           true, false
  source             Hash, String
  action             Symbol # defaults to :add if not specified
end

где:

  • inspec_waiver — ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет действия Chef Infra Client для приведения узла в нужное состояние.
  • control, expiration, justification, run_test и source — доступные свойства этого ресурса.

Действия


Ресурс inspec_waiver имеет следующие действия:

:add
Добавить исключение в фазу соответствия (по умолчанию)
:nothing
Этот блок ресурсов не действует, пока другой ресурс не уведомит его о необходимости выполнить действие. После уведомления этот блок ресурсов либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс inspec_waiver имеет следующие свойства:

control
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Имя контролируемого аспекта, для которого применяется исключение

expiration
Тип Ruby: Строка

Дата истечения действия исключения — указывается в формате ГГГГ-ММ-ДД

justification
Тип в Ruby: Строка

Может содержать любой текст, включая причину освобождения от проверки и информацию о том, кто утвердил освобождение.

run_test
Тип в Ruby: true, false

Если присутствует и равно true, управление будет выполнено и отслежено, но ошибки в нём не приведут к общему отказу. Если отсутствует или равно false, управление не будет выполнено.

source
Тип в Ruby: Хэш, Строка

Общие функциональные возможности ресурса


Ресурсы 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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса inspec_waiver в рецептах:

Активировать по умолчанию освобождение в сегменте соответствия cookbook openssh:

  inspec_waiver 'openssh' do
    action :add
  end

Активировать все освобождения в сегменте соответствия cookbook openssh:

  inspec_waiver 'openssh::.*' do
    action :add
  end

Добавить освобождение InSpec в фазу соответствия:

  inspec_waiver 'Add waiver entry for control' do
    control 'my_inspec_control_01'
    run_test false
    justification "The subject of this control is not managed by Chef Infra Client on the systems in policy group #{node['policy_group']}"
    expiration '2022-01-01'
    action :add
  end

Добавить освобождение InSpec в фазу соответствия, используя свойство «name» для идентификации управления:

  inspec_waiver 'my_inspec_control_01' do
    justification "The subject of this control is not managed by Chef Infra Client on the systems in policy group #{node['policy_group']}"
    action :add
  end

Добавить освобождение InSpec в фазу соответствия, используя произвольный YAML, JSON или TOML файл:

  # files ending in .yml or .yaml that exist are parsed as YAML
  inspec_waiver "/path/to/my/waiver.yml"

  inspec_waiver "my-waiver-name" do
    source "/path/to/my/waiver.yml"
  end

  # files ending in .json that exist are parsed as JSON
  inspec_waiver "/path/to/my/waiver.json"

  inspec_waiver "my-waiver-name" do
    source "/path/to/my/waiver.json"
  end

  # files ending in .toml that exist are parsed as TOML
  inspec_waiver "/path/to/my/waiver.toml"

  inspec_waiver "my-waiver-name" do
    source "/path/to/my/waiver.toml"
  end

Добавить освобождение InSpec в фазу соответствия, используя хэш:

  my_hash = { "ssh-01" => {
    "expiration_date" => "2033-07-31",
    "run" => false,
    "justification" => "because"
  } }

  inspec_waiver "my-waiver-name" do
    source my_hash
  end

Обратите внимание, что ресурс inspec_waiver не обновляется и не срабатывает уведомлений (подобно ресурсу log). Это делается для сохранения возможности использования ресурса, не увеличивая количество обновленных ресурсов. Поскольку ресурс не обновляет состояние управляемого узла, это поведение соответствует модели управления конфигурацией. Вместо этого, используйте события для наблюдения за изменениями конфигурации для фазы соответствия. Можно использовать ресурс notify_group для цепочек уведомлений двух ресурсов, но уведомления неподходящий подход, и следует использовать чистые условные выражения Ruby. Конфигурация соответствия должна быть независимой от других ресурсов и зависеть только от состояния/атрибутов, а не от других ресурсов.

Ресурс inspec_waiver_file_entry

Страница ресурса inspec_waiver_file_entry

Используйте ресурс inspec_waiver_file_entry для добавления или удаления записей из файла освобождения InSpec. Это можно использовать совместно с фазой соответствия.

Новое в Chef Infra Client 17.1.

Синтаксис


Полный синтаксис всех доступных свойств для ресурса inspec_waiver_file_entry:

inspec_waiver_file_entry 'name' do
  backup             false, Integer # default value: false
  control            String # default value: 'name' unless specified
  expiration         String
  file_path          String
  justification      String
  run_test           true, false
  action             Symbol # defaults to :add if not specified
end

где:

  • inspec_waiver_file_entry — это ресурс.
  • name — это имя, присвоенное блоку ресурса.
  • action определяет действия, которые Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • backup, control, expiration, file_path, justification и run_test — это доступные свойства для этого ресурса.

Действия


Ресурс inspec_waiver_file_entry имеет следующие действия:

:add
(по умолчанию)
:nothing
Этот блок ресурса не действует, пока не будет уведомлен другим ресурсом о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:remove

Свойства


Ресурс inspec_waiver_file_entry имеет следующие свойства:

backup
Тип в Ruby: false, Целое число | Значение по умолчанию: false

Количество резервных копий, которые нужно сохранить в /var/chef/backup (для платформ на основе UNIX и Linux) или в C:/chef/backup (для платформы Microsoft Windows). Установите в значение false, чтобы не сохранять резервные копии.

control
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Имя управляемого элемента, добавляемого или удаляемого в файл отчета об исключениях.

expiration
Тип Ruby: Строка

Дата истечения срока действия исключения, указанная в формате ГГГГ-ММ-ДД.

file_path
Тип Ruby: Строка | Значение по умолчанию: `/etc/chef/inspec_waivers.yml` on Linux/Unix and `C:\chef\inspec_waivers.yml` on Windows | REQUIRED

Путь к файлу отчета об исключениях, который изменяется.

justification
Тип Ruby: Строка

Любой текст по вашему желанию, который может включать причину исключения и того, кто утвердил исключение.

run_test
Тип Ruby: true, false

Если присутствует и равно true, управляемый элемент будет выполняться и отслеживаться, но ошибки в нём не приведут к ошибке всего выполнения. Если отсутствует или равно false, управляемый элемент не будет выполняться.


Общее функциональное назначение


Ресурсы Chef включают общие свойства, уведомления и защитные свойства ресурса.

Общие свойства

Следующие свойства являются общими для всех ресурсов:

compile_time

Тип Ruby: true, false | Значение по умолчанию: false

Управляет фазой, в которой ресурс выполняется на узле. Установите значение true, чтобы запустить его во время построения коллекции ресурсов (compile phase). Установите значение false, чтобы запустить его во время настройки узла клиентом Chef Infra (converge phase).

ignore_failure

Тип Ruby: true, false, :quiet | Значение по умолчанию: false

Продолжить выполнение рецепта, если ресурс завершился ошибкой по любой причине. :quiet не будет отображать полную трассировку стека, и рецепт продолжит выполняться, если ресурс завершится ошибкой.

retries

Тип Ruby: Целое число | Значение по умолчанию: 0

Количество попыток перехватить исключения и повторить ресурс.

retry_delay

Тип Ruby: Целое число | Значение по умолчанию: 2

Задержка в секундах между попытками повтора.

sensitive

Тип Ruby: true, false | Значение по умолчанию: false

Обеспечить, чтобы конфиденциальные данные ресурса не регистрировались клиентом Chef Infra.

Уведомления

notifies

Тип Ruby: Символ, 'Chef::Resource[Строка]'

Ресурс может уведомить другой ресурс о действии при изменении его состояния. Укажите 'resource[name]', :action, который должен выполнить ресурс, а затем :timer для этого действия. Ресурс может уведомлять несколько ресурсов; используйте оператор notifies для каждого уведомляемого ресурса.

Если указанный ресурс не существует, генерируется ошибка. В отличие от этого, subscribes не завершится ошибкой, если исходный ресурс не найден.

Таймер указывает момент во время выполнения клиента Chef Infra, в который выполняется уведомление. Доступны следующие таймеры:

:before

Указывает, что действие над уведомленным ресурсом должно выполняться до обработки блока ресурса, в котором находится уведомление.

:delayed

По умолчанию. Указывает, что уведомление должно быть помещено в очередь и выполнено в конце выполнения клиента Chef Infra.

: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, в который выполняется уведомление. Доступны следующие таймеры:

: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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса inspec_waiver_file_entry в рецептах:

Добавление записи исключения InSpec в указанный файл отчета об исключениях:

  inspec_waiver_file_entry 'Add waiver entry for control' do
    file_path 'C:\chef\inspec_waiver_file.yml'
    control 'my_inspec_control_01'
    run_test false
    justification "The subject of this control is not managed by Chef Infra Client on the systems in policy group #{node['policy_group']}"
    expiration '2022-01-01'
    action :add
  end

Добавление записи исключения InSpec в указанный файл отчета об исключениях, используя свойство «name» для идентификации управляемого элемента:

  inspec_waiver_file_entry 'my_inspec_control_01' do
    justification "The subject of this control is not managed by Chef Infra Client on the systems in policy group #{node['policy_group']}"
    action :add
  end

Удаление записи исключения InSpec из указанного файла отчета об исключениях:

  inspec_waiver_file_entry "my_inspec_control_01" do
    action :remove
  end

Ресурс ips_package

Страница ресурса ips_package

Используйте ресурс ips_package для управления пакетами (используя систему пакетов IPS) на платформе Solaris 11.

Примечание

Во многих случаях лучше использовать ресурс package вместо этого. Это связано с тем, что при использовании ресурса package в рецепте клиент Chef Infra будет использовать данные, собранные Ohai в начале выполнения клиента Chef Infra, чтобы определить правильное применение пакета. Использование ресурса package позволяет создать рецепт, который можно использовать на многих платформах.

Синтаксис


Блок ресурса ips_package управляет пакетом на узле, обычно устанавливая его. Самое простое использование ресурса ips_package:

ips_package 'package_name'

что установит указанный пакет, используя все значения по умолчанию и действие по умолчанию (:install).

Полный синтаксис всех доступных свойств ресурса ips_package:

ips_package 'name' do
  accept_license             true, false # default value: false
  options                    String
  package_name               String, Array
  source                     String
  timeout                    String, Integer
  version                    String, Array
  action                     Symbol # defaults to :install if not specified
end

где:

  • ips_package — это ресурс.
  • name — это имя, данное блоку ресурса.
  • action определяет шаги, которые клиент Chef Infra предпримет, чтобы привести узел в желаемое состояние.
  • accept_license, options, package_name, source, timeout и version — это доступные свойства этого ресурса.

Действия


Ресурс ips_package имеет следующие действия:

:install
Установить пакет. Если указана версия, установить указанную версию пакета. (по умолчанию)
:nothing
Этот блок ресурса не выполняется, пока не будет уведомлен другим ресурсом о необходимости выполнения. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения клиента Chef Infra.
:remove
Удалить пакет.
:upgrade
Установить пакет и/или убедиться, что пакет является последней версией.

Свойства


Ресурс ips_package имеет следующие свойства:

accept_license
Тип в Ruby: true, false | Значение по умолчанию: false

Автоматически принимает лицензионное соглашение конечного пользователя.

options
Тип в Ruby: Строка

Один (или несколько) дополнительных параметров команды, которые передаются команде.

package_name
Тип в Ruby: Строка

Необязательное свойство для установки имени пакета, если оно отличается от имени блока ресурса.

source
Тип в Ruby: Строка

Необязательный путь к пакету в локальной файловой системе.

timeout
Тип в Ruby: Строка, Целое число

Время ожидания (в секундах) до истечения времени.

version
Тип в Ruby: Строка

Версия пакета, который необходимо установить или обновить.


Общие функциональные возможности ресурса


Ресурсы Chef включают общие свойства, уведомления и защитные свойства ресурсов.

Общие свойства

Следующие свойства общие для всех ресурсов:

compile_time

Тип в Ruby: true, false | Значение по умолчанию: false

Управляет фазой, в которой ресурс выполняется на узле. Установите значение true, чтобы выполнить ресурс во время построения коллекции ресурсов (compile phase). Установите значение false, чтобы выполнить ресурс во время конфигурации узла клиентом Chef Infra (converge phase).

ignore_failure

Тип в Ruby: true, false, :quiet | Значение по умолчанию: false

Продолжать выполнение рецепта, если ресурс завершился неудачно по какой-либо причине. :quiet не будет отображать полный стек вызовов, и рецепт будет продолжать выполняться, если ресурс завершится неудачно.

retries

Тип в Ruby: Целое число | Значение по умолчанию: 0

Количество попыток перехватить исключения и повторить ресурс.

retry_delay

Тип в Ruby: Целое число | Значение по умолчанию: 2

Задержка в секундах между попытками повтора.

sensitive

Тип в Ruby: true, false | Значение по умолчанию: false

Гарантирует, что конфиденциальные данные ресурса не регистрируются клиентом Chef Infra.

Уведомления

notifies

Тип в Ruby: Символ, 'Chef::Resource[Строка]'

Ресурс может уведомлять другой ресурс о выполнении действия при изменении его состояния. Укажите 'resource[name]', :action, которое должен выполнить ресурс, а затем :timer для этого действия. Ресурс может уведомлять более одного ресурса; используйте оператор notifies для каждого уведомляемого ресурса.

Если указанный ресурс не существует, возникает ошибка. В отличие от subscribes, ошибка не возникнет, если исходный ресурс не найден.

Таймер указывает момент во время выполнения клиента Chef Infra, когда выполняется уведомление. Доступны следующие таймеры:

:before

Указывает, что действие над уведомленным ресурсом должно выполняться до обработки блока ресурса, в котором расположено уведомление.

:delayed

По умолчанию. Указывает, что уведомление должно быть помещено в очередь, а затем выполнено в конце выполнения клиента Chef Infra.

: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, когда выполняется уведомление. Доступны следующие таймеры:

: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.

Примеры


В следующих примерах показаны различные подходы к использованию ресурса ips_package в рецептах:

Установить пакет

ips_package 'name of package' do
  action :install
end

ресурс kernel_module

страница ресурса kernel_module

Используйте ресурс kernel_module для управления модулями ядра на системах Linux. Этот ресурс может загружать, выгружать, добавлять в черный список, отключать, включать, устанавливать и удалять модули.

Новое в Chef Infra Client 14.3.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса kernel_module:

kernel_module 'name' do
  load_dir        String # default value: "/etc/modules-load.d"
  modname         String # default value: 'name' unless specified
  options         Array
  unload_dir      String # default value: "/etc/modprobe.d"
  action          Symbol # defaults to :install if not specified
end

где:

  • kernel_module — это ресурс.
  • name — это имя, заданное для блока ресурса.
  • action определяет действия, которые клиент Chef Infra предпримет, чтобы привести узел в желаемое состояние.
  • load_dir, modname, options и unload_dir — это доступные свойства этого ресурса.

Действия


Ресурс kernel_module имеет следующие действия:

:blacklist
Добавить модуль ядра в черный список.
:disable
Отключить модуль ядра. Новое в Chef Infra Client 15.2.
:enable
Включить модуль ядра. Обратное действие :disable.
:install
Загрузить модуль ядра и гарантировать его загрузку при перезагрузке. (по умолчанию)
:load
Загрузить модуль ядра.
:nothing
Этот блок ресурса не действует, пока другой ресурс не уведомит его о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения клиента Chef Infra.
:uninstall
Выгрузить модуль ядра и удалить конфигурацию модуля, чтобы он не загружался при перезагрузке.
:unload
Выгрузить модуль ядра.

Свойства


Ресурс kernel_module имеет следующие свойства:

load_dir
Тип в Ruby: Строка | Значение по умолчанию: /etc/modules-load.d

Директория для загрузки модулей.

modname
Тип в Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для установки имени модуля ядра, если оно отличается от имени блока ресурса.

options
Тип в Ruby: Массив

Необязательное свойство для установки параметров модуля ядра.

Новое в Chef Infra Client 15.4

unload_dir
Тип в Ruby: Строка | Значение по умолчанию: /etc/modprobe.d

Директория modprobe.d.


Общие функциональные возможности ресурса


Ресурсы 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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса kernel_module в рецептах:

Установка и загрузка модуля ядра и обеспечение его загрузки при перезагрузке.

kernel_module 'loop'

Установка и загрузка ядра с определённым набором параметров и обеспечение его загрузки при перезагрузке. Обратитесь к документации по модулям ядра, чтобы узнать о поддерживаемых параметрах.

kernel_module 'loop' do
  options [
    'max_loop=4',
    'max_part=8',
  ]
end

Загрузка модуля ядра.

kernel_module 'loop' do
  action :load
end

Выгрузка модуля ядра и удаление конфигурации модуля, чтобы он не загружался при перезагрузке.

kernel_module 'loop' do
  action :uninstall
end

Выгрузка модуля ядра.

kernel_module 'loop' do
  action :unload
end

Внесение модуля в чёрный список, чтобы он не загружался.

kernel_module 'loop' do
  action :blacklist
end

Отключение модуля ядра, чтобы он не был установляем.

kernel_module 'loop' do
  action :disable
end

Включение модуля ядра, чтобы он мог быть установлен. Не загружает и не устанавливает.

kernel_module 'loop' do
  action :enable
end

Ресурс ksh

Страница ресурса ksh

Используйте ресурс ksh для выполнения скриптов с помощью интерпретатора Korn shell (ksh). Этот ресурс также может использовать любые действия и свойства, доступные для ресурса execute. Команды, выполняемые с помощью этого ресурса, по своей природе не являются идемпотентными, так как они обычно уникальны для среды, в которой они выполняются. Используйте not_if и only_if для обеспечения идемпотентности этого ресурса.

Синтаксис


Блок ресурса ksh выполняет скрипты с помощью ksh:

ksh 'hello world' do
  code <<-EOH
    echo "Hello world!"
    echo "Current directory: " $cwd
  EOH
end

где:

  • code указывает команду для выполнения

Полный синтаксис всех свойств, доступных для ресурса ksh, выглядит следующим образом:

ksh 'name' do
  code                       String
  creates                    String
  cwd                        String
  environment                Hash
  flags                      String
  group                      String, Integer
  path                       Array
  returns                    Integer, Array
  timeout                    Integer, Float
  user                       String, Integer
  umask                      String, Integer
  action                     Symbol # defaults to :run if not specified
end

где:

  • ksh — ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет, какие шаги Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • code, creates, cwd, environment, flags, group, path, returns, timeout, user и umask — свойства этого ресурса со значениями типа Ruby. См. раздел «Свойства» ниже, чтобы узнать больше о всех свойствах, которые могут быть использованы с этим ресурсом.

Действия


Ресурс ksh имеет следующие действия:

:nothing
Предотвращает выполнение команды. Это действие используется для указания того, что команда выполняется только при уведомлении от другого ресурса.
:run
По умолчанию. Выполнить скрипт.

Свойства


Ресурс ksh имеет следующие свойства:

code
Тип Ruby: Строка

Цитированная (" “) строка кода для выполнения.

creates
Тип Ruby: Строка

Предотвращает создание файла командой, когда этот файл уже существует.

cwd
Тип Ruby: Строка

Текущая рабочая директория, из которой будет выполняться команда.

environment
Тип Ruby: Хэш

Хэш переменных среды в форме ({'ENV_VARIABLE' => 'VALUE'}). Примечание: Эти переменные должны существовать для успешного выполнения команды.

flags
Тип Ruby: Строка

Один или несколько флагов командной строки, передаваемых интерпретатору при вызове команды.

group
Тип Ruby: Строка, Целое число

Имя группы или идентификатор группы, который должен быть изменён перед выполнением команды.

returns
Тип Ruby: Целое число, Массив | Значение по умолчанию: 0

Возвращаемое значение команды. Это может быть массив допустимых значений. Исключение генерируется, когда возвращаемое значение(я) не совпадают.

timeout
Тип Ruby: Целое число, строка, число с плавающей точкой | Значение по умолчанию: 3600

Количество времени (в секундах), которое команда должна ждать перед истечением времени ожидания.

user
Тип Ruby: Строка, целое число

Имя пользователя или идентификатор пользователя, который должен быть изменён перед запуском команды.

umask
Тип Ruby: Строка, целое число

Маска создания режима файла или umask.


Общие функциональные возможности ресурсов


Ресурсы Chef включают общие свойства, уведомления и защитные механизмы ресурсов.

Общие свойства

Следующие свойства являются общими для каждого ресурса:

compile_time

Тип Ruby: true, false | Значение по умолчанию: false

Управление фазой, в которой ресурс выполняется на узле. Установите в значение true, чтобы запустить ресурс во время построения коллекции ресурсов (compile phase). Установите в значение false, чтобы запустить ресурс во время конфигурации узла клиентом Chef Infra (converge phase).

ignore_failure

Тип Ruby: true, false, :quiet | Значение по умолчанию: false

Продолжать выполнение рецепта, если ресурс завершился неудачей по любой причине. :quiet не будет отображать полный стек вызовов, и рецепт будет продолжать выполняться, если ресурс завершится неудачей.

retries

Тип Ruby: Целое число | Значение по умолчанию: 0

Количество попыток перехватить исключения и повторить ресурс.

retry_delay

Тип Ruby: Целое число | Значение по умолчанию: 2

Задержка в секундах между попытками повтора.

sensitive

Тип Ruby: true, false | Значение по умолчанию: false

Обеспечить, чтобы конфиденциальные данные ресурсов не регистрировались клиентом Chef Infra.

Уведомления

notifies

Тип Ruby: Символ, 'Chef::Resource[Строка]'

Ресурс может уведомить другой ресурс о выполнении действия при изменении его состояния. Укажите 'resource[name]', :action, который должен выполнить ресурс, а затем :timer для этого действия. Ресурс может уведомлять более одного ресурса; для каждого уведомляемого ресурса используйте оператор notifies.

Если указанный ресурс не существует, возникает ошибка. В отличие от этого, subscribes не завершится ошибкой, если исходный ресурс не найден.

Таймер указывает момент во время выполнения клиента Chef Infra, в который выполняется уведомление. Доступны следующие таймеры:

:before

Указывает, что действие над уведомлённым ресурсом должно выполняться до обработки блока ресурса, в котором находится уведомление.

:delayed

По умолчанию. Указывает, что уведомление должно быть помещено в очередь и выполнено в конце выполнения клиента Chef Infra.

: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, в который выполняется уведомление. Доступны следующие таймеры:

: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.

Примеры


У этого ресурса нет примеров.

Ресурс launchd

Страница ресурса launchd

Используйте ресурс launchd для управления системными службами (демонами) и службами для каждого пользователя (агентами) на платформе macOS.

Новое в Chef Infra Client 12.8.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса launchd:

launchd 'name' do
  abandon_process_group           true, false
  backup                          Integer, false
  cookbook                        String
  debug                           true, false
  disabled                        true, false # default value: false
  enable_globbing                 true, false
  enable_transactions             true, false
  environment_variables           Hash
  exit_timeout                    Integer
  group                           String, Integer
  hard_resource_limits            Hash
  inetd_compatibility             Hash
  init_groups                     true, false
  keep_alive                      true, false, Hash
  label                           String # default value: 'name' unless specified
  launch_events                   Hash
  launch_only_once                true, false
  ld_group                        String
  limit_load_from_hosts           Array
  limit_load_to_hosts             Array
  limit_load_to_session_type      Array, String
  low_priority_io                 true, false
  mach_services                   Hash
  mode                            String, Integer
  nice                            Integer
  on_demand                       true, false
  owner                           String, Integer
  path                            String
  plist_hash                      Hash
  process_type                    String
  program                         String
  program_arguments               Array
  queue_directories               Array
  root_directory                  String
  run_at_load                     true, false
  session_type                    String
  sockets                         Hash
  soft_resource_limits            Array
  source                          String
  standard_error_path             String
  standard_in_path                String
  standard_out_path               String
  start_calendar_interval         Hash, Array
  start_interval                  Integer
  start_on_mount                  true, false
  throttle_interval               Integer
  time_out                        Integer
  type                            String # default value: "daemon"
  username                        String
  wait_for_debugger               true, false
  watch_paths                     Array
  working_directory               String
  action                          Symbol # defaults to :create if not specified
end

где:

  • launchd — ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action — идентификатор шагов, которые клиент Chef Infra предпримет для приведения узла в желаемое состояние.
  • abandon_process_group, backup, cookbook, debug, disabled, enable_globbing, enable_transactions, environment_variables, exit_timeout, group, hard_resource_limits, inetd_compatibility, init_groups, keep_alive, label, launch_events, launch_only_once, ld_group, limit_load_from_hosts, limit_load_to_hosts, limit_load_to_session_type, low_priority_io, mach_services, mode, nice, on_demand, owner, path, plist_hash, process_type, program, program_arguments, queue_directories, root_directory, run_at_load, session_type, sockets, soft_resource_limits, source, standard_error_path, standard_in_path, standard_out_path, start_calendar_interval, start_interval, start_on_mount, throttle_interval, time_out, type, username, wait_for_debugger, watch_paths и working_directory — доступные свойства этого ресурса.

Действия


Ресурс launchd имеет следующие действия:

:create
Создать список свойств launchd. (по умолчанию)
:create_if_missing
Создать список свойств launchd, если он ещё не существует.
:delete
Удалить список свойств launchd. Это приведет к разгрузке демона или агента, если они загружены.
:disable
Отключить список свойств launchd.
:enable
Создать список свойств launchd, а затем убедиться, что он включён. Если список свойств launchd уже существует, но не соответствует, обновить список свойств, чтобы он соответствовал, а затем перезапустить демона или агента.
:nothing
Этот блок ресурса не действует, пока другой ресурс не уведомит его о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения клиента Chef Infra.
:restart
Перезапустить демон или агент, управляемый launchd.

Свойства


Ресурс launchd имеет следующие свойства:

abandon_process_group
Тип Ruby: true, false

Если задача завершается аварийно, все оставшиеся процессы с тем же идентификатором процесса могут продолжать работу. Установите в значение true, чтобы завершить все оставшиеся процессы.

backup
Тип Ruby: Целое число, false

Количество резервных копий, которые необходимо сохранить в /var/chef/backup. Установите в false, чтобы предотвратить сохранение резервных копий.

cookbook
Тип Ruby: Строка

Имя кулинарной книги, в которой находятся исходные файлы.

group
Тип Ruby: Строка, Целое число

Если launchd запускается от имени пользователя root, группа, от имени которой будет выполняться задача. Если свойство username указано, а это свойство нет, значение устанавливается по умолчанию для группы пользователя.

label
Тип Ruby: Строка

Уникальный идентификатор задачи.

mode
Тип Ruby: Целое число, Строка | Значение по умолчанию: '0755'

Строка с 3-5 символами в восьмеричном формате. Например: '755', '0755' или 00755.

owner
Тип Ruby: Целое число, Строка

Строка или идентификатор, определяющий владельца группы по имени пользователя, включая полные имена пользователей, такие как domain\user или user@domain. Если это значение не указано, существующие владельцы остаются неизменными, а новые назначения владельцев используют текущего пользователя (при необходимости).

path
Тип Ruby: Строка

Путь к каталогу. Рекомендуется использовать полный путь, но это не всегда необходимо. Значение по умолчанию: name блока ресурса. Более подробная информация приведена в разделе «Синтаксис» выше.

plist_hash
Тип Ruby: Хэш

Хэш пар ключ-значение, используемых для создания списка свойств launchd.

session_type
Тип Ruby: Строка

Тип создаваемого списка свойств launchd. Возможные значения: system (по умолчанию) или user.

source
Тип Ruby: Строка

Путь к списку свойств launchd.

type
Тип Ruby: Строка

Тип ресурса. Возможные значения: daemon (по умолчанию), agent.

abandon_process_group
Тип Ruby: true, false

Если задача завершится с ошибкой, все оставшиеся процессы с тем же идентификатором процесса могут продолжать выполняться. Установите значение true для завершения всех оставшихся процессов.

debug
Тип Ruby: true, false

Устанавливает маску логов для данной задачи на LOG_DEBUG.

disabled
Тип Ruby: true, false | Значение по умолчанию: false

Подсказки для launchctl, чтобы не отправлять эту задачу в launchd.

enable_globbing
Тип Ruby: true, false

Обновление аргументов программы перед вызовом.

enable_transactions
Тип Ruby: true, false

Отслеживание текущих транзакций; если их нет, отправляется сигнал SIGKILL.

environment_variables
Тип Ruby: Хэш

Дополнительные переменные среды, которые необходимо установить перед запуском задачи.

exit_timeout
Тип Ruby: Целое число

Время (в секундах), которое launchd ожидает перед отправкой сигнала SIGKILL.

hard_resource_limits
Тип Ruby: Хэш

Хэш ограничений ресурсов, которые должны быть наложены на задачу.

inetd_compatibility
Тип Ruby: Хэш

Указывает, ожидает ли демон запуска от inetd. Установите значение wait => true для передачи стандартных входных, выходных и файловых дескрипторов ошибок. Установите значение wait => false для вызова системного вызова accept от имени задачи, а затем передайте стандартные входные, выходные и файловые дескрипторы ошибок.

init_groups
Тип Ruby: true, false

Указывает, вызывается ли initgroups перед запуском задачи.

keep_alive
Тип Ruby: true, false, Хэш

Поддерживать выполнение задачи непрерывно (true) или позволять спросу и условиям на узле определять, продолжает ли задача работу (false).

Новое в Chef Client 12.14

launch_events
Тип Ruby: Хэш

Укажите типы событий более высокого уровня, которые будут использоваться в качестве источников событий запуска по запросу.

Новое в Chef Infra Client 15.1

launch_only_once
Тип Ruby: true, false

Укажите, может ли задача выполняться только один раз. Установите это значение в true, если задачу нельзя перезапустить без полной перезагрузки машины.

limit_load_from_hosts
Тип Ruby: Массив

Массив хостов, к которым данный конфигурационный файл не применяется, т.е. «применить этот конфигурационный файл ко всем хостам, не указанным в этом массиве».

limit_load_to_hosts
Тип Ruby: Массив

Массив хостов, к которым применяется данный конфигурационный файл.

limit_load_to_session_type
Тип Ruby: Массив, Строка

Тип(ы) сеанса, к которому относится данный конфигурационный файл.

low_priority_io
Тип Ruby: true, false

Укажите, должен ли ядро узла рассматривать этот демон как низкий приоритет во время ввода-вывода файловой системы.

mach_services
Тип Ruby: Хэш

Укажите службы, которые должны быть зарегистрированы в подсистеме загрузки.

nice
Тип Ruby: Целое число

Значение приоритета планирования программы в диапазоне от -20 до 19.

on_demand
Тип Ruby: true, false

Удерживать задачу в живом состоянии. Применимо только к macOS версии 10.4 (и более ранним версиям); для более новых версий используйте keep_alive.

process_type
Тип Ruby: Строка

Предполагаемое назначение задачи: Adaptive, Background, Interactive или Standard.

program
Тип Ruby: Строка

Первый аргумент execvp, обычно имя файла, связанное с файлом, который будет выполнен. Это значение должно быть указано, если program_arguments не указано, и наоборот.

program_arguments
Тип Ruby: Массив

Второй аргумент execvp. Если программа не указана, это свойство должно быть указано и будет обрабатываться так, как если бы это был первый аргумент.

queue_directories
Тип Ruby: Массив

Массив непустых каталогов, которые, если они изменены, приведут к запуску задачи.

root_directory
Тип Ruby: Строка

Перейти в этот каталог и выполнить задачу.

run_at_load
Тип Ruby: true, false

Запустить задачу один раз (в момент загрузки).

sockets
Тип Ruby: Хэш

Хэш сокетов по запросу, которые уведомляют launchd о том, когда задача должна быть запущена.

soft_resource_limits
Тип Ruby: Массив

Хэш ограничений ресурсов, которые должны быть наложены на задачу.

standard_error_path
Тип Ruby: Строка

Файл, в который отправляется стандартная ошибка (stderr).

standard_in_path
Тип Ruby: Строка

Файл, в который отправляется стандартный ввод (stdin).

standard_out_path
Тип Ruby: Строка

Файл, в который отправляется стандартный вывод (stdout).

start_calendar_interval
Тип Ruby: Хэш

Хэш (аналогично crontab), определяющий частоту календаря, с которой запускается задача. Например: { Minute => "0", Hour => "20", Day => "*", Weekday => "1-5", Month => "*" } запустит задачу в 20:00 каждый день, с понедельника по пятницу, каждый месяц в году.

start_interval
Тип Ruby: Целое число

Частота (в секундах) запуска задачи.

start_on_mount
Тип Ruby: true, false

Запустить задачу каждый раз, когда файловая система монтируется.

throttle_interval
Тип Ruby: Целое число | Значение по умолчанию: 10

Частота (в секундах), с которой разрешается создание задач.

time_out
Тип Ruby: Целое число

Время (в секундах), которое задача может простаивать, прежде чем истечет время ожидания. Если значение не указано, будет использоваться значение таймаута по умолчанию для launchd.

username
Тип Ruby: Строка

Если launchd запускается от имени пользователя root, пользователь, от имени которого будет выполняться задача.

wait_for_debugger
Тип Ruby: true, false

Указывает, ожидает ли launchd задачу подключения отладчика перед выполнением кода.

watch_paths
Тип Ruby: Массив

Массив путей, которые, если они изменятся, приведут к запуску задачи.

working_directory
Тип Ruby: Строка

Перейти в этот каталог и выполнить задачу.


Общие функциональные возможности ресурса


Ресурсы Chef включают общие свойства, уведомления и блокировки ресурсов.

Общие свойства

Следующие свойства являются общими для всех ресурсов:

compile_time

Тип Ruby: true, false | Значение по умолчанию: false

Управляет фазой, в которой ресурс выполняется на узле. Установите значение true, чтобы запустить его во время построения коллекции ресурсов (compile phase). Установите значение false, чтобы запустить его во время конфигурирования узла клиентом Chef Infra (converge phase).

ignore_failure

Тип Ruby: true, false, :quiet | Значение по умолчанию: false

Продолжать выполнение рецепта, если ресурс завершился неудачно по любой причине. :quiet не будет отображать полный стек отладки, и рецепт продолжит выполнение, если ресурс завершится неудачно.

retries

Тип Ruby: Целое число | Значение по умолчанию: 0

Количество попыток перехватить исключения и повторить ресурс.

retry_delay

Тип Ruby: Целое число | Значение по умолчанию: 2

Задержка в секундах между попытками повтора.

sensitive

Тип Ruby: true, false | Значение по умолчанию: false

Обеспечить, чтобы конфиденциальные данные ресурсов не регистрировались клиентом Chef Infra.

Уведомления

notifies

Тип Ruby: Символ, 'Chef::Resource[String]'

Ресурс может уведомлять другой ресурс о действии при изменении его состояния. Укажите 'resource[name]', :action, которое должен выполнить ресурс, и затем :timer для этого действия. Ресурс может уведомлять несколько ресурсов; используйте оператор notifies для каждого уведомляемого ресурса.

Если указанный ресурс не существует, возникает ошибка. В отличие от этого, subscribes не завершится ошибкой, если исходный ресурс не найден.

Таймер указывает момент во время выполнения клиента Chef Infra, в котором выполняется уведомление. Доступны следующие таймеры:

:before

Указывает, что действие над уведомленным ресурсом должно выполняться до обработки блока ресурса, в котором находится уведомление.

:delayed

По умолчанию. Указывает, что уведомление должно быть помещено в очередь и выполнено в конце выполнения клиента Chef Infra.

: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, в котором выполняется уведомление. Доступны следующие таймеры:

: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.

Примеры


В следующих примерах показаны различные подходы к использованию ресурса launchd в рецептах:

Создание демона запуска из файла кулинарной книги

launchd 'com.chef.every15' do
  source 'com.chef.every15.plist'
end

Создание демона запуска с использованием ключей

launchd 'call.mom.weekly' do
  program '/Library/scripts/call_mom.sh'
  start_calendar_interval 'Weekday' => 7, 'Hourly' => 10
  time_out 300
end

Удаление демона запуска

launchd 'com.chef.every15' do
  action :delete
end

ресурс link

страница ресурса link

Используйте ресурс link для создания символических или жестких ссылок.

Символическая ссылка (иногда называемая мягкой ссылкой) — это запись каталога, которая связывает имя файла со строкой, содержащей абсолютный или относительный путь к файлу в любой файловой системе. Другими словами, «файл, содержащий путь, указывающий на другой файл». Символическая ссылка создает новый файл с новым индексом узла, который указывает на местоположение индекса узла исходного файла.

Жесткая ссылка — это запись каталога, которая связывает файл с другим файлом в той же файловой системе. Другими словами, «несколько записей каталога для одного файла». Жесткая ссылка создает новый файл, который указывает на тот же индекс узла, что и исходный файл. В Windows этот ресурс можно использовать для создания узлов соединения/точек переобработки.

Синтаксис


Блок ресурса link создает символические или жесткие ссылки. Например, чтобы создать жесткую ссылку от /tmp/file к /etc/file:

link '/tmp/file' do
  to '/etc/file'
  link_type :hard
end

Поскольку значение по умолчанию для link_type — символическое, и поскольку свойства, не указанные в блоке ресурса, будут назначены их значениям по умолчанию, следующий пример создает символическую ссылку:

link '/tmp/file' do
  to '/etc/file'
end

Полный синтаксис всех свойств, доступных для ресурса link:

link 'name' do
  group            String, Integer
  link_type        String, Symbol # default value: :symbolic
  mode             Integer, String
  owner            String, Integer
  target_file      String # default value: 'name' unless specified
  to               String
  action           Symbol # defaults to :create if not specified
end

где:

  • link — это ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет действия, которые клиент Chef Infra предпримет, чтобы привести узел в желаемое состояние.
  • group, link_type, mode, owner, target_file и to — свойства этого ресурса, с указанным типом Ruby. См. раздел «Свойства» ниже, чтобы узнать больше о всех свойствах, которые могут быть использованы с этим ресурсом.

Действия


Ресурс link имеет следующие действия:

:create
По умолчанию. Создать ссылку. Если ссылка уже существует (но не соответствует), обновить эту ссылку, чтобы она соответствовала.
:delete
Удалить ссылку.
:nothing
Этот блок ресурса не действует, пока другой ресурс не уведомит его о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения клиента Chef Infra.

Свойства


Ресурс link имеет следующие свойства:

group
Тип Ruby: Строка, Целое число

Имя группы или идентификационный номер группы, связанной с символической ссылкой.

link_type
Тип Ruby: Строка, Символ | Значение по умолчанию: :symbolic Допустимые значения: :hard, :symbolic

Тип ссылки: :symbolic или :hard. В Windows :symbolic создаст точку соединения, если целевой объект является каталогом.

mode
Тип Ruby: Целое число, строка | Значение по умолчанию: 777

Если 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'; для тех же прав плюс бит «sticky» используйте 01777 или '1777'.

Microsoft Windows: строка из 3-5 символов, заключенная в кавычки, которая определяет восьмеричный режим, преобразуемый в права безопасности Microsoft Windows. Например: '755', '0755' или 00755. Разрешены значения до '0777' (биты «sticky» отсутствуют), и они означают то же самое в Microsoft Windows, что и в UNIX, где 4 равно GENERIC_READ, 2 равно GENERIC_WRITE, а 1 равно GENERIC_EXECUTE. С помощью этого свойства нельзя установить :full_control. Это свойство не имеет эффекта, если не указано, но когда оно и rights указаны оба, эффекты суммируются.

owner
Тип Ruby: Строка, целое число

Владелец, связанный со символической ссылкой.

target_file
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для установки целевого файла, если оно отличается от имени блока ресурса.

to
Тип Ruby: Строка

Фактический файл, для которого должна быть создана ссылка.


Общие функции ресурсов


Ресурсы 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]', действие, которое нужно выполнить, и затем :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.

Примеры


В следующих примерах показаны различные подходы к использованию ресурса link в рецептах:

Создание символических ссылок

Следующий пример создаст символическую ссылку от /tmp/file до /etc/file:

link '/tmp/file' do
  to '/etc/file'
end

Создание жестких ссылок

Следующий пример создаст жесткую ссылку от /tmp/file до /etc/file:

link '/tmp/file' do
  to '/etc/file'
  link_type :hard
end

Удаление ссылок

Следующий пример удалит символическую ссылку /tmp/file и использует защитный механизм only_if для выполнения команды test -L, которая проверяет, является ли /tmp/file символической ссылкой, и удаляет только /tmp/file, если тест пройдет:

link '/tmp/file' do
  action :delete
  only_if 'test -L /tmp/file'
end

Создание нескольких символических ссылок

Следующий пример создает символические ссылки из двух файлов в каталоге /vol/webserver/cert/ на файлы, расположенные в каталоге /etc/ssl/certs/:

link '/vol/webserver/cert/server.crt' do
  to '/etc/ssl/certs/ssl-cert-name.pem'
end

link '/vol/webserver/cert/server.key' do
  to '/etc/ssl/certs/ssl-cert-name.key'
end

Создание символических ссылок, специфичных для платформы

Следующий пример демонстрирует установку модуля фильтра в Apache. Имя пакета отличается для разных платформ, а для семейства Red Hat Enterprise Linux требуется символическая ссылка:

include_recipe 'apache2::default'

case node['platform_family']
when 'debian'
  ...
when 'suse'
  ...
when 'rhel', 'fedora'
  ...

  link '/usr/lib64/httpd/modules/mod_apreq.so' do
    to      '/usr/lib64/httpd/modules/mod_apreq2.so'
    only_if 'test -f /usr/lib64/httpd/modules/mod_apreq2.so'
  end

  link '/usr/lib/httpd/modules/mod_apreq.so' do
    to      '/usr/lib/httpd/modules/mod_apreq2.so'
    only_if 'test -f /usr/lib/httpd/modules/mod_apreq2.so'
  end
end

...

Полный рецепт см. на https://github.com/onehealth-cookbooks/apache2/blob/68bdfba4680e70b3e90f77e40223dd535bf22c17/recipes/mod_apreq2.rb.

Создание узлов/точек переназначения Windows

Этот пример демонстрирует, как создать соединение каталога/точку переадресации. В этом примере C:\destination будет точкой переадресации каталога C:\source.

directory 'C:/source'

link 'C:/destination' do
    link_type :symbolic
    to 'C:/source'
end

Ресурс locale

Страница ресурса locale

Используйте ресурс locale для установки локали системы на системах Debian и Windows. Поддержка Windows была добавлена в Chef Infra Client 16.0

Новое в Chef Infra Client 14.5.

Синтаксис


Полный синтаксис для всех свойств, доступных для ресурса locale:

locale 'name' do
  lang        String
  lc_env      Hash # default value: {}
  action      Symbol # defaults to :update if not specified
end

где:

  • locale — это ресурс.
  • name — имя, данное блоку ресурса.
  • action определяет, какие шаги Chef Infra Client предпримет для приведения узла к желаемому состоянию.
  • lang и lc_env — доступные свойства этого ресурса.

Действия


Ресурс locale имеет следующие действия:

:nothing
Этот блок ресурса не выполняет действий, пока не получит уведомление от другого ресурса о необходимости выполнить действие. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:update
Обновление локали системы. (по умолчанию)

Свойства


Ресурс locale имеет следующие свойства:

lang
Тип Ruby: Строка

Устанавливает язык системы по умолчанию.

lc_env
Тип Ruby: Хэш | Значение по умолчанию: {}

Хэш переменных окружения LC_*, в форме ({ 'LC_ENV_VARIABLE' => 'VALUE' }).


Общие функции ресурсов


Ресурсы 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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса locale в рецептах:

Установите lang в ‘en_US.UTF-8’

  locale 'set system locale' do
    lang 'en_US.UTF-8'
  end

Ресурс log

Страница ресурса log

Синтаксис


Блок ресурса log добавляет сообщения в файл журнала на основе событий, происходящих во время выполнения Chef Infra Client:

log 'message' do
  message 'A message add to the log.'
  level :info
end

Полный синтаксис для всех свойств, доступных для ресурса log:

log 'name' do
  level        Symbol # default value: :info
  message      String # default value: 'name' unless specified
  action       Symbol # defaults to :write if not specified
end

где:

  • log — это ресурс.
  • name — имя, данное блоку ресурса.
  • action определяет, какие шаги Chef Infra Client предпримет для приведения узла к желаемому состоянию.
  • level и message — доступные свойства этого ресурса.

Свойства


Ресурс log имеет следующие свойства:

level

Тип Ruby: Символ | Значение по умолчанию: :info

Уровень регистрации для отображения этого сообщения. Варианты (в порядке приоритета): :debug, :info, :warn, :error и :fatal.

message

Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Сообщение, которое будет добавлено в файл журнала. Значение по умолчанию: значение name блока ресурса. См. раздел «Синтаксис» выше для получения дополнительной информации.

Записи журнала

Chef::Log будет печатать записи журнала в стандартный логгер, настроенный для машины, на которой выполняется Chef Infra Client. (Чтобы создать запись журнала, которая встроена в коллекцию ресурсов, используйте ресурс log вместо Chef::Log.)

Поддерживаемые уровни регистрации

Уровень лога Синтаксис
Критический Chef::Log.fatal('string')
Ошибка Chef::Log.error('string')
Предупреждение Chef::Log.warn('string')
Информация Chef::Log.info('string')
Отладка Chef::Log.debug('string')

Следующий пример демонстрирует серию записей критического уровня Chef::Log:

unless node['splunk']['upgrade_enabled']
  Chef::Log.fatal('The chef-splunk::upgrade recipe was added to the node,')
  Chef::Log.fatal('but the attribute `node["splunk"]["upgrade_enabled"]` was not set.')
  Chef::Log.fatal('I am bailing here so this node does not upgrade.')
  raise
end

service 'splunk_stop' do
  service_name 'splunk'
  supports status: true
  action :stop
end

if node['splunk']['is_server']
  splunk_package = 'splunk'
  url_type = 'server'
else
  splunk_package = 'splunkforwarder'
  url_type = 'forwarder'
end

splunk_installer splunk_package do
  url node['splunk']['upgrade']["#{url_type}_url"]
end

if node['splunk']['accept_license']
  execute 'splunk-unattended-upgrade' do
    command "#{splunk_cmd} start --accept-license --answer-yes"
  end
else
  Chef::Log.fatal('You did not accept the license (set node["splunk"]["accept_license"] to true)')
  Chef::Log.fatal('Splunk is stopped and cannot be restarted until the license is accepted!')
  raise
end

Следующий пример показывает использование нескольких типов записей Chef::Log:

...

begin
  aws = Chef::DataBagItem.load(:aws, :main)
  Chef::Log.info("Loaded AWS information from DataBagItem aws[#{aws['id']}]")
rescue
  Chef::Log.fatal("Could not find the 'main' item in the 'aws' data bag")
  raise
end

...

Общие возможности ресурсов


Ресурсы Chef включают общие свойства, уведомления и защитные механизмы ресурсов.

Общие свойства

Следующие свойства являются общими для всех ресурсов:

compile_time

Тип Ruby: true, false | Значение по умолчанию: false

Управляет фазой, в которой ресурс выполняется на узле. Установите значение true, чтобы запустить его во время построения коллекции ресурсов (compile phase). Установите значение false, чтобы запустить его во время конфигурации узла клиентом Chef Infra (converge phase).

ignore_failure

Тип Ruby: true, false, :quiet | Значение по умолчанию: false

Продолжать выполнение рецепта, если ресурс завершился неудачей по любой причине. :quiet не отобразит полный стек вызовов, и рецепт продолжит выполнение при неудаче ресурса.

retries

Тип Ruby: Целое число | Значение по умолчанию: 0

Количество попыток перехватить исключения и повторить ресурс.

retry_delay

Тип Ruby: Целое число | Значение по умолчанию: 2

Задержка в секундах между попытками повтора.

sensitive

Тип Ruby: true, false | Значение по умолчанию: false

Обеспечить, чтобы конфиденциальные данные ресурса не регистрировались клиентом Chef Infra.

Уведомления

notifies

Тип Ruby: Символ, 'Chef::Resource[Строка]'

Ресурс может уведомить другой ресурс о действии при изменении его состояния. Укажите 'resource[name]', :action, который должен выполнить ресурс, и затем :timer для этого действия. Ресурс может уведомлять несколько ресурсов; для каждого уведомляемого ресурса используйте оператор notifies.

Если указанный ресурс не существует, генерируется ошибка. В отличие от этого, subscribes не завершится ошибкой, если исходный ресурс не найден.

Таймер указывает момент во время выполнения клиента Chef Infra, в котором выполняется уведомление. Доступны следующие таймеры:

:before

Указывает, что действие над уведомлённым ресурсом должно быть выполнено до обработки блока ресурса, в котором находится уведомление.

:delayed

По умолчанию. Указывает, что уведомление должно быть помещено в очередь и затем выполнено в конце выполнения клиента Chef Infra.

: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, в котором выполняется уведомление. Доступны следующие таймеры:

: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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса log в рецептах:

Установить уровень логирования по умолчанию

log 'a string to log'

Установить уровень отладки логирования

log 'a debug string' do
  level :debug
end

Добавить сообщение в файл журнала

log 'message' do
  message 'This is the message that will be added to the log.'
  level :info
end

Ресурс macos_userdefaults

Страница ресурса macos_userdefaults

Используйте ресурс macos_userdefaults для управления системой параметров macOS по умолчанию. Свойства этого ресурса передаются команде defaults, а параметры следуют соглашению этой команды. Для получения подробной информации о работе инструмента см. страницу man для defaults(1).

Новая функция в Chef Infra Client 14.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса macos_userdefaults:

macos_userdefaults 'name' do
  domain      String # default value: NSGlobalDomain: the global domain.
  host        String, Symbol
  key         String
  user        String, Symbol
  value       Integer, Float, String, true, false, Hash, Array
  action      Symbol # defaults to :write if not specified
end

где:

  • macos_userdefaults — это ресурс.
  • name — имя, данное блоку ресурса.
  • action определяет, какие действия клиент Chef Infra предпримет, чтобы привести узел в желаемое состояние.
  • domain, host, key, user и value — доступные свойства этого ресурса.

Действия


Ресурс macos_userdefaults имеет следующие действия:

:delete
Удалить ключ из домена.
:nothing
Этот блок ресурса не выполняет действий, пока не будет уведомлен другим ресурсом о выполнении. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения клиента Chef Infra.
:write
Записать значение в указанный домен/ключ. (по умолчанию)

Свойства


Ресурс macos_userdefaults имеет следующие свойства:

domain
Тип Ruby: Строка | Значение по умолчанию: NSGlobalDomain: the global domain.

Домен, к которому относятся параметры по умолчанию.

host
Тип Ruby: Строка, Символ

Установите :current, :all или имя хоста, чтобы установить параметр по умолчанию на уровне хоста.

Новая функция в Chef Infra Client 16.3

key
Тип Ruby: Строка | REQUIRED

Ключ предпочтения.

user
Тип Ruby: Строка, Символ

Системный пользователь, для которого будет применено значение по умолчанию. Установите :current для текущего пользователя, :all для всех пользователей или передайте допустимое имя пользователя.

value
Тип Ruby: Целое число, Число с плавающей запятой, Строка, true, false, Словарь, Массив | REQUIRED

Значение ключа.

Примечание

При установке свойства type в bool, логические значения true/false, которые Apple принимает в команде defaults, будут преобразованы: 0/1, ‘TRUE’/‘FALSE,’ ‘true’/false', ‘YES’/‘NO’, или ‘yes’/‘no’.


Общие возможности ресурсов


Ресурсы 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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса macos_userdefaults в рецептах:

Укажите глобальное значение домена

macos_userdefaults 'Full keyboard access to all controls' do
  key 'AppleKeyboardUIMode'
  value 2
end

Установка значения в определенном домене

macos_userdefaults 'Enable macOS firewall' do
  domain '/Library/Preferences/com.apple.alf'
  key 'globalstate'
  value 1
end

Указание типа ключа для пропуска автоматического определения типа

macos_userdefaults 'Finder expanded save dialogs' do
  key 'NSNavPanelExpandedStateForSaveMode'
  value 'TRUE'
  type 'bool'
end

ресурс macports_package

страница ресурса macports_package

Используйте ресурс macports_package для управления пакетами для платформы macOS с помощью системы управления пакетами MacPorts.

Синтаксис


Блок ресурса macports_package управляет пакетом на узле, как правило, устанавливая его. Наиболее простое использование ресурса macports_package:

macports_package 'package_name'

что установит указанный пакет, используя все параметры по умолчанию и действие по умолчанию (:install).

Полный синтаксис для всех свойств, доступных для ресурса macports_package:

macports_package 'name' do
  options           String
  package_name      String
  source            String
  timeout           String, Integer
  version           String
  action            Symbol # defaults to :install if not specified
end

где:

  • macports_package — это ресурс.
  • name — имя, присваиваемое блоку ресурса.
  • action определяет действия Chef Infra Client для приведения узла в желаемое состояние.
  • options, package_name, source, timeout и version — доступные для этого ресурса свойства.

Действия


Ресурс macports_package имеет следующие действия:

:install
По умолчанию. Установка пакета. Если указана версия, устанавливается указанная версия пакета.
:nothing
Этот блок ресурса не выполняет никаких действий, если не уведомлен другим ресурсом о выполнении действия. После получения уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:purge
Удаление пакета. Это действие, как правило, удаляет конфигурационные файлы, а также сам пакет.
:remove
Удаление пакета.
:upgrade
Установка пакета и/или обеспечение того, что пакет является последней версией.

Свойства


Ресурс macports_package имеет следующие свойства:

options
Тип Ruby: Строка

Один (или несколько) дополнительных параметров команды, передаваемых команде.

package_name
Тип Ruby: Строка

Необязательное свойство для установки имени пакета, если оно отличается от имени блока ресурса.

source
Тип Ruby: Строка

Необязательный путь к пакету на локальной файловой системе.

timeout
Тип Ruby: Строка, Целое число

Время ожидания (в секундах) перед истечением времени ожидания.

version
Тип Ruby: Строка

Версия пакета, подлежащая установке или обновлению.


Общие функции ресурсов


Ресурсы 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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса macports_package в рецептах:

Установить пакет

macports_package 'name of package' do
  action :install
end

Ресурс mdadm

Страница ресурса mdadm

Используйте ресурс mdadm для управления устройствами RAID в среде Linux с помощью утилиты mdadm. Ресурс mdadm создаст и соберет массив, но не создаст конфигурационный файл, используемый для сохранения массива после перезагрузки. Если конфигурационный файл требуется, необходимо указать шаблон с правильной компоновкой массива, а затем использовать поставщик mount для создания записи в таблице файловых систем (fstab).

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса mdadm:

mdadm 'name' do
  bitmap           String
  chunk            Integer # default value: 16
  devices          Array # default value: []
  layout           String
  level            Integer # default value: 1
  metadata         String # default value: "0.90"
  raid_device      String # default value: 'name' unless specified
  action           Symbol # defaults to :create if not specified
end

где:

  • mdadm — это ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет действия, которые Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • bitmap, chunk, devices, layout, level, metadata и raid_device — это доступные свойства этого ресурса.

Действия


Ресурс mdadm имеет следующие действия:

:assemble
Сборка ранее созданного массива в активный массив.
:create
Создание массива с суперблоками на устройство. Если массив уже существует (но не соответствует), обновить этот массив в соответствии. (по умолчанию)
:nothing
Этот блок ресурса не действует, если не уведомлен другим ресурсом о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:stop
Остановка активного массива.

Свойства


Ресурс mdadm имеет следующие свойства:

bitmap
Тип Ruby: Строка

Путь к файлу, в котором хранится битовая карта намерений записи.

chunk
Тип Ruby: Целое число | Значение по умолчанию: 16

Размер блока. Это свойство не должно использоваться для массива RAID 1 (то есть, когда свойство level установлено в значение 1).

devices
Тип Ruby: Массив | Значение по умолчанию: []

Устройства, которые должны входить в массив RAID.

layout
Тип Ruby: Строка

Алгоритм чётности RAID5. Возможные значения: left-asymmetric (или la), left-symmetric (или ls), right-asymmetric (или ra) или right-symmetric (или rs).

level
Тип Ruby: Целое число | Значение по умолчанию: 1

Уровень RAID.

metadata
Тип Ruby: Строка | Значение по умолчанию: 0.90

Тип суперблока для метаданных RAID.

raid_device
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для указания имени устройства RAID, если оно отличается от имени блока ресурса.


Общие функции ресурса


Ресурсы 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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса mdadm в рецептах:

Создание и сборка массива RAID 0

Команда mdadm может использоваться для создания массивов RAID. Например, массив RAID 0 с именем /dev/md0 с 10 устройствами будет иметь команду, аналогичную следующей:

mdadm --create /dev/md0 --level=0 --raid-devices=10 /dev/s01.../dev/s10

где /dev/s01 .. /dev/s10 представляет 10 устройств (01, 02, 03 и т. д.). Эта же команда, выраженная в виде рецепта с использованием ресурса mdadm, будет аналогична:

mdadm '/dev/md0' do
  devices [ '/dev/s01', ... '/dev/s10' ]
  level 0
  action :create
end

(опять же, где /dev/s01 .. /dev/s10 представляет устройства /dev/s01, /dev/s02, /dev/s03 и т. д.).

Создание и сборка массива RAID 1

mdadm '/dev/md0' do
  devices [ '/dev/sda', '/dev/sdb' ]
  level 1
  action [ :create, :assemble ]
end

Создание и сборка массива RAID 5

Команда mdadm может использоваться для создания массивов RAID. Например, массив RAID 5 с именем /dev/sd0 с 4 устройствами и типом суперблока 0.90 будет аналогичен:

mdadm '/dev/sd0' do
  devices [ '/dev/s1', '/dev/s2', '/dev/s3', '/dev/s4' ]
  level 5
  metadata '0.90'
  chunk 32
  action :create
end

Ресурс mount

Страница ресурса mount

Используйте ресурс mount для управления смонтированной файловой системой.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса mount:

mount 'name' do
  device           String
  device_type      String, Symbol # default value: :device
  domain           String
  dump             Integer, false # default value: 0
  enabled          true, false # default value: false
  fsck_device      String # default value: "-"
  fstype           String # default value: "auto"
  mount_point      String # default value: 'name' unless specified
  options          Array, String # default value: ["defaults"]
  pass             Integer, false # default value: 2
  password         String
  supports         Array, Hash # default value: { remount: false }
  username         String
  action           Symbol # defaults to :mount if not specified
end

где:

  • mount — ресурс.
  • name — имя, данное блоку ресурса.
  • action определяет, какие шаги выполнит Chef Infra Client для приведения узла к желаемому состоянию.
  • device, device_type, domain, dump, enabled, fsck_device, fstype, mount_point, options, pass, password, supports и username — доступные свойства этого ресурса.

Действия


Ресурс mount имеет следующие действия:

:disable
Удаление записи из таблицы файловых систем (fstab).
:enable
Добавление записи в таблицу файловых систем (fstab).
:mount
По умолчанию. Моунт устройства.
:nothing
Этот блок ресурса не действует, пока не будет уведомлен другим ресурсом о действии. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:remount
Перемонтировать устройство.
:umount
Размонтировать устройство.
:unmount
Псевдоним для действия :umount.

Свойства


Ресурс mount имеет следующие свойства:

device
Тип Ruby: Строка

Необходим для действий :umount и :remount (для проверки вывода команды монтирования на наличие). Специальное блочное устройство или удаленный узел, метка или uuid для монтирования.

device_type
Тип Ruby: Строка, Символ | Значение по умолчанию: :device Допустимые значения: :device, :label, :uuid

Тип устройства: :device, :label или :uuid

domain
Тип Ruby: Строка

Только Windows: Используется для указания домена, в котором расположены username и password.

dump
Тип Ruby: Целое число, false | Значение по умолчанию: 0

Частота дампов (в днях), используемая при создании записи в таблице файловых систем (fstab).

enabled
Тип Ruby: true, false | Значение по умолчанию: false

Используется для указания, включена ли смонтированная файловая система.

fsck_device
Тип Ruby: Строка | Значение по умолчанию: -

Только Solaris: Устройство fsck.

fstype
Тип Ruby: Строка | Значение по умолчанию: auto

Тип файловой системы (fstype) устройства.

mount_point
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Директория (или путь), в которой должно быть смонтировано устройство. По умолчанию используется имя блока ресурсов, если не указано другое.

options
Тип Ruby: Массив, Строка | Значение по умолчанию: ["defaults"]

Массив или список параметров для монтирования, разделённые запятыми.

pass
Тип Ruby: Целое число, ложь | Значение по умолчанию: 2

Номер прохода, используемый командой проверки файловой системы (fsck) при создании записи в таблице файловых систем (fstab).

password
Тип Ruby: Строка

Только для Windows: Используется для указания пароля для имени пользователя.

supports
Тип Ruby: Массив, Хэш | Значение по умолчанию: { remount: false }

Укажите хэш с поддерживаемыми функциями монтирования.

username
Тип Ruby: Строка

Только для Windows: Используется для указания имени пользователя.


Общие функциональные возможности ресурсов


Ресурсы 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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса mount в рецептах:

Монтирование метки файловой системы

mount '/mnt/volume1' do
  device 'volume1'
  device_type :label
  fstype 'xfs'
  options 'rw'
end

Монтирование локального блока диска

mount '/mnt/local' do
  device '/dev/sdb1'
  fstype 'ext3'
end

Монтирование файловой системы, не являющейся блочной

mount '/mount/tmp' do
  pass     0
  fstype   'tmpfs'
  device   '/dev/null'
  options  'nr_inodes=999k,mode=755,size=500m'
  action   [:mount, :enable]
end

Монтирование и добавление в таблицу файловых систем

mount '/export/www' do
  device 'nas1prod:/export/web_sites'
  fstype 'nfs'
  options 'rw'
  action [:mount, :enable]
end

Монтирование удалённой файловой системы

mount '/export/www' do
  device 'nas1prod:/export/web_sites'
  fstype 'nfs'
  options 'rw'
end

Монтирование удалённой папки в Microsoft Windows

mount 'T:' do
  action :mount
  device '\\\\hostname.example.com\\folder'
end

Отключение удалённой папки в Microsoft Windows

mount 'T:' do
  action :umount
  device '\\\\hostname.example.com\\D$'
end

Остановка службы, выполнение действий и повторный запуск

Следующий пример демонстрирует, как использовать ресурсы execute, service и mount вместе, чтобы убедиться, что узел, работающий на Amazon EC2, выполняет MySQL. В этом примере выполняется следующее:

  • Проверка наличия MySQL на узле Amazon EC2
  • Если на узле есть MySQL, останавливается MySQL
  • Установка MySQL
  • Монтирование узла
  • Повторный запуск MySQL
# the following code sample comes from the ``server_ec2``
# recipe in the following cookbook:
# https://github.com/chef-cookbooks/mysql

if (node.attribute?('ec2') && ! FileTest.directory?(node['mysql']['ec2_path']))

  service 'mysql' do
    action :stop
  end

  execute 'install-mysql' do
    command "mv #{node['mysql']['data_dir']}#{node['mysql']['ec2_path']}"
    not_if do FileTest.directory?(node['mysql']['ec2_path']) end
  end

  [node['mysql']['ec2_path'], node['mysql']['data_dir']].each do |dir|
    directory dir do
      owner 'mysql'
      group 'mysql'
    end
  end

  mount node['mysql']['data_dir'] do
    device node['mysql']['ec2_path']
    fstype 'none'
    options 'bind,rw'
    action [:mount, :enable]
  end

  service 'mysql' do
    action :start
  end

end

где

  • Два ресурса service используются для остановки и повторного запуска службы MySQL
  • Ресурс execute используется для установки MySQL
  • Ресурс mount используется для монтирования узла и включения MySQL

Ресурс msu_package

Страница ресурса msu_package

Используйте ресурс msu_package для установки пакетов Microsoft Update (MSU) на компьютерах Microsoft Windows.

Новое в Chef Infra Client 12.17.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса msu_package:

msu_package 'name' do
  checksum          String
  options           String
  package_name      String
  source            String
  timeout           String, Integer # default value: 3600
  action            Symbol # defaults to :install if not specified
end

где:

  • msu_package — это ресурс.
  • name — это имя, присвоенное блоку ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла в нужное состояние.
  • checksum, options, package_name, source и timeout — доступные свойства этого ресурса.

Действия


Ресурс msu_package имеет следующие действия:

:nothing
Этот блок ресурса не действует, пока не будет уведомлён другим ресурсом о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс msu_package имеет следующие свойства:

checksum
Тип Ruby: Строка

SHA-256 дайджест, используемый для проверки контрольной суммы загруженного пакета MSU.

options
Тип в Ruby: String

Один (или несколько) дополнительных параметров команды, передаваемых команде.

package_name
Тип в Ruby: String

Необязательное свойство для установки имени пакета, если оно отличается от имени блока ресурса.

source
Тип в Ruby: String

Локальный путь к файлу или URL-адрес пакета MSU.

timeout
Тип в Ruby: String, Integer | Значение по умолчанию: 3600

Время ожидания в секундах перед таймаутом.


Общие функциональные возможности ресурса


Ресурсы 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: Integer | Значение по умолчанию: 0

Количество попыток перехвата исключений и повторной попытки выполнения ресурса.

retry_delay

Тип в Ruby: Integer | Значение по умолчанию: 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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса msu_package в рецептах:

Использование локального пути в источнике

msu_package 'Install Windows 2012R2 Update KB2959977' do
  source 'C:\Users\xyz\AppData\Local\Temp\Windows8.1-KB2959977-x64.msu'
  action :install
end
msu_package 'Remove Windows 2012R2 Update KB2959977' do
  source 'C:\Users\xyz\AppData\Local\Temp\Windows8.1-KB2959977-x64.msu'
  action :remove
end

Использование URL-адреса в источнике

msu_package 'Install Windows 2012R2 Update KB2959977' do
  source 'https://s3.amazonaws.com/my_bucket/Windows8.1-KB2959977-x64.msu'
  action :install
end
msu_package 'Remove Windows 2012R2 Update KB2959977' do
  source 'https://s3.amazonaws.com/my_bucket/Windows8.1-KB2959977-x64.msu'
  action :remove
end

Ресурс notify_group

Страница ресурса notify_group

Ресурс notify_group ничего не делает и всегда запускает уведомления, которые на нем установлены. Используйте его для DRY-блоков уведомлений, общих для нескольких ресурсов, и предоставьте единственную цель для других ресурсов, чтобы их уведомлять. В отличие от большинства ресурсов, его значение по умолчанию — :nothing.

Новая функция в Chef Infra Client 15.8.

Синтаксис


Полный синтаксис всех свойств, доступных ресурсу notify_group:

notify_group 'name' do
  action      Symbol # defaults to :nothing if not specified
end

где:

  • notify_group — это ресурс.
  • name — это имя, данное блоку ресурса.
  • action определяет, какие действия клиент Chef Infra Client предпримет для приведения узла в нужное состояние.

Действия


Ресурс notify_group имеет следующие действия:

:nothing
Этот блок ресурса не действует, если другой ресурс не уведомит его о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо ставится в очередь для выполнения в конце выполнения клиента Chef Infra Client.
:run

Свойства


Этот ресурс не имеет свойств.


Общие функциональные возможности ресурса


Ресурсы 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: Integer | Значение по умолчанию: 0

Количество попыток перехвата исключений и повторной попытки выполнения ресурса.

retry_delay

Тип в Ruby: Integer | Значение по умолчанию: 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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса notify_group в рецептах:

Настройка уведомления от ресурса службы для остановки и запуска службы с задержкой в 60 секунд.

service "crude" do
  action [ :enable, :start ]
end

chef_sleep "60" do
  action :nothing
end

# Example code for a hypothetical badly behaved service that requires
# 60 seconds between a stop and start in order to restart the service
# (due to race conditions, bleeding connections down, resources that only
# slowly unlock in the background, or other poor software behaviors that
# are sometimes encountered).
#
notify_group "crude_stop_and_start" do
  notifies :stop, "service[crude]", :immediately
  notifies :sleep, "chef_sleep[60]", :immediately
  notifies :start, "service[crude]", :immediately
end

template "/etc/crude/crude.conf" do
  source "crude.conf.erb"
  variables node["crude"]
  notifies :run, "notify_group[crude_stop_and_start]", :immediately
end

ресурс ohai

страница ресурса ohai

Используйте ресурс ohai для перезагрузки конфигурации Ohai на узле. Это позволяет рецептам, изменяющим системные атрибуты (например, рецепту добавления пользователя), ссылаться на эти атрибуты позже во время выполнения Chef Infra Client.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса ohai:

ohai 'name' do
  plugin      String
  action      Symbol # defaults to :reload if not specified
end

где:

  • ohai — ресурс.
  • name — имя, данное блоку ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла в нужное состояние.
  • plugin — доступное для этого ресурса свойство.

Действия


Ресурс ohai имеет следующие действия:

:nothing
Этот блок ресурса не действует, если его не уведомил другой ресурс о необходимости выполнить действие. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:reload
Перезагружает данные Ohai.

Свойства


Ресурс ohai имеет следующие свойства:

plugin
Тип в Ruby: Строка

Конкретные данные атрибута Ohai для перезагрузки. Это свойство ведет себя аналогично указанию атрибутов при запуске Ohai в командной строке и принимает атрибут, который необходимо перезагрузить, а не фактическое имя плагина. Например, вы можете передать ipaddress для перезагрузки node['ipaddress'], даже если эти данные поступают от плагина Network. Если это свойство не указано, Chef Infra Client перезагрузит все плагины.


Общие функциональные возможности ресурсов


Ресурсы 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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса ohai в рецептах:

Перезагрузка всех плагинов Ohai

ohai 'reload' do
  action :reload
end

Перезагрузка одного плагина Ohai

ohai 'reload' do
  plugin 'ipaddress'
  action :reload
end

Перезагрузка Ohai после создания нового пользователя

ohai 'reload_passwd' do
  action :nothing
  plugin 'etc'
end

user 'daemon_user' do
  home '/dev/null'
  shell '/sbin/nologin'
  system true
  notifies :reload, 'ohai[reload_passwd]', :immediately
end

ruby_block 'just an example' do
  block do
    # These variables will now have the new values
    puts node['etc']['passwd']['daemon_user']['uid']
    puts node['etc']['passwd']['daemon_user']['gid']
  end
end

ресурс ohai_hint

страница ресурса ohai_hint

Используйте ресурс ohai_hint для помощи в определении конфигурации, передавая данные подсказки в Ohai.

Новое в Chef Infra Client 14.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса ohai_hint:

ohai_hint 'name' do
  compile_time      true, false # default value: true
  content           Hash
  hint_name         String # default value: 'name' unless specified
  action            Symbol # defaults to :create if not specified
end

где:

  • ohai_hint — это ресурс.
  • name — имя, заданное для блока ресурса.
  • action определяет, какие шаги Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • compile_time, content и hint_name — доступные для этого ресурса свойства.

Действия


Ресурс ohai_hint имеет следующие действия:

:create
Создать файл подсказки Ohai. (по умолчанию)
:delete
Удалить файл подсказки Ohai.
:nothing
Этот блок ресурса не действует, пока не будет уведомлен другим ресурсом для выполнения действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс ohai_hint имеет следующие свойства:

compile_time
Тип Ruby: true, false | Значение по умолчанию: true

Определяет, выполняется ли ресурс на стадии компиляции.

content
Тип Ruby: Hash

Значения для включения в файл подсказки.

hint_name
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для установки имени подсказки, если оно отличается от имени блока ресурса.


Общие возможности ресурсов


Ресурсы 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, следует ли продолжать выполнение ресурса.

  • Строка выполняется как командная строка оболочки. Если команда возвращает 0, применяется защита. Если команда возвращает любое другое значение, то свойство защиты не применяется. Строковые защитные механизмы в powershell_script запускают команды Windows PowerShell и могут возвращать true в дополнение к 0.
  • Блок выполняется как код Ruby, который должен вернуть либо true, либо false. Если блок возвращает true, свойство защиты применяется. Если блок возвращает false, свойство защиты не применяется.

Свойство защиты полезно для обеспечения идемпотентности ресурса, позволяя этому ресурсу проверять желаемое состояние во время выполнения, а затем, если желаемое состояние присутствует, Chef Infra Client ничего не делает.

Свойства

Следующие свойства могут быть использованы для определения защиты, которая оценивается во время фазы выполнения выполнения Chef Infra Client:

not_if

Запретить выполнение ресурса, когда условие возвращает true.

only_if

Разрешить выполнение ресурса только в том случае, если условие возвращает true.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса ohai_hint в рецептах:

Создать файл подсказки

ohai_hint 'example' do
  content a: 'test_content'
end

Создать файл подсказки с именем, не соответствующим имени ресурса

ohai_hint 'example' do
  hint_name 'custom'
end

Создать файл подсказки, который не загружается во время компиляции

ohai_hint 'example' do
  compile_time false
end

Удалить файл подсказки

ohai_hint 'example' do
  action :delete
end

Ресурс openbsd_package

Страница ресурса openbsd_package

Используйте ресурс openbsd_package для управления пакетами для платформы OpenBSD.

Примечание

Во многих случаях лучше использовать ресурс package вместо этого. Это связано с тем, что при использовании ресурса package в рецепте Chef Infra Client будет использовать данные, собранные Ohai в начале выполнения Chef Infra Client, чтобы определить правильное применение пакета. Использование ресурса package позволяет создавать рецепт, который можно использовать на многих платформах.

Синтаксис


Блок ресурса openbsd_package управляет пакетом на узле, обычно устанавливая его. Самый простой способ использования ресурса openbsd_package:

openbsd_package 'package_name'

что установит указанный пакет с использованием всех параметров по умолчанию и действия по умолчанию (:install).

Полный синтаксис для всех свойств, доступных для ресурса openbsd_package:

openbsd_package 'name' do
  options           String
  package_name      String
  source            String
  timeout           String, Integer
  version           String, Array
  action            Symbol # defaults to :install if not specified
end

где:

  • openbsd_package — это ресурс.
  • name — это имя, присвоенное блоку ресурса.
  • action определяет, какие шаги выполнит Chef Infra Client, чтобы привести узел в желаемое состояние.
  • options, package_name, source, timeout и version — это доступные свойства этого ресурса.

Действия


Ресурс openbsd_package имеет следующие действия:

:install
По умолчанию. Установить пакет. Если указана версия, установить указанную версию пакета.
:nothing
Этот блок ресурса не действует, пока другой ресурс не сообщит ему о необходимости принять действия. После получения уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:remove
Удалить пакет.

Свойства


Ресурс openbsd_package имеет следующие свойства:

options
Тип Ruby: Строка

Один (или несколько) дополнительных параметров команд, передаваемых в команду.

package_name
Тип Ruby: Строка

Необязательное свойство для установки имени пакета, если оно отличается от имени блока ресурса.

source
Тип Ruby: Строка

Необязательный путь к пакету на локальной файловой системе.

timeout
Тип Ruby: Строка, Целое число

Количество времени (в секундах) ожидания до истечения времени.

version
Тип Ruby: Строка

Версия пакета, который нужно установить или обновить.


Общие функции ресурсов


Ресурсы 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, которое должно быть выполнено, и :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.

Примеры


В следующих примерах показаны различные подходы к использованию ресурса openbsd_package в рецептах:

Установить пакет

openbsd_package 'name of package' do
  action :install
end

Удалить пакет

openbsd_package 'name of package' do
  action :remove
end

Ресурс openssl_dhparam

Страница ресурса openssl_dhparam

Используйте ресурс openssl_dhparam для генерации файлов dhparam.pem. Если действительный файл dhparam.pem найден по указанному пути, новый файл создаваться не будет. Если файл найден по указанному пути, но не является действительным файлом dhparam.pem, он будет перезаписан.

Новое в Chef Infra Client 14.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса openssl_dhparam:

openssl_dhparam 'name' do
  generator       Integer # default value: 2
  group           String, Integer
  key_length      Integer # default value: 2048
  mode            Integer, String # default value: "0640"
  owner           String, Integer
  path            String # default value: 'name' unless specified
  action          Symbol # defaults to :create if not specified
end

где:

  • openssl_dhparam — это ресурс.
  • name — имя блока ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • generator, group, key_length, mode, owner и path — доступные для этого ресурса свойства.

Действия


Ресурс openssl_dhparam имеет следующие действия:

:create
Создать файл dhparam.pem. (по умолчанию)
:nothing
Этот блок ресурса не действует, пока другой ресурс не сообщит ему о необходимости выполнить действие. После уведомления этот блок ресурса либо выполняется немедленно, либо добавляется в очередь для выполнения в конце работы Chef Infra Client.

Свойства


Ресурс openssl_dhparam имеет следующие свойства:

generator
Тип Ruby: Целое число | Значение по умолчанию: 2 Допустимые значения: 2, 5

Желаемый генератор Diffie-Hellmann.

group
Тип Ruby: Строка, Целое число

Владение группой, применяемое ко всем файлам, созданным ресурсом.

key_length
Тип Ruby: Целое число | Значение по умолчанию: 2048 Допустимые значения: 1024, 2048, 4096, 8192

Желаемая длина ключа в битах.

mode
Тип Ruby: Целое число, Строка | Значение по умолчанию: 0640

Режим разрешений, применяемый ко всем файлам, созданным ресурсом.

owner
Тип Ruby: Строка, Целое число

Владелец, применяемый ко всем файлам, созданным ресурсом.

path
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для указания пути к файлу для записи, если он отличается от имени блока ресурса.


Общие функциональные возможности ресурсов


Ресурсы 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 действие, которое необходимо выполнить, и :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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса openssl_dhparam в рецептах:

Создание файла dhparam

openssl_dhparam '/etc/httpd/ssl/dhparam.pem'

Создание файла dhparam с заданной длиной ключа

openssl_dhparam '/etc/httpd/ssl/dhparam.pem' do
  key_length 4096
end

Создание файла dhparam с заданной собственностью пользователя/группы

openssl_dhparam '/etc/httpd/ssl/dhparam.pem' do
  owner 'www-data'
  group 'www-data'
end

Вручную указание пути к файлу dhparam

openssl_dhparam 'httpd_dhparam' do
  path '/etc/httpd/ssl/dhparam.pem'
end

Ресурс openssl_ec_private_key

Страница ресурса openssl_ec_private_key

Используйте ресурс openssl_ec_private_key для генерации файла закрытого ключа эллиптической кривой (EC). Если в указанном месте можно открыть действительный файл ключа EC, новый файл не будет создан. Если файл ключа EC не может быть открыт, либо потому, что он не существует, либо потому, что пароль к файлу ключа EC не соответствует паролю в рецепте, то он будет перезаписан.

Новое в Chef Infra Client 14.4.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса openssl_ec_private_key:

openssl_ec_private_key 'name' do
  force           true, false # default value: false
  group           String, Integer
  key_cipher      String # default value: "des3"
  key_curve       String # default value: "prime256v1"
  key_pass        String
  mode            Integer, String # default value: "0600"
  owner           String, Integer
  path            String # default value: 'name' unless specified
  action          Symbol # defaults to :create if not specified
end

где:

  • openssl_ec_private_key — это ресурс.
  • name — это имя, заданное для блока ресурса.
  • action определяет, какие действия Chef Infra Client предпримет для приведения узла в нужное состояние.
  • force, group, key_cipher, key_curve, key_pass, mode, owner и path — это доступные для этого ресурса свойства.

Действия


Ресурс openssl_ec_private_key имеет следующие действия:

:create
Сгенерировать файл закрытого ключа EC. (по умолчанию)
:nothing
Этот блок ресурса не действует, пока другой ресурс не уведомит его о необходимости действий. После получения уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс openssl_ec_private_key имеет следующие свойства:

force
Тип Ruby: true, false | Значение по умолчанию: false

Принудительно создать ключ, даже если такой же ключ уже существует на узле.

group
Тип Ruby: Строка, Целое число

Принадлежность группы, применяемая ко всем файлам, созданным ресурсом.

key_cipher
Тип Ruby: Строка | Значение по умолчанию: des3

Определенный шифр для использования при генерации ключа. Запустите openssl list-cipher-algorithms, чтобы увидеть доступные варианты.

key_curve
Тип Ruby: Строка | Значение по умолчанию: prime256v1 Разрешенные значения: "prime256v1", "secp224r1", "secp256k1", "secp384r1", "secp521r1"

Необходимая кривая сгенерированного ключа (если key_type равен ‘ec’). Запустите openssl ecparam -list_curves, чтобы увидеть доступные варианты.

key_pass
Тип Ruby: Строка

Желаемый пароль для ключа.

mode
Тип Ruby: Целое число, Строка | Значение по умолчанию: 0600

Режим разрешений, применяемый ко всем файлам, созданным ресурсом.

owner
Тип Ruby: Строка, Целое число

Владелец, применяемый ко всем файлам, созданным ресурсом.

path
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для указания пути к файлу, если он отличается от имени блока ресурса.


Общие функции ресурсов


Ресурсы 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, которое нужно выполнить, и :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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса openssl_ec_private_key в рецептах:

Сгенерировать новый закрытый ключ EC с кривой ключа prime256v1 и шифром des3 по умолчанию

openssl_ec_private_key '/etc/ssl_files/eckey_prime256v1_des3.pem' do
  key_curve 'prime256v1'
  key_pass 'something'
  action :create
end

Сгенерировать новый закрытый ключ EC с кривой ключа prime256v1 и шифром aes-128-cbc

openssl_ec_private_key '/etc/ssl_files/eckey_prime256v1_des3.pem' do
  key_curve 'prime256v1'
  key_cipher 'aes-128-cbc'
  key_pass 'something'
  action :create
end

Ресурс openssl_ec_public_key

Страница ресурса openssl_ec_public_key

Используйте ресурс openssl_ec_public_key для генерации файлов с открытым ключом эллиптической кривой (EC) из заданного закрытого ключа EC.

Новое в Chef Infra Client 14.4.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса openssl_ec_public_key:

openssl_ec_public_key 'name' do
  group                    String, Integer
  mode                     Integer, String # default value: "0640"
  owner                    String, Integer
  path                     String # default value: 'name' unless specified
  private_key_content      String
  private_key_pass         String
  private_key_path         String
  action                   Symbol # defaults to :create if not specified
end

где:

  • openssl_ec_public_key — это ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет действия, которые Chef Infra Client предпримет для приведения узла к желаемому состоянию.
  • group, mode, owner, path, private_key_content, private_key_pass и private_key_path — доступные для этого ресурса свойства.

Действия


Ресурс openssl_ec_public_key имеет следующие действия:

:create
Сгенерировать файл открытого ключа EC из закрытого ключа. (по умолчанию)
:nothing
Этот блок ресурса не выполняет действий, пока не получит уведомление от другого ресурса. После получения уведомления, этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс openssl_ec_public_key имеет следующие свойства:

group
Тип Ruby: Строка, Целое число

Владение группой, применяемое ко всем файлам, созданным ресурсом.

mode
Тип Ruby: Целое число, Строка | Значение по умолчанию: 0640

Режим разрешений, применяемый ко всем файлам, созданным ресурсом.

owner
Тип Ruby: Строка, Целое число

Владелец, применяемый ко всем файлам, созданным ресурсом.

path
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для указания пути для записи файла, если он отличается от имени блока ресурса.

private_key_content
Тип Ruby: Строка

Содержание закрытого ключа, включая новые строки. Это свойство используется вместо private_key_path в случаях, когда вы хотите избежать предварительной записи закрытого ключа на диск.

private_key_pass
Тип Ruby: Строка

Пароль предоставленного закрытого ключа.

private_key_path
Тип Ruby: Строка

Путь к файлу закрытого ключа.


Общие функциональные возможности ресурса


Ресурсы 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, которое необходимо выполнить, и :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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса openssl_ec_public_key в рецептах:

Сгенерировать новый открытый ключ EC из закрытого ключа на диске

openssl_ec_public_key '/etc/ssl_files/eckey_prime256v1_des3.pub' do
  private_key_path '/etc/ssl_files/eckey_prime256v1_des3.pem'
  private_key_pass 'something'
  action :create
end

Сгенерировать новый открытый ключ EC, передав закрытый ключ

openssl_ec_public_key '/etc/ssl_files/eckey_prime256v1_des3_2.pub' do
  private_key_content "-----BEGIN EC PRIVATE KEY-----
MHcCAQEEII2VAU9re44mAUzYPWCg+qqwdmP8CplsEg0b/DYPXLg2oAoGCCqGSM49
AwEHoUQDQgAEKkpMCbIQ2C6Qlp/B+Odp1a9Y06Sm8yqPvCVIkWYP7M8PX5+RmoIv
jGBVf/+mVBx77ji3NpTilMUt2KPZ87lZ3w==
-----END EC PRIVATE KEY-----
"
  action :create
end

Ресурс openssl_rsa_private_key

Страница ресурса openssl_rsa_private_key

Используйте ресурс openssl_rsa_private_key для создания файлов с закрытыми ключами RSA. Если файл с ключом RSA можно открыть по указанному расположению, новый файл создаваться не будет. Если файл ключа RSA не может быть открыт, либо потому что он не существует, либо из-за того, что пароль к файлу с ключом RSA не совпадает с паролем в рецепте, он будет перезаписан.

Новое в Chef Infra Client 14.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса openssl_rsa_private_key:

openssl_rsa_private_key 'name' do
  force           true, false # default value: false
  group           String, Integer
  key_cipher      String # default value: "des3"
  key_length      Integer # default value: 2048
  key_pass        String
  mode            Integer, String # default value: "0600"
  owner           String, Integer
  path            String # default value: 'name' unless specified
  action          Symbol # defaults to :create if not specified
end

где:

  • openssl_rsa_private_key — это ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет, чтобы привести узел в желаемое состояние.
  • force, group, key_cipher, key_length, key_pass, mode, owner и path — доступные свойства для этого ресурса.

Действия


Ресурс openssl_rsa_private_key имеет следующие действия:

:create
Создать файл с закрытым ключом RSA. (по умолчанию)
:nothing
Этот блок ресурса не действует, пока не получит уведомление от другого ресурса о необходимости выполнить действие. После получения уведомления, этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс openssl_rsa_private_key имеет следующие свойства:

force
Тип Ruby: true, false | Значение по умолчанию: false

Принудительно создать ключ, даже если такой ключ уже существует на узле.

group
Тип Ruby: Строка, Целое число

Владение группой, применяемое ко всем файлам, созданным ресурсом.

key_cipher
Тип Ruby: Строка | Значение по умолчанию: des3

Заданный шифр для использования при генерации ключа. Запустите openssl list-cipher-algorithms, чтобы увидеть доступные варианты.

key_length
Тип Ruby: Целое число | Значение по умолчанию: 2048 Разрешенные значения: 1024, 2048, 4096, 8192

Желаемая длина в битах сгенерированного ключа.

key_pass
Тип Ruby: Строка

Желаемый пароль для ключа.

mode
Тип Ruby: Целое число, Строка | Значение по умолчанию: 0600

Режим разрешений, применяемый ко всем файлам, созданным ресурсом.

owner
Тип Ruby: Строка, Целое число

Владелец, применяемый ко всем файлам, созданным ресурсом.

path
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для указания пути для записи файла, если он отличается от имени блока ресурса.


Общие функциональные возможности ресурсов


Ресурсы 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, которое будет выполнено, и затем :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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса openssl_rsa_private_key в рецептах:

Сгенерировать новый ключ длиной 2048 бит с шифром des3 по умолчанию

openssl_rsa_private_key '/etc/ssl_files/rsakey_des3.pem' do
  key_length 2048
  action :create
end

Сгенерировать новый ключ длиной 1024 бит с шифром aes-128-cbc

openssl_rsa_private_key '/etc/ssl_files/rsakey_aes128cbc.pem' do
  key_length 1024
  key_cipher 'aes-128-cbc'
  action :create
end

openssl_rsa_public_key ресурс

Страница ресурса openssl_rsa_public_key

Используйте ресурс openssl_rsa_public_key для генерации файлов с открытыми ключами RSA для заданного закрытого ключа RSA.

Новое в Chef Infra Client 14.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса openssl_rsa_public_key:

openssl_rsa_public_key 'name' do
  group                    String, Integer
  mode                     Integer, String # default value: "0640"
  owner                    String, Integer
  path                     String # default value: 'name' unless specified
  private_key_content      String
  private_key_pass         String
  private_key_path         String
  action                   Symbol # defaults to :create if not specified
end

где:

  • openssl_rsa_public_key — это ресурс.
  • name — это имя, присвоенное блоку ресурса.
  • action определяет, какие шаги Chef Infra Client предпримет для перевода узла в нужное состояние.
  • group, mode, owner, path, private_key_content, private_key_pass и private_key_path — это доступные свойства данного ресурса.

Действия


Ресурс openssl_rsa_public_key имеет следующие действия:

:create
Создать файл открытого ключа RSA. (по умолчанию)
:nothing
Этот блок ресурса не выполняет никаких действий, пока не получит уведомление от другого ресурса о необходимости выполнить действие. После получения уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс openssl_rsa_public_key имеет следующие свойства:

group
Тип в Ruby: Строка, Целое число

Групповая собственность, применяемая ко всем файлам, созданным ресурсом.

mode
Тип в Ruby: Целое число, Строка | Значение по умолчанию: 0640

Режим разрешений, применяемый ко всем файлам, созданным ресурсом.

owner
Тип в Ruby: Строка, Целое число

Владелец, применяемый ко всем файлам, созданным ресурсом.

path
Тип в Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для указания пути к открытому ключу, если он отличается от имени блока ресурса.

private_key_content
Тип в Ruby: Строка

Содержание закрытого ключа, включая новые строки. Это свойство используется вместо `private_key_path` в тех случаях, когда вы хотите избежать предварительного записи закрытого ключа на диск.

private_key_pass
Тип в Ruby: Строка

Пароль предоставленного закрытого ключа.

private_key_path
Тип в Ruby: Строка

Путь к файлу закрытого ключа.


Общие возможности ресурсов


Ресурсы 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 действие, которое необходимо выполнить, и :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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса openssl_rsa_public_key в рецептах:

Генерация нового открытого ключа из закрытого ключа на диске

openssl_rsa_public_key '/etc/ssl_files/rsakey_des3.pub' do
  private_key_path '/etc/ssl_files/rsakey_des3.pem'
  private_key_pass 'something'
  action :create
end

Генерация нового открытого ключа путем передачи закрытого ключа

openssl_rsa_public_key '/etc/ssl_files/rsakey_2.pub' do
  private_key_pass 'something'
  private_key_content "-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,5EE0AE9A5FE3342E
yb930kj5/4/nd738dPx6XdbDrMCvqkldaz0rHNw8xsWvwARrl/QSPwROG3WY7ROl
EUttVlLaeVaqRPfQbmTUfzGI8kTMmDWKjw52gJUx2YJTYRgMHAB0dzYIRjeZAaeS
ypXnEfouVav+jKTmmehr1WuVKbzRhQDBSalzeUwsPi2+fb3Bfuo1dRW6xt8yFuc4
Akv1hCglymPzPHE2L0nSGjcgA2DZu+/S8/wZ4E63442NHPzO4VlLvpNvJrYpEWq9
B5mJzcdXPeOTjqd13olNTlOZMaKxu9QShu50GreCTVsl8VRkK8NtwbWuPGBZlIFa
jzlS/RaLuzNzfajaKMkcIYco9t7gN2DwnsACHKqEYT8248Ii3NQ+9/M5YcmpywQj
WGr0UFCSAdCky1lRjwT+zGQKohr+dVR1GaLem+rSZH94df4YBxDYw4rjsKoEhvXB
v2Vlx+G7Vl2NFiZzxUKh3MvQLr/NDElpG1pYWDiE0DIG13UqEG++cS870mcEyfFh
SF2SXYHLWyAhDK0viRDChJyFMduC4E7a2P9DJhL3ZvM0KZ1SLMwROc1XuZ704GwO
YUqtCX5OOIsTti1Z74jQm9uWFikhgWByhVtu6sYL1YTqtiPJDMFhA560zp/k/qLO
FKiM4eUWV8AI8AVwT6A4o45N2Ru8S48NQyvh/ADFNrgJbVSeDoYE23+DYKpzbaW9
00BD/EmUQqaQMc670vmI+CIdcdE7L1zqD6MZN7wtPaRIjx4FJBGsFoeDShr+LoTD
rwbadwrbc2Rf4DWlvFwLJ4pvNvdtY3wtBu79UCOol0+t8DVVSPVASsh+tp8XncDE
KRljj88WwBjX7/YlRWvQpe5y2UrsHI0pNy8TA1Xkf6GPr6aS2TvQD5gOrAVReSse
/kktCzZQotjmY1odvo90Zi6A9NCzkI4ZLgAuhiKDPhxZg61IeLppnfFw0v3H4331
V9SMYgr1Ftov0++x7q9hFPIHwZp6NHHOhdHNI80XkHqtY/hEvsh7MhFMYCgSY1pa
K/gMcZ/5Wdg9LwOK6nYRmtPtg6fuqj+jB3Rue5/p9dt4kfom4etCSeJPdvP1Mx2I
eNmyQ/7JN9N87FsfZsIj5OK9OB0fPdj0N0m1mlHM/mFt5UM5x39u13QkCt7skEF+
yOptXcL629/xwm8eg4EXnKFk330WcYSw+sYmAQ9ZTsBxpCMkz0K4PBTPWWXx63XS
c4J0r88kbCkMCNv41of8ceeGzFrC74dG7i3IUqZzMzRP8cFeps8auhweUHD2hULs
XwwtII0YQ6/Fw4hgGQ5//0ASdvAicvH0l1jOQScHzXC2QWNg3GttueB/kmhMeGGm
sHOJ1rXQ4oEckFvBHOvzjP3kuRHSWFYDx35RjWLAwLCG9odQUApHjLBgFNg9yOR0
jW9a2SGxRvBAfdjTa9ZBBrbjlaF57hq7mXws90P88RpAL+xxCAZUElqeW2Rb2rQ6
Cbz4/AtPekV1CYVodGkPutOsew2zjNqlNH+M8XzfonA60UAH20TEqAgLKwgfgr+a
c+rXp1AupBxat4EHYJiwXBB9XcVwyp5Z+/dXsYmLXzoMOnp8OFyQ9H8R7y9Y0PEu
-----END RSA PRIVATE KEY-----
"
  action :create
end

Ресурс openssl_x509_certificate

Страница ресурса openssl_x509_certificate

Используйте ресурс openssl_x509_certificate для генерации подписанных или самоподписанных сертификатов x509 в формате PEM. Если не указан существующий ключ, ресурс автоматически сгенерирует ключ без пароля вместе с сертификатом. Если указаны закрытый ключ и сертификат ЦС, сертификат будет подписан с их помощью.

Примечание

Этот ресурс был переименован из openssl_x509 в openssl_x509_certificate. Прежнее имя продолжит работу, но код кулинарной книги должен быть обновлен для нового имени ресурса.

Новое в Chef Infra Client 14.4.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса openssl_x509_certificate:

openssl_x509_certificate 'name' do
  ca_cert_file             String
  ca_key_file              String
  ca_key_pass              String
  city                     String
  common_name              String
  country                  String
  csr_file                 String
  email                    String
  expire                   Integer # default value: 365
  extensions               Hash # default value: {}
  group                    String, Integer
  key_curve                String # default value: "prime256v1"
  key_file                 String
  key_length               Integer # default value: 2048
  key_pass                 String
  key_type                 String # default value: "rsa"
  mode                     Integer, String
  org                      String
  org_unit                 String
  owner                    String, Integer
  path                     String # default value: 'name' unless specified
  renew_before_expiry      Integer
  state                    String
  subject_alt_name         Array # default value: []
  action                   Symbol # defaults to :create if not specified
end

где:

  • openssl_x509_certificate — это ресурс.
  • name — это имя, заданное для блока ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • ca_cert_file, ca_key_file, ca_key_pass, city, common_name, country, csr_file, email, expire, extensions, group, key_curve, key_file, key_length, key_pass, key_type, mode, org, org_unit, owner, path, renew_before_expiry, state и subject_alt_name — это доступные свойства для данного ресурса.

Действия


Ресурс openssl_x509_certificate имеет следующие действия:

:create
Генерирует файл сертификата. (по умолчанию)
:nothing
Этот блок ресурса не действует, пока не получит уведомление от другого ресурса о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс openssl_x509_certificate имеет следующие свойства:

ca_cert_file
Тип Ruby: Строка

Путь к сертификату CA X509 в файловой системе. Если свойство ca_cert_file указано, то также должно быть указано свойство ca_key_file, и сертификат будет подписан с их использованием.

ca_key_file
Тип Ruby: Строка

Путь к закрытому ключу CA в файловой системе. Если свойство ca_key_file указано, то также должно быть указано свойство ca_cert_file, и сертификат будет подписан с их использованием.

ca_key_pass
Тип Ruby: Строка

Пароль для парольной фразы закрытого ключа CA.

city
Тип Ruby: Строка

Значение для поля сертификата L.

common_name
Тип Ruby: Строка

Значение для поля сертификата CN.

country
Тип Ruby: Строка

Значение для поля сертификата C.

csr_file
Тип Ruby: Строка

Путь к запросу сертификата X509 (CSR) в файловой системе. Если свойство csr_file указано, ресурс попытается получить CSR из этого места. Если файл CSR не найден, ресурс сгенерирует самозаверяющий сертификат, и поля сертификата должны быть указаны (в первую очередь common_name).

email
Тип Ruby: Строка

Значение для поля сертификата email.

expire
Тип Ruby: Целое число | Значение по умолчанию: 365

Значение, представляющее количество дней с текущей даты, в течение которых выпущенный сертификат cert будет оставаться действительным. Сертификат истечет по истечении этого периода.

extensions
Тип Ruby: Хэш | Значение по умолчанию: {}

Хэш записей расширений X509 в формате { 'keyUsage' => { 'values' => %w( keyEncipherment digitalSignature), 'critical' => true } }.

group
Тип Ruby: Строка, Целое число

Владение группой, применяемое ко всем файлам, созданным ресурсом.

key_curve
Тип Ruby: Строка | Значение по умолчанию: prime256v1 Разрешенные значения: "prime256v1", "secp384r1", "secp521r1"

Желаемая кривая сгенерированного ключа (если key_type равен ‘ec’). Запустите openssl ecparam -list_curves, чтобы увидеть доступные варианты.

key_file
Тип Ruby: Строка

Путь к файлу ключа сертификата в файловой системе. Если свойство key_file указано, ресурс попытается получить ключ из этого места. Если файл ключа не найден, ресурс сгенерирует новый файл ключа в этом месте. Если свойство key_file не указано, ресурс сгенерирует файл ключа в той же директории, что и сгенерированный сертификат, с тем же именем, что и сгенерированный сертификат.

key_length
Тип Ruby: Целое число | Значение по умолчанию: 2048 Разрешенные значения: 1024, 2048, 4096, 8192

Желаемая длина в битах сгенерированного ключа (если key_type равен ‘rsa’).

key_pass
Тип Ruby: Строка

Пароль для существующего пароля ключа.

key_type
Тип Ruby: Строка | Значение по умолчанию: rsa Разрешенные значения: "ec", "rsa"

Желаемый тип сгенерированного ключа.

mode
Тип Ruby: Целое число, Строка

Режим разрешений, применяемый ко всем файлам, созданным ресурсом.

org
Тип Ruby: Строка

Значение для поля сертификата O.

org_unit
Тип Ruby: Строка

Значение для поля сертификата OU.

owner
Тип Ruby: Строка, Целое число

Владелец, применяемый ко всем файлам, созданным ресурсом.

path
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для указания пути записи файла, если он отличается от имени блока ресурса.

renew_before_expiry
Тип Ruby: Целое число

Количество дней до истечения срока действия. Сертификат будет автоматически продлен, когда значение будет достигнуто.

Новое в Chef Infra Client 15.7

state
Тип Ruby: Строка

Значение для поля сертификата ST.

subject_alt_name
Тип Ruby: Массив | Значение по умолчанию: []

Массив записей Subject Alternative Name в формате DNS:example.com или IP:1.2.3.4.


Общие возможности ресурсов


Ресурсы 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 для этого действия.

Обратите внимание, что 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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса openssl_x509_certificate в рецептах:

Создание простого самозаверяющегося файла сертификата

openssl_x509_certificate '/etc/httpd/ssl/mycert.pem' do
  common_name 'www.f00bar.com'
  org 'Foo Bar'
  org_unit 'Lab'
  country 'US'
end

Создание сертификата с использованием дополнительных параметров

openssl_x509_certificate '/etc/ssl_files/my_signed_cert.crt' do
  common_name 'www.f00bar.com'
  ca_key_file '/etc/ssl_files/my_ca.key'
  ca_cert_file '/etc/ssl_files/my_ca.crt'
  expire 365
  extensions(
    'keyUsage' => {
      'values' => %w(
        keyEncipherment
        digitalSignature),
      'critical' => true,
    },
    'extendedKeyUsage' => {
      'values' => %w(serverAuth),
      'critical' => false,
    }
  )
  subject_alt_name ['IP:127.0.0.1', 'DNS:localhost.localdomain']
end

Ресурс openssl_x509_crl

Страница ресурса openssl_x509_crl

Используйте ресурс openssl_x509_crl для генерации файлов списка отзыва сертификатов x509 в формате PEM.

Новое в Chef Infra Client 14.4.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса openssl_x509_crl:

openssl_x509_crl 'name' do
  ca_cert_file           String
  ca_key_file            String
  ca_key_pass            String
  expire                 Integer # default value: 8
  group                  String, Integer
  mode                   Integer, String
  owner                  String, Integer
  path                   String # default value: 'name' unless specified
  renewal_threshold      Integer # default value: 1
  revocation_reason      Integer # default value: 0
  serial_to_revoke       Integer, String
  action                 Symbol # defaults to :create if not specified
end

где:

  • openssl_x509_crl — ресурс.
  • name — имя, данное блоку ресурса.
  • action — определяет действия, которые Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • ca_cert_file, ca_key_file, ca_key_pass, expire, group, mode, owner, path, renewal_threshold, revocation_reason и serial_to_revoke — доступные свойства для этого ресурса.

Действия


Ресурс openssl_x509_crl имеет следующие действия:

:create
Создать файл списка отзыва сертификатов (CRL). (по умолчанию)
:nothing
Этот блок ресурса не выполняется, пока не получит уведомление от другого ресурса о действии. После уведомления этот блок ресурса выполняется либо немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс openssl_x509_crl имеет следующие свойства:

ca_cert_file
Тип Ruby: Строка | REQUIRED

Путь к сертификату CA X509 в файловой системе. Если свойство ca_cert_file указано, свойство ca_key_file также должно быть указано, CRL будет подписан с их помощью.

ca_key_file
Тип Ruby: Строка | REQUIRED

Путь к закрытому ключу CA в файловой системе. Если свойство ca_key_file указано, свойство ca_cert_file также должно быть указано, CRL будет подписан с их помощью.

ca_key_pass
Тип Ruby: Строка

Пароль для пароля закрытого ключа CA.

expire
Тип Ruby: Целое число | Значение по умолчанию: 8

Значение, представляющее количество дней от текущей даты, в течение которых выданный CRL останется действительным. CRL истечет через этот период.

group
Тип Ruby: Строка, Целое число

Разрешение группы для файла CRL.

mode
Тип Ruby: Целое число, Строка

Режим разрешений файла CRL.

owner
Тип Ruby: Строка, Целое число

Разрешение владельца для файла CRL.

path
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для указания пути для записи файла, если он отличается от имени блока ресурса.

renewal_threshold
Тип Ruby: Целое число | Значение по умолчанию: 1

Количество дней до истечения срока действия. Если этот порог достигнут, CRL будет обновлен.

revocation_reason
Тип Ruby: Целое число | Значение по умолчанию: 0

Причина отзыва.

serial_to_revoke
Тип Ruby: Целое число, Строка

Серийный номер X509-сертификата для отзыва.


Общие функциональные возможности ресурса


Ресурсы 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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса openssl_x509_crl в рецептах:

Создание файла отзыва сертификатов

openssl_x509_crl '/etc/ssl_test/my_ca.crl' do
  ca_cert_file '/etc/ssl_test/my_ca.crt'
  ca_key_file '/etc/ssl_test/my_ca.key'
end

Создание файла отзыва сертификатов для определённого серийного номера

openssl_x509_crl '/etc/ssl_test/my_ca.crl' do
  ca_cert_file '/etc/ssl_test/my_ca.crt'
  ca_key_file '/etc/ssl_test/my_ca.key'
  serial_to_revoke C7BCB6602A2E4251EF4E2827A228CB52BC0CEA2F
end

Ресурс openssl_x509_request

Страница документации ресурса openssl_x509_request

Используйте ресурс openssl_x509_request для генерации запросов на сертификаты x509 в формате PEM. Если не указан существующий ключ, ресурс автоматически сгенерирует ключ без пароля вместе с сертификатом.

Новинка в Chef Infra Client 14.4.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса openssl_x509_request:

openssl_x509_request 'name' do
  city             String
  common_name      String
  country          String
  email            String
  group            String, Integer
  key_curve        String # default value: "prime256v1"
  key_file         String
  key_length       Integer # default value: 2048
  key_pass         String
  key_type         String # default value: "ec"
  mode             Integer, String
  org              String
  org_unit         String
  owner            String, Integer
  path             String # default value: 'name' unless specified
  state            String
  action           Symbol # defaults to :create if not specified
end

где:

  • openssl_x509_request — это ресурс.
  • name — имя, данное блоку ресурса.
  • action определяет, какие шаги Chef Infra Client предпримет, чтобы привести узел в желаемое состояние.
  • city, common_name, country, email, group, key_curve, key_file, key_length, key_pass, key_type, mode, org, org_unit, owner, path и state — доступные свойства для данного ресурса.

Действия


У ресурса openssl_x509_request есть следующие действия:

:create
Генерировать файл запроса на сертификат. (по умолчанию)
:nothing
Этот блок ресурса не действует, пока другой ресурс не уведомит его о необходимости принять действие. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


У ресурса openssl_x509_request есть следующие свойства:

city
Тип Ruby: Строка

Значение для поля сертификата L.

common_name
Тип Ruby: Строка | REQUIRED

Значение для поля сертификата CN.

country
Тип Ruby: Строка

Значение для поля сертификата C.

email
Тип Ruby: Строка

Значение для поля сертификата email.

group
Тип Ruby: Строка, Целое число

Группа владельца, применяемая ко всем файлам, созданным ресурсом.

key_curve
Тип Ruby: Строка | Значение по умолчанию: prime256v1 Допустимые значения: "prime256v1", "secp384r1", "secp521r1"

Желаемая кривая сгенерированного ключа (если key_type равно ec). Запустите openssl ecparam -list_curves, чтобы увидеть доступные варианты.

key_file
Тип Ruby: Строка

Путь к файлу ключа сертификата в файловой системе. Если указано свойство key_file, ресурс попытается получить ключ из этого местоположения. Если файл ключа не найден, ресурс сгенерирует новый файл ключа в этом местоположении. Если свойство key_file не указано, ресурс сгенерирует файл ключа в той же директории, что и сгенерированный сертификат, с таким же именем, как у сгенерированного сертификата.

key_length
Тип Ruby: Целое число | Значение по умолчанию: 2048 Допустимые значения: 1024, 2048, 4096, 8192

Желаемая длина в битах сгенерированного ключа (если key_type равно rsa).

key_pass
Тип Ruby: Строка

Пароль для пароля существующего ключа.

key_type
Тип Ruby: Строка | Значение по умолчанию: ec Допустимые значения: "ec", "rsa"

Желаемый тип сгенерированного ключа.

mode
Тип Ruby: Целое число, Строка

Режим разрешений, применяемый ко всем файлам, созданным ресурсом.

org
Тип Ruby: Строка

Значение для поля сертификата O.

org_unit
Тип Ruby: Строка

Значение для поля сертификата OU.

owner
Тип Ruby: Строка, Целое число

Владелец, применяемый ко всем файлам, созданным ресурсом.

path
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для указания пути записи файла, если он отличается от имени блока ресурса.

state
Тип Ruby: Строка

Значение для поля сертификата ST.


Общие возможности ресурса


Ресурсы 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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса openssl_x509_request в рецептах:

Создать новый ключ EC и файл CSR

openssl_x509_request '/etc/ssl_files/my_ec_request.csr' do
  common_name 'myecrequest.example.com'
  org 'Test Kitchen Example'
  org_unit 'Kitchens'
  country 'UK'
end

Создать новый файл CSR из существующего ключа EC

openssl_x509_request '/etc/ssl_files/my_ec_request2.csr' do
  common_name 'myecrequest2.example.com'
  org 'Test Kitchen Example'
  org_unit 'Kitchens'
  country 'UK'
  key_file '/etc/ssl_files/my_ec_request.key'
end

Создать новый ключ RSA и файл CSR

openssl_x509_request '/etc/ssl_files/my_rsa_request.csr' do
  common_name 'myrsarequest.example.com'
  org 'Test Kitchen Example'
  org_unit 'Kitchens'
  country 'UK'
  key_type 'rsa'
end

Ресурс osx_profile

Страница ресурса osx_profile

Используйте ресурс osx_profile для управления профилями конфигурации (файлами .mobileconfig) на платформе macOS. Ресурс osx_profile устанавливает профили, используя библиотеку uuidgen для генерации уникального ProfileUUID, а затем команду profiles для установки профиля на системе.

Новое в Chef Infra Client 12.7.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса osx_profile:

osx_profile 'name' do
  identifier        String
  profile           String, Hash
  profile_name      String # default value: 'name' unless specified
  action            Symbol # defaults to :install if not specified
end

где:

  • osx_profile — это ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет действия, которые Chef Infra Client выполнит для приведения узла к желаемому состоянию.
  • identifier, profile и profile_name — это доступные свойства этого ресурса.

Действия


Ресурс osx_profile имеет следующие действия:

:install
Установить указанный профиль конфигурации. (по умолчанию)
:nothing
Этот блок ресурса не действует, пока не будет уведомлен другим ресурсом о необходимости выполнить действие. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:remove
Удалить указанный профиль конфигурации.

Свойства


Ресурс osx_profile имеет следующие свойства:

identifier
Тип Ruby: Строка

Используется для указания идентификатора профиля, например, com.company.screensaver.

profile
Тип Ruby: Строка, Хэш

Используется для указания профиля. Это может быть имя профиля, содержащегося в кулинарной книге, или хэш, содержащий содержимое профиля.

profile_name
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Используется для указания имени профиля, если оно отличается от имени блока ресурса.


Общие функции ресурса


Ресурсы 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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса osx_profile в рецептах:

Установка профиля из файла кулинарной книги

osx_profile 'com.company.screensaver.mobileconfig'

Установка профиля из хэша

profile_hash = {
  'PayloadIdentifier' => 'com.company.screensaver',
  'PayloadRemovalDisallowed' => false,
  'PayloadScope' => 'System',
  'PayloadType' => 'Configuration',
  'PayloadUUID' => '1781fbec-3325-565f-9022-8aa28135c3cc',
  'PayloadOrganization' => 'Chef',
  'PayloadVersion' => 1,
  'PayloadDisplayName' => 'Screensaver Settings',
  'PayloadContent' => [
    {
      'PayloadType' => 'com.apple.ManagedClient.preferences',
      'PayloadVersion' => 1,
      'PayloadIdentifier' => 'com.company.screensaver',
      'PayloadUUID' => '73fc30e0-1e57-0131-c32d-000c2944c108',
      'PayloadEnabled' => true,
      'PayloadDisplayName' => 'com.apple.screensaver',
      'PayloadContent' => {
        'com.apple.screensaver' => {
          'Forced' => [
            {
              'mcx_preference_settings' => {
                'idleTime' => 0,
              },
            },
          ],
        },
      },
    },
  ],
}

osx_profile 'Install screensaver profile' do
  profile profile_hash
end

Удаление профиля с использованием идентификатора в имени ресурса

osx_profile 'com.company.screensaver' do
  action :remove
end

Удаление профиля по идентификатору и дружественному имени ресурса

osx_profile 'Remove screensaver profile' do
  identifier 'com.company.screensaver'
  action :remove
end

ресурс пакета

страница ресурса пакета

Используйте ресурс 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 для установки будет запущена в следующих случаях:

  • Когда указано свойство gem_binary (как хэш, строка или файл .gemrc), Chef Infra Client выполнит эту команду, чтобы проверить параметры своей среды, а затем ещё раз, чтобы установить драгоценность.
  • Когда параметры установки указаны как строка, Chef Infra Client запустит команду gems с этими параметрами при установке драгоценности.
  • Chef installer будет искать команду gems в PATH вместо использования текущей среды gems. В рамках enforce_default_paths каталоги bin добавляются в PATH, что означает, что при отсутствии других предыдущих RubyGems установка всё равно будет выполнена относительно их.

Указание с помощью хэша

Если параметр gem_binary не используется явно с ресурсом gem_package, предпочтительно указывать параметры установки как хэш. Такой подход позволяет поставщику устанавливать драгоценность без необходимости запуска внешнего процесса gem.

Доступны следующие параметры RubyGems для включения в хэш и передачи в RubyGems DependencyInstaller:

  • :env_shebang
  • :force
  • :format_executable
  • :ignore_dependencies
  • :prerelease
  • :security_policy
  • :wrappers

Для получения более подробной информации об этих параметрах, см. документацию RubyGems: http://rubygems.rubyforge.org/rubygems-update/Gem/DependencyInstaller.html.

Пример
gem_package 'bundler' do
  options(prerelease: true, format_executable: false)
end

Указание со строкой

При использовании явного gem_binary параметры должны передаваться как строка. При отсутствии явного gem_binary Chef Infra Client вынужден запускать процесс gems для установки драгоценностей (что потребляет больше системных ресурсов), когда параметры передаются как строка. Строковые параметры передаются в команду gems дословно и должны указываться так же, как если бы они передавались в командной строке. Например, --prerelease для предварительной версии драгоценности. Пример
gem_package 'nokogiri' do
  gem_binary('/opt/ree/bin/gem')
  options('--prerelease --no-format-executable')
end

Указание с помощью файла .gemrc

Параметры могут быть указаны в файле .gemrc. По умолчанию ресурс gem_package будет использовать Ruby-интерфейс для установки драгоценностей, который проигнорирует файл .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

Действия


У ресурса пакет следующие действия:

:install
По умолчанию. Устанавливает пакет. Если указана версия, устанавливает указанную версию пакета.
:nothing
Этот блок ресурса не действует, пока не будет уведомлен другим ресурсом о действии. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:purge
Удаляет пакет. Это действие обычно удаляет файлы конфигурации, а также сам пакет. (Только платформа Debian; для других платформ используйте действие :remove.)
:reconfig
Переконфигурирует пакет. Это действие требует файла ответов.
:remove
Удаляет пакет.
:upgrade
Устанавливает пакет и/или гарантирует, что пакет является последней версией.

Свойства


У ресурса пакет следующие свойства:

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

а следующий использует один ресурс package и массив пробелов (%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

Ресурс pacman_package

Страница ресурса pacman_package

Используйте ресурс pacman_package для управления пакетами (используя pacman) на платформе Arch Linux.

Примечание

Во многих случаях лучше использовать ресурс package вместо этого. Это потому, что когда ресурс package используется в рецепте, Chef Infra Client будет использовать данные, собранные Ohai в начале запуска Chef Infra Client, чтобы определить правильное приложение пакета. Использование ресурса package позволяет автору рецепта использовать его на многих платформах.

Синтаксис


Блок ресурса pacman_package управляет пакетом на узле, обычно устанавливая его. Наиболее простое использование ресурса pacman_package:

pacman_package 'package_name'

что установит указанный пакет со всеми стандартными параметрами и стандартным действием (:install).

Полный синтаксис для всех свойств, доступных для ресурса pacman_package:

pacman_package 'name' do
  options           String
  package_name      String
  source            String
  timeout           String, Integer
  version           String, Array
  action            Symbol # defaults to :install if not specified
end

где:

  • pacman_package — ресурс.
  • name — имя, данное блоку ресурса.
  • action определяет, какие действия Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • options, package_name, source, timeout и version — доступные свойства этого ресурса.

Действия


Ресурс pacman_package имеет следующие действия:

:install
По умолчанию. Устанавливает пакет. Если указана версия, устанавливает указанную версию пакета.
:nothing
Этот блок ресурса не действует, пока не будет вызван другим ресурсом. После вызова этот блок ресурса либо выполняется немедленно, либо добавляется в очередь для выполнения в конце выполнения Chef Infra Client.
:purge
Удаляет пакет. Это действие обычно удаляет конфигурационные файлы, а также сам пакет.
:remove
Удаляет пакет.
:upgrade
Устанавливает пакет и/или гарантирует, что пакет является последней версией.

Свойства


Ресурс pacman_package имеет следующие свойства:

options
Тип Ruby: Строка

Один или несколько дополнительных параметров команды, которые передаются команде.

package_name
Тип Ruby: Строка

Необязательное свойство для установки имени пакета, если оно отличается от имени блока ресурса.

source
Тип Ruby: Строка

Необязательный путь к пакету в локальной файловой системе.

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 включают общие свойства, уведомления и блокировки ресурсов.

Общие свойства

Следующие свойства являются общими для каждого ресурса:

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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса pacman_package в рецептах:

Установка пакета

pacman_package 'name of package' do
  action :install
end

Ресурс paludis_package

Страница ресурса paludis_package

Используйте ресурс paludis_package для управления пакетами для платформы Paludis.

Синтаксис


Блок ресурса paludis_package управляет пакетом на узле, как правило, путем его установки. Самый простой способ использования ресурса paludis_package:

paludis_package 'package_name'

который установит указанный пакет с использованием всех параметров по умолчанию и действия по умолчанию (:install).

Полный синтаксис всех доступных свойств ресурса paludis_package:

paludis_package 'name' do
  options           String
  package_name      String
  source            String
  timeout           Integer # default value: 3600
  version           String
  action            Symbol # defaults to :install if not specified
end

где:

  • paludis_package — это ресурс.
  • name — это имя, заданное для блока ресурса.
  • action определяет, какие действия Chef Infra Client предпримет для перевода узла в желаемое состояние.
  • options, package_name, source, timeout и version — доступные свойства этого ресурса.

Действия


Ресурс paludis_package имеет следующие действия:

:install
По умолчанию. Установка пакета. Если указана версия, устанавливается указанная версия пакета.
:nothing
Этот блок ресурса не выполняется, пока не будет уведомлен другим ресурсом о выполнении действия. После уведомления этот блок ресурса выполняется немедленно или помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:remove
Удаление пакета.
:upgrade
Установка пакета и/или обеспечение того, что пакет является последней версией.

Свойства


Ресурс paludis_package имеет следующие свойства:

options
Тип Ruby: Строка

Один или несколько дополнительных параметров команды, которые передаются команде.

package_name
Тип Ruby: Строка

Необязательное свойство для установки имени пакета, если оно отличается от имени блока ресурса.

source
Тип Ruby: Строка

Необязательный путь к пакету на локальном файловом хранилище.

timeout
Тип Ruby: Строка, целое число | Значение по умолчанию: 3600

Время ожидания в секундах перед истечением времени.

version
Тип Ruby: Строка

Версия пакета, подлежащая установке или обновлению.


Общие функции ресурса


Ресурсы 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 для выполнения и :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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса paludis_package в рецептах:

Установить пакет

paludis_package 'name of package' do
  action :install
end

ресурс perl

страница ресурса perl

Используйте ресурс perl для выполнения скриптов с помощью интерпретатора Perl. Этот ресурс также может использовать любые действия и свойства, доступные для ресурса execute. Команды, выполняемые с помощью этого ресурса, по своей природе не идемпотентны, поскольку они обычно уникальны для среды, в которой они выполняются. Используйте not_if и only_if для защиты этого ресурса от идемпотентности.

Синтаксис


Блок ресурса perl выполняет скрипты Perl:

perl 'hello world' do
  code <<-EOH
    print "Hello world! From Chef and Perl.";
  EOH
end

где:

  • code указывает команду для выполнения

Полный синтаксис всех свойств, доступных для ресурса perl:

perl 'name' do
  code                       String
  creates                    String
  cwd                        String
  environment                Hash
  flags                      String
  group                      String, Integer
  notifies                   # see description
  path                       Array
  returns                    Integer, Array
  subscribes                 # see description
  timeout                    Integer, Float
  user                       String, Integer
  umask                      String, Integer
  action                     Symbol # defaults to :run if not specified
end

где:

  • perl — это ресурс.
  • name — это имя, данное блоку ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет, чтобы привести узел в желаемое состояние.
  • code, creates, cwd, environment, flags, group, path, returns, timeout, user и umask — это свойства этого ресурса с указанным типом Ruby. См. раздел «Свойства» ниже, чтобы получить больше информации обо всех свойствах, которые можно использовать с этим ресурсом.

Действия


Ресурс perl имеет следующие действия:

:nothing
Препятствует выполнению команды. Это действие используется для указания того, что команда выполняется только тогда, когда другой ресурс ее уведомляет.
:run
Значение по умолчанию. Выполнить скрипт.

Свойства


Ресурс perl имеет следующие свойства:

code
Тип Ruby: Строка

Скопированный (" “) строковый код, который нужно выполнить.

creates
Тип Ruby: Строка

Препятствует созданию команды файла, если этот файл уже существует.

cwd
Тип Ruby: Строка

Текущая рабочая директория.

environment
Тип Ruby: Хэш

Хэш переменных среды в виде ({"ENV_VARIABLE" => "VALUE"}). (Эти переменные должны существовать, чтобы команда была выполнена успешно.)

flags
Тип Ruby: Строка, Целое число

Одна или несколько флагов командной строки, которые передаются интерпретатору при вызове команды.

group
Тип Ruby: Строка, Целое число

Имя группы или идентификатор группы, которые необходимо изменить перед выполнением команды.

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
returns
Тип Ruby: Целое число, массив | Значение по умолчанию: 0

Возвращаемое значение для команды. Это может быть массив допустимых значений. При несоответствии возвращаемого значения(й) генерируется исключение.

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 Client. Доступны следующие таймеры:

:before

Указывает, что действие над уведомленным ресурсом должно быть выполнено до обработки блока ресурса, в котором расположено уведомление.

:delayed

Значение по умолчанию. Указывает, что уведомление должно быть помещено в очередь и выполнено в конце работы Chef Infra Client.

:immediate, :immediately

Указывает, что уведомление должно быть выполнено немедленно для каждого уведомленного ресурса.

Синтаксис для subscribes:

subscribes :action, 'resource[name]', :timer
timeout
Тип Ruby: Целое число, число с плавающей точкой | Значение по умолчанию: 3600

Время ожидания команды в секундах до истечения времени.

user
Тип Ruby: Строка, целое число

Имя пользователя или идентификатор пользователя, который должен быть изменен перед запуском команды.

umask
Тип Ruby: Строка, целое число

Маска создания режима файла или umask.


Общие функциональные возможности ресурсов


Ресурсы Chef включают общие свойства, уведомления и защитные механизмы ресурсов.

Защитные механизмы

Свойство защитного механизма может использоваться для оценки состояния узла во время фазы выполнения 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.

Примеры


У этого ресурса нет примеров.

ресурс plist

страница ресурса plist

Используйте ресурс plist для установки значений конфигурации в файлах plist на системах macOS.

Новинка в Chef Infra Client 16.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса plist:

plist 'name' do
  encoding      String # default value: "binary"
  entry         String
  group         String # default value: "wheel"
  mode          String, Integer
  owner         String # default value: "root"
  path          String # default value: 'name' unless specified
  value         true, false, String, Integer, Float, Hash
  action        Symbol # defaults to :set if not specified
end

где:

  • plist — это ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • encoding, entry, group, mode, owner, path и value — доступные свойства этого ресурса.

Действия


Ресурс plist имеет следующие действия:

:nothing
Этот блок ресурса не выполняется, если его не уведомит другой ресурс о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце работы Chef Infra Client.
:set
Установить значение в файле plist. (по умолчанию)

Свойства


Ресурс plist имеет следующие свойства:

encoding
Тип Ruby: Строка | Значение по умолчанию: binary
entry
Тип Ruby: Строка
group
Тип Ruby: Строка | Значение по умолчанию: wheel

Группа файла plist.

mode
Тип Ruby: Строка, целое число

Режим файла plist. Пример: ‘644’

owner
Тип Ruby: Строка | Значение по умолчанию: root

Владелец файла plist.

path
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Путь к файлу plist на диске.

value
Тип Ruby: true, false, Строка, Целое число, Число с плавающей точкой, Словарь

Общие функциональные возможности ресурсов


Ресурсы 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, которое должно быть выполнено, и затем :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.

Примеры


В следующих примерах показаны различные подходы к использованию ресурса plist в рецептах:

Показать скрытые файлы в Finder:

plist 'show hidden files' do
  path '/Users/vagrant/Library/Preferences/com.apple.finder.plist'
  entry 'AppleShowAllFiles'
  value true
end

Ресурс portage_package

Страница ресурса portage_package

Используйте ресурс portage_package для управления пакетами для платформы Gentoo.

Примечание

Во многих случаях лучше использовать ресурс package вместо этого. Это связано с тем, что при использовании ресурса package в рецепте Chef Infra Client будет использовать данные, собранные Ohai в начале выполнения Chef Infra Client, чтобы определить правильное применение пакета. Использование ресурса package позволяет автору рецепта создавать рецепты, которые можно использовать на многих платформах.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса portage_package:

portage_package 'name' do
  options           String
  package_name      String
  source            String
  timeout           String, Integer # default value: 3600
  version           String
  action            Symbol # defaults to :install if not specified
end

где:

  • portage_package — это ресурс.
  • name — это имя, заданное для блока ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • options, package_name, source, timeout и version — это доступные свойства этого ресурса.

Действия


Ресурс portage_package имеет следующие действия:

:install
По умолчанию. Установить пакет. Если указана версия, установить указанную версию пакета.
:nothing
Этот блок ресурса не действует, если не уведомлен другим ресурсом о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:purge
Очистить пакет. Это действие обычно удаляет конфигурационные файлы, а также сам пакет.
:remove
Удалить пакет.
:upgrade
Установить пакет и/или убедиться, что пакет имеет последнюю версию.

Свойства


Ресурс portage_package имеет следующие свойства:

options
Тип Ruby: Строка

Дополнительные параметры команды, которые передаются команде.

package_name
Тип Ruby: Строка

Необязательное свойство для установки имени пакета, если оно отличается от имени блока ресурса.

source
Тип Ruby: Строка

Необязательный путь к пакету на локальном файловой системе.

timeout
Тип Ruby: Строка, Целое число | Значение по умолчанию: 3600

Время ожидания в секундах перед истечением времени ожидания.

version
Тип Ruby: Строка

Версия пакета, который нужно установить или обновить.


Общие функции ресурсов


Ресурсы 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, и затем :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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса portage_package в рецептах:

Установка пакета

portage_package 'name of package' do
  action :install
end

Ресурс powershell_package

Страница ресурса powershell_package

Используйте ресурс powershell_package для установки и управления пакетами через PowerShell Package Manager для платформы Microsoft Windows. Ресурс powershell_package требует прав администратора и источник должен быть настроен в PowerShell Package Manager с помощью команды Register-PackageSource или ресурса powershell_package_source.

Новое в Chef Infra Client 12.16.

Синтаксис


Блок ресурса powershell_package управляет пакетом на узле, обычно устанавливая его. Самое простое использование ресурса powershell_package:

powershell_package 'package_name'

что установит указанный пакет с использованием всех значений по умолчанию и действия по умолчанию (:install).

Ресурс powershell_package имеет следующий синтаксис:

powershell_package 'name' do
  options                   String, Array
  package_name              String, Array
  skip_publisher_check      true, false # default value: false
  source                    String
  timeout                   String, Integer
  version                   String, Array
  action                    Symbol # defaults to :install if not specified
end

где:

  • powershell_package — это ресурс.
  • name — имя блока ресурса.
  • action определяет, какие действия Chef Infra Client выполнит, чтобы привести узел в желаемое состояние.
  • options, package_name, skip_publisher_check, source, timeout и version — доступные свойства этого ресурса.

Действия


Ресурс powershell_package имеет следующие действия:

:install
По умолчанию. Установить пакет. Если указана версия, установить указанную версию пакета.
:remove
Удалить пакет.

Свойства


Ресурс powershell_package имеет следующие свойства:

options
Тип Ruby: Строка, Массив

Дополнительные параметры команд, передаваемые команде.

package_name
Тип Ruby: Строка, Массив

Имя пакета. Значение по умолчанию: имя блока ресурса.

skip_publisher_check
Тип Ruby: true, false | Значение по умолчанию: false

Пропустить проверку автора модуля.

Новое в Chef Client 14.3

source
Тип Ruby: Строка

Укажите источник пакета.

Новое в Chef Client 14.0

timeout
Тип Ruby: Строка, Целое число

Время ожидания (в секундах) перед истечением времени.

version
Тип Ruby: Строка, Массив

Версия пакета, подлежащая установке или обновлению.


Общие функции ресурсов


Ресурсы 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]', действие, которое должен выполнить этот ресурс, и затем :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.

Примеры


В следующих примерах показаны различные подходы к использованию ресурса powershell_package в рецептах:

Установка определённой версии пакета:

powershell_package 'xCertificate' do
  action :install
  version '1.1.0.0'
end

Установка нескольких пакетов:

powershell_package 'Install Multiple Packages' do
  action :install
  package_name %w(xCertificate xNetworking)
end

Установка пакета из пользовательского источника:

powershell_package 'xCertificate' do
  action :install
  source 'MyGallery'
end

Установка нескольких пакетов и указание версий пакетов:

powershell_package 'Install Multiple Packages' do
  action :install
  package_name %w(xCertificate xNetworking)
  version ['2.0.0.0', '2.12.0.0']
end

Установка нескольких пакетов, при этом версия одного пакета указана, а другого — нет:

powershell_package 'Install Multiple Packages' do
   action :install
   package_name %w(xCertificate xNetworking)
   version [nil, '2.12.0.0']
 end

В этом примере nil сообщает powershell_package об установке последней доступной версии xCertificate, при этом xNetworking фиксируется на версии 2.12.0.0.

Удаление пакета:

powershell_package 'xCertificate' do
  action :remove
end

Ресурс powershell_package_source

Страница ресурса powershell_package_source

Используйте ресурс powershell_package_source для регистрации источника пакета PowerShell и поставщика пакета PowerShell. Здесь мы работаем с двумя различными объектами. Первый — это источник пакета, например, PowerShell-репозиторий или NuGet Source. Второй объект — это поставщик, который PowerShell использует для доступа к этому источнику, например, PowerShellGet, NuGet, Chocolatey и т. д.

Новинка в Chef Infra Client 14.3.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса powershell_package_source:

powershell_package_source 'name' do
  new_name                     String
  password                     String
  provider_name                String # default value: "NuGet"
  publish_location             String
  script_publish_location      String
  script_source_location       String
  source_location              String
  source_name                  String # default value: 'name' unless specified
  trusted                      true, false # default value: false
  user                         String
  action                       Symbol # defaults to :register if not specified
end

где:

  • powershell_package_source — это ресурс.
  • name — это имя, заданное для блока ресурса.
  • action определяет действия, которые Chef Infra Client предпримет, чтобы привести узел в нужное состояние.
  • new_name, password, provider_name, publish_location, script_publish_location, script_source_location, source_location, source_name, trusted и user — доступные свойства этого ресурса.

Действия


Ресурс powershell_package_source имеет следующие действия:

:nothing
Этот блок ресурса не действует, пока другой ресурс не сообщит ему о действии. После уведомления этот блок ресурса выполняется немедленно или помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:register
Регистрирует источник пакета PowerShell. (по умолчанию)
:set
Обновляет существующий PowerShell-репозиторий или источник пакета.
:unregister
Де регистрирует источник пакета PowerShell.

Свойства


Ресурс powershell_package_source имеет следующие свойства:

new_name
Тип Ruby: Строка

Используется для изменения имени стандартного источника пакета.

Новое в Chef Infra Client 17.6

password
Тип Ruby: Строка

Пароль, используемый в качестве части объекта учетных данных для регистрации репозитория или другого источника пакетов.

Новое в Chef Infra Client 17.6

provider_name
Тип Ruby: Строка | Значение по умолчанию: NuGet Допустимые значения: "NuGet", "PowerShellGet", "Programs", "chocolatey", "msi", "msu", "psl", "winget"

Поставщик управления пакетами для источника пакета. По умолчанию — PowerShellGet. Изменяйте этот параметр только в конкретных случаях.

publish_location
Тип Ruby: Строка

URL, куда будут публиковаться модули. Действительно только если поставщик — PowerShellGet.

script_publish_location
Тип Ruby: Строка

Расположение, куда будут публиковаться скрипты для этого источника. Действительно только если поставщик — PowerShellGet.

script_source_location
Тип Ruby: Строка

URL расположения для получения скриптов из этого источника. Действительно только если поставщик — PowerShellGet.

source_location
Тип Ruby: Строка

URL расположения для получения модулей.

Новое в Chef Infra Client 17.6

source_name
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Метка, которая даёт имя вашему источнику пакета.

trusted
Тип Ruby: true, false | Значение по умолчанию: false

Доверять ли пакетам из этого источника. Используется при создании источника пакета для не-PowerShell репозитория.

user
Тип Ruby: Строка

Имя пользователя, используемый в качестве части объекта учетных данных для регистрации репозитория или другого источника пакетов.

Новое в Chef Infra Client 17.6


Общие функциональные возможности ресурсов


Ресурсы 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.

Примеры


В следующих примерах демонстрируются различные подходы к использованию ресурса powershell_package_source в рецептах:

Добавление нового ненадёжного хранилища PowerShell, которое требует учетных данных для подключения:

powershell_package_source 'PowerShellModules' do
  source_name                  "PowerShellModules"
  source_location              "https://pkgs.dev.azure.com/some-org/some-project/_packaging/some_feed/nuget/v2"
  publish_location             "https://pkgs.dev.azure.com/some-org/some-project/_packaging/some_feed/nuget/v2"
  trusted                      false
  user                         "someuser@somelocation.io"
  password                     "my_password"
  provider_name                "PSRepository"
  action                       :register
end

Добавление нового источника пакетов, использующего Chocolatey в качестве поставщика пакетов:

powershell_package_source 'PowerShellModules' do
  source_name                  "PowerShellModules"
  source_location              "https://pkgs.dev.azure.com/some-org/some-project/_packaging/some_feed/nuget/v2"
  publish_location             "https://pkgs.dev.azure.com/some-org/some-project/_packaging/some_feed/nuget/v2"
  trusted                      true
  provider_name                "chocolatey"
  action                       :register
end

Добавление нового источника скриптов PowerShell, которому доверяют:

powershell_package_source 'MyDodgyScript' do
  source_name                  "MyDodgyScript"
  script_source_location       "https://pkgs.dev.azure.com/some-org/some-project/_packaging/some_feed/nuget/v2"
  script_publish_location      "https://pkgs.dev.azure.com/some-org/some-project/_packaging/some_feed/nuget/v2"
  trusted                      true
  action                       :register
end

Обновление существующего хранилища PowerShell, чтобы сделать его надёжным:

powershell_package_source 'MyPSModule' do
  source_name                  "MyPSModule"
  trusted                      true
  action                       :set
end

Обновление источника пакетов Nuget с новым именем и сделать его надёжным:

powershell_package_source 'PowerShellModules -> GoldFishBowl' do
  source_name                  "PowerShellModules"
  new_name                     "GoldFishBowl"
  provider_name                "Nuget"
  trusted                      true
  action                       :set
end

Обновление источника пакетов Nuget с новым именем, когда источник защищён именем пользователя и паролем:

powershell_package_source 'PowerShellModules -> GoldFishBowl' do
  source_name                  "PowerShellModules"
  new_name                     "GoldFishBowl"
  trusted                      true
  user                         "user@domain.io"
  password                     "some_secret_password"
  action                       :set
end

Отключение источника пакетов:

powershell_package_source 'PowerShellModules' do
  source_name                  "PowerShellModules"
  action                       :unregister
end

ресурс powershell_script

страница ресурса powershell_script

Используйте ресурс powershell_script для выполнения скрипта с помощью интерпретатора Windows PowerShell, так же как и ресурсы bash, csh, perl, python и ruby, основанные на скриптах. powershell_script специфичен для платформы Microsoft Windows, но может использовать как интерпретатор Windows PowerShell, так и интерпретатор PowerShell Core (pwsh) начиная с Chef Infra Client 16.6 и выше.

Ресурс powershell_script создаёт и выполняет временный файл вместо непосредственного выполнения команды. Команды, выполняемые с помощью этого ресурса, по своей природе не идемпотентны, так как они обычно уникальны для среды, в которой они выполняются. Используйте not_if и only_if условные выражения для защиты этого ресурса от идемпотентности.

Синтаксис


Блок ресурса powershell_script выполняет скрипт пакетной обработки с помощью интерпретатора Windows PowerShell. Например, запись в интерполированном пути:

powershell_script 'write-to-interpolated-path' do
  code <<-EOH
  $stream = [System.IO.StreamWriter] "#{Chef::Config[:file_cache_path]}/powershell-test.txt"
  $stream.WriteLine("In #{Chef::Config[:file_cache_path]}...word.")
  $stream.close()
  EOH
end

Полный синтаксис всех свойств, доступных для ресурса powershell_script:

powershell_script 'name' do
  code                        String
  command                     String, Array # default value: 'name' unless specified
  convert_boolean_return      true, false # default value: false
  creates                     String
  cwd                         String
  domain                      String
  elevated                    true, false # default value: false
  environment                 Hash
  flags                       String
  group                       String, Integer
  input                       String
  interpreter                 String # default value: "powershell"
  live_stream                 true, false # default value: false
  password                    String
  returns                     Integer, Array # default value: 0
  timeout                     Integer, String, Float # default value: 3600
  user                        String, Integer
  action                      Symbol # defaults to :run if not specified
end

где:

  • powershell_script — это ресурс.
  • name — это имя, заданное для блока ресурса.
  • action определяет действия, которые Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • code, command, convert_boolean_return, creates, cwd, domain, elevated, environment, flags, group, input, interpreter, live_stream, password, returns, timeout и user — доступные для этого ресурса свойства.

Действия


Ресурс powershell_script имеет следующие действия:

:nothing
Этот блок ресурса не действует, пока не будет уведомлен другим ресурсом о принятии действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:run
По умолчанию. Выполнить скрипт.

Свойства


Ресурс powershell_script имеет следующие свойства:

architecture
Тип в Ruby: Символ

Архитектура процесса, под управлением которого выполняется скрипт. Если значение не указано, Chef Infra Client использует правильное значение для архитектуры, определённое Ohai. Возникает исключение, если для 32-битного процесса указано что-либо кроме :i386. Возможные значения: :i386 (для 32-битных процессов) и :x86_64 (для 64-битных процессов).

code
Тип в Ruby: Строка | REQUIRED

Скопированная строка кода для выполнения.

command
Тип в Ruby: Строка, Массив | Значение по умолчанию: The resource block's name

Необязательное свойство для установки команды для выполнения, если она отличается от имени блока ресурса.

convert_boolean_return
Тип в Ruby: true, false | Значение по умолчанию: false

Возвращает 0, если последняя строка команды оценивается как true, или возвращает 1, если последняя строка оценивается как false.

Когда общее атрибут guard_interpreter устанавливается в :powershell_script, строковая команда будет оцениваться так, как будто это значение было установлено в true. Это связано с тем, что поведение этого атрибута похоже на значение выражения "$?", общее в интерпретаторах UNIX. Например, это:

powershell_script 'make_safe_backup' do
  guard_interpreter :powershell_script
  code 'cp ~/data/nodes.json ~/data/nodes.bak'
  not_if 'test-path ~/data/nodes.bak'
end

аналогично:

bash 'make_safe_backup' do
  code 'cp ~/data/nodes.json ~/data/nodes.bak'
  not_if 'test -e ~/data/nodes.bak'
end
creates
Тип в Ruby: Строка

Запретить команде создавать файл, если такой файл уже существует.

cwd
Тип в Ruby: Строка

Текущий рабочий каталог, из которого будет выполняться команда.

domain
Тип в Ruby: Строка

Домен имени пользователя, указанного в свойстве user. Если не указан, имя пользователя и пароль, указанные в свойствах user и password, будут использоваться для разрешения этого пользователя в домене, к которому подключена система, выполняющая Chef Infra Client, или, если система не подключена к домену, она будет разрешать пользователя как локальную учётную запись на этой системе. Альтернативный способ указать домен — оставить это свойство неопределённым и указать домен в свойстве user.

Введено в Chef Client 12.21

elevated
Тип Ruby: true, false | Значение по умолчанию: false

Определяет, будет ли сценарий выполняться с повышенными привилегиями для обхода контроля доступа пользователя (UAC) от взаимодействия, блокирующего процесс. Это заставит процесс выполняться под сеансом пакетного входа, а не интерактивного входа. Пользователю, выполняющему chef-client, необходимы разрешения «Замена маркера уровня процесса» и «Настройка квот памяти для процесса». Пользователю, выполняющему команду, необходимо разрешение «Вход в систему как пакетная работа». Поскольку это требует входа в систему, обязательны свойства user и password.

Новое в Chef Client 13.3

environment
Тип Ruby: Hash

Хэш переменных среды в формате ({'ENV_VARIABLE' => 'VALUE'}). Примечание: эти переменные должны существовать для успешного выполнения команды.

flags
Тип Ruby: Строка

Строка, передаваемая в команду Windows PowerShell. Значение по умолчанию (Windows PowerShell 3.0+): -NoLogo, -NonInteractive, -NoProfile, -ExecutionPolicy Bypass, -InputFormat None.

group
Тип Ruby: Строка, Целое число

Имя или идентификатор группы, который должен быть изменён перед выполнением команды.

guard_interpreter
Тип Ruby: Символ | Значение по умолчанию: :powershell_script

Когда это свойство установлено в :powershell_script, для оценки строковых значений свойств not_if и only_if будет использоваться 64-битная версия оболочки Windows PowerShell. Установите это значение в :default, чтобы использовать 32-битную версию оболочки cmd.exe.

input
Тип Ruby: Строка

Необязательное свойство для установки входных данных, отправляемых в команду как STDIN.

Новое в Chef Infra Client 16.2

interpreter
Тип Ruby: Строка | Значение по умолчанию: powershell Разрешённые значения: "powershell", "pwsh"

Тип интерпретатора, powershell или pwsh (PowerShell Core)

live_stream
Тип Ruby: true, false | Значение по умолчанию: false

Отправлять вывод команды, запущенной этим блоком ресурса execute, в поток событий Chef Infra Client.

password
Тип Ruby: Строка

Пароль пользователя, указанного в свойстве user. Это свойство является обязательным, если user указано в Windows и может быть указано только если указано user. Свойство sensitive для этого ресурса будет автоматически установлено в true, если указан пароль.

Новое в Chef Client 12.21

returns
Тип Ruby: Целое число, Массив | Значение по умолчанию: 0

Возвращаемое значение для команды. Это может быть массив допустимых значений. При несоответствии возвращаемого значения(ий) возникает исключение.

timeout
Тип Ruby: Целое число, Строка, Число с плавающей точкой | Значение по умолчанию: 3600

Время ожидания команды в секундах перед истечением времени.

user
Тип Ruby: Строка, Целое число

Имя пользователя идентификатора пользователя, с которым следует запустить новый процесс. Имя пользователя необязательно может быть указано с доменом, например, domain\user или user@my.dns.domain.com в формате Universal Principal Name (UPN). Его также можно указать без домена просто как user, если вместо этого домен указан в свойстве domain. Только в Windows, если это свойство указано, должно быть указано свойство password.


Общие функциональные возможности ресурса


Ресурсы 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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса powershell_script в рецептах:

Запись в интерполированный путь

powershell_script 'write-to-interpolated-path' do
  code <<-EOH
  $stream = [System.IO.StreamWriter] "#{Chef::Config[:file_cache_path]}/powershell-test.txt"
  $stream.WriteLine("In #{Chef::Config[:file_cache_path]}...word.")
  $stream.close()
  EOH
end

Изменение рабочей директории

powershell_script 'cwd-then-write' do
  cwd Chef::Config[:file_cache_path]
  code <<-EOH
  $stream = [System.IO.StreamWriter] "C:/powershell-test2.txt"
  $pwd = pwd
  $stream.WriteLine("This is the contents of: $pwd")
  $dirs = dir
  foreach ($dir in $dirs) {
    $stream.WriteLine($dir.fullname)
  }
  $stream.close()
  EOH
end

Изменение рабочей директории в Microsoft Windows

powershell_script 'cwd-to-win-env-var' do
  cwd '%TEMP%'
  code <<-EOH
  $stream = [System.IO.StreamWriter] "./temp-write-from-chef.txt"
  $stream.WriteLine("chef on windows rox yo!")
  $stream.close()
  EOH
end

Передача переменной окружения скрипту

powershell_script 'read-env-var' do
  cwd Chef::Config[:file_cache_path]
  environment ({'foo' => 'BAZ'})
  code <<-EOH
  $stream = [System.IO.StreamWriter] "./test-read-env-var.txt"
  $stream.WriteLine("FOO is $env:foo")
  $stream.close()
  EOH
end

Оценивание на истинность и/или ложность

Используйте атрибут convert_boolean_return, чтобы генерировать исключение при выполнении определенных условий. Например, следующие фрагменты будут выполнены без ошибок:

powershell_script 'false' do
  code '$false'
end

и:

powershell_script 'true' do
  code '$true'
end

в то время как следующие приведут к генерации исключения:

powershell_script 'false' do
  convert_boolean_return true
  code '$false'
end

Использование атрибута флагов

powershell_script 'Install IIS' do
  code <<-EOH
  Import-Module ServerManager
  Add-WindowsFeature Web-Server
  EOH
  flags '-NoLogo, -NonInteractive, -NoProfile, -ExecutionPolicy Unrestricted, -InputFormat None, -File'
  guard_interpreter :powershell_script
  not_if '(Get-WindowsFeature -Name Web-Server).Installed'
end

Переименование компьютера, присоединение к домену, перезагрузка

Следующий пример демонстрирует, как переименовать компьютер, присоединиться к домену и перезагрузить компьютер:

reboot 'Restart Computer' do
  action :nothing
end

powershell_script 'Rename and Join Domain' do
  code <<-EOH
    ...your rename and domain join logic here...
  EOH
  not_if <<-EOH
    $ComputerSystem = gwmi win32_computersystem
    ($ComputerSystem.Name -like '#{node['some_attribute_that_has_the_new_name']}') -and
      $ComputerSystem.partofdomain)
  EOH
  notifies :reboot_now, 'reboot[Restart Computer]', :immediately
end

где:

  • Ресурс блока powershell_script переименовывает компьютер и присоединяет его к домену
  • Ресурс reboot перезапускает компьютер
  • Защита not_if предотвращает выполнение скрипта Windows PowerShell, когда настройки в защите not_if соответствуют желаемому состоянию
  • Выражение notifies сообщает блоку ресурса reboot о необходимости выполнения, если блок powershell_script был выполнен во время выполнения Chef Infra Client

Выполнение команды от имени другого пользователя

Примечание: При запуске Chef в качестве службы, эта функция требует, чтобы пользователь, от имени которого запускается Chef, обладал правом «SeAssignPrimaryTokenPrivilege» (также известным как «SE_ASSIGNPRIMARYTOKEN_NAME»). По умолчанию, только LocalSystem и NetworkService имеют это право при запуске в качестве службы. Это необходимо даже если пользователь является администратором.

Это право может быть добавлено и проверено в рецепте, используя этот пример:

# Add 'SeAssignPrimaryTokenPrivilege' for the user
Chef::ReservedNames::Win32::Security.add_account_right('<user>', 'SeAssignPrimaryTokenPrivilege')

# Check if the user has 'SeAssignPrimaryTokenPrivilege' rights
Chef::ReservedNames::Win32::Security.get_account_right('<user>').include?('SeAssignPrimaryTokenPrivilege')

Следующий пример показывает, как выполнить mkdir test_dir из выполнения Chef Infra Client от имени другого пользователя.

# Passing only username and password
powershell_script 'mkdir test_dir' do
 code "mkdir test_dir"
 cwd Chef::Config[:file_cache_path]
 user "username"
 password "password"
end

# Passing username and domain
powershell_script 'mkdir test_dir' do
 code "mkdir test_dir"
 cwd Chef::Config[:file_cache_path]
 domain "domain"
 user "username"
 password "password"
end

# Passing username = 'domain-name\\username'. No domain is passed
powershell_script 'mkdir test_dir' do
 code "mkdir test_dir"
 cwd Chef::Config[:file_cache_path]
 user "domain-name\\username"
 password "password"
end

# Passing username = 'username@domain-name'. No domain is passed
powershell_script 'mkdir test_dir' do
 code "mkdir test_dir"
 cwd Chef::Config[:file_cache_path]
 user "username@domain-name"
 password "password"
end

# Work around User Access Control (UAC)
powershell_script 'mkdir test_dir' do
 code "mkdir test_dir"
 cwd Chef::Config[:file_cache_path]
 user "username"
 password "password"
 elevated true
end

ресурс python

страница ресурса python

Используйте ресурс python для выполнения скриптов с помощью интерпретатора Python. Этот ресурс также может использовать любые действия и свойства, доступные ресурсу execute. Команды, выполняемые с этим ресурсом, по своей природе не идемпотентны, так как они, как правило, уникальны для среды, в которой они выполняются. Используйте not_if и only_if для защиты этого ресурса от идемпотентности.

Синтаксис


Ресурс python имеет следующий синтаксис:

python 'hello world' do
  code <<-EOH
    print "Hello world! From Chef and Python."
  EOH
end

где:

  • code указывает команду для выполнения

Полный синтаксис всех свойств, доступных для ресурса python:

python 'name' do
  code             String
  command          String # default value: 'name' unless specified
  creates          String
  cwd              String
  default_env      true, false # default value: false
  domain           String
  elevated         true, false # default value: false
  environment      Hash
  flags            String
  group            String, Integer
  interpreter      String
  live_stream      true, false # default value: false
  password         String
  returns          Integer, Array # default value: 0
  sensitive        true, false # default value: "True if the password property is set. False otherwise."
  timeout          Integer, Float
  umask            String, Integer
  user             String, Integer
  action           Symbol # defaults to :run if not specified
end

где:

  • python — ресурс.
  • name — имя, заданное для блока ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет, чтобы привести узел в желаемое состояние.
  • code, command, creates, cwd, default_env, domain, elevated, environment, flags, group, interpreter, live_stream, password, returns, timeout и user — доступные для этого ресурса свойства.

Действия


Ресурс python имеет следующие действия:

:nothing
Этот блок ресурса не действует, пока не будет уведомлен другим ресурсом о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:run
По умолчанию. Выполняет скрипт.

Свойства


Ресурс python имеет следующие свойства:

code
Тип Ruby: Строка | REQUIRED

Скопированная (" “) строка кода для выполнения.

creates
Тип Ruby: Строка

Предотвращает создание команды файла, если такой файл уже существует.

cwd
Тип Ruby: Строка

Текущий рабочий каталог, из которого будет выполняться команда.

environment
Тип Ruby: Хэш

Хэш переменных среды в формате ({'ENV_VARIABLE' => 'VALUE'}). Примечание: Эти переменные должны существовать для успешного выполнения команды.

flags
Тип Ruby: Строка

Один или несколько флагов командной строки, передаваемых интерпретатору при вызове команды.

group
Тип Ruby: Строка, Целое число

Имя группы или идентификатор группы, которые должны быть изменены перед выполнением команды.

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
returns
Тип Ruby: Целое число, Массив | Значение по умолчанию: 0

Возвращаемое значение для команды. Это может быть массив допустимых значений. Исключение генерируется, когда возвращаемое(ые) значение(я) не совпадают.

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: Целое число, Строка, Число с плавающей точкой | Значение по умолчанию: 3600

Время ожидания команды в секундах перед таймаутом.

umask
Тип Ruby: Строка, Целое число

Маска создания режима файла или umask.

user
Тип Ruby: Строка, Целое число

Имя пользователя идентификатора пользователя, с которым будет запущен новый процесс. Имя пользователя можно необязательно указать с доменом, например domain\user или user@my.dns.domain.com в формате Universal Principal Name (UPN). Его также можно указать без домена, просто как user, если вместо этого домен указан с помощью свойства domain. Только на Windows, если это свойство указано, свойство password также должно быть указано.


Общие функциональные возможности ресурса


Ресурсы Chef включают общие свойства, уведомления и защиты ресурсов.

Защиты

Свойство защиты может быть использовано для оценки состояния узла во время фазы выполнения 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.

Примеры


У этого ресурса нет примеров.

ресурс перезагрузки

страница ресурса перезагрузки

Используйте ресурс reboot для перезагрузки узла, необходимый шаг при некоторых установках на определенных платформах. Этот ресурс поддерживается для использования на платформах Microsoft Windows, macOS и Linux. При использовании этого ресурса через уведомления важно использовать только немедленные уведомления. Отложенные уведомления приводят к неинтуитивным и, вероятно, нежелательным результатам.

Новое в Chef Infra Client 12.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса reboot:

reboot 'name' do
  delay_mins      Integer # default value: 0
  reason          String # default value: "Reboot by Chef Infra Client"
  action          Symbol # defaults to :nothing if not specified
end

где:

  • reboot - это ресурс.
  • name - это имя, данное блоку ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет, чтобы привести узел в желаемое состояние.
  • delay_mins и reason - доступные свойства этого ресурса.

Действия


Ресурс reboot имеет следующие действия:

:cancel
Отменить запрос на перезагрузку.
:nothing
Этот блок ресурса не действует, если не уведомлен другим ресурсом о действии. После уведомления этот блок ресурса либо выполняется немедленно, либо ставится в очередь для выполнения в конце выполнения Chef Infra Client.
:reboot_now
Перезагрузить узел, чтобы Chef Infra Client мог продолжить процесс установки.
:request_reboot
Перезагрузить узел в конце выполнения Chef Infra Client.

Свойства


Ресурс reboot имеет следующие свойства:

delay_mins
Тип Ruby: Целое число | Значение по умолчанию: 0

Количество времени (в минутах) для задержки запроса на перезагрузку.

reason
Тип Ruby: Строка | Значение по умолчанию: Reboot by Chef Infra Client

Строка, описывающая действие перезагрузки.


Общие функции ресурса


Ресурсы 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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса reboot в рецептах:

Немедленная перезагрузка узла

reboot 'now' do
  action :nothing
  reason 'Cannot continue Chef run without a reboot.'
  delay_mins 2
end

execute 'foo' do
  command '...'
  notifies :reboot_now, 'reboot[now]', :immediately
end

Перезагрузка узла в конце выполнения Chef Infra Client

reboot 'app_requires_reboot' do
  action :request_reboot
  reason 'Need to reboot when the run completes successfully.'
  delay_mins 5
end

Отмена перезагрузки

reboot 'cancel_reboot_request' do
  action :cancel
  reason 'Cancel a previous end-of-run reboot request.'
end

ресурс registry_key

страница ресурса registry_key

Используйте ресурс registry_key для создания и удаления ключей реестра в Microsoft Windows.

Примечание

64-разрядные версии Microsoft Windows имеют в реестре 32-разрядный слой совместимости, который отражает и перенаправляет определённые ключи (и их значения) в определённые места (или логические представления) ветви реестра.

Клиент Chef Infra может получить доступ к любому отражённому или перенаправленному ключу реестра. Архитектура компьютера, на котором работает клиент Chef Infra, используется в качестве значения по умолчанию (не перенаправленного) расположения. Доступ к расположению SysWow64 должен быть указан для перенаправления. Как правило, это необходимо только для обеспечения совместимости с 32-разрядными приложениями, работающими на 64-разрядной операционной системе.

Дополнительную информацию см. на странице: Registry Reflection.

Синтаксис


Блок ресурса registry_key создаёт и удаляет ключи реестра в Microsoft Windows:

registry_key 'HKEY_LOCAL_MACHINE\\...\\System' do
  values [{
    name: 'NewRegistryKeyValue',
    type: :multi_string,
    data: %w(foo bar baz),
  }]
  action :create
end

Используйте несколько записей ключей реестра со значениями, основанными на атрибутах узла:

registry_key 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\name_of_registry_key' do
  values [{name: 'key_name', type: :string, data: 'C:\Windows\System32\file_name.bmp'},
          {name: 'key_name', type: :string, data: node['node_name']['attribute']['value']},
          {name: 'key_name', type: :string, data: node['node_name']['attribute']['value']}
         ]
  action :create
end

Ресурс registry_key имеет следующий синтаксис:

registry_key 'name' do
  architecture      Symbol # default value: :machine
  key               String # default value: 'name' unless specified
  recursive         true, false # default value: false
  values
  action            Symbol # defaults to :create if not specified
end

где:

  • registry_key — это ресурс
  • name — имя блока ресурса
  • values — хэш, содержащий по меньшей мере один ключ реестра для создания или удаления. Каждый ключ реестра в хэше группируется в скобки, в которых указаны name:, type: и data: значения для этого ключа реестра.
  • type: представляет доступные значения для ключей реестра в Microsoft Windows. Используйте :binary для REG_BINARY, :string для REG_SZ, :multi_string для REG_MULTI_SZ, :expand_string для REG_EXPAND_SZ, :dword для REG_DWORD, :dword_big_endian для REG_DWORD_BIG_ENDIAN или :qword для REG_QWORD.

    Предупреждение

    :multi_string должен быть массивом, даже если есть только одна строка.
  • action определяет действия, которые клиент Chef Infra выполнит для перевода узла в нужное состояние
  • architecture, key, recursive и values — это свойства данного ресурса с показанным типом Ruby. См. раздел «Свойства» ниже, чтобы узнать больше о всех свойствах, которые можно использовать с этим ресурсом.

Разделители путей ключей реестра

Ключ реестра Microsoft Windows может использоваться в виде строки в коде Ruby, например, когда ключ реестра используется в качестве имени рецепта. В Ruby, когда ключ реестра заключён в двойные кавычки (" "), тот же символ обратного слэша (\), используемый для определения разделителя пути ключа реестра, также используется в Ruby для определения символа экранирования. Поэтому разделители путей ключей реестра должны быть экранированы, когда они заключены в двойные кавычки. Например, следующий ключ реестра:

HKCU\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Themes

может быть заключён в одинарные кавычки с одним обратным слэшем:

'HKCU\SOFTWARE\path\to\key\Themes'

или может быть заключён в двойные кавычки с дополнительным обратным слэшем в качестве символа экранирования:

"HKCU\\SOFTWARE\\path\\to\\key\\Themes"

Методы языка Chef Infra

Шесть методов присутствуют в языке Chef Infra, чтобы помочь проверить реестр во время выполнения клиента Chef Infra на платформе Microsoft Windows — registry_data_exists?, registry_get_subkeys, registry_get_values, registry_has_subkeys?, registry_key_exists? и registry_value_exists? — эти вспомогательные функции гарантируют идемпотентность ресурса powershell_script.
registry_data_exists?

Используйте метод registry_data_exists?, чтобы узнать, содержит ли ключ реестра Microsoft Windows указанные данные указанного типа под значением.

Примечание

Этот метод может использоваться в рецептах и внутри блоков not_if и only_if в ресурсах. Этот метод не предназначен для создания или изменения ключа реестра. Если ключ реестра нужно изменить, используйте ресурс registry_key.

Синтаксис метода registry_data_exists? следующий:

registry_data_exists?(
  KEY_PATH,
  { name: 'NAME', type: TYPE, data: DATA },
  ARCHITECTURE
)

где:

  • KEY_PATH — путь к значению ключа реестра. Путь должен включать ветвь реестра, которую можно указать либо полным именем, либо сокращённым 3- или 4-буквенным обозначением. Например, и HKLM\SECURITY, и HKEY_LOCAL_MACHINE\SECURITY являются допустимыми и эквивалентными. Следующие ветви допустимы: HKEY_LOCAL_MACHINE, HKLM, HKEY_CURRENT_CONFIG, HKCC, HKEY_CLASSES_ROOT, HKCR, HKEY_USERS, HKU, HKEY_CURRENT_USER и HKCU.
  • { name: 'NAME', type: TYPE, data: DATA } — хэш, содержащий ожидаемое имя, тип и данные значения ключа реестра
  • type: представляет доступные значения для ключей реестра в Microsoft Windows. Используйте :binary для REG_BINARY, :string для REG_SZ, :multi_string для REG_MULTI_SZ, :expand_string для REG_EXPAND_SZ, :dword для REG_DWORD, :dword_big_endian для REG_DWORD_BIG_ENDIAN или :qword для REG_QWORD.
  • ARCHITECTURE — одно из следующих значений: :x86_64, :i386 или :machine. Установите в значение :i386, чтобы читать или писать 32-битные ключи реестра на 64-битных машинах, работающих под управлением Microsoft Windows. Установите в :x86_64, чтобы принудительно записать в 64-битное местоположение реестра, однако клиент Chef Infra возвращает исключение, если :x86_64 используется на 32-битной машине. Установите в :machine, чтобы позволить клиенту Chef Infra использовать соответствующее расположение ключа на основе архитектуры вашего узла. Значение по умолчанию: :machine.

Этот метод вернёт true или false.

registry_get_subkeys

Используйте метод registry_get_subkeys, чтобы получить список значений ключей реестра, присутствующих для ключа реестра Microsoft Windows.

Примечание

Этот метод может использоваться в рецептах и внутри блоков not_if и only_if в ресурсах. Этот метод не предназначен для создания или изменения ключа реестра. Если ключ реестра нужно изменить, используйте ресурс registry_key.

Синтаксис метода registry_get_subkeys следующий:

subkey_array = registry_get_subkeys(KEY_PATH, ARCHITECTURE)

где:

  • KEY_PATH — путь к ключу реестра. Путь должен включать ветвь реестра, которую можно указать либо полным именем, либо сокращённым 3- или 4-буквенным обозначением. Например, и HKLM\SECURITY, и HKEY_LOCAL_MACHINE\SECURITY являются допустимыми и эквивалентными. Следующие ветви допустимы: HKEY_LOCAL_MACHINE, HKLM, HKEY_CURRENT_CONFIG, HKCC, HKEY_CLASSES_ROOT, HKCR, HKEY_USERS, HKU, HKEY_CURRENT_USER и HKCU.
  • ARCHITECTURE — одно из следующих значений: :x86_64, :i386 или :machine. Установите в :i386, чтобы читать или писать 32-битные ключи реестра на 64-битных машинах, работающих под управлением Microsoft Windows. Установите в :x86_64, чтобы принудительно записать в 64-битное местоположение реестра, однако клиент Chef Infra возвращает исключение, если :x86_64 используется на 32-битной машине. Установите в :machine, чтобы позволить клиенту Chef Infra использовать соответствующее расположение ключа на основе архитектуры вашего узла. Значение по умолчанию: :machine.

Это возвращает массив значений ключей реестра.

registry_get_values

Используйте метод registry_get_values, чтобы получить значения ключей реестра (имя, тип и данные) для ключа реестра Microsoft Windows.

Примечание

Этот метод может использоваться в рецептах и внутри блоков not_if и only_if в ресурсах. Этот метод не предназначен для создания или изменения ключа реестра. Если ключ реестра нужно изменить, используйте ресурс registry_key.

Синтаксис метода registry_get_values следующий:

subkey_array = registry_get_values(KEY_PATH, ARCHITECTURE)

где:

  • KEY_PATH — путь к ключу реестра. Путь должен включать ветвь реестра, которую можно указать либо полным именем, либо сокращённым 3- или 4-буквенным обозначением. Например, и HKLM\SECURITY, и HKEY_LOCAL_MACHINE\SECURITY являются допустимыми и эквивалентными. Следующие ветви допустимы: HKEY_LOCAL_MACHINE, HKLM, HKEY_CURRENT_CONFIG, HKCC, HKEY_CLASSES_ROOT, HKCR, HKEY_USERS, HKU, HKEY_CURRENT_USER и HKCU.
  • ARCHITECTURE — одно из следующих значений: :x86_64, :i386 или :machine. Установите в :i386, чтобы читать или писать 32-битные ключи реестра на 64-битных машинах, работающих под управлением Microsoft Windows. Установите в :x86_64, чтобы принудительно записать в 64-битное местоположение реестра, однако клиент Chef Infra возвращает исключение, если :x86_64 используется на 32-битной машине. Установите в :machine, чтобы позволить клиенту Chef Infra использовать соответствующее расположение ключа на основе архитектуры вашего узла. Значение по умолчанию: :machine.

Это возвращает массив значений ключей реестра.

registry_has_subkeys?

Используйте метод registry_has_subkeys?, чтобы узнать, содержит ли ключ реестра Microsoft Windows одно (или несколько) значение(й).

Примечание

Этот метод можно использовать в рецептах и внутри блоков not_if и only_if в ресурсах. Данный метод не предназначен для создания или изменения ключа реестра. Если требуется изменить ключ реестра, используйте ресурс registry_key.

Синтаксис метода registry_has_subkeys? следующий:

registry_has_subkeys?(KEY_PATH, ARCHITECTURE)

где:

  • KEY_PATH — путь к ключу реестра. Путь должен включать раздел реестра, который можно указать либо полным именем, либо сокращением из 3 или 4 букв. Например, и HKLM\SECURITY, и HKEY_LOCAL_MACHINE\SECURITY являются допустимыми и эквивалентными значениями. Допустимые разделы реестра: HKEY_LOCAL_MACHINE, HKLM, HKEY_CURRENT_CONFIG, HKCC, HKEY_CLASSES_ROOT, HKCR, HKEY_USERS, HKU, HKEY_CURRENT_USER и HKCU.
  • ARCHITECTURE — одно из следующих значений: :x86_64, :i386 или :machine. Установите значение :i386 для чтения или записи 32-разрядных ключей реестра на 64-разрядных машинах под управлением Microsoft Windows. Установите значение :x86_64, чтобы принудительно записать в 64-разрядное расположение реестра, однако Chef Infra Client возвращает исключение, если :x86_64 используется на 32-разрядной машине. Установите значение :machine, чтобы позволить Chef Infra Client использовать соответствующее расположение ключа на основе архитектуры узла. Значение по умолчанию: :machine.

Этот метод вернёт true или false.

registry_key_exists?

Используйте метод registry_key_exists?, чтобы определить, существует ли ключ реестра Microsoft Windows по указанному пути.

Примечание

Этот метод можно использовать в рецептах и внутри блоков not_if и only_if в ресурсах. Данный метод не предназначен для создания или изменения ключа реестра. Если требуется изменить ключ реестра, используйте ресурс registry_key.

Синтаксис метода registry_key_exists? следующий:

registry_key_exists?(KEY_PATH, ARCHITECTURE)

где:

  • KEY_PATH — путь к ключу реестра. Путь должен включать раздел реестра, который можно указать либо полным именем, либо сокращением из 3 или 4 букв. Например, и HKLM\SECURITY, и HKEY_LOCAL_MACHINE\SECURITY являются допустимыми и эквивалентными значениями. Допустимые разделы реестра: HKEY_LOCAL_MACHINE, HKLM, HKEY_CURRENT_CONFIG, HKCC, HKEY_CLASSES_ROOT, HKCR, HKEY_USERS, HKU, HKEY_CURRENT_USER и HKCU.
  • ARCHITECTURE — одно из следующих значений: :x86_64, :i386 или :machine. Установите значение :i386 для чтения или записи 32-разрядных ключей реестра на 64-разрядных машинах под управлением Microsoft Windows. Установите значение :x86_64, чтобы принудительно записать в 64-разрядное расположение реестра, однако Chef Infra Client возвращает исключение, если :x86_64 используется на 32-разрядной машине. Установите значение :machine, чтобы позволить Chef Infra Client использовать соответствующее расположение ключа на основе архитектуры узла. Значение по умолчанию: :machine.

Этот метод вернёт true или false. (Любые значения ключа реестра, связанные с этим ключом реестра, игнорируются.)

registry_value_exists?

Используйте метод registry_value_exists?, чтобы определить, существует ли значение ключа реестра. Используйте registry_data_exists? для проверки типа и данных значения ключа реестра.

Примечание

Этот метод можно использовать в рецептах и внутри блоков not_if и only_if в ресурсах. Данный метод не предназначен для создания или изменения ключа реестра. Если требуется изменить ключ реестра, используйте ресурс registry_key.

Синтаксис метода registry_dvalue_exists? следующий:

registry_value_exists?(
  KEY_PATH,
  { name: 'NAME' },
  ARCHITECTURE
)

где:

  • KEY_PATH — путь к ключу реестра. Путь должен включать раздел реестра, который можно указать либо полным именем, либо сокращением из 3 или 4 букв. Например, и HKLM\SECURITY, и HKEY_LOCAL_MACHINE\SECURITY являются допустимыми и эквивалентными значениями. Допустимые разделы реестра: HKEY_LOCAL_MACHINE, HKLM, HKEY_CURRENT_CONFIG, HKCC, HKEY_CLASSES_ROOT, HKCR, HKEY_USERS, HKU, HKEY_CURRENT_USER и HKCU.
  • { name: 'NAME' } — хэш, содержащий имя значения ключа реестра; если в хэше указаны type: или :value, они игнорируются
  • type: представляет доступные значения для ключей реестра в Microsoft Windows. Используйте :binary для REG_BINARY, :string для REG_SZ, :multi_string для REG_MULTI_SZ, :expand_string для REG_EXPAND_SZ, :dword для REG_DWORD, :dword_big_endian для REG_DWORD_BIG_ENDIAN или :qword для REG_QWORD.
  • ARCHITECTURE — одно из следующих значений: :x86_64, :i386 или :machine. Установите значение :i386 для чтения или записи 32-разрядных ключей реестра на 64-разрядных машинах под управлением Microsoft Windows. Установите значение :x86_64, чтобы принудительно записать в 64-разрядное расположение реестра, однако Chef Infra Client возвращает исключение, если :x86_64 используется на 32-разрядной машине. Установите значение :machine, чтобы позволить Chef Infra Client использовать соответствующее расположение ключа на основе архитектуры узла. Значение по умолчанию: :machine.

Этот метод вернёт true или false.

Действия


Ресурс registry_key имеет следующие действия:

:create
По умолчанию. Создает ключ реестра. Если ключ реестра уже существует (но не соответствует), обновит этот ключ реестра, чтобы он соответствовал.
:create_if_missing
Создает ключ реестра, если он не существует. Также создает значение ключа реестра, если оно не существует.
:delete
Удаляет указанные значения для ключа реестра.
:delete_key
Удаляет указанный ключ реестра и все его подключачи. Действие :delete_key с атрибутом recursive удалит ключ реестра, все его значения и все имена, типы и данные, связанные с ними. Это действие невозможно отменить с помощью Chef Infra Client.
:nothing
Этот блок ресурса не действует, пока не получит уведомление от другого ресурса о необходимости выполнения действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс registry_key имеет следующие свойства:

architecture
Тип Ruby: Символ | Значение по умолчанию: :machine Допустимые значения: :i386, :machine, :x86_64

Архитектура узла, для которого создаются или удаляются ключи. Возможные значения: :i386 (для узлов с 32-разрядным реестром), :x86_64 (для узлов с 64-разрядным реестром) и :machine (чтобы Chef Infra Client определял архитектуру во время выполнения Chef Infra Client).

Для чтения или записи 32-разрядных ключей реестра на 64-разрядных машинах под управлением Microsoft Windows свойство architecture должно быть установлено в значение :i386. Значение :x86_64 может использоваться для принудительной записи в 64-разрядное расположение реестра, но это значение менее полезно, чем значение по умолчанию (:machine), поскольку Chef Infra Client возвращает исключение, если :x86_64 используется, а машина оказывается 32-разрядной (в то время как с :machine Chef Infra Client может получить доступ к ключу реестра на 32-разрядной машине).

key
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Путь к расположению, в котором будет создан ключ реестра или из которого ключ реестра будет удален. Значение по умолчанию: name блока ресурса. См. раздел «Синтаксис» выше для получения дополнительной информации. Путь должен включать раздел реестра, который можно указать либо полным именем, либо сокращением из 3 или 4 букв. Например, и HKLM\SECURITY, и HKEY_LOCAL_MACHINE\SECURITY являются допустимыми и эквивалентными значениями. Допустимые разделы реестра: HKEY_LOCAL_MACHINE, HKLM, HKEY_CURRENT_CONFIG, HKCC, HKEY_CLASSES_ROOT, HKCR, HKEY_USERS, HKU, HKEY_CURRENT_USER и HKCU.

recursive
Тип Ruby: true, false | Значение по умолчанию: false

При создании ключа это значение указывает, что требуемые ключи для указанного пути должны быть созданы. При использовании действия :delete_key в рецепте, и если ключ реестра имеет подключачи, то установите значение этого свойства в true. Действие :delete_key с атрибутом recursive удалит ключ реестра, все его значения и все имена, типы и данные, связанные с ними. Это действие невозможно отменить с помощью Chef Infra Client.

values
Тип Ruby: Хэш, массив

Массив хэшей, где каждый хэш содержит значения, которые должны быть установлены в ключе реестра. Каждый хэш должен содержать name:, type: и data: (и не должен содержать других значений ключей).

type: представляет доступные значения для ключей реестра в Microsoft Windows. Используйте :binary для REG_BINARY, :string для REG_SZ, :multi_string для REG_MULTI_SZ, :expand_string для REG_EXPAND_SZ, :dword для REG_DWORD, :dword_big_endian для REG_DWORD_BIG_ENDIAN или :qword для REG_QWORD.

Предупреждение

:multi_string должен быть массивом, даже если есть только одна строка.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса registry_key в рецептах:

Создание ключа реестра

Использование строки в двойных кавычках:

registry_key "HKEY_LOCAL_MACHINE\\path-to-key\\Policies\\System" do
  values [{
    name: 'EnableLUA',
    type: :dword,
    data: 0
  }]
  action :create
end

или в одинарных кавычках:

registry_key 'HKEY_LOCAL_MACHINE\path-to-key\Policies\System' do
  values [{
    name: 'EnableLUA',
    type: :dword,
    data: 0
  }]
  action :create
end

Удаление значения ключа реестра

Использование строки в двойных кавычках:

registry_key "HKEY_LOCAL_MACHINE\\SOFTWARE\\path\\to\\key\\AU" do
  values [{
    name: 'NoAutoRebootWithLoggedOnUsers',
    type: :dword,
    data: ''
    }]
  action :delete
end

или в одинарных кавычках:

registry_key 'HKEY_LOCAL_MACHINE\SOFTWARE\path\to\key\AU' do
  values [{
    name: 'NoAutoRebootWithLoggedOnUsers',
    type: :dword,
    data: ''
    }]
  action :delete
end

Примечание

Если data: не указан, вы получите ошибку: Missing data key in RegistryKey values hash

Удаление ключа реестра и его подключа, рекурсивно

Использование строки в двойных кавычках:

registry_key "HKCU\\SOFTWARE\\Policies\\path\\to\\key\\Themes" do
  recursive true
  action :delete_key
end

или в одинарных кавычках:

registry_key 'HKCU\SOFTWARE\Policies\path\to\key\Themes' do
  recursive true
  action :delete_key
end

Примечание

Будьте осторожны при использовании действия :delete_key с атрибутом recursive. Это удалит ключ реестра, все его значения и все имена, типы и данные, связанные с ними. Это действие невозможно отменить с помощью Chef Infra Client.

Использование перенаправленных ключей

В 64-битных версиях Microsoft Windows, HKEY_LOCAL_MACHINE\SOFTWARE\Example является перенаправленным ключом. В следующих примерах, так как HKEY_LOCAL_MACHINE\SOFTWARE\Example является 32-битным ключом, вывод будет «Найден 32-битный ключ», если они будут выполнены на 64-битной версии Microsoft Windows:

registry_key "HKEY_LOCAL_MACHINE\\SOFTWARE\\Example" do
  architecture :i386
  recursive true
  action :create
end

или:

registry_key "HKEY_LOCAL_MACHINE\\SOFTWARE\\Example" do
  architecture :x86_64
  recursive true
  action :delete_key
end

или:

ruby_block 'check 32-bit' do
  block do
    puts 'Found 32-bit key'
  end
  only_if {
    registry_key_exists?("HKEY_LOCAL_MACHINE\SOFTWARE\\Example",
    :i386)
  }
end

или:

ruby_block 'check 64-bit' do
  block do
    puts 'Found 64-bit key'
  end
  only_if {
    registry_key_exists?("HKEY_LOCAL_MACHINE\\SOFTWARE\\Example",
    :x86_64)
  }
end

Установка параметров прокси, совпадающих с теми, которые использует Chef Infra Client

Использование строки в двойных кавычках:

proxy = URI.parse(Chef::Config[:http_proxy])
registry_key 'HKCU\Software\Microsoft\path\to\key\Internet Settings' do
  values [{name: 'ProxyEnable', type: :reg_dword, data: 1},
          {name: 'ProxyServer', data: "#{proxy.host}:#{proxy.port}"},
          {name: 'ProxyOverride', type: :reg_string, data: <local>},
         ]
  action :create
end

или в одинарных кавычках:

proxy = URI.parse(Chef::Config[:http_proxy])
registry_key 'HKCU\Software\Microsoft\path\to\key\Internet Settings' do
  values [{name: 'ProxyEnable', type: :reg_dword, data: 1},
          {name: 'ProxyServer', data: "#{proxy.host}:#{proxy.port}"},
          {name: 'ProxyOverride', type: :reg_string, data: <local>},
         ]
  action :create
end

Установка имени ключа реестра в “(Default)”

Использование строки в двойных кавычках:

registry_key 'Set (Default) value' do
  key "HKLM\\Software\\Test\\Key\\Path"
  values [
    {name: '', type: :string, data: 'test'},
  ]
  action :create
end

или в одинарных кавычках:

registry_key 'Set (Default) value' do
  key 'HKLM\Software\Test\Key\Path'
  values [
    {name: '', type: :string, data: 'test'},
  ]
  action :create
end

где name: '' содержит пустую строку, которая установит имя ключа реестра в (Default).

ресурс remote_directory

страница ресурса remote_directory

Используйте ресурс remote_directory для поэтапной передачи директории из кулинарной книги на узел. Директория, копируемая из кулинарной книги, должна располагаться в COOKBOOK_NAME/files/default/REMOTE_DIRECTORY. Ресурс remote_directory будет учитывать специфику файлов.

Синтаксис


Блок ресурса remote_directory передает директорию из кулинарной книги на узел, а затем назначает необходимые разрешения на эту директорию. Например:

remote_directory '/etc/apache2' do
  source 'apache2'
  owner 'root'
  group 'root'
  mode '0755'
  action :create
end

где:

  • '/etc/apache2' указывает директорию
  • source указывает директорию в текущей кулинарной книге (используйте свойство cookbook для указания файла в другой кулинарной книге)
  • owner, group и mode определяют разрешения

Полный синтаксис всех свойств, доступных для ресурса remote_directory, выглядит так:

remote_directory 'name' do
  cookbook                   String
  files_backup               Integer, false # default value: 5
  files_group                String, Integer
  files_mode                 String, Integer # default value: 0644 on *nix systems
  files_owner                String, Integer
  group                      String, Integer
  inherits                   true, false
  mode                       String, Integer
  overwrite                  true, false # default value: true
  owner                      String, Integer
  path                       String # default value: 'name' unless specified
  purge                      true, false
  recursive                  true, false
  rights                     Hash
  source                     String
  action                     Symbol # defaults to :create if not specified
end

где:

  • remote_directory — это ресурс.
  • name — имя, заданное для блока ресурса.
  • action определяет действия, которые Chef Infra Client предпримет, чтобы привести узел в нужное состояние.
  • cookbook, files_backup, files_group, files_mode, files_owner, group, mode, overwrite, owner, path, purge, recursive и source — доступные свойства этого ресурса.

Действия


Ресурс remote_directory имеет следующие действия:

:create
По умолчанию. Создает директорию и/или содержимое этой директории. Если директория или ее содержимое уже существует (но не совпадает), обновляет эту директорию или ее содержимое, чтобы оно соответствовало заданному.
:create_if_missing
Создает директорию и/или содержимое этой директории, только если она не существует.
:delete
Удаляет директорию, включая содержимое этой директории.
:nothing
Этот блок ресурса не выполняет действий, пока другой ресурс не уведомит его о необходимости выполнить действие. После уведомления этот блок ресурса либо выполняется немедленно, либо ставится в очередь для выполнения в конце запуска Chef Infra Client.

Свойства


Ресурс remote_directory имеет следующие свойства:

cookbook
Тип Ruby: Строка

Кулинарная книга, в которой находится файл (если он не находится в текущей кулинарной книге). Значение по умолчанию — текущая кулинарная книга.

files_backup
Тип Ruby: Целое число, ложь | Значение по умолчанию: 5

Количество резервных копий файлов в директории.

files_group
Тип Ruby: Строка, Целое число

Настройка разрешений группы для файлов. Строка или идентификатор, определяющий владельца группы по имени группы, включая полные имена групп, такие как domain\group или group@domain. Если это значение не указано, существующие группы остаются без изменений, а новые назначения групп используют стандартную группу POSIX (если она доступна).

files_mode
Тип Ruby: Строка, Целое число | Значение по умолчанию: 0644 on *nix systems

Восьмеричный режим файла.

UNIX- и Linux-системы: Строка в кавычках из 3-5 символов, определяющая восьмеричный режим, передаваемый в chmod. Например: '755', '0755' или 00755. Если значение задано в кавычках, оно работает так же, как если бы была передана команда chmod. Если значение задано как целое число, добавьте ноль (0) к значению, чтобы убедиться, что оно интерпретируется как восьмеричное число. Например, чтобы назначить права на чтение, запись и выполнение для всех пользователей, используйте '0777' или '777'; для тех же прав плюс разряд "sticky" используйте 01777 или '1777'.

Microsoft Windows: Строка в кавычках из 3-5 символов, определяющая восьмеричный режим, преобразуемый в права безопасности Microsoft Windows. Например: '755', '0755' или 00755. Разрешены значения до '0777' (без разряда "sticky"), и они имеют то же значение в Microsoft Windows, что и в UNIX, где 4 равно GENERIC_READ, 2 равно GENERIC_WRITE, а 1 равно GENERIC_EXECUTE. Это свойство не может использоваться для установки :full_control. Это свойство не оказывает влияния, если не указано, но когда оно и rights оба указаны, эффекты суммируются.

files_owner
Тип Ruby: Строка, Целое число

Настройка разрешений владельца для файлов. Строка или идентификатор, определяющий владельца по имени пользователя, включая полные имена пользователей, такие как domain\user или user@domain. Если это значение не указано, существующие владельцы остаются без изменений, а новые назначения владельцев используют текущего пользователя (при необходимости).

group
Тип Ruby: Целое число, Строка

Используйте для настройки разрешений для директорий. Строка или идентификатор, определяющий владельца группы по имени группы или SID, включая полные имена групп, такие как domain\group или group@domain. Если это значение не указано, существующие группы остаются без изменений, а новые назначения групп используют стандартную группу POSIX (если она доступна).

inherits
Тип Ruby: истина, ложь | Значение по умолчанию: true

Только Microsoft Windows. Наследует ли файл права от родительской директории.

mode
Тип в Ruby: Целое число, строка

Определённая в виде строки 3-5 символов строка, задающая восьмеричный режим. Например: '755', '0755' или 00755. Если mode не указано, и если директория уже существует, используется существующий режим директории. Если mode не указано, директории не существует, и указано действие :create, Chef Infra Client предполагает значение маски '0777', а затем применяет значение mask с учётом umask для системы, в которой директория должна быть создана. Например, если umask в системе - '022', Chef Infra Client использует значение по умолчанию '0755'.

Поведение отличается в зависимости от платформы.

Системы на базе UNIX и Linux: Строка 3-5 символов, определенная в виде строки, которая задает восьмеричный режим, передаваемый команде chmod. Например: '755', '0755' или 00755. Если значение задано как строка в кавычках, оно работает точно так же, как если бы была передана команда chmod. Если значение задано как целое число, добавьте ноль (0) к значению, чтобы убедиться, что оно интерпретируется как восьмеричное число. Например, чтобы назначить права на чтение, запись и выполнение для всех пользователей, используйте '0777' или '777'; для тех же прав плюс бит sticky используйте 01777 или '1777'.

Microsoft Windows: Строка 3-5 символов в кавычках, определяющая восьмеричный режим, который преобразуется в права для безопасности Microsoft Windows. Например: '755', '0755' или 00755. Разрешены значения до '0777' (без бита sticky), которые означают то же самое в Microsoft Windows, что и в UNIX, где 4 равно GENERIC_READ, 2 равно GENERIC_WRITE, а 1 равно GENERIC_EXECUTE. Это свойство нельзя использовать для установки :full_control. Это свойство не имеет эффекта, если не указано, но когда оно и rights указаны оба, эффекты суммируются.

overwrite
Тип в Ruby: true, false | Значение по умолчанию: true

Перезаписывать файл при его отличии.

owner
Тип в Ruby: Целое число, строка

Используется для настройки разрешений для директорий. Строка или идентификатор, определяющий владельца группы по имени пользователя или SID, включая полные имена пользователей, такие как domain\user или user@domain. Если это значение не указано, существующие владельцы остаются неизменными, а новые назначения владельцев используют текущего пользователя (при необходимости).

path
Тип в Ruby: Строка | Значение по умолчанию: The resource block's name

Путь к директории. Рекомендуется использовать полный путь, но это не всегда необходимо. Значение по умолчанию: name блока ресурса. Смотрите раздел «Синтаксис» выше для получения дополнительной информации.

purge
Тип в Ruby: true, false | Значение по умолчанию: false

Удаление лишних файлов, найденных в целевой директории.

recursive
Тип в Ruby: true, false | Значение по умолчанию: true

Рекурсивное создание или удаление директорий. Chef Infra Client должен уметь создавать структуру директорий, включая родительские директории (если они отсутствуют), как определено в COOKBOOK_NAME/files/default/REMOTE_DIRECTORY.

rights
Тип в Ruby: Целое число, строка

Только Microsoft Windows. Разрешения для пользователей и групп в среде Microsoft Windows. Например: rights <permissions>, <principal>, <options>, где <permissions> задаёт права, предоставленные субъекту, <principal> — имя группы или пользователя, а <options> — словарь с одним (или несколькими) расширенными параметрами прав.

source
Тип в Ruby: Строка | Значение по умолчанию: The base portion of the 'path' property.

Основное имя исходного файла (и выведено из свойства path). Например, в значении по умолчанию `/some/path/` будет `path`.

Рекурсивные директории

Ресурс remote_directory может использоваться для рекурсивного создания пути за пределами удалённых структур директорий, но разрешения этих внешних путей не управляются. Это связано с тем, что атрибут recursive применяет только значения атрибутов group, mode и owner к самой удалённой директории и любым внутренним директориям, которые копирует ресурс.

Структура директорий:

/foo
  /bar
    /baz

Следующий пример показывает способ создания файла в директории /baz:

remote_directory '/foo/bar/baz' do
  owner 'root'
  group 'root'
  mode '0755'
  action :create
end

Но в этом примере значения атрибутов group, mode и owner будут применены только к /baz. Что нормально, если это то, что вам нужно. Но в большинстве случаев, когда вся структура директорий /foo/bar/baz отсутствует, необходимо явно указывать каждую директорию. Например:

%w( /foo /foo/bar /foo/bar/baz ).each do |path|
  remote_directory path do
    owner 'root'
    group 'root'
    mode '0755'
  end
end

Этот подход создаст правильную иерархию — /foo, затем /bar в /foo, а затем /baz в /bar — а также с правильными значениями атрибутов для group, mode и owner.


Общие функции ресурса


Ресурсы 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. Основываясь на результатах этой оценки, свойство охранника затем используется для указания Клиенту 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.

Рекурсивные каталоги

Ресурс remote_directory может использоваться для рекурсивного создания пути вне структур удаленных каталогов, но права доступа к этим внешним путям не управляются. Это связано с тем, что атрибут recursive применяется только group, mode и owner значения атрибутов к самому удаленному каталогу и любым внутренним каталогам, которые копирует ресурс.

Структура каталогов:

/foo
  /bar
    /baz

Следующий пример демонстрирует способ создания файла в каталоге /baz:

remote_directory '/foo/bar/baz' do
  owner 'root'
  group 'root'
  mode '0755'
  action :create
end

Но в этом примере значения атрибутов group, mode и owner будут применяться только к /baz. Что хорошо, если это то, что вам нужно. Но чаще всего, когда вся структура каталога /foo/bar/baz отсутствует, вы должны быть явными относительно каждого каталога. Например:

%w( /foo /foo/bar /foo/bar/baz ).each do |path|
  remote_directory path do
    owner 'root'
    group 'root'
    mode '0755'
  end
end

Этот подход создаст правильную иерархию—/foo, затем /bar в /foo, а затем /baz в /bar—а также с правильными значениями атрибутов для group, mode и owner.

Пример

Этот раздел содержит более подробный пример того, как Клиент Chef Infra управляет рекурсивными структурами каталогов:

  • Кулинарная книга с именем cumbria, которая используется для создания веб-сайта
  • Подпапка в каталоге /files/default с именем /website
  • Файл с именем index.html, который является главной страницей веб-сайта
  • Каталоги в /website с именами /cities, /places и /football, которые содержат страницы о городах, местах и футбольным командам
  • Каталог с именем /images, который содержит изображения

Эти файлы размещаются в каталоге /files/default в кулинарной книге cumbria, как показано ниже:

cumbria
  /files
    /default
      /website
        index.html
        /cities
          carisle.html
          kendal.html
          penrith.html
          windermere.html
        /football
          carisle_united.html
        /images
          carisle_united.png
          furness_abbey.png
          hadrians_wall.png
          kendal.png
        /places
          furness_abbey.html
          hadrians_wall.html

Ресурс remote_directory может использоваться для создания веб-сайта, используя эти файлы. Этот веб-сайт работает на веб-сервере Apache. Ресурс будет похож на следующий:

remote_directory '/var/www/html' do
  files_mode '0440'
  files_owner 'yan'
  mode '0770'
  owner 'hamilton'
  source 'website'
end

При запуске Клиента Chef Infra ресурс remote_directory сообщит Клиенту Chef Infra о копировании древовидной структуры каталогов из кулинарной книги в файловую систему, используя структуру, определенную в кулинарной книге:

/var
  /www
    /html
      index.html
      /cities
        carisle.html
        kendal.html
        penrith.html
        windermere.html
      /football
        carisle_united.html
      /images
        carisle_united.png
        furness_abbey.png
        hadrians_wall.png
        kendal.png
      /places
        furness_abbey.html
        hadrians_wall.html

Клиент Chef Infra будет управлять правами всей древовидной структуры каталогов под /html, в общей сложности 12 файлов и 4 каталога. Например:

dr-xr-xr-x 2 root     root 4096 /var/www/html
dr--r----- 1 yan      root 4096 /var/www/html/index.html
drwxrwx--- 2 hamilton root 4096 /var/www/html/cities
dr--r----- 1 yan      root 4096 /var/www/html/cities/carlisle.html
dr--r----- 1 yan      root 4096 /var/www/html/cities/kendal.html
dr--r----- 1 yan      root 4096 /var/www/html/cities/penrith.html
dr--r----- 1 yan      root 4096 /var/www/html/cities/windermere.html
drwxrwx--- 2 hamilton root 4096 /var/www/html/football
dr--r----- 1 yan      root 4096 /var/www/html/football/carlisle_united.html
drwxrwx--- 2 hamilton root 4096 /var/www/html/images
dr--r----- 1 yan      root 4096 /var/www/html/images/carlisle_united/png
dr--r----- 1 yan      root 4096 /var/www/html/images/furness_abbey/png
dr--r----- 1 yan      root 4096 /var/www/html/images/hadrians_wall.png
dr--r----- 1 yan      root 4096 /var/www/html/images/kendal.png
drwxrwx--- 2 hamilton root 4096 /var/www/html/places
dr--r----- 1 yan      root 4096 /var/www/html/places/furness_abbey.html
dr--r----- 1 yan      root 4096 /var/www/html/places/hadrians_wall.html

Безопасность файлов Windows

Для поддержки безопасности Microsoft Windows ресурсы template, file, remote_file, cookbook_file, directory и remote_directory поддерживают использование наследования и списков управления доступом (ACL) в рецептах. Списки управления доступом (ACL)

Свойство rights может использоваться в рецепте для управления списками управления доступом (ACL), которые позволяют предоставлять разрешения множеству пользователей и групп. Свойство rights можно использовать любое количество раз; Клиент Chef Infra применит их к файлу или каталогу по мере необходимости. Синтаксис свойства 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 не нужно знать, является ли субъект пользователем или группой.

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 не очистит права на файл или каталог, если права не указаны.
  • Изменение унаследованных прав может быть ресурсоемким. 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, применять (или не применять) унаследованные права от родительского каталога.

Например, следующий пример указывает права для каталога:

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 установит его по умолчанию как true, что гарантирует, что настройки безопасности существующих файлов останутся неизменными.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса remote_directory в рецептах:

Рекурсивно передача каталога из удаленного расположения

# create up to 10 backups of the files
# set the files owner different from the directory
remote_directory '/tmp/remote_something' do
  source 'something'
  files_backup 10
  files_owner 'root'
  files_group 'root'
  files_mode '0644'
  owner 'nobody'
  group 'nobody'
  mode '0755'
end

Использование с ресурсом chef_handler

В следующем примере показано, как использовать ресурс remote_directory и ресурс chef_handler для перезагрузки обработчика с именем WindowsRebootHandler:

# the following code sample comes from the
# ``reboot_handler`` recipe in the ``windows`` cookbook:
# https://github.com/chef-cookbooks/windows

remote_directory node['chef_handler']['handler_path'] do
  source 'handlers'
  recursive true
  action :create
end

chef_handler 'WindowsRebootHandler' do
  source "#{node['chef_handler']['handler_path']}/windows_reboot_handler.rb"
  arguments node['windows']['allow_pending_reboots']
  supports :report => true, :exception => false
  action :enable
end

Ресурс remote_file

Страница ресурса remote_file

Используйте ресурс remote_file для передачи файла из удалённого расположения с использованием специфичности файла. Этот ресурс похож на ресурс file.

Примечание

Загрузка файлов из каталога files/ в кулинарной книге должна выполняться с помощью ресурса cookbook_file.

Синтаксис


Блок ресурса remote_file управляет файлами, используя файлы, которые существуют удалённо. Например, чтобы записать домашнюю страницу для веб-сайта Apache:

remote_file '/var/www/customers/public_html/index.html' do
  source 'http://somesite.com/index.html'
  owner 'web_admin'
  group 'web_admin'
  mode '0755'
  action :create
end

где:

  • '/var/www/customers/public_html/index.html' — путь к файлу, который нужно создать
  • 'http://somesite.com/index.html' — указывает расположение удалённого файла, откуда скачивается файл
  • owner, group и mode определяют разрешения

Полный синтаксис для всех свойств, доступных для ресурса remote_file, выглядит следующим образом:

remote_file 'name' do
  atomic_update              true, false
  authentication             # default value: remote
  backup                     Integer, false # default value: 5
  checksum                   String
  content                    String, nil
  force_unlink               true, false # default value: false
  ftp_active_mode            true, false # default value: false
  group                      String, Integer
  headers                    Hash
  inherits                   true, false
  manage_symlink_source      true, false
  mode                       String, Integer
  notifies                   # see description
  owner                      String, Integer
  path                       String # defaults to 'name' if not specified
  rights                     Hash
  source                     String, Array
  subscribes                 # see description
  use_conditional_get        true, false
  verify                     String, Block
  remote_domain              String
  remote_password            String
  remote_user                String
  show_progress              true, false # default value: false
  use_etag                   true, false # default value: true
  use_last_modified          true, false # default value: true
  sensitive                  true, false # default value: false
  verifications              Array
  action                     Symbol # defaults to :create if not specified
end

где:

  • remote_file — ресурс.
  • name — имя, заданное для блока ресурса.
  • action — определяет шаги, которые Chef Infra Client предпримет, чтобы привести узел в желаемое состояние.
  • atomic_update, authentication, backup, checksum, content, force_unlink, ftp_active_mode, group, headers, http_options, manage_symlink_source, mode, owner, path, remote_domain, remote_password, remote_user, show_progress, ssl_verify_mode, use_etag и use_last_modified — доступные свойства этого ресурса.

Действия


Ресурс remote_file имеет следующие действия:

:create
По умолчанию. Создаёт файл. Если файл уже существует (но не соответствует), обновляет этот файл, чтобы он соответствовал.
:create_if_missing
Создаёт файл только в том случае, если файла не существует. Если файл существует, ничего не происходит.
:delete
Удаляет файл.
:nothing
Этот блок ресурса не действует, пока другой ресурс не уведомит его о действии. После уведомления этот блок ресурса либо выполняется немедленно, либо добавляется в очередь для выполнения в конце выполнения Chef Infra Client.
:touch
Создаёт файл. Это обновляет время доступа (atime) и время изменения файла (mtime) для файла. (Это действие может быть использовано с этим ресурсом, но обычно используется только с ресурсом file.)

Свойства


Ресурс remote_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.

authentication
Тип Ruby: Символ | Значение по умолчанию: :remote Разрешённые значения: :local, :remote
backup
Тип Ruby: Целое число, false | Значение по умолчанию: 5

Количество резервных копий, которые нужно сохранить в /var/chef/backup (для платформ на основе UNIX и Linux) или в C:/chef/backup (для платформы Microsoft Windows). Установите в значение false, чтобы предотвратить сохранение резервных копий.

checksum
Тип Ruby: Строка

Необязательно, см. use_conditional_get. Контрольная сумма SHA-256 файла. Используется для предотвращения повторного скачивания файла. Когда локальный файл соответствует контрольной сумме, Chef Infra Client не загружает его.

force_unlink
Тип Ruby: true, false | Значение по умолчанию: false

Как Chef Infra Client обрабатывает определённые ситуации, когда целевой файл оказывается не файлом. Например, когда целевой файл фактически является символической ссылкой. Установите в значение true, чтобы Chef Infra Client удалил целевой файл, который не является файлом, и заменил его указанным файлом. Установите в значение false, чтобы Chef Infra Client выдал ошибку.

ftp_active_mode
Тип Ruby: true, false | Значение по умолчанию: false

Использует ли Chef Infra Client активный или пассивный FTP. Установите в значение true для использования активного FTP.

group
Тип Ruby: Целое число, Строка

Строка или идентификатор, определяющий владельца группы по имени группы или SID, включая полные имена групп, такие как domain\group или group@domain. Если это значение не указано, существующие группы останутся неизменными, а новые назначения групп используют группу по умолчанию POSIX (если доступна).

headers
Тип Ruby: Хэш | Значение по умолчанию: {}

Хэш пользовательских заголовков. Например:

headers({ "Cookie" => "user=user_name; pass=p@ssw0rd!" })

или:

headers({ "Referer" => "#{header}" })

или:

headers( "Authorization"=>"Basic #{ Base64.encode64("#{username}:#{password}").gsub("\n", "") }" )
inherits
Тип Ruby: true, false | Значение по умолчанию: true

Только для Microsoft Windows. Наследует ли файл права от родительского каталога.

http_options
Тип Ruby: Хэш | Значение по умолчанию: {}

Хэш пользовательских параметров HTTP. Например: http_options({ http_retry_count: 0, http_retry_delay: 2 })

Новое в Chef Infra Client 17.5

manage_symlink_source
Тип Ruby: true, false | Значение по умолчанию: true

(с предупреждением)

Изменение поведения ресурса файла, если он указывает на символическую ссылку. Когда это значение установлено в true, Chef Infra Client будет управлять разрешениями символической ссылки или заменит символическую ссылку обычным файлом, если ресурс имеет содержимое. Когда это значение установлено в false, Chef Infra Client будет следовать символической ссылке и будет управлять разрешениями и содержимым целевого файла символической ссылки.

Поведение по умолчанию — true, но выдаётся предупреждение о том, что значение по умолчанию будет изменено на false в будущей версии; явное установка этого значения в true или false подавляет это предупреждение.

mode
Тип Ruby: Целое число, Строка

Цитируемая строка из 3-5 символов, которая определяет восьмеричный режим. Например: '755', '0755' или 00755. Если 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'; для тех же прав плюс бит «sticky» используйте 01777 или '1777'.

Microsoft Windows: Цитируемая строка из 3-5 символов, определяющая восьмеричный режим, который преобразуется в права для безопасности Microsoft Windows. Например: '755', '0755' или 00755. Разрешены значения до '0777' (без битов «sticky») и имеют то же значение в Microsoft Windows, что и в UNIX, где 4 равно GENERIC_READ, 2 равно GENERIC_WRITE и 1 равно GENERIC_EXECUTE. Это свойство нельзя использовать для установки :full_control. Это свойство не имеет эффекта, если не указано, но когда оно и rights оба указаны, их эффекты суммируются.

owner
Тип Ruby: Целое число, Строка

Строка или идентификатор, определяющий владельца группы по имени пользователя или SID, включая полные имена пользователей, такие как domain\user или user@domain. Если это значение не указано, существующие владельцы останутся неизменными, а новые назначения владельцев используют текущего пользователя (при необходимости).

path
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Полный путь к файлу, включая имя файла и его расширение. Значение по умолчанию: name блока ресурса. См. раздел «Синтаксис» выше для получения дополнительной информации.

remote_domain
Тип Ruby: Строка

Только Windows Домен пользователя, указанный свойством remote_user. По умолчанию ресурс будет аутентифицироваться по домену удалённой системы или как локальный учётная запись, если удалённая система не присоединена к домену. Если удалённая система не входит в домен, необходимо аутентифицироваться как локальный пользователь на удалённой системе, установив домен на ., например: remote_domain ‘.’. Домен также может быть указан как часть свойства remote_user.

Новое в Chef Client 13.4

remote_password
Тип Ruby: Строка

Только Windows Пароль пользователя, указанного свойством remote_user. Это свойство обязательно, если указано remote_user, и может быть указано только, если указано remote_user. Свойство sensitive для этого ресурса будет автоматически установлено на true, если указано remote_password.

Новое в Chef Client 13.4

remote_user
Тип Ruby: Строка

Только Windows Имя пользователя с доступом к удалённому файлу, указанному свойством source. Имя пользователя может быть необязательно указано с доменом, например: domain\user или user@my.dns.domain.com в формате Universal Principal Name (UPN). Домен также может быть задан с помощью свойства remote_domain. Обратите внимание, что это свойство игнорируется, если source не является UNC-путь. Если это свойство указано, требуется свойство remote_password.

Новое в Chef Client 13.4

rights
Тип Ruby: Целое число, строка

Только Microsoft Windows. Разрешения для пользователей и групп в среде Microsoft Windows. Например: rights <permissions>, <principal>, <options>, где <permissions> определяет предоставленные права принципалу, <principal> — имя группы или пользователя, а <options> — словарь с одним (или несколькими) расширенными параметрами прав.

source
Тип Ruby: Строка, массив

Обязательно. Местоположение исходного файла. Местоположение исходного файла может быть HTTP (http://), FTP (ftp://), SFTP (sftp://), локальным (file:///) или UNC (\\host\share\file.tar.gz).

Есть много способов определить расположение исходного файла. Используя путь:

source 'http://couchdb.apache.org/img/sketch.png'

Используя FTP:

source 'ftp://remote_host/path/to/img/sketch.png'

Используя SFTP:

source 'sftp://username:password@remote_host:22/path/to/img/sketch.png'

Используя локальный путь:

source 'file:///path/to/img/sketch.png'

Используя Microsoft Windows UNC:

source '\\\\path\\to\\img\\sketch.png'

Используя атрибут узла:

source node['nginx']['foo123']['url']

Используя атрибуты для определения путей:

source "#{node['python']['url']}/#{version}/Python-#{version}.tar.bz2"

Определяя несколько путей для нескольких расположений:

source 'http://seapower/spring.png', 'http://seapower/has_sprung.png'

Определяя те же несколько путей в виде массива:

source ['http://seapower/spring.png', 'http://seapower/has_sprung.png']

Когда указано несколько путей, Chef Infra Client будет пытаться загрузить файлы в указанном порядке, остановившись после первой успешной загрузки.

use_conditional_get
Тип Ruby: true, false | Значение по умолчанию: true

Включить условные HTTP-запросы с помощью условного GET (с заголовком If-Modified-Since) или неявного идентификатора (ETag). Чтобы использовать заголовки If-Modified-Since, use_last_modified также должно быть установлено на true. Чтобы использовать заголовки ETag, use_etag также должно быть установлено на true.

show_progress
Тип Ruby: true, false | Значение по умолчанию: false

Отображает процесс загрузки файла.

ssl_verify_mode
Тип Ruby: Символ Допустимые значения: :verify_none, :verify_peer

Необязательное свойство для переопределения политики SSL. Если не указано, используется политика SSL из config.rb.

Новое в Chef Infra Client 16.2

use_etag
Тип Ruby: true, false | Значение по умолчанию: true

Включить заголовки ETag. Установите на false, чтобы отключить заголовки ETag. Чтобы использовать это значение, use_conditional_get также должно быть установлено на true.

use_last_modified
Тип Ruby: true, false | Значение по умолчанию: true

Включить заголовки If-Modified-Since. Установите на false, чтобы отключить заголовки If-Modified-Since. Чтобы использовать это значение, use_conditional_get также должно быть установлено на true.

verify
Тип Ruby: Строка, Блок

Блок или строка, которая возвращает true или false. Строка, когда true выполняется как системная команда.

Блок — произвольный код Ruby, определённый в блоке ресурса с помощью свойства verify. Когда блок true, Chef Infra Client будет продолжать обновлять файл как необходимо.

Например, это должно вернуть true:

remote_file '/tmp/baz' do
  verify { 1 == 1 }
end

Это должно вернуть true:

remote_file '/etc/nginx.conf' do
  verify 'nginx -t -c %{path}'
end

Это должно вернуть true:

remote_file '/tmp/bar' do
  verify { 1 == 1}
end

А это должно вернуть true:

remote_file '/tmp/foo' do
  verify do |path|
    true
  end
end

В то время как это должно вернуть false:

remote_file '/tmp/turtle' do
  verify '/usr/bin/false'
end

Если строка или блок возвращают false, выполнение Chef Infra Client остановится и будет возвращено сообщение об ошибке.

Атомарные обновления файлов

Атомарные обновления используются с ресурсами на основе файлов, чтобы гарантировать возможность обновления файлов при обновлении бинарных файлов или при недостатке места на диске.

Атомарные обновления включены по умолчанию. Их можно управлять глобально с помощью настройки 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 создаст файлы таким образом, чтобы наследование списков управления доступом (ACL) работало как ожидается.

Безопасность файлов 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 fields.

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 string constants. 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, что гарантирует, что настройки безопасности существующих файлов останутся неизменными.

Предотвращение повторных загрузок

Чтобы предотвратить повторную загрузку файлов, которые уже присутствуют на узле, используйте один из следующих атрибутов в рецепте: use_conditional_get (по умолчанию) или checksum.

  • Атрибут use_conditional_get представляет собой поведение по умолчанию Chef Infra Client. Если удалённый файл находится на сервере, поддерживающем заголовки ETag и/или If-Modified-Since, Chef Infra Client будет использовать условную GET для определения, был ли файл обновлён. Если файл был обновлён, Chef Infra Client перезагрузит файл.
  • Атрибут checksum попросит Chef Infra Client сравнить контрольную сумму локального файла с контрольной суммой на удалённом расположении. Если они совпадают, Chef Infra Client не перезагрузит файл. Использование локальной контрольной суммы для сравнения требует, чтобы локальная контрольная сумма была правильной.

Желаемый подход зависит от желаемого рабочего процесса. Например, если узел требует нового файла каждый день, использование подхода с контрольной суммой потребует, чтобы локальная контрольная сумма также обновлялась и/или проверялась каждый день, чтобы убедиться, что локальная контрольная сумма правильная. Использование условной GET в этом сценарии значительно упростит управление, необходимое для обеспечения точного обновления файлов.

Доступ к удалённому пути UNC на Windows

Ресурс remote_file на Windows поддерживает доступ к файлам из удалённой SMB/CIFS-папки. Имя файла должно быть указано в свойстве source в виде пути UNC, например \myserver\myshare\mydirectory\myfile.txt. Это позволяет получить доступ к файлу по этому пути, даже если у процесса Chef Infra Client нет прав доступа к файлу. Данные для аутентификации на удалённой системе можно указать с помощью свойств remote_user, remote_domain и remote_password, когда пользователь, под которым работает Chef Infra Client, не имеет доступа к удалённому файлу. Подробные сведения об этих параметрах см. в разделе «Свойства».

Примечание: Это в основном для доступа к удалённым файлам, когда у пользователя, под которым работает Chef Infra Client, недостаточно прав доступа, и необходимо указать альтернативные учетные данные. Если у пользователя уже есть доступ, данные для аутентификации указывать не нужно. В случае, когда локальная и удалённая системы находятся в одной домене, свойства remote_user и remote_password часто не нужно указывать, так как у пользователя может уже быть доступ к удалённой общей папке.

Примеры:

Доступ к файлу от учётной записи другого домена:

remote_file 'E:/domain_test.txt' do
  source '\\myserver\myshare\mydirectory\myfile.txt'
  remote_domain 'domain'
  remote_user 'username'
  remote_password 'password'
end

ИЛИ

remote_file 'E:/domain_test.txt' do
  source '\\myserver\myshare\mydirectory\myfile.txt'
  remote_user 'domain\username'
  remote_password 'password'
end

Доступ к файлу с помощью локальной учётной записи на удалённой машине:

remote_file 'E:/domain_test.txt' do
  source '\\myserver\myshare\mydirectory\myfile.txt'
  remote_domain '.'
  remote_user 'username'
  remote_password 'password'
end

ИЛИ

remote_file 'E:/domain_test.txt' do
  source '\\myserver\myshare\mydirectory\myfile.txt'
  remote_user '.\username'
  remote_password 'password'
end

Примеры


В следующих примерах показаны различные подходы к использованию ресурса remote_file в рецептах:

Загрузка файла без проверки контрольной суммы:

  remote_file '/tmp/remote.txt' do
    source 'https://example.org/remote.txt'
  end

Загрузка файла с контрольной суммой для проверки:

  remote_file '/tmp/test_file' do
    source 'http://www.example.com/tempfiles/test_file'
    mode '0755'
    checksum '3a7dac00b1' # A SHA256 (or portion thereof) of the file.
  end

Загрузка файла только в том случае, если он ещё не присутствует:

  remote_file '/tmp/remote.txt' do
    source 'https://example.org/remote.txt'
    checksum '3a7dac00b1' # A SHA256 (or portion thereof) of the file.
    action :create_if_missing
  end

Использование HTTP Basic аутентификации в заголовках:

  remote_file '/tmp/remote.txt' do
    source 'https://example.org/remote.txt'
    headers('Authorization' => "Basic #{Base64.encode64("USERNAME_VALUE:PASSWORD_VALUE").delete("\n")}")
    checksum '3a7dac00b1' # A SHA256 (or portion thereof) of the file.
    action :create_if_missing
  end

Загрузка файла в каталог кэша файлов Chef для выполнения:

  remote_file '#{Chef::Config['file_cache_path']}/install.sh' do
    source 'https://example.org/install.sh'
    action :create_if_missing
  end

  execute '#{Chef::Config['file_cache_path']}/install.sh'

Указание расширенных параметров подключения HTTP, включая параметры Net::HTTP (nethttp):

  remote_file '/tmp/remote.txt' do
    source 'https://example.org/remote.txt'
    http_options({
      http_retry_delay: 0,
      http_retry_count: 0,
      keepalives: false,
      nethttp: {
        continue_timeout: 5,
        max_retries: 5,
        read_timeout: 5,
        write_timeout: 5,
        ssl_timeout: 5,
      },
    })
  end

Ресурс rhsm_errata

Страница ресурса rhsm_errata

Используйте ресурс rhsm_errata для установки пакетов, связанных с заданным идентификатором Errata Red Hat Subscription Manager. Это полезно, если необходимо установить пакеты для устранения одной уязвимости на ваших хостах.

Новое в Chef Infra Client 14.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса rhsm_errata:

rhsm_errata 'name' do
  errata_id      String # default value: 'name' unless specified
  action         Symbol # defaults to :install if not specified
end

где:

  • rhsm_errata — это ресурс.
  • name — имя, данное блоку ресурса.
  • action определяет, какие действия Chef Infra Client предпримет для приведения узла в нужное состояние.
  • errata_id — свойство, доступное для этого ресурса.

Действия


Ресурс rhsm_errata имеет следующие действия:

:install
Установить пакет для определённого идентификатора errata. (по умолчанию)
:nothing
Этот блок ресурса не действует, пока не будет уведомлён другим ресурсом о действии. После получения уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс rhsm_errata имеет следующие свойства:

errata_id
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для указания идентификатора errata, если он отличается от имени блока ресурса.


Общие функциональные возможности ресурсов


Ресурсы 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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса rhsm_errata в рецептах:

Установка пакета из Errata ID

rhsm_errata 'RHSA:2018-1234'

Указание Errata ID, отличного от имени ресурса

rhsm_errata 'errata-install'
  errata_id 'RHSA:2018-1234'
end

Ресурс rhsm_errata_level

Страница ресурса rhsm_errata_level

Используйте ресурс rhsm_errata_level для установки всех пакетов указанного уровня errata из Red Hat Subscription Manager. Например, вы можете гарантировать, что все пакеты, связанные с errata, помеченными уровнем безопасности «Критический», установлены.

Новое в Chef Infra Client 14.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса rhsm_errata_level:

rhsm_errata_level 'name' do
  errata_level      String # default value: 'name' unless specified
  action            Symbol # defaults to :install if not specified
end

где:

  • rhsm_errata_level — это ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет действия, которые Chef Infra Client предпримет для приведения узла к желаемому состоянию.
  • errata_level — свойство, доступное для этого ресурса.

Действия


Ресурс rhsm_errata_level имеет следующие действия:

:install
Установить все пакеты указанного уровня errata. (по умолчанию)
:nothing
Этот блок ресурса не действует, пока не будет уведомлен другим ресурсом о необходимости действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс rhsm_errata_level имеет следующие свойства:

errata_level
Тип Ruby: Строка | Значение по умолчанию: The resource block's name Допустимые значения: "critical", "important", "low", "moderate"

Необязательное свойство для указания уровня errata пакетов для установки, если оно отличается от имени блока ресурса.


Общие функциональные возможности ресурсов


Ресурсы 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

Фильтры

Свойство guard можно использовать для оценки состояния узла во время выполнения Chef Infra Client. Основываясь на результатах этой оценки, свойство guard сообщает Chef Infra Client, следует ли продолжать выполнение ресурса. Свойство guard принимает либо строковое значение, либо значение Ruby-блока:

  • Строка выполняется как командная строка. Если команда возвращает 0, свойство guard применяется. Если команда возвращает любое другое значение, то свойство guard не применяется. Строковые guard в блоке powershell_script выполняют команды Windows PowerShell и могут возвращать true в дополнение к 0.
  • Блок выполняется как код Ruby, который должен вернуть либо true, либо false. Если блок возвращает true, свойство guard применяется. Если блок возвращает false, свойство guard не применяется.

Свойство guard полезно для обеспечения идемпотентности ресурса, позволяя этому ресурсу проверять желаемое состояние по мере его выполнения и, если желаемое состояние присутствует, не предпринимать никаких действий Chef Infra Client.

Свойства

Следующие свойства могут быть использованы для определения свойства guard, которое оценивается во время выполнения Chef Infra Client:

not_if

Препятствует выполнению ресурса, когда условие возвращает true.

only_if

Разрешает выполнение ресурса только в том случае, если условие возвращает true.

Примеры


В следующих примерах демонстрируются различные подходы к использованию ресурса rhsm_errata_level в рецептах:

Укажите уровень исправлений, отличающийся от имени ресурса

rhsm_errata_level 'example_install_moderate' do
  errata_level 'moderate'
end

Ресурс rhsm_register

Страница ресурса rhsm_register

Используйте ресурс rhsm_register для регистрации узла в Red Hat Subscription Manager или на локальном сервере Red Hat Satellite.

Новое в Chef Infra Client 14.0.

Синтаксис


Полный синтаксис всех доступных свойств ресурса rhsm_register:

rhsm_register 'name' do
  activation_key             String, Array
  auto_attach                true, false # default value: false
  base_url                   String
  environment                String
  force                      true, false # default value: false
  https_for_ca_consumer      true, false # default value: false
  install_katello_agent      true, false # default value: true
  organization               String
  password                   String
  release                    Float, String
  satellite_host             String
  server_url                 String
  service_level              String
  system_name                String
  username                   String
  action                     Symbol # defaults to :register if not specified
end

где:

  • rhsm_register — ресурс.
  • name — имя заданного блока ресурса.
  • action — определяет шаги, которые Chef Infra Client предпримет, чтобы привести узел к желаемому состоянию.
  • activation_key, auto_attach, base_url, environment, force, https_for_ca_consumer, install_katello_agent, organization, password, release, satellite_host, server_url, service_level, system_name и username — доступные свойства этого ресурса.

Действия


Ресурс rhsm_register имеет следующие действия:

:nothing
Этот блок ресурса не действует, пока не получит уведомление от другого ресурса о необходимости действия. После получения уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:register
Зарегистрировать узел в RHSM. (по умолчанию)
:unregister
Отменить регистрацию узла из RHSM.

Свойства


Ресурс rhsm_register имеет следующие свойства:

activation_key
Тип Ruby: Строка, Массив

Строка или массив ключей активации для использования при регистрации; необходимо также указать свойство ‘organization’, когда используется это свойство.

auto_attach
Тип Ruby: true, false | Значение по умолчанию: false

Если true, RHSM попытается автоматически подключить хост к соответствующим подпискам. В общем случае лучше использовать ключ активации с предварительно определёнными подписками.

base_url
Тип Ruby: Строка

Имя хоста сервера доставки контента для получения обновлений. Как Управление подписками в Центре для клиентов, так и Управление активами подписок используют размещенные службы доставки контента Red Hat, по URL-адресу https://cdn.redhat.com. Поскольку Satellite 6 размещает собственный контент, необходимо использовать URL-адрес для систем, зарегистрированных в Satellite 6.

Новое в Chef Infra Client 17.8

environment
Тип Ruby: Строка

Среда, используемая при регистрации; требуется при использовании свойств username и password.

force
Тип Ruby: true, false | Значение по умолчанию: false

Если true, система будет зарегистрирована, даже если она уже зарегистрирована. Обычно любые операции регистрации завершаются ошибкой, если машина уже зарегистрирована.

https_for_ca_consumer
Тип Ruby: true, false | Значение по умолчанию: false

Если true, Chef Infra Client получит katello-ca-consumer-latest.noarch.rpm из satellite_host с использованием HTTPS.

Новое в Chef Infra Client 15.9

install_katello_agent
Тип Ruby: true, false | Значение по умолчанию: true

Если true, будет установлен пакет ‘katello-agent’.

organization
Тип Ruby: Строка

Организация, используемая при регистрации; требуется при использовании свойства ‘activation_key’.

password
Тип Ruby: Строка

Пароль для использования при регистрации. Это свойство неприменимо при использовании ключа активации. Если задано, также требуются свойства username и environment.

release
Тип Ruby: Число с плавающей точкой, Строка

Устанавливает малую версию операционной системы для использования при подписках для системы. Продукты и обновления ограничены указанной версией малой версии. Используется только с опцией auto_attach. Например, release '6.4' добавит --release=6.4 к команде регистрации.

Новое в Chef Infra Client 17.8

satellite_host
Тип Ruby: Строка

Полное доменное имя (FQDN) хоста Satellite для регистрации. Если это свойство не задано, хост будет зарегистрирован в публичной службе RHSM Red Hat.

server_url
Тип Ruby: Строка

Имя хоста службы подписки для использования. По умолчанию используется Управление подписками в Центре для клиентов, subscription.rhn.redhat.com. Если вы не используете этот параметр, система регистрируется в Управлении подписками в Центре для клиентов.

Новое в Chef Infra Client 17.8

service_level
Тип Ruby: Строка

Устанавливает уровень службы для использования при подписках на регистрируемой машине. Используется только с опцией auto_attach.

Новое в Chef Infra Client 17.8

system_name
Тип Ruby: Строка

Имя системы для регистрации, по умолчанию — имя хоста.

Новое в Chef Infra Client 16.5

username
Тип Ruby: Строка

Имя пользователя для использования при регистрации. Это свойство неприменимо при использовании ключа активации. Если задано, также требуются свойства password и environment.


Общее функциональное назначение ресурса


Ресурсы 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[Строка]'

Ресурс может прослушивать другой ресурс и затем выполнять действие, если состояние прослушиваемого ресурса изменится. Укажите '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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса rhsm_register в рецептах:

*Регистрация узла в RHSM

rhsm_register 'my-host' do
  activation_key 'ABCD1234'
  organization 'my_org'
end

Ресурс rhsm_repo

Страница ресурса rhsm_repo

Используйте ресурс rhsm_repo для включения или отключения репозиториев Red Hat Subscription Manager, доступных через подключенные подписки.

Новое в Chef Infra Client 14.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса rhsm_repo:

rhsm_repo 'name' do
  repo_name      String # default value: 'name' unless specified
  action         Symbol # defaults to :enable if not specified
end

где:

  • rhsm_repo — это ресурс.
  • name — это имя, данное блоку ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • repo_name — это свойство, доступное для этого ресурса.

Действия


Ресурс rhsm_repo имеет следующие действия:

:disable
Отключить репозиторий RHSM.
:enable
Включить репозиторий RHSM. (По умолчанию)
:nothing
Этот блок ресурса не действует, пока не будет уведомлен другим ресурсом о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс rhsm_repo имеет следующие свойства:

repo_name
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для указания имени репозитория, если оно отличается от имени блока ресурса.


Общие функциональные возможности ресурсов


Ресурсы 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 для выполнения, и :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, следует ли ему продолжать выполнение ресурса.

  • Строка выполняется как команда оболочки. Если команда возвращает 0, применяется защита. Если команда возвращает любое другое значение, свойство защиты не применяется. Строковые защиты в powershell_script выполняют команды Windows PowerShell и могут возвращать true, помимо 0.
  • Блок выполняется как код Ruby, который должен возвращать либо true, либо false. Если блок возвращает true, свойство защиты применяется. Если блок возвращает false, свойство защиты не применяется.

Свойство защиты полезно для обеспечения идемпотентности ресурса, позволяя этому ресурсу проверять желаемое состояние во время выполнения, а затем, если желаемое состояние присутствует, Chef Infra Client ничего не делает.

Свойства

Следующие свойства могут использоваться для определения защиты, которая оценивается на стадии выполнения Chef Infra Client:

not_if

Запретить выполнение ресурса, когда условие возвращает true.

only_if

Разрешить выполнение ресурса только в том случае, если условие возвращает true.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса rhsm_repo в рецептах:

Включить репозиторий RHSM

rhsm_repo 'rhel-7-server-extras-rpms'

Выключить репозиторий RHSM

rhsm_repo 'rhel-7-server-extras-rpms' do
  action :disable
end

Ресурс rhsm_subscription

Страница ресурса rhsm_subscription

Используйте ресурс rhsm_subscription для добавления или удаления подписок Red Hat Subscription Manager на ваш хост. Это может быть необходимо, когда ключ активации хоста не подключает все необходимые подписки к вашему хосту.

Новое в Chef Infra Client 14.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса rhsm_subscription:

rhsm_subscription 'name' do
  pool_id      String # default value: 'name' unless specified
  action       Symbol # defaults to :attach if not specified
end

где:

  • rhsm_subscription — это ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет действия, которые Chef Infra Client выполнит, чтобы привести узел в желаемое состояние.
  • pool_id — свойство, доступное для данного ресурса.

Действия


Ресурс rhsm_subscription имеет следующие действия:

:attach
Подключить узел к пулу подписок. (по умолчанию)
:nothing
Этот блок ресурса не действует, пока не получит уведомление от другого ресурса для выполнения действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:remove
Удалить узел из пула подписок.

Свойства


Ресурс rhsm_subscription имеет следующие свойства:

pool_id
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для указания идентификатора пула, если он отличается от имени блока ресурса.


Общие функции ресурса


Ресурсы 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.

Примеры


Для данного ресурса нет примеров.

Ресурс route

Страница ресурса route

Используйте ресурс route для управления таблицей маршрутизации системы в среде Linux.

Синтаксис


Блок ресурса route управляет таблицей маршрутизации системы в среде Linux:

route '10.0.1.10/32' do
  gateway '10.0.0.20'
  device 'eth1'
end

Полный синтаксис всех свойств, доступных для ресурса route:

route 'name' do
  comment         String
  device          String
  gateway         String
  metric          Integer
  netmask         String
  route_type      Symbol, String # default value: :host
  target          String # default value: 'name' unless specified
  action          Symbol # defaults to :add if not specified
end

где:

  • route — это ресурс.
  • name — это имя, присвоенное блоку ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • comment, device, gateway, metric, netmask, route_type и target — доступные свойства этого ресурса.

Действия


Ресурс route имеет следующие действия:

:add
По умолчанию. Добавление маршрута.
:delete
Удаление маршрута.
:nothing
Этот блок ресурса не выполняет никаких действий, пока другой ресурс не уведомит его о необходимости выполнить действие. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс route имеет следующие свойства:

comment
Тип в Ruby: Строка

Добавление комментария к маршруту.

Новое свойство в Chef Client 14.0

device
Тип в Ruby: Строка

Сеть, к которой применяется маршрут.

gateway
Тип в Ruby: Строка

Шлюз для маршрута.

metric
Тип в Ruby: Целое число

Значение метрики маршрута.

netmask
Тип в Ruby: Строка

Десятичное представление маски сети. Например: 255.255.255.0.

route_type
Тип в Ruby: Символ, Строка | Значение по умолчанию: :host Допустимые значения: :host, :net
target
Тип в Ruby: Строка | Значение по умолчанию: The resource block's name

IP-адрес целевого маршрута.


Общие возможности ресурсов


Ресурсы 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]', действие, которое должен предпринять ресурс, а затем :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]', действие, которое должно быть выполнено, а затем :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.

Примеры


У этого ресурса нет примеров.

Ресурс rpm_package

Страница ресурса rpm_package

Используйте ресурс rpm_package для управления пакетами с помощью менеджера пакетов RPM.

Синтаксис


Полный синтаксис всех доступных свойств ресурса rpm_package:

rpm_package 'name' do
  allow_downgrade      true, false # default value: true
  options              String, Array
  package_name         String
  source               String
  timeout              String, Integer
  version              String
  action               Symbol # defaults to :install if not specified
end

где:

  • rpm_package — это ресурс.
  • name — это имя, присвоенное блоку ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • allow_downgrade, options, package_name, source, timeout и version — доступные свойства этого ресурса.

Действия


Ресурс rpm_package имеет следующие действия:

:install
По умолчанию. Установка пакета. Если указана версия, устанавливается указанная версия пакета.
:nothing
Этот блок ресурса не выполняет никаких действий, пока другой ресурс не уведомит его о необходимости выполнить действие. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:remove
Удаление пакета.
:upgrade
Установка пакета и/или обеспечение того, что пакет является последней версией.

Свойства


allow_downgrade
Тип в Ruby: true, false | Значение по умолчанию: true

Разрешить понижение версии пакета для удовлетворения запрошенных требований к версии.

options
Тип в Ruby: Строка, Массив

Один (или несколько) дополнительных параметров команды, которые передаются в команду.

package_name
Тип в Ruby: Строка

Необязательное свойство для установки имени пакета, если оно отличается от имени блока ресурсов.

source
Тип в Ruby: Строка

Необязательный путь к пакету в локальной файловой системе.

timeout
Тип в Ruby: Строка, Целое число

Время ожидания в секундах перед истечением времени.

version
Тип в Ruby: Строка

Версия пакета, который необходимо установить или обновить.


Функциональность общих ресурсов


Ресурсы Chef включают общие свойства, уведомления и средства защиты ресурсов.

Общие свойства

Следующие свойства являются общими для всех ресурсов:

compile_time

Тип в Ruby: true, false | Значение по умолчанию: false

Управление фазой, в которой ресурс выполняется на узле. Установите значение true, чтобы запустить его во время построения коллекции ресурсов (compile phase). Установите значение false, чтобы запустить его во время конфигурирования узла клиентом Chef Infra (converge phase).

ignore_failure

Тип в Ruby: true, false, :quiet | Значение по умолчанию: false

Продолжить выполнение рецепта, если ресурс завершится неудачно по любой причине. :quiet не будет отображать полный стек вызовов, и рецепт будет продолжать выполняться, если ресурс завершится неудачно.

retries

Тип в Ruby: Целое число | Значение по умолчанию: 0

Количество попыток перехватить исключения и повторить ресурс.

retry_delay

Тип в Ruby: Целое число | Значение по умолчанию: 2

Задержка в секундах между попытками повтора.

sensitive

Тип в Ruby: true, false | Значение по умолчанию: false

Обеспечить, чтобы конфиденциальные данные ресурсов не регистрировались клиентом Chef Infra.

Уведомления

notifies

Тип в Ruby: Символ, 'Chef::Resource[Строка]'

Ресурс может уведомить другой ресурс о выполнении действия при изменении его состояния. Укажите 'resource[name]', :action, которое должен выполнить ресурс, а затем :timer для этого действия. Ресурс может уведомлять более одного ресурса; используйте инструкцию notifies для каждого ресурса, который должен быть уведомлен.

Если указанный ресурс не существует, возникает ошибка. В отличие от subscribes, если исходный ресурс не найден, ошибка не будет выдана.

Таймер определяет момент во время выполнения клиента Chef Infra, когда выполняется уведомление. Доступны следующие таймеры:

:before

Определяет, что действие над уведомленным ресурсом должно быть выполнено до обработки блока ресурсов, в котором находится уведомление.

:delayed

По умолчанию. Определяет, что уведомление должно быть помещено в очередь и выполнено в конце выполнения клиента Chef Infra.

: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, когда выполняется уведомление. Доступны следующие таймеры:

: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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса rpm_package в рецептах:

Установка пакета

rpm_package 'name of package' do
  action :install
end

ресурс ruby

страница ресурса ruby

Используйте ресурс ruby для выполнения скриптов с помощью интерпретатора Ruby. Этот ресурс также может использовать любые действия и свойства, доступные ресурсу execute. Команды, выполняемые с помощью этого ресурса, по своей природе не идемпотентны, поскольку они обычно уникальны для среды, в которой они выполняются. Используйте not_if и only_if для защиты этого ресурса от идемпотентности.

Синтаксис


Блок ресурса ruby выполняет скрипты с использованием Ruby:

ruby 'hello world' do
  code <<-EOH
    puts "Hello world! From Chef and Ruby."
  EOH
end

где:

  • cwd указывает каталог, из которого выполняется команда
  • code указывает команду для выполнения

Полный синтаксис всех свойств, доступных ресурсу ruby:

ruby 'name' do
  code                       String
  creates                    String
  cwd                        String
  environment                Hash
  flags                      String
  group                      String, Integer
  path                       Array
  returns                    Integer, Array
  timeout                    Integer, Float
  user                       String, Integer
  umask                      String, Integer
  action                     Symbol # defaults to :run if not specified
end

где:

  • ruby — ресурс.
  • name — имя, заданное для блока ресурсов.
  • action — идентификатор шагов, которые выполнит клиент Chef Infra, чтобы привести узел в нужное состояние.
  • code, creates, cwd, environment, flags, group, path, returns, timeout, user и umask — свойства этого ресурса с указанным типом в Ruby. Более подробную информацию о всех свойствах, которые могут использоваться с этим ресурсом, см. в разделе «Свойства».

Действия


Ресурс ruby имеет следующие действия:

:nothing
Этот блок ресурсов не действует, пока не будет уведомлен другим ресурсом о выполнении действия. После уведомления этот блок ресурсов либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения клиента Chef Infra.
:run
По умолчанию. Выполнить скрипт.

Свойства


Ресурс ruby имеет следующие свойства:

code
Тип в Ruby: Строка

Строка кода в кавычках (" “) для выполнения.

creates
Тип в Ruby: Строка

Запретить команде создавать файл, если этот файл уже существует.

cwd
Тип в Ruby: Строка

Текущий рабочий каталог.

environment
Тип в Ruby: Хэш

Хэш переменных среды в формате ({"ENV_VARIABLE" => "VALUE"}). (Эти переменные должны существовать для успешного выполнения команды.)

flags
Тип в Ruby: Строка

Один или несколько флагов командной строки, которые передаются интерпретатору при вызове команды.

group
Тип в Ruby: Строка, Целое число

Имя или идентификатор группы, который необходимо изменить перед запуском команды.

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
returns
Тип в Ruby: Целое число, Массив | Значение по умолчанию: 0

Значение возврата команды. Это может быть массив допустимых значений. При несоответствии значения(й) возврата генерируется исключение.

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: Целое число, Вещественное число | Значение по умолчанию: 3600

Время ожидания команды (в секундах) перед завершением по таймауту.

user
Тип в Ruby: Строка, Целое число

Имя пользователя или идентификатор пользователя, который должен быть изменён перед запуском команды.

umask
Тип в Ruby: Строка, Целое число

Маска создания режима файла или umask.


Общие функциональные возможности ресурсов


Ресурсы Chef включают общие свойства, уведомления и блокирующие ресурсы.

Блокирующие ресурсы

Свойство блокировки может быть использовано для оценки состояния узла во время фазы выполнения 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.

Примеры


У этого ресурса нет примеров.

ruby_block ресурс

страница ruby_block ресурса

Используйте ресурс ruby_block для выполнения кода Ruby во время работы Chef Infra Client. Ruby-код в ресурсе ruby_block оценивается вместе с другими ресурсами во время сходимости, в то время как Ruby-код вне ресурса ruby_block оценивается до других ресурсов, поскольку рецепт компилируется.

Синтаксис


Блок ресурса ruby_block выполняет произвольный Ruby-код. Например, чтобы перезагрузить файл client.rb во время работы Chef Infra Client:

ruby_block 'reload_client_config' do
  block do
    Chef::Config.from_file("/etc/chef/client.rb")
  end
  action :run
end

Полный синтаксис всех доступных свойств ресурса ruby_block:

ruby_block 'name' do
  block                      Block
  block_name                 String # defaults to 'name' if not specified
  action                     Symbol # defaults to :run if not specified
end

где:

  • ruby_block — это ресурс.
  • name — это имя, данное блоку ресурсов.
  • block — это блок Ruby-кода, который должен быть выполнен.
  • action определяет действия Chef Infra Client для приведения узла к желаемому состоянию.
  • block и block_name — это свойства этого ресурса со своим типом в Ruby. Подробную информацию обо всех свойствах этого ресурса см. в разделе «Свойства» ниже.

Действия


Ресурс ruby_block имеет следующие действия:

:create
То же, что и :run.
:nothing
Этот блок ресурсов не действует, пока другой ресурс не уведомит его о действии. После уведомления этот блок ресурсов либо выполняется немедленно, либо помещается в очередь для выполнения в конце работы Chef Infra Client.
:run
По умолчанию. Выполнить Ruby-блок.

Свойства


Ресурс ruby_block имеет следующие свойства:

block
Тип в Ruby: Блок

Блок Ruby-кода.

block_name
Тип в Ruby: Строка | Значение по умолчанию: The resource block's name

Имя Ruby-блока. Значение по умолчанию: имя блока ресурса. Более подробную информацию см. в разделе «Синтаксис» выше.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса ruby_block в рецептах:

Перечитать данные конфигурации

ruby_block 'reload_client_config' do
  block do
    Chef::Config.from_file('/etc/chef/client.rb')
  end
  action :run
end

Выполнить блок на определённой платформе

Следующий пример показывает, как оператор if может быть использован с методом windows? в языке Chef Infra для выполнения кода, специфичного для Microsoft Windows. Код определен с помощью ресурса ruby_block:

if windows?
  ruby_block 'copy libmysql.dll into ruby path' do
    block do
      require 'fileutils'
      FileUtils.cp "#{node['mysql']['client']['lib_dir']}\\libmysql.dll",
        node['mysql']['client']['ruby_dir']
    end
    not_if { ::File.exist?("#{node['mysql']['client']['ruby_dir']}\\libmysql.dll") }
  end
end

Отложить файл в пакет данных

Следующий пример показывает, как использовать ресурс ruby_block для отложения файла BitTorrent в пакет данных, чтобы его можно было распространить на узлы в организации.

ruby_block 'share the torrent file' do
  block do
    f = File.open(node['bittorrent']['torrent'],'rb')
    #read the .torrent file and base64 encode it
    enc = Base64.encode64(f.read)
    data = {
      'id'=>bittorrent_item_id(node['bittorrent']['file']),
      'seed'=>node.ipaddress,
      'torrent'=>enc
    }
    item = Chef::DataBagItem.new
    item.data_bag('bittorrent')
    item.raw_data = data
    item.save
  end
  action :nothing
  subscribes :create, "bittorrent_torrent[#{node['bittorrent']['torrent']}]", :immediately
end

Обновить файл /etc/hosts

Следующий пример показывает, как ресурс ruby_block может использоваться для обновления файла /etc/hosts:

ruby_block 'edit etc hosts' do
  block do
    rc = Chef::Util::FileEdit.new('/etc/hosts')
    rc.search_file_replace_line(/^127\.0\.0\.1 localhost$/,
      '127.0.0.1 #{new_fqdn} #{new_hostname} localhost')
    rc.write_file
  end
end

Установить переменные среды

Следующий пример демонстрирует использование переменных внутри Ruby-блока для установки переменных среды с помощью rbenv.

node.override[:rbenv][:root] = rbenv_root
node.override[:ruby_build][:bin_path] = rbenv_binary_path

ruby_block 'initialize' do
  block do
    ENV['RBENV_ROOT'] = node[:rbenv][:root]
    ENV['PATH'] = "#{node[:rbenv][:root]}/bin:#{node[:ruby_build][:bin_path]}:#{ENV['PATH']}"
  end
end

Вызов методов в gem

Следующий пример показывает, как вызывать методы в gem, не входящих в состав Chef Infra Client

chef_gem 'mongodb'

ruby_block 'config_replicaset' do
  block do
    MongoDB.configure_replicaset(node, replicaset_name, rs_nodes)
  end
  action :run
end

script ресурс

страница script ресурса

Используйте ресурс script для выполнения скриптов с помощью указанного интерпретатора, такого как Bash, csh, Perl, Python или Ruby. Этот ресурс также может использовать любые действия и свойства, доступные для ресурса execute. Команды, выполняемые с этим ресурсом, по своей природе не идемпотентны, поскольку они обычно уникальны для среды, в которой они выполняются. Используйте not_if и only_if для блокировки этого ресурса для идемпотентности.

Этот ресурс является базовым ресурсом для ряда других ресурсов, используемых для скриптинга на определённых платформах. Более подробную информацию о конкретных ресурсах для определённых платформ см. в следующих темах:

  • bash
  • csh
  • ksh
  • perl
  • python
  • ruby

Изменено в версии 12.19 для поддержки альтернативной учётной записи пользователя в Windows в ресурсах execute

Синтаксис


Блок ресурсов script обычно выполняет скрипты с помощью указанного интерпретатора, такого как Bash, csh, Perl, Python или Ruby:

script 'extract_module' do
  interpreter "bash"
  cwd ::File.dirname(src_filepath)
  code <<-EOH
    mkdir -p #{extract_path}
    tar xzf #{src_filename} -C #{extract_path}
    mv #{extract_path}/*/* #{extract_path}/
  EOH
  not_if { ::File.exist?(extract_path) }
end

где:

  • interpreter указывает оболочку командной строки, которую нужно использовать
  • cwd указывает каталог, из которого будет выполняться команда
  • code указывает команду для выполнения

    Чаще используется ресурс script, специфичный для оболочки командной строки. Chef имеет ресурсы, специфичные для оболочки, для Bash, csh, ksh, Perl, Python и Ruby.

    Та же команда, что и выше, но выполняется с помощью ресурса bash:

    bash 'extract_module' do
      cwd ::File.dirname(src_filepath)
      code <<-EOH
        mkdir -p #{extract_path}
        tar xzf #{src_filename} -C #{extract_path}
        mv #{extract_path}/*/* #{extract_path}/
      EOH
      not_if { ::File.exist?(extract_path) }
    end
    

Полный синтаксис для всех доступных свойств ресурса script:

script 'name' do
  code                       String
  creates                    String
  cwd                        String
  environment                Hash
  flags                      String
  group                      String, Integer
  interpreter                String
  path                       Array
  returns                    Integer, Array
  timeout                    Integer, Float
  user                       String
  password                   String
  domain                     String
  umask                      String, Integer
  action                     Symbol # defaults to :run if not specified
end

где:

  • script — это ресурс
  • name — имя блока ресурсов
  • cwd — местоположение, из которого выполняется команда
  • action определяет действия, которые Chef Infra Client предпримет для приведения узла в желаемое состояние
  • code, creates, cwd, environment, flags, group, interpreter, path, returns, timeout, user, password, domain и umask — свойства этого ресурса, со введённым типом Ruby. Более подробную информацию обо всех свойствах, которые могут быть использованы с этим ресурсом, см. в разделе «Свойства» ниже.

Действия


Ресурс script имеет следующие действия:

:nothing
Запрещает запуск команды. Это действие используется для указания того, что команда выполняется только тогда, когда другое действие её уведомляет.
:run
По умолчанию. Выполняет скрипт.

Свойства


Ресурс script имеет следующие свойства:

code
Тип Ruby: Строка

Заключённая в кавычки (" ") строка кода, который необходимо выполнить.

creates
Тип Ruby: Строка

Запрещает команде создавать файл, если такой файл уже существует.

cwd
Тип Ruby: Строка

Текущий рабочий каталог, из которого будет выполняться команда.

environment
Тип Ruby: Хэш

Хэш переменных среды в формате ({"ENV_VARIABLE" => "VALUE"}). (Эти переменные должны существовать для успешного выполнения команды.)

flags
Тип Ruby: Строка

Один или несколько флагов командной строки, которые передаются интерпретатору при вызове команды.

group
Тип Ruby: Строка, Целое число

Имя группы или идентификатор группы, которые необходимо изменить перед выполнением команды.

interpreter
Тип Ruby: Строка

Интерпретатор скрипта, который нужно использовать во время выполнения кода.

returns
Тип Ruby: Целое число, Массив | Значение по умолчанию: 0

Возвращаемое значение команды. Это может быть массив допустимых значений. При несовпадении возвращаемого значения(й) генерируется исключение.

timeout
Тип Ruby: Целое число, Вещественное число | Значение по умолчанию: 3600

Время ожидания команды (в секундах) до истечения времени.

user
Тип Ruby: Строка

Имя пользователя идентичности пользователя, с которой необходимо запустить новый процесс. Значение по умолчанию: nil. Имя пользователя может быть указано с доменом, например, domainuser или user@my.dns.domain.com в формате универсального имени принципала (UPN). Также его можно указать без домена просто как user, если вместо этого домен указан с помощью атрибута domain. Только в Windows, если это свойство указано, свойство password должно быть указано.

password
Тип Ruby: Строка

Только для Windows: Пароль пользователя, указанного свойством user. Значение по умолчанию: nil. Это свойство обязательно, если в Windows указано свойство user, и может быть указано только при указании user. Свойство sensitive для этого ресурса автоматически будет установлено в true, если указан пароль.

domain
Тип Ruby: Строка

Только для Windows: Домен пользователя, указанного свойством user. Значение по умолчанию: nil. Если не указано, имя пользователя и пароль, указанные свойствами user и password, будут использоваться для разрешения этого пользователя в домене, к которому присоединена система, выполняющая клиент Chef, или, если эта система не присоединена к домену, она будет разрешать пользователя как локальную учётную запись на этой системе. Альтернативный способ указания домена — оставить это свойство не указанным и указать домен в качестве части свойства user.

umask
Тип Ruby: Строка, Целое число

Маска создания режима файла или umask.


Общие функциональные возможности ресурсов


Ресурсы Chef включают общие свойства, уведомления и защиты ресурсов.

Общие свойства

Следующие свойства общие для всех ресурсов:

compile_time

Тип Ruby: true, false | Значение по умолчанию: false

Управление фазой, в которой ресурс выполняется на узле. Установите в true, чтобы запустить во время построения коллекции ресурсов (compile phase). Установите в false, чтобы запустить во время настройки узла клиентом Chef Infra (converge phase).

ignore_failure

Тип Ruby: true, false, :quiet | Значение по умолчанию: false

Продолжать выполнение рецепта, если ресурс завершился ошибкой по какой-либо причине. :quiet не будет отображать полную трассировку стека, и рецепт продолжит выполнение, если ресурс завершится ошибкой.

retries

Тип Ruby: Целое число | Значение по умолчанию: 0

Количество попыток перехвата исключений и повторной попытки ресурса.

retry_delay

Тип Ruby: Целое число | Значение по умолчанию: 2

Задержка в секундах между попытками повтора.

sensitive

Тип Ruby: true, false | Значение по умолчанию: false

Обеспечивает, что конфиденциальные данные ресурсов не регистрируются клиентом Chef Infra.

Уведомления

notifies

Тип Ruby: Символ, 'Chef::Resource[String]'

Ресурс может уведомить другой ресурс о принятии действий при изменении его состояния. Укажите 'resource[name]', :action, которые должен предпринять этот ресурс, и :timer для этого действия. Ресурс может уведомлять более чем один ресурс; для каждого уведомляемого ресурса используйте оператор notifies.

Если указанный ресурс не существует, генерируется ошибка. В отличие от этого, subscribes не завершается ошибкой, если исходный ресурс не найден.

Таймер указывает момент во время выполнения клиента Chef Infra, в котором выполняется уведомление. Доступны следующие таймеры:

:before

Указывает, что действие по уведомлённому ресурсу должно быть выполнено перед обработкой блока ресурса, в котором расположено уведомление.

:delayed

По умолчанию. Указывает, что уведомление должно быть помещено в очередь и затем выполнено в конце выполнения клиента Chef Infra.

: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, в котором выполняется уведомление. Доступны следующие таймеры:

:before

Указывает, что действие по уведомлённому ресурсу должно быть выполнено перед обработкой блока ресурса, в котором расположено уведомление.

:delayed

По умолчанию. Указывает, что уведомление должно быть помещено в очередь и затем выполнено в конце выполнения клиента Chef Infra.

: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.

Интерпретатор фильтра

Любой ресурс, который передает строковую команду, также может указать интерпретатор, который будет использоваться для оценки этой строковой команды. Это делается с помощью свойства guard_interpreter для задания ресурса на основе script.

Атрибуты

Свойство guard_interpreter может быть установлено в любое из следующих значений:

:bash

Оценивает строковую команду с помощью ресурса bash.

:batch

Оценивает строковую команду с помощью ресурса batch. Значение по умолчанию (внутри блока ресурса batch): :batch.

:csh

Оценивает строковую команду с помощью ресурса csh.

:default

Значение по умолчанию. Выполняет интерпретатор по умолчанию, определенный Chef Infra Client.

:perl

Оценивает строковую команду с помощью ресурса perl.

:powershell_script

Оценивает строковую команду с помощью ресурса powershell_script. Значение по умолчанию (внутри блока ресурса powershell_script): :powershell_script.

:python

Оценивает строковую команду с помощью ресурса python.

:ruby

Оценивает строковую команду с помощью ресурса ruby.

Наследование

Свойство guard_interpreter по умолчанию установлено в :default для ресурсов bash, csh, perl, python и ruby. Когда свойство guard_interpreter установлено в :default, not_if или only_if операторы фильтра не наследуют свойства, определенные ресурсом на основе script.

Предупреждение

Ресурсы batch и powershell_script наследуют свойства по умолчанию. Свойство guard_interpreter устанавливается в :batch или :powershell_script автоматически при использовании оператора фильтра not_if или only_if внутри ресурса batch или powershell_script соответственно.

Например, оператор фильтра not_if в следующем примере ресурса не наследует свойство environment:

bash 'javatooling' do
  environment 'JAVA_HOME' => '/usr/lib/java/jdk1.7/home'
  code 'java-based-daemon-ctl.sh -start'
  not_if 'java-based-daemon-ctl.sh -test-started'
end

и требует добавления свойства environment к оператору фильтра not_if, чтобы он мог использовать путь JAVA_HOME в своей оценке:

bash 'javatooling' do
  environment 'JAVA_HOME' => '/usr/lib/java/jdk1.7/home'
  code 'java-based-daemon-ctl.sh -start'
  not_if 'java-based-daemon-ctl.sh -test-started', :environment => 'JAVA_HOME' => '/usr/lib/java/jdk1.7/home'
end

Чтобы наследовать свойства, добавьте свойство guard_interpreter в блок ресурса и установите его в соответствующее значение:

  • :bash для bash
  • :csh для csh
  • :perl для perl
  • :python для python
  • :ruby для ruby

Например, используя тот же пример, что и выше, но на этот раз добавив свойство guard_interpreter и установив его в :bash:

bash 'javatooling' do
  guard_interpreter :bash
  environment 'JAVA_HOME' => '/usr/lib/java/jdk1.7/home'
  code 'java-based-daemon-ctl.sh -start'
  not_if 'java-based-daemon-ctl.sh -test-started'
end

Оператор not_if теперь наследует свойство environment и будет использовать путь JAVA_HOME в своей оценке.

Пример

Например, следующий блок кода гарантирует, что команда оценивается с использованием интерпретатора по умолчанию, определенного Chef Infra Client:

resource 'name' do
  guard_interpreter :default
  # code
end

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса script в рецептах:

Использование именованного провайдера для запуска скрипта

bash 'install_something' do
  user 'root'
  cwd '/tmp'
  code <<-EOH
    wget http://www.example.com/tarball.tar.gz
    tar -zxf tarball.tar.gz
    cd tarball
    ./configure
    make
    make   install
  EOH
end

Запуск скрипта

script 'install_something' do
  interpreter 'bash'
  user 'root'
  cwd '/tmp'
  code <<-EOH
    wget http://www.example.com/tarball.tar.gz
    tar -zxf tarball.tar.gz
    cd tarball
    ./configure
    make
    make install
  EOH
end

или что-то вроде:

bash 'openvpn-server-key' do
  environment('KEY_CN' => 'server')
  code <<-EOF
    openssl req -batch -days #{node['openvpn']['key']['expire']} \
      -nodes -new -newkey rsa:#{key_size} -keyout #{key_dir}/server.key \
      -out #{key_dir}/server.csr -extensions server \
      -config #{key_dir}/openssl.cnf
  EOF
  not_if { File.exist?('#{key_dir}/server.crt') }
end

где code содержит команду OpenSSL для выполнения. Свойство not_if указывает Chef Infra Client не запускать команду, если файл уже существует.

Установка файла из удалённого расположения с помощью bash

Следующий пример демонстрирует, как установить модуль foo123 для Nginx. Этот модуль добавляет функциональность в стиле оболочки в конфигурационный файл Nginx и выполняет следующие действия:

  • Объявляет три переменные
  • Получает файл Nginx из удалённого расположения
  • Устанавливает файл с помощью Bash в путь, указанный переменной src_filepath
# the following code sample is similar to the ``upload_progress_module``
# recipe in the ``nginx`` cookbook:
# https://github.com/chef-cookbooks/nginx

src_filename = "foo123-nginx-module-v#{
  node['nginx']['foo123']['version']
}.tar.gz"
src_filepath = "#{Chef::Config['file_cache_path']}/#{src_filename}"
extract_path = "#{
  Chef::Config['file_cache_path']
  }/nginx_foo123_module/#{
  node['nginx']['foo123']['checksum']
}"

remote_file 'src_filepath' do
  source node['nginx']['foo123']['url']
  checksum node['nginx']['foo123']['checksum']
  owner 'root'
  group 'root'
  mode '0755'
end

bash 'extract_module' do
  cwd ::File.dirname(src_filepath)
  code <<-EOH
    mkdir -p #{extract_path}
    tar xzf #{src_filename} -C #{extract_path}
    mv #{extract_path}/*/* #{extract_path}/
  EOH
  not_if { ::File.exist?(extract_path) }
end

Установка приложения из git с помощью bash

Следующий пример показывает, как Bash можно использовать для установки плагина для rbenv под названием ruby-build, который находится в системе контроля версий git. Сначала приложение синхронизируется, затем Bash меняет рабочую директорию на расположение, в котором находится ruby-build, и затем выполняет команду.

git "#{Chef::Config[:file_cache_path]}/ruby-build" do
  repository 'git://github.com/sstephenson/ruby-build.git'
  revision 'master'
  action :sync
end

bash 'install_ruby_build' do
  cwd "#{Chef::Config[:file_cache_path]}/ruby-build"
  user 'rbenv'
  group 'rbenv'
  code <<-EOH
    ./install.sh
  EOH
  environment 'PREFIX' => '/usr/local'
end

Чтобы узнать больше о ruby-build, см. здесь: https://github.com/sstephenson/ruby-build.

Хранение определённых настроек

Следующий рецепт показывает, как можно использовать файл атрибутов для хранения определённых настроек. Файл атрибутов расположен в директории attributes/ в том же кулинарном сборнике, что и рецепт, который вызывает файл атрибутов. В этом примере файл атрибутов задаёт определённые настройки для Python, которые затем используются на всех узлах, на которых будет выполняться этот рецепт.

Пакеты Python имеют версии, каталоги установки, URL-адреса и файлы контрольных сумм. Файл атрибутов, который существует для поддержки такого типа рецепта, должен включать настройки, такие как следующие:

default['python']['version'] = '2.7.1'

if python['install_method'] == 'package'
  default['python']['prefix_dir'] = '/usr'
else
  default['python']['prefix_dir'] = '/usr/local'
end

default['python']['url'] = 'http://www.python.org/ftp/python'
default['python']['checksum'] = '80e387...85fd61'

и затем методы в рецепте могут ссылаться на эти значения. Рецепту, используемому для установки Python, потребуется выполнить следующие действия:

  • Определить каждый пакет для установки (подразумевается в этом примере, не показано)
  • Определить переменные для пакета version и install_path
  • Получить пакет из удалённого расположения, но только если пакет ещё не существует на целевой системе
  • Использовать ресурс bash для установки пакета на узел, но только если пакет ещё не установлен
#  the following code sample comes from the ``oc-nginx`` cookbook on |github|: https://github.com/cookbooks/oc-nginx

version = node['python']['version']
install_path = "#{node['python']['prefix_dir']}/lib/python#{version.split(/(^\d+\.\d+)/)[1]}"

remote_file "#{Chef::Config[:file_cache_path]}/Python-#{version}.tar.bz2" do
  source "#{node['python']['url']}/#{version}/Python-#{version}.tar.bz2"
  checksum node['python']['checksum']
  mode '0755'
  not_if { ::File.exist?(install_path) }
end

bash 'build-and-install-python' do
  cwd Chef::Config[:file_cache_path]
  code <<-EOF
    tar -jxvf Python-#{version}.tar.bz2
    (cd Python-#{version} && ./configure #{configure_options})
    (cd Python-#{version} && make && make install)
  EOF
  not_if { ::File.exist?(install_path) }
end

Запуск команды от имени другого пользователя

Примечание: Когда Chef работает как служба, эта функция требует, чтобы пользователь, от имени которого работает Chef, имел право «SeAssignPrimaryTokenPrivilege» (также известное как «SE_ASSIGNPRIMARYTOKEN_NAME»). По умолчанию только LocalSystem и NetworkService имеют это право при запуске в качестве службы. Это необходимо даже если пользователь является администратором.

Это право можно добавить и проверить в рецепте, используя этот пример:

# Add 'SeAssignPrimaryTokenPrivilege' for the user
Chef::ReservedNames::Win32::Security.add_account_right('<user>', 'SeAssignPrimaryTokenPrivilege')

# Check if the user has 'SeAssignPrimaryTokenPrivilege' rights
Chef::ReservedNames::Win32::Security.get_account_right('<user>').include?('SeAssignPrimaryTokenPrivilege')

Следующий пример показывает, как запустить mkdir test_dir из выполнения Chef Infra Client от имени другого пользователя.

# Passing only username and password
script 'mkdir test_dir' do
 interpreter "bash"
 code  "mkdir test_dir"
 cwd Chef::Config[:file_cache_path]
 user "username"
 password "password"
end

# Passing username and domain
script 'mkdir test_dir' do
 interpreter "bash"
 code  "mkdir test_dir"
 cwd Chef::Config[:file_cache_path]
 domain "domain-name"
 user "username"
 password "password"
end

# Passing username = 'domain-name\\username'. No domain is passed
script 'mkdir test_dir' do
 interpreter "bash"
 code  "mkdir test_dir"
 cwd Chef::Config[:file_cache_path]
 user "domain-name\\username"
 password "password"
end

# Passing username = 'username@domain-name'. No domain is passed
script 'mkdir test_dir' do
 interpreter "bash"
 code  "mkdir test_dir"
 cwd Chef::Config[:file_cache_path]
 user "username@domain-name"
 password "password"
end

ресурс службы

страница ресурса службы

Используйте ресурс service для управления службой.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса service, выглядит следующим образом:

service 'name' do
  init_command         String
  options              Array, String
  parameters           Hash
  pattern              String
  priority             Integer, String, Hash
  reload_command       String, false
  restart_command      String, false
  run_levels           Array
  service_name         String # default value: 'name' unless specified
  start_command        String, false
  status_command       String, false
  stop_command         String, false
  supports             Hash # default value: {"restart"=>nil, "reload"=>nil, "status"=>nil}
  timeout              Integer # default value: 900
  user                 String
  action               Symbol # defaults to :nothing if not specified
end

где:

  • service — это ресурс.
  • name — это имя, заданное для блока ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет, чтобы привести узел в желаемое состояние.
  • init_command, options, parameters, pattern, priority, reload_command, restart_command, run_levels, service_name, start_command, status_command, stop_command, supports, timeout и user — это доступные свойства этого ресурса.

Действия


Ресурс service имеет следующие действия:

:disable
Отключить службу. Этот параметр эквивалентен типу запуска Disabled на платформе Microsoft Windows. Этот параметр не поддерживается при использовании System Resource Controller (SRC) на платформе AIX, поскольку System Resource Controller (SRC) не имеет стандартного механизма включения и отключения служб при запуске системы.
:enable
Включить службу при загрузке. Этот параметр эквивалентен типу запуска Automatic на платформе Microsoft Windows. Этот параметр не поддерживается при использовании System Resource Controller (SRC) на платформе AIX, поскольку System Resource Controller (SRC) не имеет стандартного механизма включения и отключения служб при загрузке системы.
:nothing
Этот блок ресурсов не действует, пока другой ресурс не уведомит его о необходимости выполнить действие. После уведомления этот блок ресурсов либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:reload
Перезагрузить конфигурацию этой службы.
:restart
Перезапустить службу.
:start
Запустить службу и держать её работающей до момента остановки или отключения.
:stop
Остановить службу.

Свойства


Ресурс service имеет следующие свойства:

init_command
Тип в Ruby: Строка

Путь к скрипту инициализации, связанному со службой. Используйте init_command, чтобы избежать необходимости указывать переопределения для свойств start_command, stop_command и restart_command. Если это свойство не указано, Chef Infra Client будет использовать команду инициализации по умолчанию для используемого поставщика службы.

options
Тип в Ruby: Массив, Строка

Только для платформы Solaris. Параметры, передаваемые команде службы. Подробную информацию о возможных параметрах см. в руководстве svcadm.

parameters
Тип в Ruby: Хэш

Только для Upstart: Хэш параметров, передаваемых команде службы для использования в определении службы.

pattern
Тип в Ruby: Строка | Значение по умолчанию: The value provided to 'service_name' or the resource block's name

Шаблон для поиска в таблице процессов.

priority
Тип в Ruby: Целое число, Строка, Хэш

Только для платформы Debian. Относительный приоритет программы для порядка запуска и завершения. Может быть целым числом или хэшем. Целое число используется для определения уровней запуска (start); уровни завершения (stop) затем равны 100-число. Хэш используется для определения значений для определенных уровней запуска. Например, { 2 => [:start, 20], 3 => [:stop, 55] } установит приоритет двадцать для уровня запуска два и приоритет пятьдесят пять для уровня запуска три.

reload_command
Тип в Ruby: Строка, false

Команда для перезагрузки конфигурации службы.

restart_command
Тип в Ruby: Строка, false

Команда для перезапуска службы.

run_levels
Тип в Ruby: Массив

Только для платформ RHEL: Специфические уровни запуска (run_levels), под которыми будет работать служба.

service_name
Тип в Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для установки имени службы, если оно отличается от имени блока ресурса.

start_command
Тип в Ruby: Строка, false

Команда для запуска службы.

status_command
Тип в Ruby: Строка, false

Команда для проверки состояния запуска службы.

stop_command
Тип в Ruby: Строка, false

Команда для остановки службы.

supports
Тип в Ruby: Хэш | Значение по умолчанию: {"restart" => nil, "reload" => nil, "status" => nil}

Список свойств, которые управляют тем, как Chef Infra Client будет пытаться управлять службой: :restart, :reload, :status. Для :restart, скрипт инициализации или другой поставщик службы может использовать команду перезапуска; если :restart не указан, Chef Infra Client пытается остановить, а затем запустить службу. Для :reload, скрипт инициализации или другой поставщик службы может использовать команду перезагрузки. Для :status, скрипт инициализации или другой поставщик службы может использовать команду status для определения, запущена ли служба; если :status не указан, Chef Infra Client пытается сопоставить service_name с таблицей процессов в качестве регулярного выражения, если шаблон не указан как свойство параметра. Значение по умолчанию: { restart: false, reload: false, status: false } для всех платформ (кроме семейства платформ Red Hat, где значение по умолчанию { restart: false, reload: false, status: true }.)

timeout
Тип в Ruby: Целое число | Значение по умолчанию: 900

Время ожидания (в секундах) перед истечением времени.

user
Тип в Ruby: Строка

Только для systemd: Имя пользователя, под которым будет запущена служба.

Введено в Chef Client 12.21


Общие функции ресурса


Ресурсы 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 для этого действия. Один ресурс может уведомить несколько ресурсов; для каждого уведомляемого ресурса используйте оператор 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 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.

Примеры


В следующих примерах демонстрируются различные подходы к использованию ресурса service в рецептах:

Запуск службы

service 'example_service' do
  action :start
end

Запуск службы, включение её

service 'example_service' do
  supports status: true, restart: true, reload: true
  action [ :enable, :start ]
end

Использование шаблона

service 'samba' do
  pattern 'smbd'
  action [:enable, :start]
end

Использование общего действия :nothing

service 'memcached' do
  action :nothing
end

Использование общего атрибута retries

service 'apache' do
  action [ :enable, :start ]
  retries 3
end

Управление службой в зависимости от платформы узла

service 'example_service' do
  if redhat?
    service_name 'redhat_name'
  else
    service_name 'other_name'
  end
  supports restart: true
  action [ :enable, :start ]
end

Перезагрузка службы с помощью шаблона

Для перезагрузки службы, основанной на шаблоне, используйте ресурсы template и service вместе в одном рецепте, аналогично следующему:

template '/tmp/somefile' do
  mode '0755'
  source 'somefile.erb'
end

service 'apache' do
  action :enable
  subscribes :reload, 'template[/tmp/somefile]', :immediately
end

где уведомление subscribes используется для перезагрузки службы всякий раз, когда шаблон изменяется.

Включение службы после перезапуска или перезагрузки

service 'apache' do
  supports restart: true, reload: true
  action :enable
end

Установка IP-адреса с помощью переменных и шаблона

Следующий пример демонстрирует, как ресурс template может использоваться в рецепте для объединения настроек, хранящихся в файле атрибутов, переменных в рецепте и шаблона для установки IP-адресов, используемых службой Nginx. Файл атрибутов содержит следующее:

default['nginx']['dir'] = '/etc/nginx'

Затем рецепт выполняет следующие действия:

  • Объявить две переменные в начале рецепта, одну для удаленного IP-адреса и другую для авторизованного IP-адреса
  • Использовать ресурс service для перезапуска и перезагрузки службы Nginx
  • Загрузить шаблон с именем authorized_ip.erb из каталога /templates, который используется для установки значений IP-адресов на основе переменных, указанных в рецепте
node.default['nginx']['remote_ip_var'] = 'remote_addr'
node.default['nginx']['authorized_ips'] = ['127.0.0.1/32']

service 'nginx' do
  supports :status => true, :restart => true, :reload => true
end

template 'authorized_ip' do
  path "#{node['nginx']['dir']}/authorized_ip"
  source 'modules/authorized_ip.erb'
  owner 'root'
  group 'root'
  mode '0755'
  variables(
    :remote_ip_var => node['nginx']['remote_ip_var'],
    :authorized_ips => node['nginx']['authorized_ips']
  )

  notifies :reload, 'service[nginx]', :immediately
end

где свойство variables сообщает шаблону использовать переменные, заданные в начале рецепта, а свойство source используется для вызова файла шаблона, расположенного в каталоге /templates кулинарной книги. Файл шаблона выглядит примерно так:

geo $<%= @remote_ip_var %> $authorized_ip {
  default no;
  <% @authorized_ips.each do |ip| %>
  <%= "#{ip} yes;" %>
  <% end %>
}

Использование таймера cron для управления службой

Следующий пример демонстрирует, как установить приложение crond с помощью двух ресурсов и переменной:

# the following code sample comes from the ``cron`` cookbook:
# https://github.com/chef-cookbooks/cron

cron_package = case node['platform']
  when 'redhat', 'centos', 'scientific', 'fedora', 'amazon'
    node['platform_version'].to_f >= 6.0 ? 'cronie' : 'vixie-cron'
  else
    'cron'
  end

package cron_package do
  action :install
end

service 'crond' do
  case node['platform']
  when 'redhat', 'centos', 'scientific', 'fedora', 'amazon'
    service_name 'crond'
  when 'debian', 'ubuntu', 'suse'
    service_name 'cron'
  end
  action [:start, :enable]
end

где

  • cron_package — переменная, используемая для определения платформ, относящихся к определенным пакетам установки
  • ресурс package использует переменную cron_package для определения способа установки приложения crond на различных узлах (с различными платформами)
  • ресурс service включает приложение crond на узлах с Red Hat, CentOS, Red Hat Enterprise Linux, Fedora или Amazon Web Services (AWS), и службу cron на узлах, работающих под Debian, Ubuntu или openSUSE

Перезапуск службы и уведомление другой службы

Следующий пример показывает, как запустить службу с именем example_service и немедленно уведомить службу Nginx о перезапуске.

service 'example_service' do
  action :start
  notifies :restart, 'service[nginx]', :immediately
end

Перезапуск одной службы перед перезапуском другой

В этом примере используется уведомление :before для перезапуска службы php-fpm перед перезапуском службы nginx:

service 'nginx' do
  action :restart
  notifies :restart, 'service[php-fpm]', :before
end

С помощью уведомления :before действие, указанное для ресурса nginx, не будет выполнено до тех пор, пока не будет выполнено действие над уведомлённым ресурсом (php-fpm).

Остановка службы, выполнение действий и её перезапуск

Следующий пример показывает, как использовать ресурсы execute, service и mount вместе, чтобы убедиться, что узел, работающий под Amazon EC2, запущен MySQL. Этот пример делает следующее:

  • Проверка наличия MySQL на узле Amazon EC2
  • Если на узле есть MySQL, остановить MySQL
  • Установка MySQL
  • Монтаж узла
  • Перезапуск MySQL
# the following code sample comes from the ``server_ec2``
# recipe in the following cookbook:
# https://github.com/chef-cookbooks/mysql

if (node.attribute?('ec2') && ! FileTest.directory?(node['mysql']['ec2_path']))

  service 'mysql' do
    action :stop
  end

  execute 'install-mysql' do
    command "mv #{node['mysql']['data_dir']}#{node['mysql']['ec2_path']}"
    not_if do FileTest.directory?(node['mysql']['ec2_path']) end
  end

  [node['mysql']['ec2_path'], node['mysql']['data_dir']].each do |dir|
    directory dir do
      owner 'mysql'
      group 'mysql'
    end
  end

  mount node['mysql']['data_dir'] do
    device node['mysql']['ec2_path']
    fstype 'none'
    options 'bind,rw'
    action [:mount, :enable]
  end

  service 'mysql' do
    action :start
  end

end

где

  • два ресурса service используются для остановки и перезапуска службы MySQL
  • ресурс execute используется для установки MySQL
  • ресурс mount используется для монтажа узла и включения MySQL

Управление службой с помощью ресурса execute

Предупреждение

Это пример того, чего НЕ следует делать. Используйте ресурс service для управления службой, а не ресурс execute.

Сделайте что-то вроде этого:

service 'tomcat' do
  action :start
end

а НЕ что-то вроде этого:

execute 'start-tomcat' do
  command '/etc/init.d/tomcat6 start'
  action :run
end

Нет никакой причины использовать ресурс execute для управления службой, так как ресурс service предоставляет свойство start_command напрямую, что даёт рецепту полный контроль над выданной командой намного чище и более прямо.

Включение службы на AIX с помощью команды mkitab

Ресурс service не поддерживает использование действий :enable и :disable с ресурсами, управляемыми с помощью контроллера системных ресурсов (SRC). Это связано с тем, что контроллер системных ресурсов (SRC) не имеет стандартного механизма для включения и отключения служб при загрузке системы.

Один из подходов к включению или отключению служб, управляемых контроллером системных ресурсов (SRC), заключается в использовании ресурса execute для вызова mkitab, а затем использование этой команды для включения или отключения службы.

Следующий пример показывает, как установить службу:

execute "install #{node['chef_client']['svc_name']} in SRC" do
  command "mkssys -s #{node['chef_client']['svc_name']}                  -p #{node['chef_client']['bin']}                  -u root
                  -S
                  -n 15
                  -f 9
                  -o #{node['chef_client']['log_dir']}/client.log
                  -e #{node['chef_client']['log_dir']}/client.log -a '
                  -i #{node['chef_client']['interval']}                  -s #{node['chef_client']['splay']}'"
  not_if "lssrc -s #{node['chef_client']['svc_name']}"
  action :run
end

а затем включить её с помощью команды mkitab:

execute "enable #{node['chef_client']['svc_name']}" do
  command "mkitab '#{node['chef_client']['svc_name']}:2:once:/usr/bin/startsrc
                  -s #{node['chef_client']['svc_name']} > /dev/console 2>&1'"
  not_if "lsitab #{node['chef_client']['svc_name']}"
end

Ресурс smartoѕ_package

Страница ресурса smartoѕ_package

Используйте ресурс smartos_package для управления пакетами для платформы SmartOS.

Примечание

Во многих случаях лучше использовать ресурс package вместо этого. Это связано с тем, что когда ресурс package используется в рецепте, Chef Infra Client будет использовать данные, собранные Ohai в начале выполнения Chef Infra Client, чтобы определить правильное приложение пакета. Использование ресурса package позволяет автору рецепта создавать рецепт, который можно использовать на многих платформах.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса smartos_package:

smartos_package 'name' do
  options           String, Array
  package_name      String
  source            String
  timeout           String, Integer
  version           String
  action            Symbol # defaults to :install if not specified
end

где:

  • smartos_package — ресурс.
  • name — имя, данное блоку ресурса.
  • action определяет, какие шаги Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • options, package_name, source, timeout и version — доступные свойства этого ресурса.

Действия


Ресурс smartos_package имеет следующие действия:

:install
По умолчанию. Установка пакета. Если указана версия, устанавливается указанная версия пакета.
:nothing
Этот блок ресурса не действует, пока не будет уведомлён другим ресурсом о действиях. После уведомления этот блок ресурса либо выполняется немедленно, либо добавляется в очередь для выполнения в конце выполнения Chef Infra Client.
:remove
Удаление пакета.
:upgrade
Установка пакета и/или обеспечение того, что пакет является последней версией.

Свойства


Ресурс smartos_package имеет следующие свойства:

options
Тип Ruby: Строка, Массив

Одна или несколько дополнительных командных опций, которые передаются команде.

package_name
Тип Ruby: Строка

Необязательное свойство для установки имени пакета, если оно отличается от имени блока ресурса.

source
Тип Ruby: Строка

Необязательный путь к пакету на локальной файловой системе.

timeout
Тип Ruby: Строка, Целое число

Время ожидания в секундах перед истечением срока ожидания.

version
Тип Ruby: Строка

Версия пакета, который должен быть установлен или обновлён.


Общие функциональные возможности ресурсов


Ресурсы 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.

Примеры


У этого ресурса нет примеров.

ресурс snap_package

страница ресурса snap_package

Используйте ресурс snap_package для управления пакетами snap на платформах Debian и Ubuntu.

Новая функция в Chef Infra Client 15.0.

Синтаксис


Полный синтаксис всех свойств, доступных ресурсу snap_package:

snap_package 'name' do
  channel           String # default value: "stable"
  options           String, Array
  package_name      String, Array
  source            String
  timeout           String, Integer
  version           String, Array
  action            Symbol # defaults to :install if not specified
end

где:

  • snap_package — это ресурс.
  • name — это имя, присвоенное блоку ресурса.
  • action определяет действия, которые Chef Infra Client предпримет, чтобы привести узел к желаемому состоянию.
  • channel, options, package_name, source, timeout и version — это доступные для этого ресурса свойства.

Действия


Ресурс snap_package имеет следующие действия:

:install
По умолчанию. Установка пакета. Если указана версия, устанавливается указанная версия пакета.
:lock
Фиксирует пакет apt на определенной версии.
:nothing
Этот блок ресурса не выполняется, пока не будет уведомлен другим ресурсом о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:purge
Удаление пакета. Это действие обычно удаляет также и конфигурационные файлы пакета.
:reconfig
Переконфигурирование пакета. Для этого действия требуется файл отклика.
:remove
Удаление пакета.
:unlock
Разблокирование пакета apt, чтобы его можно было обновить до более новой версии.
:upgrade
Установка пакета и/или обеспечение того, что пакет является последней версией.

Свойства


Ресурс snap_package имеет следующие свойства:

channel
Тип Ruby: Строка | Значение по умолчанию: stable Разрешенные значения: "beta", "candidate", "edge", "stable"

Канал по умолчанию. Например: stable.

options
Тип Ruby: Строка, Массив

Один (или несколько) дополнительных параметров команды, которые передаются в команду.

package_name
Тип Ruby: Строка, Массив

Необязательное свойство для задания имени пакета, если оно отличается от имени блока ресурса.

source
Тип Ruby: Строка

Необязательный путь к пакету на локальном файловом сервере.

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

Удаление нескольких пакетов (с помощью 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[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.

Примеры


Этот ресурс не имеет примеров.

Ресурс solaris_package

Страница ресурса solaris_package

Используйте ресурс solaris_package для управления пакетами на платформе Solaris.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса solaris_package:

solaris_package 'name' do
  options           String, Array
  package_name      String
  source            String
  timeout           String, Integer
  version           String
  action            Symbol # defaults to :install if not specified
end

где:

  • solaris_package — ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action — идентификатор действий, которые Chef Infra Client выполнит для приведения узла в желаемое состояние.
  • options, package_name, source, timeout и version — доступные свойства данного ресурса.

Действия


Ресурс solaris_package имеет следующие действия:

:install
По умолчанию. Устанавливает пакет. Если указана версия, устанавливает указанную версию пакета.
:nothing
Этот блок ресурса не выполняется, пока не будет уведомлен другим ресурсом о выполнении действия. После уведомления этот блок ресурса выполняется немедленно или ставится в очередь для выполнения в конце выполнения Chef Infra Client.
:remove
Удаляет пакет.

Свойства


Ресурс solaris_package имеет следующие свойства:

options
Тип Ruby: Строка, массив

Один или несколько дополнительных параметров команды, передаваемых в команду.

package_name
Тип Ruby: Строка

Необязательное свойство для установки имени пакета, если оно отличается от имени блока ресурса.

source
Тип Ruby: Строка

Необязательный путь к пакету на локальном файловом сервере.

timeout
Тип Ruby: Строка, целое число

Время ожидания в секундах до истечения времени.

version
Тип Ruby: Строка

Версия пакета, который нужно установить или обновить.


Общие функции ресурсов


Ресурсы Chef включают общие свойства, уведомления и защитные механизмы ресурсов.

Общие свойства

Следующие свойства являются общими для всех ресурсов:

compile_time

Тип в Ruby: true, false | Значение по умолчанию: false

Управляет фазой, в которой ресурс выполняется на узле. Установите значение true, чтобы запустить его во время построения коллекции ресурсов (compile phase). Установите значение false, чтобы запустить его во время конфигурирования узла клиентом Chef Infra (converge phase).

ignore_failure

Тип в Ruby: true, false, :quiet | Значение по умолчанию: false

Продолжать выполнение рецепта, если ресурс завершится неудачно по любой причине. :quiet не отобразит полный стек отладки, и рецепт продолжит выполнение, если ресурс завершится неудачно.

retries

Тип в Ruby: Целое число | Значение по умолчанию: 0

Количество попыток перехватить исключения и повторить ресурс.

retry_delay

Тип в Ruby: Целое число | Значение по умолчанию: 2

Задержка в секундах между повторными попытками.

sensitive

Тип в Ruby: true, false | Значение по умолчанию: false

Обеспечить, чтобы конфиденциальные данные ресурсов не регистрировались клиентом Chef Infra.

Уведомления

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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса solaris_package в рецептах:

Установка пакета

solaris_package 'name of package' do
  source '/packages_directory'
  action :install
end

Ресурс ssh_known_hosts_entry

Страница ресурса ssh_known_hosts_entry

Используйте ресурс ssh_known_hosts_entry для добавления записи для указанного узла в /etc/ssh/ssh_known_hosts или в файле известных узлов пользователя, если это указано.

Новое в Chef Infra Client 14.3.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса ssh_known_hosts_entry:

ssh_known_hosts_entry 'name' do
  file_location      String # default value: "/etc/ssh/ssh_known_hosts"
  group              String, Integer # default value: The root user's group depending on platform.
  hash_entries       true, false # default value: false
  host               String # default value: 'name' unless specified
  key                String
  key_type           String # default value: "rsa"
  mode               String # default value: "0644"
  owner              String, Integer # default value: "root"
  port               Integer # default value: 22
  timeout            Integer # default value: 30
  action             Symbol # defaults to :create if not specified
end

где:

  • ssh_known_hosts_entry — ресурс.
  • name — имя, данное блоку ресурса.
  • action — определяет шаги, которые Chef Infra Client предпримет для приведения узла к желаемому состоянию.
  • file_location, group, hash_entries, host, key, key_type, mode, owner, port и timeout — доступные свойства этого ресурса.

Действия


Ресурс ssh_known_hosts_entry имеет следующие действия:

:create
Создать запись в файле ssh_known_hosts. (По умолчанию)
:flush
Немедленно обновить записи в конфигурационном файле. Без этого фактическая запись файла откладывается в выполнении Chef Infra Client, чтобы все записи могли быть накоплены перед записью файла.
:nothing
Этот блок ресурса не действует, пока другой ресурс не уведомит его о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс ssh_known_hosts_entry имеет следующие свойства:

file_location
Тип в Ruby: Строка | Значение по умолчанию: /etc/ssh/ssh_known_hosts

Расположение файла известных узлов ssh. Измените это, чтобы установить файл известных узлов для определенного пользователя.

group
Тип в Ruby: Строка, Целое число | Значение по умолчанию: The root user's group depending on platform.

Группа файлов для файла ssh_known_hosts.

hash_entries
Тип в Ruby: true, false | Значение по умолчанию: false

Хэширование имени хоста и адресов в файле ssh_known_hosts для повышения конфиденциальности.

host
Тип в Ruby: Строка | Значение по умолчанию: The resource block's name

Хост, который нужно добавить в файл известных узлов.

key
Тип в Ruby: Строка

Необязательный ключ для хоста. Если он не указан, он будет автоматически определен.

key_type
Тип в Ruby: Строка | Значение по умолчанию: rsa

Тип ключа для хранения.

mode
Тип в Ruby: Строка | Значение по умолчанию: 0644

Режим файла для файла ssh_known_hosts.

owner
Тип в Ruby: Строка, Целое число | Значение по умолчанию: root

Владелец файла ssh_known_hosts.

port
Тип в Ruby: Целое число | Значение по умолчанию: 22

Порт сервера, который будет использовать команда ssh-keyscan для сбора открытого ключа.

timeout
Тип в Ruby: Целое число | Значение по умолчанию: 30

Тайм-аут в секундах для ssh-keyscan.


Общие функциональные возможности ресурсов


Ресурсы 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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса ssh_known_hosts_entry в рецептах:

Добавление одной записи для github.com с автоматически определенным ключом

ssh_known_hosts_entry 'github.com'

Добавление одной записи с предоставленным собственным ключом

ssh_known_hosts_entry 'github.com' do
  key 'node.example.com ssh-rsa ...'
end

Ресурс subversion

Страница ресурса subversion

Используйте ресурс subversion для управления ресурсами контроля версий, которые существуют в репозитории Subversion.

Предупреждение

Ресурс subversion имеет известные ошибки и может не работать должным образом. Для получения дополнительной информации см. проблемы Chef на GitHub, особенно #4050 и #4257.

Синтаксис


Полный синтаксис всех свойств, доступных ресурсу subversion:

subversion 'name' do
  destination        String # default value: 'name' unless specified
  environment        Hash
  group              String, Integer
  repository         String
  revision           String # default value: "HEAD"
  svn_arguments      String, false # default value: "--no-auth-cache"
  svn_binary         String
  svn_info_args      String, false # default value: "--no-auth-cache"
  svn_password       String
  svn_username       String
  timeout            Integer
  user               String, Integer
  action             Symbol # defaults to :sync if not specified
end

где:

  • subversion — это ресурс.
  • name — это имя, данное блоку ресурса.
  • action — это идентификатор шагов, которые Chef Infra Client выполнит, чтобы привести узел в желаемое состояние.
  • destination, environment, group, repository, revision, svn_arguments, svn_binary, svn_info_args, svn_password, svn_username, timeout и user — это доступные свойства для этого ресурса.

Действия


Ресурс subversion имеет следующие действия:

:checkout
Клонировать или выполнить проверку исходного кода. Когда доступна проверка, этот поставщик ничего не делает.
:export
Экспортировать исходный код, исключая или удаляя любые артефакты системы контроля версий.
:force_export
Экспортировать исходный код, исключая или удаляя любые артефакты системы контроля версий и принудительно экспортировать исходный код, перезаписывая существующую копию (если она существует).
:nothing
Этот блок ресурса не действует, если не уведомлен другим ресурсом о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:sync
Обновить исходный код до указанной версии или получить новую копию или проверку. Это действие приводит к жесткому сбросу индекса и рабочей области, отбрасывая любые несохраненные изменения. (по умолчанию)

Свойства


Ресурс subversion имеет следующие свойства:

destination
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Путь к расположению, в котором исходный код должен быть клонирован, проверен или экспортирован. Значение по умолчанию: имя блока ресурса.

environment
Тип Ruby: Словарь

Словарь переменных среды в формате ({‘ENV_VARIABLE’ => ‘VALUE’}).

group
Тип Ruby: Строка, Целое число

Группа системы, которая будет владеть скопированным кодом.

repository
Тип Ruby: Строка

URI репозитория кода.

revision
Тип Ruby: Строка | Значение по умолчанию: HEAD

Ветка, метка или коммит, который необходимо синхронизировать с git. Это может быть символьное значение, например, HEAD, или это может быть идентификатор конкретной ревизии системы контроля версий.

svn_arguments
Тип Ruby: Строка, false | Значение по умолчанию: --no-auth-cache

Дополнительные аргументы, которые передаются команде Subversion.

svn_binary
Тип Ruby: Строка

Расположение двоичного файла svn.

svn_info_args
Тип Ruby: Строка, false | Значение по умолчанию: --no-auth-cache

Используется, когда команда svn info используется клиентом Chef Infra, и необходимо передать аргументы. Команда svn_arguments не работает, когда используется команда svn info.

svn_password
Тип Ruby: Строка

Пароль пользователя, имеющего доступ к репозиторию Subversion.

svn_username
Тип Ruby: Строка

Имя пользователя, имеющего доступ к репозиторию Subversion.

timeout
Тип Ruby: Целое число

Время ожидания (в секундах) перед истечением времени ожидания.

user
Тип Ruby: Строка, Целое число | Значение по умолчанию: `HOME` environment variable of the user running chef-client

Системный пользователь, который будет владеть скопированным кодом.


Функциональность общего ресурса


Ресурсы Chef включают общие свойства, уведомления и защитные механизмы ресурсов.

Общие свойства

Следующие свойства являются общими для каждого ресурса:

compile_time

Тип Ruby: true, false | Значение по умолчанию: false

Управление фазой, в которой ресурс выполняется на узле. Установите значение true, чтобы запустить его во время построения коллекции ресурсов (compile phase). Установите значение false, чтобы запустить его во время конфигурирования узла клиентом Chef Infra (converge phase).

ignore_failure

Тип Ruby: true, false, :quiet | Значение по умолчанию: false

Продолжать выполнение рецепта, если ресурс завершится неудачно по любой причине. :quiet не будет отображать полный стек вызовов, и рецепт будет продолжать выполняться, если ресурс завершится неудачно.

retries

Тип Ruby: Целое число | Значение по умолчанию: 0

Количество попыток перехватить исключения и повторить ресурс.

retry_delay

Тип Ruby: Целое число | Значение по умолчанию: 2

Задержка в секундах между попытками повтора.

sensitive

Тип Ruby: true, false | Значение по умолчанию: false

Обеспечить, чтобы конфиденциальные данные ресурсов не регистрировались клиентом Chef Infra.

Уведомления

notifies

Тип Ruby: Символ, 'Chef::Resource[String]'

Ресурс может уведомить другой ресурс о действии при изменении его состояния. Укажите 'resource[name]', :action, которое должен выполнить ресурс, и затем :timer для этого действия. Один ресурс может уведомлять несколько ресурсов; для каждого уведомляемого ресурса используйте оператор notifies.

Если указанный ресурс не существует, возникает ошибка. В отличие от этого, subscribes не завершается сбоем, если исходный ресурс не найден.

Таймер определяет момент во время выполнения клиента Chef Infra, в котором выполняется уведомление. Доступны следующие таймеры:

:before

Указывает, что действие над уведомлённым ресурсом должно быть выполнено до обработки блока ресурса, в котором расположено уведомление.

:delayed

По умолчанию. Указывает, что уведомление должно быть помещено в очередь и выполнено в конце выполнения клиента Chef Infra.

: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, в котором выполняется уведомление. Доступны следующие таймеры:

: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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса subversion в рецептах:

Получение последней версии приложения

subversion 'CouchDB Edge' do
  repository 'http://svn.apache.org/repos/asf/couchdb/trunk'
  revision 'HEAD'
  destination '/opt/my_sources/couch'
  action :sync
end

Ресурс sudo

Страница ресурса sudo

Используйте ресурс sudo для добавления или удаления отдельных записей sudo с помощью файлов sudoers.d. Требуется версия sudo 1.7.2 или более поздняя, так как она опирается на директиву #includedir, введенную в версии 1.7.2. Этот ресурс не гарантирует установку требуемой версии sudo. Поддерживаемые Chef версии Ubuntu, SuSE, Debian и RHEL (6+) поддерживают эту функцию.

Новое в клиенте Chef Infra 14.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса sudo:

sudo 'name' do
  command_aliases        Array # default value: []
  commands               Array # default value: ["ALL"]
  config_prefix          String # default value: "Prefix values based on the node's platform"
  defaults               Array # default value: []
  env_keep_add           Array # default value: []
  env_keep_subtract      Array # default value: []
  filename               String # default value: 'name' unless specified
  groups                 String, Array # default value: []
  host                   String # default value: "ALL"
  noexec                 true, false # default value: false
  nopasswd               true, false # default value: false
  runas                  String # default value: "ALL"
  setenv                 true, false # default value: false
  template               String
  users                  String, Array # default value: []
  variables              Hash
  visudo_binary          String # default value: "/usr/sbin/visudo"
  action                 Symbol # defaults to :create if not specified
end

где:

  • sudo — это ресурс.
  • name — имя, заданное для блока ресурса.
  • action определяет действия, которые клиент Chef Infra предпримет для приведения узла к желаемому состоянию.
  • command_aliases, commands, config_prefix, defaults, env_keep_add, env_keep_subtract, filename, groups, host, noexec, nopasswd, runas, setenv, template, users, variables и visudo_binary — доступные свойства этого ресурса.

Действия


Ресурс sudo имеет следующие действия:

:create
Создать один файл конфигурации sudoers в каталоге sudoers.d. (по умолчанию)
:delete
Удалить файл конфигурации sudoers из каталога sudoers.d.
:nothing
Этот блок ресурса не действует, если не уведомлён другим ресурсом о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения клиента Chef Infra.

Свойства


Ресурс sudo имеет следующие свойства:

command_aliases
Тип Ruby: Массив | Значение по умолчанию: []

Псевдонимы команд, которые могут использоваться в качестве разрешённых команд в дальнейшем в конфигурации.

commands
Тип Ruby: Массив | Значение по умолчанию: ["ALL"]

Массив полных путей к командам, которые этот пользователь sudo может выполнить.

config_prefix
Тип Ruby: Строка | Значение по умолчанию: Prefix values based on the node's platform

Каталог, содержащий файл конфигурации sudoers.

defaults
Тип Ruby: Массив | Значение по умолчанию: []

Массив значений по умолчанию для пользователя/группы.

env_keep_add
Тип Ruby: Массив | Значение по умолчанию: []

Массив строк для добавления к env_keep.

env_keep_subtract
Тип Ruby: Массив | Значение по умолчанию: []

Массив строк для удаления из env_keep.

filename
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Имя файла sudoers.d, если оно отличается от имени блока ресурса

groups
Тип Ruby: Строка, Массив | Значение по умолчанию: []

Группа(ы) для предоставления привилегий sudo. Этот параметр принимает либо массив, либо список, разделённый запятыми. Лидирующий символ % в именах групп необязателен.

host
Тип Ruby: Строка | Значение по умолчанию: ALL

Хост для установки в конфигурации sudo.

noexec
Тип Ruby: true, false | Значение по умолчанию: false

Запретить выполнение команд с помощью оболочки.

nopasswd
Тип Ruby: true, false | Значение по умолчанию: false

Разрешить выполнение sudo без указания пароля.

runas
Тип Ruby: Строка | Значение по умолчанию: ALL

Пользователь, от имени которого можно выполнять команду(ы).

setenv
Тип Ruby: true, false | Значение по умолчанию: false

Определяет, разрешить ли сохранение среды с помощью sudo -E.

template
Тип Ruby: Строка

Имя шаблона erb в вашем кулинарном руководстве, если вы хотите предоставить свой собственный шаблон.

users
Тип Ruby: Строка, Массив | Значение по умолчанию: []

Пользователь(и) для предоставления привилегий sudo. Этот параметр принимает либо массив, либо список, разделённый запятыми.

variables
Тип Ruby: Словарь

Переменные, передаваемые пользовательскому шаблону. Этот параметр игнорируется, если не используется пользовательский шаблон.

visudo_binary
Тип Ruby: Строка | Значение по умолчанию: /usr/sbin/visudo

Путь к visudo для проверки конфигурации.


Общие функции ресурса


Ресурсы 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, которое должно быть выполнено, а затем :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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса sudo в рецептах:

Предоставить пользователю привилегии sudo для любой команды

sudo 'admin' do
  user 'admin'
end

Предоставить пользователю и группам привилегии sudo для любой команды

sudo 'admins' do
  users 'bob'
  groups 'sysadmins, superusers'
end

Предоставить привилегии sudo без пароля для определённых команд

sudo 'passwordless-access' do
  commands ['/bin/systemctl restart httpd', '/bin/systemctl restart mysql']
  nopasswd true
end

Ресурс swap_file

Страница ресурса swap_file

Используйте ресурс swap_file для создания или удаления файлов подкачки на Linux-системах и, по желанию, для управления конфигурацией swappiness для узла.

Новая функция в Chef Infra Client 14.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса swap_file, имеет следующий вид:

swap_file 'name' do
  path            String # default value: 'name' unless specified
  persist         true, false # default value: false
  size            Integer
  swappiness      Integer
  timeout         Integer # default value: 600
  action          Symbol # defaults to :create if not specified
end

где:

  • swap_file — это ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action — определяет действия, которые Chef Infra Client выполнит, чтобы привести узел в желаемое состояние.
  • path, persist, size, swappiness и timeout — доступные свойства этого ресурса.

Действия


Ресурс swap_file имеет следующие действия:

:create
Создать файл подкачки. (по умолчанию)
:nothing
Этот блок ресурсов не выполняется, пока другой ресурс не сообщит ему о необходимости выполнить действие. После получения уведомления этот блок ресурсов либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:remove
Удалить файл подкачки и отключить подкачку.

Свойства


Ресурс swap_file имеет следующие свойства:

path
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Путь, где будет создан файл подкачки на системе, если он отличается от имени блока ресурсов.

persist
Тип Ruby: true, false | Значение по умолчанию: false

Сохранить swapon.

size
Тип Ruby: Целое число

Размер файла подкачки (в МБ).

swappiness
Тип Ruby: Целое число

Значение swappiness, которое нужно установить на системе.

timeout
Тип Ruby: Целое число | Значение по умолчанию: 600

Таймаут для команд dd / fallocate.


Общие функциональные возможности ресурсов


Ресурсы 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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса swap_file в рецептах:

Создать файл подкачки

swap_file '/dev/sda1' do
  size 1024
end

Удалить файл подкачки

swap_file '/dev/sda1' do
  action :remove
end

ресурс sysctl

страница ресурса sysctl

Используйте ресурс sysctl для установки или удаления параметров ядра с помощью командной строки sysctl и конфигурационных файлов в каталоге sysctl.d системы. Конфигурационные файлы, управляемые этим ресурсом, имеют имя 99-chef-KEYNAME.conf.

Новинка в Chef Infra Client 14.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса sysctl:

sysctl 'name' do
  comment           Array, String # default value: []
  conf_dir          String # default value: "/etc/sysctl.d"
  ignore_error      true, false # default value: false
  key               String # default value: 'name' unless specified
  value             Array, String, Integer, Float
  action            Symbol # defaults to :apply if not specified
end

где:

  • sysctl — ресурс.
  • name — имя, данное блоку ресурсов.
  • action — определяет шаги, которые Chef Infra Client предпримет для приведения узла к желаемому состоянию.
  • comment, conf_dir, ignore_error, key и value — доступные для этого ресурса свойства.

Действия


Ресурс sysctl имеет следующие действия:

:apply
Установить параметр ядра и обновить настройки sysctl. (по умолчанию)
:nothing
Этот блок ресурсов не выполняется, пока другой ресурс не сообщит ему о необходимости выполнить действие. После получения уведомления этот блок ресурсов либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:remove
Удалить параметр ядра и обновить настройки sysctl.

Свойства


Ресурс sysctl имеет следующие свойства:

comment
Тип Ruby: Массив, строка | Значение по умолчанию: []

Комментарии, помещенные над настройкой ресурса в сгенерированном файле. Для многострочных комментариев используйте массив строк, по одной строке.

Новая функция в Chef Infra Client 15.8

conf_dir
Тип Ruby: Строка | Значение по умолчанию: /etc/sysctl.d

Каталог конфигурации для записи конфигурации.

ignore_error
Тип Ruby: true, false | Значение по умолчанию: false

Игнорировать ошибки при установке значения в командной строке.

key
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Ключ параметра ядра в точечном формате, если он отличается от имени блока ресурсов.

value
Тип Ruby: Массив, Строка, Целое число, Число с плавающей точкой | REQUIRED

Значение для установки.


Общие функциональные возможности ресурсов


Ресурсы Chef включают общие свойства, уведомления и защитные механизмы ресурсов.

Общие свойства

Следующие свойства являются общими для всех ресурсов:

compile_time

Тип Ruby: true, false | Значение по умолчанию: false

Управляет фазой, в которой ресурс выполняется на узле. Установите в значение true, чтобы запустить его во время построения коллекции ресурсов (compile phase). Установите в значение false, чтобы запустить его во время конфигурирования узла клиентом Chef Infra (converge phase).

ignore_failure

Тип Ruby: true, false, :quiet | Значение по умолчанию: false

Продолжать выполнение рецепта, если ресурс завершится неудачей по любой причине. :quiet не будет отображать полный стек вызовов, и рецепт будет продолжать выполняться, если ресурс завершится неудачей.

retries

Тип Ruby: Целое число | Значение по умолчанию: 0

Количество попыток перехватить исключения и повторить ресурс.

retry_delay

Тип Ruby: Целое число | Значение по умолчанию: 2

Задержка в секундах между попытками повтора.

sensitive

Тип Ruby: true, false | Значение по умолчанию: false

Убедитесь, что конфиденциальные данные ресурсов не регистрируются клиентом Chef Infra.

Уведомления

notifies

Тип Ruby: Символ, 'Chef::Resource[String]'

Ресурс может уведомить другой ресурс о выполнении действия при изменении его состояния. Укажите 'resource[name]', :action, и :timer для этого действия. Ресурс может уведомлять несколько ресурсов; используйте оператор notifies для каждого уведомляемого ресурса.

Если ссылаемый ресурс не существует, возникает ошибка. В отличие от subscribes, который не будет завершаться ошибкой, если исходный ресурс не найден.

Таймер определяет момент выполнения уведомления во время работы клиента Chef Infra. Доступны следующие таймеры:

:before

Указывает, что действие по уведомленному ресурсу должно выполняться до обработки блока ресурса, в котором находится уведомление.

:delayed

По умолчанию. Указывает, что уведомление должно быть помещено в очередь и затем выполнено в конце работы клиента Chef Infra.

: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. Доступны следующие таймеры:

: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.

Примеры


В следующих примерах демонстрируются различные подходы к использованию ресурса sysctl в рецептах:

Установить vm.swappiness:

sysctl 'vm.swappiness' do
  value 19
end

Удалить kernel.msgmax:

Примечание: Это удаляет только конфигурацию sysctl.d для kernel.msgmax. Значение будет возвращено к значению по умолчанию ядра.

sysctl 'kernel.msgmax' do
  action :remove
end

Добавление комментариев к файлам конфигурации sysctl:

sysctl 'vm.swappiness' do
  value 19
  comment "define how aggressively the kernel will swap memory pages."
end

Это создает /etc/sysctl.d/99-chef-vm.swappiness.conf следующим образом:

# define how aggressively the kernel will swap memory pages.
vm.swappiness = 1

Преобразование установок sysctl из сценариев оболочки:

Пример существующих установок:

fs.aio-max-nr = 1048576 net.ipv4.ip_local_port_range = 9000 65500 kernel.sem = 250 32000 100 128

Преобразовано в ресурсы sysctl:

sysctl 'fs.aio-max-nr' do
  value '1048576'
end

sysctl 'net.ipv4.ip_local_port_range' do
  value '9000 65500'
end

sysctl 'kernel.sem' do
  value '250 32000 100 128'
end

Ресурс systemd_unit

Страница ресурса systemd_unit

Используйте ресурс systemd_unit для создания, управления и запуска единиц systemd.

Новое в Chef Infra Client 12.11.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса systemd_unit:

systemd_unit 'name' do
  content              String, Hash
  triggers_reload      true, false # default value: true
  unit_name            String # default value: 'name' unless specified
  user                 String
  verify               true, false # default value: true
  action               Symbol # defaults to :nothing if not specified
end

где:

  • systemd_unit — это ресурс.
  • name — это имя, заданное для блока ресурса.
  • action определяет действия, которые клиент Chef Infra предпримет для приведения узла к желаемому состоянию.
  • content, triggers_reload, unit_name, user и verify — это доступные свойства этого ресурса.

Действия


Ресурс systemd_unit имеет следующие действия:

:create
Создать файл конфигурации сервиса systemd, если он ещё не существует.
:delete
Удалить файл конфигурации сервиса systemd, если он существует.
:disable
Убедиться, что сервис не будет запущен после следующей перезагрузки системы.
:enable
Убедиться, что сервис будет запущен после следующей перезагрузки системы.
:mask
Убедиться, что сервис не запустится, даже для удовлетворения зависимостей.
:nothing
Этот блок ресурсов не действует, пока другой ресурс не сообщит ему о необходимости выполнить действие. После уведомления этот блок ресурсов либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:preset
Восстановить предопределённую конфигурацию ‘enable/disable’ для сервиса systemd. Новое в Chef Infra Client 14.0.
:reenable
Возобновить работу сервиса. Новое в Chef Infra Client 14.0.
:reload
Перезагрузить файл конфигурации для сервиса systemd.
:reload_or_restart
Для сервисов systemd это действие перезагружает конфигурацию сервиса без перезапуска, если возможно; в противном случае сервис будет перезапущен, чтобы применить новую конфигурацию.
:reload_or_try_restart
Для сервисов systemd это действие перезагружает конфигурацию сервиса без перезапуска, если возможно; в противном случае попытается перезапустить сервис, чтобы применить новую конфигурацию.
:restart
Перезапустить сервис systemd.
:revert
Вернуться к версии поставщика файла конфигурации сервиса systemd. Новое в Chef Infra Client 14.0.
:start
Запустить сервис systemd.
:stop
Остановить работающий сервис systemd.
:try_restart
Попробовать перезапустить сервис systemd, если он работает.
:unmask
Остановить маскировку сервиса и запустить его согласно указаниям.

Свойства


Ресурс systemd_unit имеет следующие свойства:

content
Тип в Ruby: Строка, Хэш

Строка или хэш, содержащий определение файла конфигурации systemd unit file, описывающий свойства управляемых systemd сущностей, таких как службы, сокеты, устройства и т.д. В Chef Infra Client 14.4 и более поздних версиях можно реализовывать повторяющиеся параметры с помощью массива.

triggers_reload
Тип в Ruby: true, false | Значение по умолчанию: true

Указывает, следует ли инициировать перезагрузку демона при создании или удалении сервиса.

unit_name
Тип в Ruby: Строка | Значение по умолчанию: The resource block's name

Имя файла конфигурации, если оно отличается от имени блока ресурса.

Новое в Chef Client 13.7

user
Тип в Ruby: Строка

Аккаунт пользователя, под которым выполняется процесс сервиса systemd. Путь к файлу сервиса для этого пользователя будет выглядеть примерно так: ‘/etc/systemd/user/sshd.service’. Если аккаунт пользователя не указан, сервис systemd будет выполняться под аккаунтом ‘system’, а путь к файлу будет выглядеть примерно так: ‘/etc/systemd/system/sshd.service’.

verify
Тип в Ruby: true, false | Значение по умолчанию: true

Указывает, будет ли сервис проверен перед установкой. Systemd может быть излишне строгим при проверке сервисов, поэтому в некоторых случаях предпочтительнее не проверять сервис.

Проверка файла конфигурации

Файл конфигурации проверяется с помощью вызова systemd-analyze verify перед записью на диск.

Убедитесь, что указанные команды и файлы существуют до проверки.


Общие функциональные возможности ресурсов


Ресурсы 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.

Примеры


В следующих примерах демонстрируются различные подходы к использованию ресурса systemd_unit в рецептах:

Создать файл конфигурации сервиса systemd из хэша

systemd_unit 'etcd.service' do
  content({ Unit: {
            Description: 'Etcd',
            Documentation: ['https://coreos.com/etcd', 'man:etcd(1)'],
            After: 'network.target',
          },
          Service: {
            Type: 'notify',
            ExecStart: '/usr/local/etcd',
            Restart: 'always',
          },
          Install: {
            WantedBy: 'multi-user.target',
          } })
  action [:create, :enable]
end

Создать файл конфигурации сервиса systemd из строки

systemd_unit 'sysstat-collect.timer' do
  content <<~EOU
  [Unit]
  Description=Run system activity accounting tool every 10 minutes

  [Timer]
  OnCalendar=*:00/10

  [Install]
  WantedBy=sysstat.service
  EOU

  action [:create, :enable]
end

ресурс шаблона

страница ресурса шаблона

Шаблон кулинарной книги — это шаблон встроенного Ruby (ERB), используемый для динамического создания статических текстовых файлов. Шаблоны могут содержать выражения и операторы Ruby и являются отличным способом управления конфигурационными файлами. Используйте ресурс template, чтобы добавить шаблоны кулинарной книги в рецепты; поместите соответствующий файл шаблона Embedded Ruby (ERB) в каталог /templates кулинарной книги.

Используйте ресурс template для управления содержимым файла с помощью шаблона Embedded Ruby (ERB), передавая файлы из подкаталога COOKBOOK_NAME/templates/ в указанный путь на хосте, на котором запущен Chef Infra Client. Этот ресурс включает действия и свойства из ресурса file. Файлы шаблонов, управляемые ресурсом template, следуют тем же правилам специфичности файлов, что и ресурсы remote_file и file.

Синтаксис


Блок ресурса template обычно объявляет расположение, в котором будет создан файл, исходный шаблон, который будет использован для создания файла, и разрешения, необходимые для этого файла. Например:

template '/etc/motd' do
  source 'motd.erb'
  owner 'root'
  group 'root'
  mode '0755'
end

где:

  • '/etc/motd' указывает расположение, в котором создается файл
  • 'motd.erb' указывает имя шаблона, который существует в папке /templates кулинарной книги
  • owner, group и mode определяют разрешения

Полный синтаксис всех свойств, доступных для ресурса template, выглядит следующим образом:

template 'name' do
  atomic_update              true, false
  backup                     false, Integer
  cookbook                   String
  force_unlink               true, false
  group                      String, Integer
  helper(:method)            Method { String } # see Helpers below
  helpers(module)            Module # see Helpers below
  inherits                   true, false
  local                      true, false
  manage_symlink_source      true, false
  mode                       String, Integer
  owner                      String, Integer
  path                       String # defaults to 'name' if not specified
  rights                     Hash
  sensitive                  true, false
  source                     String, Array
  variables                  Hash
  verify                     String, Block
  action                     Symbol # defaults to :create if not specified
end

где:

  • template — это ресурс
  • name — это имя блока ресурса, обычно путь к расположению, в котором создается файл, и также имя управляемого файла. Например: /var/www/html/index.html, где /var/www/html/ — это полное квалифицированное расположение, а index.html — это имя файла
  • source — это файл шаблона, который будет использован для создания файла на узле, например: index.html.erb; файл шаблона расположен в каталоге /templates кулинарной книги
  • action определяет действия, которые Chef Infra Client предпримет для приведения узла в желаемое состояние
  • atomic_update, backup, cookbook, force_unlink, group, helper, helpers, inherits, local, manage_symlink_source, mode, owner, path, rights, source, variables и verify — это свойства этого ресурса, со значением типа Ruby. См. раздел «Свойства» ниже, чтобы узнать больше о всех свойствах, которые могут быть использованы с этим ресурсом.

Действия


Ресурс template имеет следующие действия:

:create
По умолчанию. Создает файл. Если файл уже существует (но не соответствует шаблону), обновляет этот файл для соответствия.
:create_if_missing
Создает файл только в том случае, если он не существует. Если файл существует, ничего не происходит.
:delete
Удаляет файл.
:nothing
Этот блок ресурса не действует, пока не будет уведомлен другим ресурсом о необходимости выполнить действие. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:touch
Создает метку файла. Это обновляет время доступа (atime) и время изменения файла (mtime). (Это действие может быть использовано с этим ресурсом, но обычно используется только с ресурсом file.)

Свойства


Ресурс template имеет следующие свойства:

atomic_update
Тип Ruby: true, false

Выполнять атомарные обновления файлов на уровне каждого ресурса. Установите в значение true для атомарных обновлений файлов. Установите в значение false для неатомарных обновлений файлов. Это значение переопределяет file_atomic_update, которое является глобальным значением, находящимся в файле client.rb.

backup
Тип Ruby: Целое число, false | Значение по умолчанию: 5

Количество резервных копий, которые будут сохранены в /var/chef/backup (для платформ на основе UNIX и Linux) или в C:/chef/backup (для платформы Microsoft Windows). Установите в значение false, чтобы предотвратить сохранение резервных копий.

cookbook
Тип Ruby: Строка

Кулинарная книга, в которой находится файл (если он не находится в текущей кулинарной книге). Значение по умолчанию — текущая кулинарная книга.

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 (если доступна).

helper
Тип Ruby: Метод | Значение по умолчанию: {}

Определите вспомогательный метод в строке. Например: helper(:hello_world) { "hello world" } или helper(:app) { node["app"] } или helper(:app_conf) { |setting| node["app"][setting] }.

helpers
Тип Ruby: Модуль | Значение по умолчанию: []

Определите вспомогательный модуль в строке или в библиотеке. Например, модуль в строке: helpers do, за которым следует блок кода Ruby. И для модуля библиотеки: helpers(MyHelperModule).

inherits
Тип Ruby: true, false | Значение по умолчанию: true

Только для Microsoft Windows. Наследует ли файл права из родительского каталога.

local
Тип Ruby: true, false | Значение по умолчанию: false

Загрузить шаблон из локального пути. По умолчанию Chef Infra Client загружает шаблоны из каталога /templates кулинарной книги. Если это свойство установлено в значение true, используйте свойство source, чтобы указать путь к шаблону на локальном узле.

manage_symlink_source
Тип Ruby: true, false | Значение по умолчанию: true

(с предупреждением)

Изменить поведение ресурса файла, если он указывает на символическую ссылку. Когда это значение установлено в true, Chef Infra Client будет управлять разрешениями символической ссылки или заменит символическую ссылку обычным файлом, если у ресурса есть содержимое. Когда это значение установлено в false, Chef будет следовать символической ссылке и будет управлять разрешениями и содержимым целевого файла символической ссылки.

По умолчанию поведение — true, но выводится предупреждение о том, что значение по умолчанию будет изменено на false в будущей версии; явное задание этого значения в true или false подавляет это предупреждение.

mode
Тип Ruby: Целое число, Строка

Цитированная строка из 3-5 символов, которая определяет восьмеричный режим. Например: '755', '0755' или 00755. Если mode не указан и если файл уже существует, используется существующий режим файла. Если mode не указан, файл не существует, и указано действие :create, Chef Infra Client предполагает значение маски '0777', а затем применяет значение маски системы, на которой должен быть создан файл, к значению mask. Например, если маска системы — '022', Chef Infra Client использует значение по умолчанию '0755'.

Поведение отличается в зависимости от платформы.

Системы на базе UNIX и Linux: цитированная строка из 3-5 символов, определяющая восьмеричный режим, который передается в chmod. Например: '755', '0755' или 00755. Если значение указано как строка, оно работает точно так же, как если бы была передана команда chmod. Если значение указано как целое число, добавьте ноль (0) к значению, чтобы убедиться, что оно интерпретируется как восьмеричное число. Например, чтобы назначить права чтения, записи и выполнения для всех пользователей, используйте '0777' или '777'; для тех же прав плюс бит «sticky» используйте 01777 или '1777'.

Microsoft Windows: цитированная строка из 3-5 символов, определяющая восьмеричный режим, который преобразуется в права безопасности Microsoft Windows. Например: '755', '0755' или 00755. Разрешены значения до '0777' (без бита «sticky») и означают то же, что и в UNIX, где 4 равно GENERIC_READ, 2 равно GENERIC_WRITE, и 1 равно GENERIC_EXECUTE. Это свойство нельзя использовать для установки :full_control. Это свойство не оказывает никакого влияния, если не указано, но когда оно и rights указаны оба, эффекты являются кумулятивными.

owner
Тип Ruby: Целое число, Строка

Строка или идентификатор, который идентифицирует владельца группы по имени пользователя или SID, включая полные имена пользователей, такие как domain\user или user@domain. Если это значение не указано, существующие владельцы остаются неизменными, а новые назначения владельцев используют текущего пользователя (при необходимости).

path
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Полный путь к файлу, включая имя файла и его расширение.

Microsoft Windows: Путь, начинающийся с косой черты (/), укажет на корень текущей рабочей директории процесса Chef Infra Client. Этот путь может различаться в зависимости от системы. Поэтому использование пути, начинающегося с косой черты (/), не рекомендуется.

rights
Тип Ruby: Целое число, Строка

Только для Microsoft Windows. Разрешения для пользователей и групп в среде Microsoft Windows. Например: rights <permissions>, <principal>, <options>, где <permissions> указывает права, предоставленные субъекту, <principal> — имя группы или пользователя, а <options> — словарь с одним (или несколькими) расширенными параметрами прав.

source
Тип Ruby: Строка, Массив

Расположение файла шаблона. По умолчанию Chef Infra Client ищет файл шаблона в каталоге /templates кулинарной книги. Когда свойство local установлено в значение true, используется для указания пути к шаблону на локальном узле. Это свойство также может использоваться для распространения определенных файлов на определенные платформы. Дополнительную информацию см. в разделе «Уточнение файла» ниже. Значение по умолчанию: name блока ресурса. Дополнительную информацию см. в разделе «Синтаксис» выше.

variables
Тип Ruby: Словарь

Словарь переменных, которые передаются в файл шаблона Ruby.

Свойство variables ресурса шаблона может использоваться для ссылки на частичный файл шаблона, используя словарь. Например:

template '/file/name.txt' do
  variables partials: {
    'partial_name_1.txt.erb' => 'message',
    'partial_name_2.txt.erb' => 'message',
    'partial_name_3.txt.erb' => 'message',
  }
end

где каждый из частичных файлов шаблона затем можно комбинировать с помощью стандартных шаблонов Ruby в файле шаблона, например:

<% @partials.each  do |partial, message| %>
  Here is <%= partial %>
  <%= render partial, :variables => {:message => message} %>
<% end %>
verify
Тип Ruby: Строка, Блок

Блок или строка, которые возвращают true или false. Строка, когда true выполняется как системная команда.

Блок — произвольный Ruby, определённый в блоке ресурса с помощью свойства verify. Когда блок true, Chef Infra Client будет продолжать обновлять файл соответствующим образом.

Например, это должно вернуть true:

template '/tmp/baz' do
  verify { 1 == 1 }
end

Это должно вернуть true:

template '/etc/nginx.conf' do
  verify 'nginx -t -c %{path}'
end

Это должно вернуть true:

template '/tmp/bar' do
  verify { 1 == 1}
end

И это должно вернуть true:

template '/tmp/foo' do
  verify do |path|
    true
  end
end

В то время как это должно вернуть false:

template '/tmp/turtle' do
  verify '/usr/bin/false'
end

Если строка или блок возвращают false, выполнение Chef Infra Client прекращается и возвращается ошибка.

Атомарные обновления файлов

Атомарные обновления используются с ресурсами на основе файлов, чтобы гарантировать, что обновления файлов можно выполнить при обновлении двоичного файла или при исчерпании места на диске.

Атомарные обновления включены по умолчанию. Их можно управлять глобально, используя параметр 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 создаст файлы таким образом, чтобы наследование ACL работало как ожидается.

Безопасность файлов 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'], и 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, что гарантирует, что настройки безопасности существующих файлов останутся неизменными.

Использование шаблонов

Для использования шаблона необходимо выполнить два действия:

  1. Ресурс шаблона должен быть добавлен в рецепт
  2. Встроенный шаблон Ruby (ERB) должен быть добавлен в кулинарную книгу

Например, следующие параметры файла шаблона и ресурса шаблона можно использовать для управления файлом конфигурации с именем /etc/sudoers. В кулинарной книге, которая использует sudo, в /recipes/default.rb можно добавить следующий ресурс:

template '/etc/sudoers' do
  source 'sudoers.erb'
  mode '0440'
  owner 'root'
  group 'root'
  variables(sudoers_groups: node['authorization']['sudo']['groups'],
            sudoers_users: node['authorization']['sudo']['users'])
end

Затем создайте шаблон под названием sudoers.erb и сохраните его в templates/default/sudoers.erb:

#
# /etc/sudoers
#
# Generated by Chef for <%= node['fqdn'] %>
#

Defaults        !lecture,tty_tickets,!fqdn

# User privilege specification
root          ALL=(ALL) ALL

<% @sudoers_users.each  do |user| -%>
<%= user %>   ALL=(ALL) <%= "NOPASSWD:" if @passwordless %>ALL
<% end -%>
# Members of the sysadmin group may gain root privileges
%sysadmin     ALL=(ALL) <%= "NOPASSWD:" if @passwordless %>ALL
<% @sudoers_groups.each do |group| -%>
# Members of the group '<%= group %>' may gain root privileges
<%= group %> ALL=(ALL) <%= "NOPASSWD:" if @passwordless %>ALL
<% end -%>

Затем установите значения атрибутов по умолчанию в attributes/default.rb:

default['authorization']['sudo']['groups'] = %w(sysadmin wheel admin)
default['authorization']['sudo']['users'] = %w(jerry greg)

Специфичность файла

A cookbook is frequently designed to work across many platforms and is often required to distribute a specific template to a specific platform. A cookbook can be designed to support the distribution of templates across platforms, while ensuring that the correct template ends up on each system.

Шаблон специфичности шаблона зависит от двух вещей: пути поиска и источника. Используется первый подходящий шаблон:

  1. /host-$fqdn/$source
  2. /$platform-$platform_version/$source
  3. /$platform/$source
  4. /default/$source
  5. /$source

Примечание

Чтобы указать определённую версию Windows, используйте номер версии операционной системы. Например, шаблон в templates/windows-6.3 будет развернут на системах, установленных с Windows 8.1.

Используйте массив с свойством source для определения явного пути поиска. Например:

template '/test' do
  source ["#{node.chef_environment}.erb", 'default.erb']
end

Следующий пример имитирует весь шаблон специфичности файлов, определяя его как явный путь:

template '/test' do
  source %W(
    host-#{node['fqdn']}/test.erb
#{node['platform']}-#{node['platform_version']}/test.erb
#{node['platform']}/test.erb
    default/test.erb
  )
end

У кулинарной книги может быть структура каталогов /templates, похожая на эту:

/templates/
  windows-10
  windows-6.3
  windows
  default

и ресурс, похожий на следующий:

template 'C:\path\to\file\text_file.txt' do
  source 'text_file.txt'
  mode '0755'
  owner 'root'
  group 'root'
end

Этот ресурс будет сопоставлен в том же порядке, что и структура каталогов /templates. Для узла с именем host-node-desktop, на котором запущена Windows 8.1, второй элемент будет соответствующим элементом и расположением:

/templates
  windows-10/text_file.txt
  windows-6.3/text_file.txt
  windows/text_file.txt
  default/text_file.txt

Помощники

Помощник — это метод или модуль, который можно использовать для расширения шаблона. Существует три подхода:

  • Метод помощника в строке
  • Модуль помощника в строке
  • Модуль библиотеки кулинарной книги

Используйте атрибут helper в рецепте для определения метода помощника в строке. Используйте атрибут helpers для определения модуля помощника в строке или модуля библиотеки кулинарной книги.

Встроенные методы

Метод помощника шаблона всегда определяется встроенно для каждого ресурса. Простой пример:

template '/path' do
  helper(:hello_world) { 'hello world' }
end

Другой способ определить встроенный метод помощника — сослаться на объект узла, чтобы повторные вызовы одному (или нескольким) атрибутам кулинарной книги можно было выполнять эффективно:

template '/path' do
  helper(:app) { node['app'] }
end

Встроенный метод помощника также может принимать аргументы:

template '/path' do
  helper(:app_conf) { |setting| node['app'][setting] }
end

После объявления шаблон может использовать методы помощников для построения файла. Например:

Say hello: <%= hello_world %>

или:

node['app']['listen_port'] is: <%= app['listen_port'] %>

или:

node['app']['log_location'] is: <%= app_conf('log_location') %>
Встроенные модули

Модуль помощника шаблона можно определить встроены для каждого ресурса. Этот подход может быть полезен, когда шаблон требует более сложной информации. Например:

template '/path' do
  helpers do
    def hello_world
      'hello world'
    end

    def app
      node['app']
    end

    def app_conf(setting)
      node['app']['setting']
    end
  end
end

где методы hello_world, app и app_conf(setting) составляют модуль, который расширяет шаблон.

Модули библиотек

Модуль помощника шаблона можно определить в библиотеке. Это полезно, когда расширения необходимо повторно использовать в рецептах или чтобы упростить управление кодом, который в противном случае определялся бы встроены для каждого рецепта.

template '/path/to/template.erb' do
  helpers(MyHelperModule)
end

Нотация хоста

Названия папок в каталогах кулинарной книги должны точно соответствовать нотации хоста, используемой для сопоставления специфичности шаблонов. Например, если хост называется foo.example.com, то папка должна называться host-foo.example.com.

Частичные шаблоны

Шаблон можно создать таким образом, чтобы он мог содержать ссылки на один (или несколько) меньших файлов шаблонов. (Эти более мелкие файлы шаблонов также называются частями.) Часть можно ссылаться из файла шаблона одним из следующих способов:

  • Используя метод render в файле шаблона
  • Используя ресурс шаблон и свойство variables.
Метод render

Используйте метод render в шаблоне для ссылки на частичный файл шаблона:

<%= render 'partial_name.txt.erb', :option => {} %>

где partial_name — имя частичного файла шаблона, а :option — один (или несколько) из следующих:

Вариант Описание
:cookbook По умолчанию предполагается, что частичный файл шаблона находится в кулинарной книге, содержащей шаблон верхнего уровня. Используйте этот параметр для указания пути к другой кулинарной книге
:local Указывает, что имя частичного файла шаблона должно интерпретироваться как путь к файлу в локальной файловой системе или подбираться в кулинарной книге с использованием обычных правил для файлов шаблонов. Установите значение true для интерпретации как пути к файлу в локальной файловой системе и значение false для использования обычных правил для файлов шаблонов
:source По умолчанию частичный файл шаблона идентифицируется по имени файла. Используйте этот параметр для указания другого имени или локального пути для использования (вместо имени частичного файла шаблона)
:variables Хэш из variable_name => value, который будет доступен для частичного файла шаблона. При использовании этого параметра любые переменные, определённые в шаблоне верхнего уровня, которые требуются частичному файлу шаблона, должны быть явно определены с помощью этого параметра

Например:

<%= render 'simple.txt.erb', :variables => {:user => Etc.getlogin }, :local => true %>

Частота передачи

Клиент Chef кэширует шаблон при первом запросе. При каждом последующем запросе этого шаблона клиент Chef сравнивает этот запрос с шаблоном, расположенным на сервере Chef. Если шаблоны совпадают, передача не происходит.

Переменные

В шаблоне с встраиваемым Ruby (ERB) код Ruby можно встроить в текстовый файл в тегах со специальным форматом. Код Ruby можно встраивать с помощью выражений и инструкций. Выражение ограничено <%= и %>. Например:
<%= "my name is #{$ruby}" %>

Инструкция ограничена модификатором, таким как if, elsif и else. Например:

if false
# this won't happen
elsif nil
      # this won't either
    end

Использование выражения Ruby — наиболее распространённый подход к определению переменных шаблона, так как именно так все переменные, отправляемые в шаблон, упоминаются. Всякий раз, когда шаблон должен использовать each, if или end, используйте инструкцию Ruby.

При обработке шаблона клиент Chef вычисляет выражения и инструкции Ruby. Переменные, перечисленные в параметре variables ресурса шаблон и в объекте узла, вычисляются. Затем клиент Chef передаёт эти переменные шаблону, где они будут доступны как переменные экземпляра в шаблоне. К объекту узла можно получить доступ так, как будто он входит в рецепт, используя тот же синтаксис.

Например, простой ресурс шаблона, такой как этот:

node['fqdn'] = 'latte'
template '/tmp/foo' do
  source 'foo.erb'
  variables(x_men: 'are keen')
end

И простой шаблон с встраиваемым Ruby (ERB), такой как этот:

The node <%= node[:fqdn] %> thinks the x-men <%= @x_men %>

Выведет примерно следующее:

The node latte thinks the x-men are keen

Несмотря на то, что это очень простой пример, все возможности Ruby можно использовать для решения даже самых сложных и сложных требований шаблонов.


Общие функциональные возможности ресурсов


Ресурсы Chef включают общие свойства, уведомления и средства защиты ресурсов.

Общие свойства

Следующие свойства являются общими для всех ресурсов:

compile_time

Тип Ruby: true, false | Значение по умолчанию: false

Управляет фазой, в которой ресурс выполняется на узле. Установите в значение true, чтобы запустить во время построения коллекции ресурсов (compile phase). Установите в значение false, чтобы запустить во время настройки узла клиентом Chef (converge phase).

ignore_failure

Тип Ruby: true, false, :quiet | Значение по умолчанию: false

Продолжить выполнение рецепта, если ресурс по какой-либо причине завершился неудачно. :quiet не будет отображать полный стек отладки, и рецепт продолжит выполняться, если ресурс завершится неудачей.

retries

Тип Ruby: Целое число | Значение по умолчанию: 0

Количество попыток перехватить исключения и повторить ресурс.

retry_delay

Тип Ruby: Целое число | Значение по умолчанию: 2

Задержка в секундах между попытками повтора.

sensitive

Тип Ruby: true, false | Значение по умолчанию: false

Обеспечьте, чтобы конфиденциальные данные ресурсов не регистрировались клиентом Chef.

Уведомления

notifies

Тип Ruby: Символ, 'Chef::Resource[String]'

Ресурс может уведомить другой ресурс о выполнении действия при изменении его состояния. Укажите 'resource[name]', :action, которое должен выполнить этот ресурс, а затем :timer для этого действия. Ресурс может уведомлять более одного ресурса; используйте инструкцию notifies для каждого ресурса, который нужно уведомить.

Если указанный ресурс не существует, возникает ошибка. В отличие от этого, subscribes не потерпит неудачи, если исходный ресурс не найден.

Таймер указывает момент во время выполнения клиента Chef, в котором выполняется уведомление. Доступны следующие таймеры:

: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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса template в рецептах:

Настройка файла из шаблона

template '/tmp/config.conf' do
  source 'config.conf.erb'
end

Настройка файла из локального шаблона

template '/tmp/config.conf' do
  local true
  source '/tmp/config.conf.erb'
end

Настройка файла с использованием карты переменных

template '/tmp/config.conf' do
  source 'config.conf.erb'
  variables(
    :config_var => node['configs']['config_var']
  )
end

Использование условия not_if

Следующий пример показывает, как использовать условие not_if для создания файла на основе шаблона и использования наличия значения атрибута на узле для определения условия:

template '/tmp/somefile' do
  mode '0755'
  source 'somefile.erb'
  not_if { node['some_value'] }
end

Следующий пример показывает, как использовать условие not_if для создания файла на основе шаблона и использования кода Ruby для определения условия:

template '/tmp/somefile' do
  mode '0755'
  source 'somefile.erb'
  not_if do
    File.exist?('/etc/passwd')
  end
end

Следующий пример показывает, как использовать условие not_if для создания файла на основе шаблона и использования Ruby-блока (в фигурных скобках) для определения условия:

template '/tmp/somefile' do
  mode '0755'
  source 'somefile.erb'
  not_if { File.exist?('/etc/passwd') }
end

Следующий пример показывает, как использовать условие not_if для создания файла на основе шаблона и использования строки для определения условия:

template '/tmp/somefile' do
  mode '0755'
  source 'somefile.erb'
  not_if 'test -f /etc/passwd'
end

Использование условия only_if

Следующий пример показывает, как использовать условие only_if для создания файла на основе шаблона и использования наличия атрибута на узле для определения условия:

template '/tmp/somefile' do
  mode '0755'
  source 'somefile.erb'
  only_if { node['some_value'] }
end

Следующий пример показывает, как использовать условие only_if для создания файла на основе шаблона, а затем использовать Ruby для указания условия:

template '/tmp/somefile' do
  mode '0755'
  source 'somefile.erb'
  only_if { ! ::File.exist?('/etc/passwd') }
end

Следующий пример показывает, как использовать условие only_if для создания файла на основе шаблона и использования строки для указания условия:

template '/tmp/somefile' do
  mode '0755'
  source 'somefile.erb'
  only_if 'test -f /etc/passwd'
end

Использование массива пробелов (%w)

Следующий пример показывает, как использовать массив пробелов Ruby для определения списка инструментов конфигурации, а затем использовать этот список инструментов в ресурсе template для обеспечения того, чтобы все эти инструменты конфигурации использовали один и тот же ключ RSA:

%w{openssl.cnf pkitool vars Rakefile}.each do |f|
  template "/etc/openvpn/easy-rsa/#{f}" do
    source "#{f}.erb"
    owner 'root'
    group 'root'
    mode '0755'
  end
end

Использование относительного пути

template "#{ENV['HOME']}/chef-getting-started.txt" do
  source 'chef-getting-started.txt.erb'
  mode '0755'
end

Задержка уведомлений

template '/etc/nagios3/configures-nagios.conf' do
  # other parameters
  notifies :run, 'execute[test-nagios-config]', :delayed
end

Немедленное уведомление

По умолчанию, уведомления :delayed, то есть они помещаются в очередь по мере возникновения, а затем выполняются в самом конце выполнения Chef Infra Client. Чтобы выполнить действие немедленно, используйте :immediately:

template '/etc/nagios3/configures-nagios.conf' do
  # other parameters
  notifies :run, 'execute[test-nagios-config]', :immediately
end

и затем Chef Infra Client немедленно выполнит следующее:

execute 'test-nagios-config' do
  command 'nagios3 --verify-config'
  action :nothing
end

Уведомление о нескольких ресурсах

template '/etc/chef/server.rb' do
  source 'server.rb.erb'
  owner 'root'
  group 'root'
  mode '0755'
  notifies :restart, 'service[chef-solr]', :delayed
  notifies :restart, 'service[chef-solr-indexer]', :delayed
  notifies :restart, 'service[chef-server]', :delayed
end

Перезагрузка службы

template '/tmp/somefile' do
  mode '0755'
  source 'somefile.erb'
  notifies :reload, 'service[apache]', :immediately
end

Перезапуск службы при изменении шаблона

template '/etc/www/configures-apache.conf' do
  notifies :restart, 'service[apache]', :immediately
end

Отправка уведомлений нескольким ресурсам

Для отправки уведомлений нескольким ресурсам просто используйте несколько атрибутов. Несколько атрибутов будут отправлены уведомлённым ресурсам в указанном порядке.

template '/etc/netatalk/netatalk.conf' do
  notifies :restart, 'service[afpd]', :immediately
  notifies :restart, 'service[cnid]', :immediately
end

service 'afpd'
service 'cnid'

Выполнение команды с помощью шаблона

Следующий пример демонстрирует, как настроить IPv4-передачу пакетов с помощью ресурса execute, чтобы выполнить команду с именем forward_ipv4, которая использует шаблон, определённый ресурсом template:

execute 'forward_ipv4' do
  command 'echo > /proc/.../ipv4/ip_forward'
  action :nothing
end

template '/etc/file_name.conf' do
  source 'routing/file_name.conf.erb'
  notifies :run, 'execute[forward_ipv4]', :delayed
end

где свойство command для ресурса execute содержит команду для выполнения, а свойство source для ресурса template указывает, какой шаблон использовать. Свойство notifies для template указывает, что execute[forward_ipv4] (определено ресурсом execute) должно быть помещено в очередь и выполнено в конце выполнения Chef Infra Client.

Установить IP-адрес с помощью переменных и шаблона

Следующий пример демонстрирует, как ресурс template может быть использован в рецепте для объединения настроек, хранящихся в файле атрибутов, переменных в рецепте и шаблона для установки IP-адресов, используемых службой Nginx. Файл атрибутов содержит следующее:

default['nginx']['dir'] = '/etc/nginx'

Затем рецепт выполняет следующие действия:

  • Объявляет две переменные в начале рецепта, одну для удалённого IP-адреса и другую для разрешённого IP-адреса
  • Использует ресурс service для перезапуска и перезагрузки службы Nginx
  • Загружает шаблон с именем authorized_ip.erb из каталога /templates, который используется для установки значений IP-адресов на основе переменных, указанных в рецепте
node.default['nginx']['remote_ip_var'] = 'remote_addr'
node.default['nginx']['authorized_ips'] = ['127.0.0.1/32']

service 'nginx' do
  supports :status => true, :restart => true, :reload => true
end

template 'authorized_ip' do
  path "#{node['nginx']['dir']}/authorized_ip"
  source 'modules/authorized_ip.erb'
  owner 'root'
  group 'root'
  mode '0755'
  variables(
    :remote_ip_var => node['nginx']['remote_ip_var'],
    :authorized_ips => node['nginx']['authorized_ips']
  )

  notifies :reload, 'service[nginx]', :immediately
end

где свойство variables сообщает шаблону использовать переменные, установленные в начале рецепта, а свойство source используется для вызова файла шаблона, расположенного в каталоге /templates кулинарной книги. Файл шаблона выглядит примерно так:

geo $<%= @remote_ip_var %> $authorized_ip {
  default no;
  <% @authorized_ips.each do |ip| %>
  <%= "#{ip} yes;" %>
  <% end %>
}

Добавить правило в таблицу IP

Следующий пример показывает, как добавить правило с именем test_rule в таблицу IP с помощью ресурса execute для выполнения команды с помощью шаблона, определённого ресурсом template:

execute 'test_rule' do
  command 'command_to_run
    --option value
    ...
    --option value
    --source #{node[:name_of_node][:ipsec][:local][:subnet]}
    -j test_rule'
  action :nothing
end

template '/etc/file_name.local' do
  source 'routing/file_name.local.erb'
  notifies :run, 'execute[test_rule]', :delayed
end

где свойство command для ресурса execute содержит команду для выполнения, а свойство source для ресурса template указывает, какой шаблон использовать. Свойство notifies для template указывает, что execute[test_rule] (определено ресурсом execute) должно быть помещено в очередь и выполнено в конце выполнения Chef Infra Client.

Применение настроек прокси согласованно по всей организации Chef

Следующий пример показывает, как шаблон может использоваться для применения согласованных настроек прокси для всех узлов одного типа:

template "#{node['matching_node']['dir']}/sites-available/site_proxy.conf" do
  source 'site_proxy.matching_node.conf.erb'
  owner 'root'
  group 'root'
  mode '0755'
  variables(
    :ssl_certificate =>    "#{node['matching_node']['dir']}/shared/certificates/site_proxy.crt",
    :ssl_key =>            "#{node['matching_node']['dir']}/shared/certificates/site_proxy.key",
    :listen_port =>        node['site']['matching_node_proxy']['listen_port'],
    :server_name =>        node['site']['matching_node_proxy']['server_name'],
    :fqdn =>               node['fqdn'],
    :server_options =>     node[:site]['matching_node']['server']['options'],
    :proxy_options =>      node[:site]['matching_node']['proxy']['options']
  )
end

где matching_node представляет тип узла (например, Nginx), а site_proxy представляет тип прокси, используемый для этого типа узла (например, Nexus).

Получение параметров шаблона из локального файла

Ресурс шаблона может использоваться для рендеринга шаблона на основе настроек, содержащихся в локальном файле на диске, или для получения настроек из шаблона в кулинарной книге. В большинстве случаев настройки извлекаются из шаблона в кулинарной книге. Следующий пример показывает, как ресурс шаблона может использоваться для извлечения этих настроек из локального файла.

Следующий пример основан на нескольких предположениях:

  • Среда — это приложение Ruby on Rails, которому необходимо отобразить файл с именем database.yml
  • Информация об приложении — пользователе, его пароле, сервере — хранится в пакете данных на сервере Chef
  • Приложение уже развернуто в системе, и единственное требование в этом примере — рендеринг файла database.yml

Дерево исходного кода приложения выглядит примерно так:

  myapp/
  -> config/
     -> database.yml.erb

Примечание

Не должно быть файла с именем database.yml (без .erb), так как файл database.yml будет рендериться с помощью ресурса шаблона.

Развертывание приложения завершится в /srv, поэтому полный путь к этому шаблону будет примерно таким: /srv/myapp/current/config/database.yml.erb.

Содержание самого шаблона может выглядеть следующим образом:

<%= @rails_env %>:
   adapter: <%= @adapter %>
   host: <%= @host %>
   database: <%= @database %>
   username: <%= @username %>
   password: <%= @password %>
   encoding: 'utf8'
   reconnect: true

Рецепт будет похож на следующий:

results = search(:node, "role:myapp_database_master AND chef_environment:#{node.chef_environment}")
db_master = results[0]

template '/srv/myapp/shared/database.yml' do
  source '/srv/myapp/current/config/database.yml.erb'
  local true
  variables(
    :rails_env => node.chef_environment,
    :adapter => db_master['myapp']['db_adapter'],
    :host => db_master['fqdn'],
    :database => "myapp_#{node.chef_environment}",
    :username => "myapp",
    :password => "SUPERSECRET",
  )
end

где:

  • метод search в языке Chef Infra используется для поиска первого узла, являющегося мастером базы данных (должен быть только один)
  • свойство переменной :adapter также может потребовать, чтобы атрибут был задан в роли, что определяет правильный адаптер

Шаблон будет рендериться примерно так:

production:
  adapter: mysql
  host: domU-12-31-39-14-F1-C3.compute-1.internal
  database: myapp_production
  username: myapp
  password: SUPERSECRET
  encoding: utf8
  reconnect: true

Этот пример показал, как использовать ресурс шаблона для рендеринга шаблона на основе настроек, содержащихся в локальном файле. Некоторые другие вопросы, которые следует учитывать при использовании такого подхода, включают:

  • Должен ли файл database.yml находиться в файле .gitignore?
  • Как разработчики запускают приложение локально?
  • Это работает с chef-solo?

Передача значений из рецепта в шаблон

Следующий пример показывает, как передать значение в шаблон, используя свойство variables в ресурсе шаблона. Файл шаблона похож на:

[tcpout]
defaultGroup = splunk_indexers_<%= node['splunk']['receiver_port'] %>
disabled=false

[tcpout:splunk_indexers_<%= node['splunk']['receiver_port'] %>]
server=<% @splunk_servers.map  do |s| -%><%= s['ipaddress'] %>:<%= s['splunk']['receiver_port'] %> <% end.join(', ') -%>
<% @outputs_conf.each_pair do |name, value| -%>
<%= name %> = <%= value %>
<% end  -%>

Затем рецепт использует атрибут variables для поиска значений для splunk_servers и outputs_conf, прежде чем передать их в шаблон:

template "#{splunk_dir}/etc/system/local/outputs.conf" do
  source 'outputs.conf.erb'
  mode '0755'
  variables :splunk_servers => splunk_servers, :outputs_conf => node['splunk']['outputs_conf']
  notifies :restart, 'service[splunk]'
end

Этот пример можно найти в рецепте client.rb и файлах шаблонов outputs.conf.erb, которые находятся в кулинарной книге chef-splunk, которая поддерживается Chef.

Ресурс timezone

Страница ресурса timezone

Используйте ресурс timezone для изменения часового пояса системы на узлах Windows, Linux и macOS. Часовые пояса задаются в формате базы данных tz, а полный список доступных значений TZ для Linux и macOS здесь: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones. В системах Windows запустите tzutil /l для получения полного списка допустимых часовых поясов.

Новое в Chef Infra Client 14.6.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса timezone:

timezone 'name' do
  timezone      String # default value: 'name' unless specified
  action        Symbol # defaults to :set if not specified
end

где:

  • timezone — это ресурс.
  • name — имя, данное блоку ресурса.
  • action определяет действия, которые Chef Infra Client предпримет для перевода узла в желаемое состояние.
  • timezone — свойство, доступное для этого ресурса.

Действия


Ресурс timezone имеет следующие действия:

:nothing
Этот блок ресурса не действует, если его не уведомит другой ресурс. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:set
Установить часовой пояс системы. (по умолчанию)

Свойства


Ресурс timezone имеет следующие свойства:

timezone
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для установки значения часового пояса, если оно отличается от имени блока ресурса.


Общие функции ресурса


Ресурсы 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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса timezone в рецептах:

Установить часовой пояс на UTC

timezone 'UTC'

Установить часовой пояс на America/Los_Angeles с дружественным именем ресурса на Linux/macOS

timezone "Set the host's timezone to America/Los_Angeles" do
  timezone 'America/Los_Angeles'
end

Установить часовой пояс на PST с дружественным именем ресурса на Windows

timezone "Set the host's timezone to PST" do
  timezone 'Pacific Standard time'
end

ресурс user

страница ресурса user

Используйте ресурс user для добавления пользователей, обновления существующих пользователей, удаления пользователей и блокировки/разблокировки паролей пользователей.

Примечание

Системные атрибуты собираются Ohai в начале каждого запуска Chef Infra Client. По умолчанию, действия, доступные ресурсу user, обрабатываются после начала запуска Chef Infra Client. Это означает, что системные атрибуты, добавленные или измененные ресурсом user во время запуска Chef Infra Client, должны быть перезагружены, прежде чем они станут доступны Chef Infra Client. Эти системные атрибуты могут быть перезагружены двумя способами: взятием значений в начале (следующего) запуска Chef Infra Client или использованием ресурса ohai для перезагрузки системных атрибутов во время текущего запуска Chef Infra Client.

Синтаксис


Блок ресурса user управляет пользователями на узле:

user 'a user' do
  comment 'A random user'
  uid 1234
  gid 'groupname'
  home '/home/random'
  shell '/bin/bash'
  password '$1$JJsvHslasdfjVEroftprNn4JHtDi'
end

Полный синтаксис всех свойств, доступных ресурсу user:

user 'name' do
  comment                    String
  force                      true, false # see description
  gid                        String, Integer
  home                       String
  iterations                 Integer
  manage_home                true, false
  non_unique                 true, false
  password                   String
  salt                       String
  shell                      String
  system                     true, false
  uid                        String, Integer
  username                   String # defaults to 'name' if not specified
  action                     Symbol # defaults to :create if not specified
end

где:

  • user — ресурс
  • name — имя блока ресурса
  • action — определяет действия, которые Chef Infra Client предпримет, чтобы привести узел в желаемое состояние
  • comment, force, gid, home, iterations, manage_home, non_unique, password, salt, shell, system, uid и username — свойства этого ресурса с указанным типом Ruby. См. раздел «Свойства» ниже для получения дополнительной информации обо всех свойствах, которые могут использоваться с этим ресурсом.

Действия


Ресурс user имеет следующие действия:

:create
По умолчанию. Создаёт пользователя со заданными свойствами. Если пользователь уже существует (но не совпадает), обновляет этого пользователя для соответствия.
:lock
Заблокировать пароль пользователя.
:manage
Управлять существующим пользователем. Это действие ничего не делает, если пользователь не существует.
:modify
Изменить существующего пользователя. Это действие вызывает исключение, если пользователь не существует.
:nothing
Этот блок ресурса не действует, пока не получит уведомление от другого ресурса о действии. После уведомления этот блок ресурса либо выполняется немедленно, либо ставится в очередь для выполнения в конце запуска Chef Infra Client.
:remove
Удалить пользователя.
:unlock
Разблокировать пароль пользователя.

Свойства


Ресурс user имеет следующие свойства:

comment
Тип Ruby: Строка

Один (или несколько) комментариев о пользователе.

force
Тип Ruby: true, false

Принудительно удалить пользователя. Может использоваться только с действием :remove.

Предупреждение

Использование этого свойства может привести систему в несогласованное состояние. Например, учётная запись пользователя будет удалена, даже если пользователь авторизован. Домашняя папка пользователя будет удалена, даже если эта папка используется несколькими пользователями.

gid
Тип Ruby: Строка, Целое число

Идентификатор группы. Это свойство ранее называлось group и оба продолжают работать.

home
Тип Ruby: Строка

Расположение домашней директории.

iterations
Тип Ruby: Целое число

Только платформа macOS. Количество итераций для пароля с хешем shadow SALTED-SHA512-PBKDF2.

manage_home
Тип Ruby: true, false

Управлять домашней директорией пользователя.

При использовании с действием :create домашняя директория пользователя создаётся на основе HOME_DIR. Если домашняя директория отсутствует, она создаётся, если CREATE_HOME в /etc/login.defs не установлено в no. При создании в домашнюю директорию включается набор файлов и поддиректорий.

При использовании с действием :modify домашняя директория пользователя перемещается в HOME_DIR. Если домашняя директория отсутствует, она создаётся, если CREATE_HOME в /etc/login.defs не установлено в no. Содержимое домашней директории пользователя перемещается в новое место.

non_unique
Тип Ruby: true, false

Создать дублирующую (не уникальную) учётную запись пользователя.

password
Тип Ruby: Строка

Хеш пароля shadow

salt
Тип Ruby: Строка

Хеш SALTED-SHA512-PBKDF2.

shell
Тип Ruby: Строка

Логин оболочки.

system
Тип Ruby: true, false

Создать системного пользователя. Это свойство может использоваться с useradd в качестве провайдера для создания системного пользователя, который передаёт флаг -r в useradd.

uid
Тип Ruby: Строка, Целое число

Числовой идентификатор пользователя.

username
Тип Ruby: Строка

Имя пользователя. Значение по умолчанию: name блока ресурса. См. раздел «Синтаксис» выше для получения дополнительной информации.


Общая функциональность ресурса


Ресурсы 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. Доступны следующие таймеры:

: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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса user в рецептах:

Создание системного пользователя

user 'systemguy' do
  comment 'system guy'
  system true
  shell '/bin/false'
end

Создание системного пользователя с переменной

Следующий пример демонстрирует, как создать системного пользователя. В этом случае значение home вычисляется и сохраняется в переменной под названием user_home, которая устанавливает атрибут home пользователя.

user_home = "/home/#{node['cookbook_name']['user']}"

user node['cookbook_name']['user'] do
  gid node['cookbook_name']['group']
  shell '/bin/bash'
  home user_home
  system true
  action :create
end

Использование паролей SALTED-SHA512-PBKDF2

macOS 10.8 (и выше) вычисляет хеш пароля тени с помощью SALTED-SHA512-PBKDF2. Длина значения хеша тени составляет 128 байтов, значение соли — 32 байта, а целое число указывает количество итераций. Следующий код вычислит хеши паролей тени для macOS 10.8 (и выше):

password = 'my_awesome_password'
salt = OpenSSL::Random.random_bytes(32)
iterations = 25000 # Any value above 20k should be fine.

shadow_hash = OpenSSL::PKCS5::pbkdf2_hmac(
  password,
  salt,
  iterations,
  128,
  OpenSSL::Digest::SHA512.new
).unpack('H*').first
salt_value = salt.unpack('H*').first

Использование рассчитанного хеша пароля тени с ресурсом user:

user 'my_awesome_user' do
  password 'cbd1a....fc843'  # Length: 256
  salt 'bd1a....fc83'        # Length: 64
  iterations 25000
end

Ресурс user_ulimit

Страница ресурса user_ulimit

Используйте ресурс user_ulimit для создания отдельных файлов ulimit, которые устанавливаются в каталог /etc/security/limits.d/.

Новое в Chef Infra Client 16.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса user_ulimit:

user_ulimit 'name' do
  core_hard_limit            String, Integer
  core_limit                 String, Integer
  core_soft_limit            String, Integer
  filehandle_hard_limit      String, Integer
  filehandle_limit           String, Integer
  filehandle_soft_limit      String, Integer
  filename                   String
  memory_limit               String, Integer
  process_hard_limit         String, Integer
  process_limit              String, Integer
  process_soft_limit         String, Integer
  rtprio_hard_limit          String, Integer
  rtprio_limit               String, Integer
  rtprio_soft_limit          String, Integer
  stack_hard_limit           String, Integer
  stack_limit                String, Integer
  stack_soft_limit           String, Integer
  username                   String # default value: 'name' unless specified
  virt_limit                 String, Integer
  action                     Symbol # defaults to :create if not specified
end

где:

  • user_ulimit — это ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет, какие шаги клиент Chef Infra предпримет для приведения узла в желаемое состояние.
  • core_hard_limit, core_limit, core_soft_limit, filehandle_hard_limit, filehandle_limit, filehandle_soft_limit, filename, memory_limit, process_hard_limit, process_limit, process_soft_limit, rtprio_hard_limit, rtprio_limit, rtprio_soft_limit, stack_hard_limit, stack_limit, stack_soft_limit, username и virt_limit — доступные свойства для этого ресурса.

Действия


Ресурс user_ulimit имеет следующие действия:

:create
Создать файл конфигурации ulimit. (по умолчанию)
:delete
Удалить существующий файл конфигурации ulimit.
:nothing
Этот блок ресурса не действует, пока другой ресурс не уведомит его о необходимости принять какие-либо действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце работы клиента Chef Infra.

Свойства


Ресурс user_ulimit имеет следующие свойства:

core_hard_limit
Тип Ruby: Строка, Целое число
core_limit
Тип Ruby: Строка, Целое число
core_soft_limit
Тип Ruby: Строка, Целое число
filehandle_hard_limit
Тип Ruby: Строка, Целое число
filehandle_limit
Тип Ruby: Строка, Целое число
filehandle_soft_limit
Тип Ruby: Строка, Целое число
filename
Тип Ruby: Строка | Значение по умолчанию: lazy default
memory_limit
Тип Ruby: Строка, Целое число
process_hard_limit
Тип Ruby: Строка, Целое число
process_limit
Тип Ruby: Строка, Целое число
process_soft_limit
Тип Ruby: Строка, Целое число
rtprio_hard_limit
Тип Ruby: Строка, Целое число
rtprio_limit
Тип Ruby: Строка, Целое число
rtprio_soft_limit
Тип Ruby: Строка, Целое число
stack_hard_limit
Тип Ruby: Строка, Целое число
stack_limit
Тип Ruby: Строка, Целое число
stack_soft_limit
Тип Ruby: Строка, Целое число
username
Тип Ruby: Строка | Значение по умолчанию: The resource block's name
virt_limit
Тип Ruby: Строка, Целое число

Общие функциональные возможности ресурса


Ресурсы Chef включают общие свойства, уведомления и защиты ресурсов.

Общие свойства

Следующие свойства являются общими для всех ресурсов:

compile_time

Тип Ruby: true, false | Значение по умолчанию: false

Управление фазой, в которой ресурс выполняется на узле. Установите в значение true, чтобы запустить его при построении коллекции ресурсов (compile phase). Установите в значение false, чтобы запустить его при настройке узла клиентом Chef Infra (converge phase).

ignore_failure

Тип Ruby: true, false, :quiet | Значение по умолчанию: false

Продолжать выполнение рецепта, если ресурс завершится неудачно по какой-либо причине. :quiet не будет отображать полный стек вызовов, и рецепт будет продолжать выполняться, если ресурс завершится неудачно.

retries

Тип Ruby: Целое число | Значение по умолчанию: 0

Количество попыток перехвата исключений и повторной попытки ресурса.

retry_delay

Тип Ruby: Целое число | Значение по умолчанию: 2

Задержка в секундах между попытками повторного выполнения.

sensitive

Тип Ruby: true, false | Значение по умолчанию: false

Обеспечить, чтобы конфиденциальные данные ресурса не регистрировались клиентом Chef Infra.

Уведомления

notifies

Тип Ruby: Символ, 'Chef::Resource[Строка]'

Ресурс может уведомить другой ресурс о необходимости принять действия при изменении его состояния. Укажите 'resource[name]', :action, которые должен принять ресурс, и :timer для этого действия. Ресурс может уведомить более одного ресурса; используйте инструкцию notifies для каждого уведомляемого ресурса.

Если указанный ресурс не существует, генерируется ошибка. В отличие от этого, subscribes не завершается с ошибкой, если исходный ресурс не найден.

Таймер определяет момент выполнения уведомления во время работы клиента Chef Infra. Доступны следующие таймеры:

: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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса user_ulimit в рецептах:

Установить лимит файлов для пользователя tomcat:

user_ulimit 'tomcat' do
  filehandle_limit 8192
end

Указать имя пользователя, отличное от имени, заданного в блоке ресурса:

user_ulimit 'Bump filehandle limits for tomcat user' do
  username 'tomcat'
  filehandle_limit 8192
end

Установить лимит файлов для пользователя tomcat с нестандартным именем файла:

user_ulimit 'tomcat' do
  filehandle_limit 8192
  filename 'tomcat_filehandle_limits.conf'
end

ресурс windows_ad_join

страница ресурса windows_ad_join

Используйте ресурс windows_ad_join для подключения к домену Windows Active Directory.

Новое в Chef Infra Client 14.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса windows_ad_join:

windows_ad_join 'name' do
  domain_name          String # default value: 'name' unless specified
  domain_password      String
  domain_user          String
  new_hostname         String
  ou_path              String
  reboot               Symbol # default value: :immediate
  reboot_delay         Integer # default value: 0
  workgroup_name       String
  action               Symbol # defaults to :join if not specified
end

где:

  • windows_ad_join — ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет действия, которые Chef Infra Client предпримет для приведения узла к желаемому состоянию.
  • domain_name, domain_password, domain_user, new_hostname, ou_path, reboot, reboot_delay и workgroup_name — доступные свойства этого ресурса.

Действия


Ресурс windows_ad_join имеет следующие действия:

:join
Подключиться к домену Active Directory. (по умолчанию)
:leave
Выйти из домена Active Directory и повторно подключиться к рабочей группе.
:nothing
Этот блок ресурса не действует, пока другой ресурс не уведомит его о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс windows_ad_join имеет следующие свойства:

domain_name
Тип в Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для установки FQDN домена Active Directory для подключения, если он отличается от имени блока ресурса.

domain_password
Тип в Ruby: Строка | REQUIRED

Пароль пользователя домена. Обратите внимание, что этот ресурс по умолчанию скрывает конфиденциальную информацию.

domain_user
Тип в Ruby: Строка | REQUIRED

Пользователь домена, который будет использоваться для подключения к домену.

new_hostname
Тип в Ruby: Строка

Указывает новое имя хоста в новом домене.

Новое в Chef Client 14.5

ou_path
Тип в Ruby: Строка

Путь к Организационной единице, где будет размещен хост.

reboot
Тип в Ruby: Символ | Значение по умолчанию: :immediate Допустимые значения: :delayed, :immediate, :never, :reboot_now, :request_reboot

Управляет поведением перезагрузки системы после подключения к домену. Немедленная перезагрузка, после завершения работы Chef Infra Client или никогда. Обратите внимание, что перезагрузка необходима для вступления изменений в силу.

reboot_delay
Тип в Ruby: Целое число | Значение по умолчанию: 0

Время ожидания (в минутах) запроса перезагрузки.

Новое в Chef Infra Client 16.5

workgroup_name
Тип в Ruby: Строка

Указывает имя рабочей группы, к которой компьютер добавляется при удалении из домена. Значение по умолчанию — WORKGROUP. Это свойство применимо только к действию :leave.

Новое в Chef Infra Client 15.4


Общее функциональное поведение ресурса


Ресурсы 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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса windows_ad_join в рецептах:

Подключение к домену

windows_ad_join 'ad.example.org' do
  domain_user 'nick'
  domain_password 'p@ssw0rd1'
end

Подключение к домену в качестве win-workstation

windows_ad_join 'ad.example.org' do
  domain_user 'nick'
  domain_password 'p@ssw0rd1'
  new_hostname 'win-workstation'
end

Выход из текущего домена и повторное подключение к рабочей группе local

windows_ad_join 'Leave domain' do
  action :leave
  workgroup 'local'
end

Ресурс windows_audit_policy

Страница ресурса windows_audit_policy

Используйте ресурс windows_audit_policy для настройки системных и пользовательских параметров расширенной политики аудита Windows.

Новое в Chef Infra Client 16.2.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса windows_audit_policy:

windows_audit_policy 'name' do
  audit_base_directories       true, false
  audit_base_objects           true, false
  crash_on_audit_fail          true, false
  exclude_user                 String
  failure                      true, false
  full_privilege_auditing      true, false
  include_user                 String
  subcategory                  String, Array
  success                      true, false
  action                       Symbol # defaults to :set if not specified
end

где:

  • windows_audit_policy — это ресурс.
  • name — это имя, заданное для блока ресурсов.
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • audit_base_directories, audit_base_objects, crash_on_audit_fail, exclude_user, failure, full_privilege_auditing, include_user, subcategory и success — доступные свойства этого ресурса.

Действия


Ресурс windows_audit_policy имеет следующие действия:

:nothing
Этот блок ресурсов не действует, если не уведомлён другим ресурсом о необходимости действия. После уведомления этот блок ресурсов либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:set
Настройка политики аудита. (по умолчанию)

Свойства


Ресурс windows_audit_policy имеет следующие свойства:

audit_base_directories
Тип Ruby: true, false

Установив это свойство политики аудита в значение true, вы заставите систему назначать системный список управления доступом именованным объектам для включения аудита контейнерных объектов, таких как каталоги.

audit_base_objects
Тип Ruby: true, false

Установив это свойство политики аудита в значение true, вы заставите систему назначать системный список управления доступом именованным объектам для включения аудита базовых объектов, таких как мьютексы.

crash_on_audit_fail
Тип Ruby: true, false

Установив это свойство политики аудита в значение true, вы заставите систему аварийно завершить работу, если система аудита не может записать события.

exclude_user
Тип Ruby: Строка

Политика аудита, заданная категорией или подкатегорией, применяется на основе пользователя, если указано. Если указан пользователь, пользователь исключается. Включить и исключить нельзя использовать одновременно.

failure
Тип Ruby: true, false

Указать аудит ошибок. Установив это свойство в значение true, ресурс включит аудит ошибок для категории или подкатегории. Успех — значение по умолчанию и применяется, если не указаны ни успех, ни ошибка.

full_privilege_auditing
Тип Ruby: true, false

Установив это свойство политики аудита в значение true, вы заставите выполнить аудит всех изменений привилегий, кроме SeAuditPrivilege. Установка этого свойства может привести к более быстрому заполнению журналов.

include_user
Тип Ruby: Строка

Политика аудита, заданная категорией или подкатегорией, применяется на основе пользователя, если указано. Если указан пользователь, пользователь включается. Включить и исключить нельзя использовать одновременно.

subcategory
Тип Ruby: Строка, Массив

Подкатегория политики аудита, заданная GUID или именем. Применяется на весь компьютер, если пользователь не указан.

success
Тип Ruby: true, false

Указать аудит успехов. Установив это свойство в значение 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[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.

Примеры


В следующих примерах показаны различные подходы к использованию ресурса windows_audit_policy в рецептах:

Установите политику входа и выхода «Успех и ошибка»:

windows_audit_policy "Set Audit Policy for 'Logon and Logoff' actions to 'Success and Failure'" do
  subcategory %w(Logon Logoff)
  success true
  failure true
  action :set
end

Установите политику проверки учетных данных «Успех»:

windows_audit_policy "Set Audit Policy for 'Credential Validation' actions to 'Success'" do
  subcategory 'Credential Validation'
  success true
  failure false
  action :set
end

Включите параметр CrashOnAuditFail:

windows_audit_policy 'Enable CrashOnAuditFail option' do
  crash_on_audit_fail true
  action :set
end

ресурс windows_auto_run

страница ресурса windows_auto_run

Используйте ресурс windows_auto_run для установки приложений, которые запускаются при входе в систему.

Новое в Chef Infra Client 14.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса windows_auto_run:

windows_auto_run 'name' do
  args              String
  path              String
  program_name      String # default value: 'name' unless specified
  root              Symbol # default value: :machine
  action            Symbol # defaults to :create if not specified
end

где:

  • windows_auto_run — это ресурс.
  • name — это имя, заданное для блока ресурса.
  • action определяет, какие действия Chef Infra Client предпримет для приведения узла в нужное состояние.
  • args, path, program_name и root — это доступные свойства этого ресурса.

Действия


Ресурс windows_auto_run имеет следующие действия:

:create
Создает элемент для запуска при входе в систему. (по умолчанию)
:nothing
Этот блок ресурса не выполняется, если не уведомлен другим ресурсом о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:remove
Удаляет элемент, который был ранее настроен для запуска при входе в систему.

Свойства


Ресурс windows_auto_run имеет следующие свойства:

args
Тип Ruby: Строка

Любые аргументы, которые будут использоваться с программой.

path
Тип Ruby: Строка

Путь к программе, которая будет запущена при входе в систему.

program_name
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Имя программы, которая будет запущена при входе в систему, если оно отличается от имени блока ресурса.

root
Тип Ruby: Символ | Значение по умолчанию: :machine Разрешенные значения: :machine, :user

Ключ корневого реестра, под которым будет помещен элемент.


Общие функции ресурсов


Ресурсы 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.

Примеры


В следующих примерах демонстрируются различные подходы к использованию ресурса windows_auto_run в рецептах:

Запуск BGInfo при входе в систему

windows_auto_run 'BGINFO' do
  program 'C:/Sysinternals/bginfo.exe'
  args    ''C:/Sysinternals/Config.bgi' /NOLICPROMPT /TIMER:0'
  action  :create
end

Ресурс windows_certificate

Страница ресурса windows_certificate

Используйте ресурс windows_certificate для установки сертификата в хранилище сертификатов Windows из файла. Ресурс предоставляет только для чтения доступ к закрытому ключу для указанных учетных записей. Из-за текущих ограничений WinRM установка сертификатов удаленно может не работать, если операция требует профиля пользователя. Операции с локальным хранилищем должны работать.

Новое в Chef Infra Client 14.7.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса windows_certificate:

windows_certificate 'name' do
  exportable           true, false # default value: false
  output_path          String
  pfx_password         String
  private_key_acl      Array
  source               String # default value: 'name' unless specified
  store_name           String # default value: "MY"
  user_store           true, false # default value: false
  action               Symbol # defaults to :create if not specified
end

где:

  • windows_certificate — это ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла в нужное состояние.
  • exportable, output_path, pfx_password, private_key_acl, source, store_name и user_store — доступные для этого ресурса свойства.

Действия


Ресурс windows_certificate имеет следующие действия:

:acl_add
Добавляет записи только для чтения в ACL закрытого ключа сертификата.
:create
Создает или обновляет сертификат. (по умолчанию)
:delete
Удаляет сертификат.
:fetch
Получает сертификат.
:nothing
Этот блок ресурса не действует, пока другой ресурс не уведомит его о необходимости действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:verify
Проверяет сертификат и записывает результат в журнал.

Свойства


Ресурс windows_certificate имеет следующие свойства:

exportable
Тип Ruby: true, false | Значение по умолчанию: false

Убедитесь, что импортированный сертификат pfx экспортируемый. Пожалуйста, укажите ‘true’, если вы хотите, чтобы сертификат был экспортируемым.

Новое в Chef Infra Client 16.8

output_path
Тип Ruby: Строка

Путь на узле, куда можно экспортировать объект сертификата (PFX, PEM, CER, KEY и т. д.).

Новое в Chef Infra Client 17.0

pfx_password
Тип Ruby: Строка

Пароль для доступа к объекту, если это файл PFX.

private_key_acl
Тип Ruby: Массив

Массив записей типа «домен\логин» для предоставления доступа только для чтения к закрытому ключу сертификата. Не идемпотентно.

source
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Файл-источник (для create и acl_add), отпечаток (для delete, export и acl_add) или субъект (для delete или export), если они отличаются от имени блока ресурса.

store_name
Тип Ruby: Строка | Значение по умолчанию: MY Допустимые значения: "AUTHROOT", "CA", "CLIENTAUTHISSUER", "DISALLOWED", "MY", "REMOTE DESKTOP", "ROOT", "SMARTCARDROOT", "TRUST", "TRUSTEDDEVICES", "TRUSTEDPEOPLE", "TRUSTEDPUBLISHER", "TrustedPublisher", "WEBHOSTING"

Хранилище сертификатов для обработки.

user_store
Тип Ruby: true, false | Значение по умолчанию: false

Использовать хранилище CurrentUser вместо стандартного хранилища LocalMachine.

Примечание

Перед chef-client 16.10 это свойство игнорировалось.


Общие функциональные возможности ресурсов


Ресурсы 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[Строка]'

Ресурс может следить за другим ресурсом и затем предпринять действие, если состояние наблюдаемого ресурса изменится. Укажите '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, в котором выполняется уведомление. Доступны следующие таймеры:

: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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса windows_certificate в рецептах:

Добавить PFX-сертификат в личный хранилище локальной машины и предоставить учетным записям только чтение для закрытого ключа

windows_certificate 'c:/test/mycert.pfx' do
  pfx_password 'password'
  private_key_acl ["acme\fred", "pc\jane"]
end

Добавить сертификат в доверенное хранилище промежуточных сертификатов

windows_certificate 'c:/test/mycert.cer' do
  store_name 'CA'
end

Удалить все сертификаты, соответствующие субъекту

windows_certificate 'me.acme.com' do
  action :delete
end

ресурс windows_defender

страница ресурса windows_defender

Используйте ресурс windows_defender для включения или отключения службы Microsoft Windows Defender.

Новинка в Chef Infra Client 17.3.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса windows_defender:

windows_defender 'name' do
  intrusion_protection_system      true, false # default value: true
  lock_ui                          true, false # default value: false
  realtime_protection              true, false # default value: true
  scan_archives                    true, false # default value: true
  scan_email                       true, false # default value: false
  scan_mapped_drives               true, false # default value: true
  scan_network_files               true, false # default value: false
  scan_removable_drives            true, false # default value: false
  scan_scripts                     true, false # default value: false
  action                           Symbol # defaults to :enable if not specified
end

где:

  • windows_defender — это ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет действия, которые Клиент Chef Infra предпримет для приведения узла к желаемому состоянию.
  • intrusion_protection_system, lock_ui, realtime_protection, scan_archives, scan_email, scan_mapped_drives, scan_network_files, scan_removable_drives и scan_scripts — доступные свойства этого ресурса.

Действия


Ресурс windows_defender имеет следующие действия:

:disable
Отключить Windows Defender.
:enable
Включить и настроить Windows Defender. (по умолчанию)
:nothing
Этот блок ресурса не действует, пока не будет уведомлен другим ресурсом о необходимости выполнения действия. После уведомления этот блок ресурса выполняется либо немедленно, либо помещается в очередь для выполнения в конце выполнения Клиента Chef Infra.

Свойства


Ресурс windows_defender имеет следующие свойства:

intrusion_protection_system
Тип Ruby: true, false | Значение по умолчанию: true

Включить защиту сети от эксплуатации известных уязвимостей.

lock_ui
Тип Ruby: true, false | Значение по умолчанию: false

Заблокировать пользовательский интерфейс, чтобы предотвратить изменение пользователем настроек Windows Defender.

realtime_protection
Тип Ruby: true, false | Значение по умолчанию: true

Включить сканирование в реальном времени загруженных файлов и вложений.

scan_archives
Тип Ruby: true, false | Значение по умолчанию: true

Сканировать архивные файлы, такие как .zip или .gz.

scan_email
Тип Ruby: true, false | Значение по умолчанию: false

Сканировать электронную почту на предмет вредоносных программ.

scan_mapped_drives
Тип Ruby: true, false | Значение по умолчанию: true

Сканировать файлы на подключенных сетевых дисках.

scan_network_files
Тип Ruby: true, false | Значение по умолчанию: false

Сканировать файлы в сети.

scan_removable_drives
Тип Ruby: true, false | Значение по умолчанию: false

Сканировать содержимое съемных дисков.

scan_scripts
Тип Ruby: true, false | Значение по умолчанию: false

Сканировать скрипты во время сканирования на вредоносное ПО.


Общая функциональность ресурса


Ресурсы Chef включают общие свойства, уведомления и защиты ресурсов.

Общие свойства

Следующие свойства являются общими для всех ресурсов:

compile_time

Тип Ruby: true, false | Значение по умолчанию: false

Управлять фазой, в которой ресурс запускается на узле. Установить в true, чтобы запустить во время создания коллекции ресурсов (compile phase). Установить в false, чтобы запустить во время конфигурации узла Клиентом Chef Infra (converge phase).

ignore_failure

Тип Ruby: true, false, :quiet | Значение по умолчанию: false

Продолжать выполнение рецепта, если ресурс завершится неудачно по любой причине. :quiet не отобразит полную трассировку стека, и рецепт продолжит выполнение, если ресурс завершится неудачно.

retries

Тип Ruby: Целое число | Значение по умолчанию: 0

Количество попыток перехватить исключения и повторить ресурс.

retry_delay

Тип Ruby: Целое число | Значение по умолчанию: 2

Задержка в секундах между попытками повтора.

sensitive

Тип Ruby: true, false | Значение по умолчанию: false

Обеспечить, чтобы конфиденциальные данные ресурса не регистрировались Клиентом Chef Infra.

Уведомления

notifies

Тип Ruby: Символ, 'Chef::Resource[Строка]'

Ресурс может уведомить другой ресурс о необходимости выполнить действие при изменении его состояния. Укажите 'resource[name]', :action, которое этот ресурс должен выполнить, а затем :timer для этого действия. Ресурс может уведомить более одного ресурса; используйте оператор notifies для каждого ресурса, который необходимо уведомить.

Если указанный ресурс не существует, генерируется ошибка. В отличие от этого, subscribes не завершится неудачей, если исходный ресурс не найден.

Таймер указывает момент во время выполнения Клиента Chef Infra, в котором выполняется уведомление. Доступны следующие таймеры:

:before

Указывает, что действие над уведомлённым ресурсом должно быть выполнено до обработки блока ресурса, в котором находится уведомление.

:delayed

По умолчанию. Указывает, что уведомление должно быть помещено в очередь и затем выполнено в конце выполнения Клиента Chef Infra.

: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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса windows_defender в рецептах:

Настройка параметров антивируса Windows Defender:

windows_defender 'Configure Defender' do
  realtime_protection true
  intrusion_protection_system true
  lock_ui true
  scan_archives true
  scan_scripts true
  scan_email true
  scan_removable_drives true
  scan_network_files false
  scan_mapped_drives false
  action :enable
end

Отключение антивируса Windows Defender:

windows_defender 'Disable Defender' do
  action :disable
end

Ресурс windows_defender_exclusion

Страница ресурса windows_defender_exclusion

Используйте ресурс windows_defender_exclusion для исключения путей, процессов или типов файлов из сканирования защиты в реальном времени Windows Defender.

Новое в Chef Infra Client 17.3.

Синтаксис


Полный синтаксис для всех свойств, доступных для ресурса windows_defender_exclusion:

windows_defender_exclusion 'name' do
  extensions         String, Array # default value: []
  paths              String, Array # default value: []
  process_paths      String, Array # default value: []
  action             Symbol # defaults to :add if not specified
end

где:

  • windows_defender_exclusion — это ресурс.
  • name — это имя, заданное для блока ресурса.
  • action определяет, какие шаги Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • extensions, paths и process_paths — это доступные свойства для этого ресурса.

Действия


Ресурс windows_defender_exclusion имеет следующие действия:

:add
Добавить исключение в Windows Defender. (по умолчанию)
:nothing
Этот блок ресурса не действует, пока не получит уведомление от другого ресурса о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:remove
Удалить исключение из Windows Defender.

Свойства


Ресурс windows_defender_exclusion имеет следующие свойства:

extensions
Тип Ruby: Строка, массив | Значение по умолчанию: []

Расширения файлов, которые нужно исключить из сканирования.

paths
Тип Ruby: Строка, массив | Значение по умолчанию: []

Пути к файлам или каталогам, которые нужно исключить из сканирования.

process_paths
Тип Ruby: Строка, массив | Значение по умолчанию: []

Пути к исполняемым файлам, которые нужно исключить из сканирования.


Общие функции ресурса


Ресурсы 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 и затем :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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса windows_defender_exclusion в рецептах:

Добавление исключённых элементов в сканирование Windows Defender:

windows_defender_exclusion 'Add to things to be excluded from scanning' do
  paths 'c:\foo\bar, d:\bar\baz'
  extensions 'png, foo, ppt, doc'
  process_paths 'c:\windows\system32'
  action :add
end

Удаление исключённых элементов из сканирования Windows Defender:

windows_defender_exclusion 'Remove things from the list to be excluded' do
  process_paths 'c:\windows\system32'
  action :remove
end

Ресурс windows_dfs_folder

Страница ресурса windows_dfs_folder

Используйте ресурс windows_dfs_folder для создания папки в DFS на любом требуемом уровне вложенности.

Новое в Chef Infra Client 15.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса windows_dfs_folder:

windows_dfs_folder 'name' do
  description         String
  folder_path         String # default value: 'name' unless specified
  namespace_name      String
  target_path         String
  action              Symbol # defaults to :create if not specified
end

где:

  • windows_dfs_folder — это ресурс.
  • name — это имя, заданное для блока ресурса.
  • action определяет, какие шаги Chef Infra Client предпримет для приведения узла в нужное состояние.
  • description, folder_path, namespace_name и target_path — доступные свойства данного ресурса.

Действия


Ресурс windows_dfs_folder имеет следующие действия:

:create
Создаёт папку в пространстве имён dfs. (по умолчанию)
:delete
Удаляет папку из пространства имён dfs.
:nothing
Этот блок ресурса не действует, пока не получит уведомление от другого ресурса о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс windows_dfs_folder имеет следующие свойства:

description
Тип Ruby: Строка

Описание для общего доступа.

folder_path
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для задания пути к папке dfs, если он отличается от имени блока ресурса.

namespace_name
Тип Ruby: Строка | REQUIRED

Пространство имён, в котором это должно быть создано.

target_path
Тип Ruby: Строка

Целевой объект, к которому подключит этот путь.


Общие возможности ресурсов


Ресурсы 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, которое нужно выполнить, и затем :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.

Примеры


Этот ресурс не имеет примеров.

ресурс windows_dfs_namespace

страница ресурса windows_dfs_namespace

Используйте ресурс windows_dfs_namespace для создания общего доступа и пространства имен DFS на сервере Windows.

Впервые появился в Chef Infra Client 15.0.

Синтаксис


Полный синтаксис для всех свойств, доступных для ресурса windows_dfs_namespace:

windows_dfs_namespace 'name' do
  change_users        Array # default value: []
  description         String
  full_users          Array # default value: ["BUILTIN\\administrators"]
  namespace_name      String # default value: 'name' unless specified
  read_users          Array # default value: []
  root                String # default value: "C:\\DFSRoots"
  action              Symbol # defaults to :create if not specified
end

где:

  • windows_dfs_namespace — это ресурс.
  • name — имя, данное блоку ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • change_users, description, full_users, namespace_name, read_users и root — доступные свойства для этого ресурса.

Действия


Ресурс windows_dfs_namespace имеет следующие действия:

:create
Создаёт пространство имён dfs на сервере. (по умолчанию)
:delete
Удаляет пространство имён DFS, включая директорию на диске.
:nothing
Этот блок ресурса не выполняет действий, пока не получит уведомление от другого ресурса о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс windows_dfs_namespace имеет следующие свойства:

change_users
Тип Ruby: Массив | Значение по умолчанию: []

Определяет, какие пользователи должны иметь доступ к изменению общего доступа.

description
Тип Ruby: Строка | REQUIRED

Описание общего доступа.

full_users
Тип Ruby: Массив | Значение по умолчанию: ["BUILTIN\\administrators"]

Определяет, какие пользователи должны иметь полный доступ к общему доступу.

namespace_name
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для установки пространства имён dfs, если оно отличается от имени блока ресурса.

read_users
Тип Ruby: Массив | Значение по умолчанию: []

Определяет, какие пользователи должны иметь доступ для чтения к общему доступу.

root
Тип Ruby: Строка | Значение по умолчанию: C:\DFSRoots

Корневой каталог для создания дерева DFS. По умолчанию C:\DFSRoots.


Общие функциональные возможности ресурсов


Ресурсы 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 для этого действия. Ресурс может уведомить несколько ресурсов; используйте оператор 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.

Примеры


Этот ресурс не имеет примеров.

ресурс windows_dfs_server

страница ресурса windows_dfs_server

Используйте ресурс windows_dfs_server для установки системных настроек DFS.

Впервые появился в Chef Infra Client 15.0.

Синтаксис


Полный синтаксис для всех свойств, доступных для ресурса windows_dfs_server:

windows_dfs_server 'name' do
  enable_site_costed_referrals      true, false # default value: false
  ldap_timeout_secs                 Integer # default value: 30
  prefer_login_dc                   true, false # default value: false
  sync_interval_secs                Integer # default value: 3600
  use_fqdn                          true, false # default value: false
  action                            Symbol # defaults to :configure if not specified
end

где:

  • windows_dfs_server — это ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет действия, которые Chef Infra Client предпримет для приведения узла к желаемому состоянию.
  • enable_site_costed_referrals, ldap_timeout_secs, prefer_login_dc, sync_interval_secs и use_fqdn — доступные свойства этого ресурса.

Действия


Ресурс windows_dfs_server имеет следующие действия:

:configure
Настройка параметров DFS (по умолчанию)
:nothing
Этот блок ресурса не выполняет никаких действий, пока другой ресурс не уведомит его о необходимости выполнить действие. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс windows_dfs_server имеет следующие свойства:

enable_site_costed_referrals
Тип Ruby: true, false | Значение по умолчанию: false
ldap_timeout_secs
Тип Ruby: Целое число | Значение по умолчанию: 30
prefer_login_dc
Тип Ruby: true, false | Значение по умолчанию: false
sync_interval_secs
Тип Ruby: Целое число | Значение по умолчанию: 3600
use_fqdn
Тип Ruby: true, false | Значение по умолчанию: false

Указывает, использует ли сервер пространства имен DFS FQDN в ссылках. Если это свойство установлено в значение true, сервер использует FQDN в ссылках. Если это свойство установлено в значение false, сервер использует имена NetBIOS.


Общие функции ресурсов


Ресурсы 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.

Примеры


Этот ресурс не имеет примеров.

Ресурс windows_dns_record

Страница ресурса windows_dns_record

Ресурс windows_dns_record создает запись DNS для заданного домена.

Новое в Chef Infra Client 15.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса windows_dns_record:

windows_dns_record 'name' do
  dns_server       String # default value: "localhost"
  record_name      String # default value: 'name' unless specified
  record_type      String # default value: "ARecord"
  target           String
  zone             String
  action           Symbol # defaults to :create if not specified
end

где:

  • windows_dns_record — это ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет действия, которые Chef Infra Client предпримет для приведения узла к желаемому состоянию.
  • dns_server, record_name, record_type, target и zone — доступные свойства этого ресурса.

Действия


Ресурс windows_dns_record имеет следующие действия:

:create
Создает и обновляет запись DNS. (по умолчанию)
:delete
Удаляет запись DNS.
:nothing
Этот блок ресурса не выполняет никаких действий, пока другой ресурс не уведомит его о необходимости выполнить действие. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс windows_dns_record имеет следующие свойства:

dns_server
Тип Ruby: Строка | Значение по умолчанию: localhost

Имя сервера DNS, на котором должна быть создана запись.

Новое в Chef Infra Client 16.3

record_name
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для установки имени записи dns, если оно отличается от имени блока ресурса.

record_type
Тип Ruby: Строка | Значение по умолчанию: ARecord Разрешённые значения: "ARecord", "CNAME", "PTR"

Тип записи для создания, может быть ARecord, CNAME или PTR.

target
Тип Ruby: Строка | REQUIRED

Целевой ресурс для записи.

zone
Тип Ruby: Строка | REQUIRED

Зона для создания записи.


Общие возможности ресурса


Ресурсы 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]', действие, которое нужно выполнить, и :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.

Примеры


Этот ресурс не имеет примеров.

ресурс windows_dns_zone

страница ресурса windows_dns_zone

Ресурс windows_dns_zone создаёт зону DNS Active Directory Integrated на локальном сервере.

Новое в Chef Infra Client 15.0.

Синтаксис


Полный синтаксис всех свойств, доступных ресурсу windows_dns_zone:

windows_dns_zone 'name' do
  replication_scope      String # default value: "Domain"
  server_type            String # default value: "Domain"
  zone_name              String # default value: 'name' unless specified
  action                 Symbol # defaults to :create if not specified
end

где:

  • windows_dns_zone — это ресурс.
  • name — это имя блока ресурса.
  • action определяет действия Chef Infra Client для приведения узла к желаемому состоянию.
  • replication_scope, server_type и zone_name — доступные свойства этого ресурса.

Действия


Ресурс windows_dns_zone имеет следующие действия:

:create
Создаёт и обновляет зону DNS. (по умолчанию)
:delete
Удаляет зону DNS.
:nothing
Этот блок ресурса не действует, пока не получит уведомление от другого ресурса о выполнении действия. После получения уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс windows_dns_zone имеет следующие свойства:

replication_scope
Тип Ruby: Строка | Значение по умолчанию: Domain

Область репликации для зоны, требуется, если тип сервера установлен в «Домен».

server_type
Тип Ruby: Строка | Значение по умолчанию: Domain Разрешённые значения: "Domain", "Standalone"

Тип сервера DNS, Домен или Автономный.

zone_name
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для установки имени зоны DNS, если оно отличается от имени блока ресурса.


Общие возможности ресурса


Ресурсы 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.

Примеры


У этого ресурса нет примеров.

ресурс windows_env

страница ресурса windows_env

Используйте ресурс windows_env для управления ключами среды в Microsoft Windows. После установки ключа среды Microsoft Windows необходимо перезагрузить, прежде чем ключ среды станет доступным для планировщика задач.

Этот ресурс ранее назывался ресурсом env; его имя было обновлено в Chef Infra Client 14.0, чтобы отразить тот факт, что поддерживается только Windows. Существующие кулинарные книги, использующие env, продолжат функционировать, но должны быть обновлены для использования нового имени.

Примечание

В системах на основе UNIX лучший способ управления ключами среды — это переменная ENV в Ruby; однако этот подход не имеет такого же долговременного эффекта, как использование ресурса windows_env.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса windows_env:

windows_env 'name' do
  delim         String, false
  key_name      String # default value: 'name' unless specified
  user          String # default value: "<System>"
  value         String
  action        Symbol # defaults to :create if not specified
end

где:

  • windows_env — это ресурс.
  • name — имя блока ресурса.
  • action определяет действия, которые Chef Infra Client выполнит, чтобы привести узел в желаемое состояние.
  • delim, key_name, user и value — доступные свойства этого ресурса.

Действия


Ресурс windows_env имеет следующие действия:

:create
Создать переменную среды. Если переменная среды уже существует (но не совпадает), обновить эту переменную среды, чтобы она соответствовала. (по умолчанию)
:delete
Удалить переменную среды.
:modify
Изменить существующую переменную среды. Это добавляет новое значение к существующему значению, используя разделитель, указанный свойством delim.
:nothing
Этот блок ресурса не действует, пока не будет уведомлён другим ресурсом о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс windows_env имеет следующие свойства:

delim
Тип Ruby: Строка, false

Разделитель, используемый для разделения нескольких значений для одного ключа.

key_name
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для установки имени ключа, который должен быть создан, удалён или изменён, если он отличается от имени блока ресурса.

user
Тип Ruby: Строка | Значение по умолчанию: <System>
value
Тип Ruby: Строка | REQUIRED

Значение переменной среды, которое нужно установить.


Общие функциональные возможности ресурсов


Ресурсы Chef включают общие свойства, уведомления и охранные свойства ресурсов.

Общие свойства

Следующие свойства общие для всех ресурсов:

compile_time

Тип Ruby: true, false | Значение по умолчанию: false

Управляет фазой, в которой ресурс выполняется на узле. Установите значение true, чтобы запустить его во время создания коллекции ресурсов (compile phase). Установите значение false, чтобы запустить его во время конфигурирования узла клиентом Chef Infra (converge phase).

ignore_failure

Тип Ruby: true, false, :quiet | Значение по умолчанию: false

Продолжать выполнение рецепта, если ресурс завершился неудачно по любой причине. :quiet не будет отображать полный стек вызовов, и рецепт будет продолжать выполняться, если ресурс завершится неудачно.

retries

Тип Ruby: Целое число | Значение по умолчанию: 0

Количество попыток перехватить исключения и повторить ресурс.

retry_delay

Тип Ruby: Целое число | Значение по умолчанию: 2

Задержка в секундах между попытками повтора.

sensitive

Тип Ruby: true, false | Значение по умолчанию: false

Гарантирует, что конфиденциальные данные ресурсов не регистрируются клиентом Chef Infra.

Уведомления

notifies

Тип Ruby: Символ, 'Chef::Resource[String]'

Ресурс может уведомить другой ресурс о выполнении действия при изменении его состояния. Укажите 'resource[name]', :action, которое должен выполнить ресурс, и затем :timer для этого действия. Один ресурс может уведомлять несколько ресурсов; используйте оператор notifies для каждого ресурса, которому необходимо отправить уведомление.

Если указанный ресурс не существует, возникает ошибка. В отличие от этого, subscribes не завершится ошибкой, если исходный ресурс не найден.

Таймер указывает момент во время выполнения клиента Chef Infra, в который выполняется уведомление. Доступны следующие таймеры:

:before

Указывает, что действие по уведомлённому ресурсу должно быть выполнено до обработки блока ресурса, в котором находится уведомление.

:delayed

По умолчанию. Указывает, что уведомление должно быть поставлено в очередь и выполнено в конце выполнения клиента Chef Infra.

: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, в котором выполняется уведомление. Доступны следующие таймеры:

: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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса windows_env в рецептах:

Установить переменную среды:

windows_env 'ComSpec' do
  value 'C:\Windows\system32\cmd.exe'
end

Ресурс windows_feature

страница ресурса windows_feature

Используйте ресурс windows_feature для добавления, удаления или полного удаления функций и ролей Windows. Этот ресурс вызывает ресурсы windows_feature_dism или windows_feature_powershell в зависимости от указанного метода установки и по умолчанию использует DISM, который доступен в редакциях Windows Workstation и Server.

Новинка в Chef Infra Client 14.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса windows_feature:

windows_feature 'name' do
  all                   true, false # default value: false
  feature_name          Array, String # default value: 'name' unless specified
  install_method        Symbol # default value: :windows_feature_dism
  management_tools      true, false # default value: false
  source                String
  timeout               Integer # default value: 600
  action                Symbol # defaults to :install if not specified
end

где:

  • windows_feature — это ресурс.
  • name — это имя, данное блоку ресурса.
  • action определяет шаги, которые клиент Chef Infra предпримет, чтобы привести узел в нужное состояние.
  • all, feature_name, install_method, management_tools, source и timeout — это доступные свойства этого ресурса.

Действия


Ресурс windows_feature имеет следующие действия:

:delete
Удалить роль или функцию Windows из образа.
:install
Установить роль или функцию Windows. (по умолчанию)
:nothing
Этот блок ресурса не выполняет никаких действий, пока другой ресурс не уведомит его о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо ставится в очередь для выполнения в конце выполнения клиента Chef Infra.
:remove
Удалить роль или функцию Windows.

Свойства


Ресурс windows_feature имеет следующие свойства:

all
Тип Ruby: true, false | Значение по умолчанию: false

Установить все подфункции.

feature_name
Тип Ruby: Массив, Строка | Значение по умолчанию: The resource block's name

Имя функции(ей) или роли(ей) для установки, если они отличаются от имени блока ресурса. Одна и та же функция может иметь разные имена в зависимости от используемого базового метода установки (например, DHCPServer против DHCP; DNS-Server-Full-Role против DNS).

install_method
Тип Ruby: Символ | Значение по умолчанию: :windows_feature_dism Допустимые значения: :windows_feature_dism, :windows_feature_powershell, :windows_feature_servermanagercmd

Базовый метод установки для установки функции. Укажите :windows_feature_dism для DISM или :windows_feature_powershell для PowerShell.

management_tools
Тип Ruby: true, false | Значение по умолчанию: false

Установить все применимые средства управления для ролей, служб ролей или функций (только PowerShell).

source
Тип Ruby: Строка

Укажите локальный репозиторий для установки функции.

timeout
Тип Ruby: Целое число | Значение по умолчанию: 600

Указывает тайм-аут (в секундах) для установки функции.


Общие функции ресурса


Ресурсы 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]', действие, которое нужно выполнить, и затем :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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса windows_feature в рецептах:

Установка функции DHCP Server:

windows_feature 'DHCPServer' do
  action :install
end

Установка функции .Net 3.5.1 с использованием файлов репозитория на DVD:

windows_feature "NetFx3" do
  action :install
  source 'd:\sources\sxs'
end

Удаление функций Telnet Server и Client:

windows_feature %w(TelnetServer TelnetClient) do
  action :remove
end

Добавление функции SMTP Server с использованием поставщика PowerShell:

windows_feature 'smtp-server' do
  action :install
  all true
  install_method :windows_feature_powershell
end

Установка нескольких функций с использованием одного ресурса с поставщиком PowerShell:

windows_feature %w(Web-Asp-Net45 Web-Net-Ext45) do
  action :install
  install_method :windows_feature_powershell
end

Установка функции Network Policy and Access Service, включая инструменты управления:

windows_feature 'NPAS' do
  action :install
  management_tools true
  install_method :windows_feature_powershell
end

Ресурс windows_feature_dism

Страница ресурса windows_feature_dism

Используйте ресурс windows_feature_dism для добавления, удаления или полного удаления функций и ролей Windows с помощью DISM.

Новое в Chef Infra Client 14.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса windows_feature_dism:

windows_feature_dism 'name' do
  all               true, false # default value: false
  feature_name      Array, String # default value: 'name' unless specified
  source            String
  timeout           Integer # default value: 600
  action            Symbol # defaults to :install if not specified
end

где:

  • windows_feature_dism — ресурс.
  • name — имя блока ресурса.
  • action — определяет действия, которые Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • all, feature_name, source и timeout — доступные свойства данного ресурса.

Действия


Ресурс windows_feature_dism имеет следующие действия:

:delete
Удаление роли или функции Windows из образа с помощью DISM.
:install
Установка роли или функции Windows с помощью DISM. (по умолчанию)
:nothing
Этот блок ресурса не выполняется, если не уведомлен другим ресурсом о действии. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:remove
Удаление роли или функции Windows с помощью DISM.

Свойства


Ресурс windows_feature_dism имеет следующие свойства:

all
Тип в Ruby: true, false | Значение по умолчанию: false

Установить все подфункции. При установке в true это эквивалентно указанию переключателя /All к dism.exe

feature_name
Тип в Ruby: Массив, Строка | Значение по умолчанию: The resource block's name

Имя функции(ей) или роли(ей) для установки, если они отличаются от имени ресурса.

source
Тип в Ruby: Строка

Укажите локальный репозиторий для установки функции.

timeout
Тип в Ruby: Целое число | Значение по умолчанию: 600

Указывает таймаут (в секундах) для установки функции.


Общая функциональность ресурсов


Ресурсы Chef включают общие свойства, уведомления и защитные механизмы ресурсов.

Общие свойства

Следующие свойства являются общими для всех ресурсов:

compile_time

Тип Ruby: true, false | Значение по умолчанию: false

Управляет фазой, в которой ресурс выполняется на узле. Установите значение true, чтобы запустить во время построения коллекции ресурсов (compile phase). Установите значение false, чтобы запустить во время конфигурирования узла клиентом Chef Infra (converge phase).

ignore_failure

Тип Ruby: true, false, :quiet | Значение по умолчанию: false

Продолжать выполнение рецепта, если ресурс завершился ошибкой по любой причине. :quiet не будет отображать полный стек отладки, и рецепт будет продолжать выполняться, если ресурс завершится ошибкой.

retries

Тип Ruby: Целое число | Значение по умолчанию: 0

Количество попыток перехватить исключения и повторить ресурс.

retry_delay

Тип Ruby: Целое число | Значение по умолчанию: 2

Задержка в секундах между попытками повтора.

sensitive

Тип Ruby: true, false | Значение по умолчанию: false

Обеспечить, чтобы конфиденциальные данные ресурсов не регистрировались клиентом Chef Infra.

Уведомления

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.

Примеры


В следующих примерах демонстрируются различные подходы к использованию ресурса windows_feature_dism в рецептах:

Установка службы TelnetClient:

windows_feature_dism "TelnetClient"

Установка двух функций с помощью массива:

windows_feature_dism %w(TelnetClient TFTP)

Ресурс windows_feature_powershell

Страница ресурса windows_feature_powershell

Используйте ресурс windows_feature_powershell для добавления, удаления или полного удаления функций и ролей Windows с помощью PowerShell. Этот ресурс предлагает существенные преимущества в скорости по сравнению с ресурсом windows_feature_dism, но требует установки Remote Server Administration Tools на несерверных версиях Windows.

Новое в Chef Infra Client 14.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса windows_feature_powershell:

windows_feature_powershell 'name' do
  all                   true, false # default value: false
  feature_name          Array, String # default value: 'name' unless specified
  management_tools      true, false # default value: false
  source                String
  timeout               Integer # default value: 600
  action                Symbol # defaults to :install if not specified
end

где:

  • windows_feature_powershell — это ресурс.
  • name — это имя, присваиваемое блоку ресурса.
  • action определяет действия, которые Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • all, feature_name, management_tools, source и timeout — это свойства, доступные для данного ресурса.

Действия


Ресурс windows_feature_powershell имеет следующие действия:

:delete
Удаление роли или функции Windows из образа с помощью PowerShell.
:install
Установка роли или функции Windows с помощью PowerShell (по умолчанию).
:nothing
Этот блок ресурса не действует, пока другой ресурс не уведомит его о необходимости принять какое-либо действие. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:remove
Удаление роли или функции Windows с помощью PowerShell.

Свойства


Ресурс windows_feature_powershell имеет следующие свойства:

all
Тип Ruby: true, false | Значение по умолчанию: false

Устанавливает все подфункции. При установке в true это эквивалентно указанию переключателя -InstallAllSubFeatures с Add-WindowsFeature.

feature_name
Тип Ruby: Массив, Строка | Значение по умолчанию: The resource block's name

Имя функции(й) или роли(й) для установки, если они отличаются от имени блока ресурса.

management_tools
Тип Ruby: true, false | Значение по умолчанию: false

Установка всех применимых инструментов управления для ролей, служб ролей или функций.

source
Тип Ruby: Строка

Укажите локальный репозиторий для установки функции.

timeout
Тип Ruby: Целое число | Значение по умолчанию: 600

Указывает тайм-аут (в секундах) для установки функции.


Общие возможности ресурсов


Ресурсы Chef включают общие свойства, уведомления и защиты ресурсов.

Общие свойства

Следующие свойства являются общими для всех ресурсов:

compile_time

Тип Ruby: true, false | Значение по умолчанию: false

Управляет фазой, в которой ресурс выполняется на узле. Установите значение true, чтобы выполнить его во время построения коллекции ресурсов (compile phase). Установите значение false, чтобы выполнить его во время настройки узла клиентом Chef Infra (converge phase).

ignore_failure

Тип Ruby: true, false, :quiet | Значение по умолчанию: false

Продолжать выполнение рецепта, если ресурс завершился ошибкой по какой-либо причине. :quiet не отобразит полный стек вызовов, и рецепт будет продолжен в случае ошибки ресурса.

retries

Тип Ruby: Целое число | Значение по умолчанию: 0

Количество попыток перехватить исключения и повторить ресурс.

retry_delay

Тип Ruby: Целое число | Значение по умолчанию: 2

Задержка в секундах между попытками повтора.

sensitive

Тип Ruby: true, false | Значение по умолчанию: false

Обеспечить, чтобы конфиденциальные данные ресурса не регистрировались клиентом Chef Infra.

Уведомления

notifies

Тип Ruby: Символ, 'Chef::Resource[String]'

Ресурс может уведомить другой ресурс о действии при изменении его состояния. Укажите 'resource[name]', :action, который должен выполнить ресурс, и :timer для этого действия. Ресурс может уведомить несколько ресурсов; используйте оператор notifies для каждого уведомляемого ресурса.

Если указанный ресурс не существует, генерируется ошибка. В отличие от этого, subscribes не завершится ошибкой, если исходный ресурс не найден.

Таймер определяет момент во время выполнения клиента Chef Infra, в котором выполняется уведомление. Доступны следующие таймеры:

:before

Указывает, что действие над уведомленным ресурсом должно выполняться до обработки блока ресурса, в котором расположено уведомление.

:delayed

По умолчанию. Указывает, что уведомление должно быть помещено в очередь и выполнено в конце выполнения клиента Chef Infra.

: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, в котором выполняется уведомление. Доступны следующие таймеры:

: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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса windows_feature_powershell в рецептах:

Добавить функцию SMTP Server:

windows_feature_powershell "smtp-server" do
  action :install
  all true
end

Установить несколько функций с помощью одного ресурса:

windows_feature_powershell ['Web-Asp-Net45', 'Web-Net-Ext45'] do
  action :install
end

Установить функцию Network Policy and Access Service:

windows_feature_powershell 'NPAS' do
  action :install
  management_tools true
end

Ресурс windows_firewall_profile

Страница ресурса windows_firewall_profile

Используйте ресурс windows_firewall_profile для включения, отключения и настройки брандмауэра Windows.

Новое в Chef Infra Client 16.3.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса windows_firewall_profile:

windows_firewall_profile 'name' do
  allow_inbound_rules             true, false, String
  allow_local_firewall_rules      true, false, String
  allow_local_ipsec_rules         true, false, String
  allow_unicast_response          true, false, String
  allow_user_apps                 true, false, String
  allow_user_ports                true, false, String
  default_inbound_action          String
  default_outbound_action         String
  display_notification            true, false, String
  profile                         String # default value: 'name' unless specified
  action                          Symbol # defaults to :enable if not specified
end

где:

  • windows_firewall_profile — это ресурс.
  • name — имя заданного блока ресурса.
  • action определяет, какие действия клиент Chef Infra выполнит для приведения узла в нужное состояние.
  • allow_inbound_rules, allow_local_firewall_rules, allow_local_ipsec_rules, allow_unicast_response, allow_user_apps, allow_user_ports, default_inbound_action, default_outbound_action, display_notification и profile — это доступные свойства данного ресурса.

Действия


Ресурс windows_firewall_profile имеет следующие действия:

:disable
Отключить профиль брандмауэра Windows.
:enable
Включить и (по желанию) настроить профиль брандмауэра Windows. (по умолчанию)
:nothing
Этот блок ресурса не выполняет действия, пока другой ресурс не уведомит его о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения клиента Chef Infra.

Свойства


Ресурс windows_firewall_profile имеет следующие свойства:

allow_inbound_rules
Тип Ruby: true, false, Строка Разрешенные значения: true, false, "NotConfigured"

Разрешить пользователям устанавливать правила входящего брандмауэра

allow_local_firewall_rules
Тип Ruby: true, false, Строка Разрешенные значения: true, false, "NotConfigured"

Объединяет правила входящего брандмауэра в политику

allow_local_ipsec_rules
Тип Ruby: true, false, Строка Разрешенные значения: true, false, "NotConfigured"

Разрешить пользователям управлять правилами безопасности локального подключения

allow_unicast_response
Тип Ruby: true, false, Строка Разрешенные значения: true, false, "NotConfigured"

Разрешить одноадресные ответы на многоадресные и широковещательные сообщения

allow_user_apps
Тип Ruby: true, false, Строка Разрешенные значения: true, false, "NotConfigured"

Разрешить пользовательским приложениям управлять брандмауэром

allow_user_ports
Тип Ruby: true, false, Строка Разрешенные значения: true, false, "NotConfigured"

Разрешить пользователям управлять правилами портов брандмауэра

default_inbound_action
Тип Ruby: Строка Разрешенные значения: "Allow", "Block", "NotConfigured"

Установить политику по умолчанию для входящего сетевого трафика

default_outbound_action
Тип Ruby: Строка Разрешенные значения: "Allow", "Block", "NotConfigured"

Установить политику по умолчанию для исходящего сетевого трафика

display_notification
Тип Ruby: true, false, Строка Разрешенные значения: true, false, "NotConfigured"

Отображать уведомление, когда брандмауэр блокирует определенную активность

profile
Тип Ruby: Строка | Значение по умолчанию: The resource block's name Разрешенные значения: "Domain", "Private", "Public"

Установить профиль Windows, который настраивается


Общие возможности ресурсов


Ресурсы 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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса windows_firewall_profile в рецептах:

Включение и настройка частного профиля Windows Firewall:

windows_firewall_profile 'Private' do
  default_inbound_action 'Block'
  default_outbound_action 'Allow'
  allow_inbound_rules true
  display_notification false
  action :enable
end

Включение и настройка публичного профиля Windows Firewall:

windows_firewall_profile 'Public' do
  default_inbound_action 'Block'
  default_outbound_action 'Allow'
  allow_inbound_rules false
  display_notification false
  action :enable
end

Отключение доменного профиля Windows Firewall:

windows_firewall_profile 'Disable the Domain Profile of the Windows Firewall' do
  profile 'Domain'
  action :disable
end

Ресурс windows_firewall_rule

Страница ресурса windows_firewall_rule

Используйте ресурс windows_firewall_rule для создания, изменения или удаления правил брандмауэра Windows.

Новое в Chef Infra Client 14.7.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса windows_firewall_rule:

windows_firewall_rule 'name' do
  description          String
  direction            Symbol, String # default value: :inbound
  displayname          String # default value: The rule_name property value.
  enabled              true, false # default value: true
  firewall_action      Symbol, String # default value: :allow
  group                String
  icmp_type            String, Integer # default value: "Any"
  interface_type       Symbol, String # default value: :any
  local_address        String
  local_port           String, Integer, Array
  profile              Symbol, String, Array # default value: :any
  program              String
  protocol             String # default value: "TCP"
  remote_address       String, Array
  remote_port          String, Integer, Array
  rule_name            String # default value: 'name' unless specified
  service              String
  action               Symbol # defaults to :create if not specified
end

где:

  • windows_firewall_rule — ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action — определяет шаги, которые Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • description, direction, displayname, enabled, firewall_action, group, icmp_type, interface_type, local_address, local_port, profile, program, protocol, remote_address, remote_port, rule_name и service — доступные свойства этого ресурса.

Действия


Ресурс windows_firewall_rule имеет следующие действия:

:create
Создать запись брандмауэра Windows. (по умолчанию)
:delete
Удалить существующую запись брандмауэра Windows.
:nothing
Этот блок ресурса не выполняется, пока другой ресурс не уведомит его о выполнении действия. После уведомления этот блок ресурса выполняется либо немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс windows_firewall_rule имеет следующие свойства:

description
Тип Ruby: Строка

Описание, которое нужно назначить правилу брандмауэра.

direction
Тип Ruby: Символ, Строка | Значение по умолчанию: :inbound Допустимые значения: :inbound, :outbound

Направление правила брандмауэра. Направление означает входной или выходной трафик.

displayname
Тип Ruby: Строка | Значение по умолчанию: The rule_name property value.

Имя для отображения, которое нужно назначить правилу брандмауэра.

Новое в Chef Infra Client 16.0

enabled
Тип Ruby: true, false | Значение по умолчанию: true

Включено ли правило брандмауэра.

firewall_action
Тип Ruby: Символ, Строка | Значение по умолчанию: :allow Допустимые значения: :allow, :block, :notconfigured

Действие правила брандмауэра.

group
Тип Ruby: Строка

Указывает, что копируются только соответствующие правила брандмауэра указанной группы ассоциаций.

Новое в Chef Infra Client 16.0

icmp_type
Тип Ruby: Строка, Целое число | Значение по умолчанию: Any

Указывает параметр ICMP Type для использования протокола, начинающегося с ICMP

Новое в Chef Infra Client 16.0

interface_type
Тип Ruby: Символ, Строка | Значение по умолчанию: :any Допустимые значения: :any, :remoteaccess, :wired, :wireless

Тип интерфейса, к которому применяется правило брандмауэра.

local_address
Тип Ruby: Строка

Локальный адрес, к которому применяется правило брандмауэра.

local_port
Тип Ruby: Строка, Целое число, Массив

Локальный порт, к которому применяется правило брандмауэра.

profile
Тип Ruby: Символ, Строка, Массив | Значение по умолчанию: :any

Профиль, к которому применяется правило брандмауэра.

program
Тип Ruby: Строка

Программа, к которой применяется правило брандмауэра.

protocol
Тип Ruby: Строка | Значение по умолчанию: TCP

Протокол, к которому применяется правило брандмауэра.

remote_address
Тип Ruby: Строка, Массив

Удаленные адрес(ы), к которым применяется правило брандмауэра.

remote_port
Тип Ruby: Строка, Целое число, Массив

Удаленный порт, к которому применяется правило брандмауэра.

rule_name
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для установки имени правила брандмауэра, если оно отличается от имени блока ресурса.

service
Тип Ruby: Строка

Сервис, к которому применяется правило брандмауэра.


Общие возможности ресурса


Ресурсы 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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса windows_firewall_rule в рецептах:

Разрешение доступа к порту 80:

windows_firewall_rule 'IIS' do
  local_port '80'
  protocol 'TCP'
  firewall_action :allow
end

Настройка нескольких портов удаленных адресов в правиле:

windows_firewall_rule 'MyRule' do
  description          'Testing out remote address arrays'
  enabled              false
  local_port           1434
  remote_address       %w(10.17.3.101 172.7.7.53)
  protocol             'TCP'
  action               :create
end

Разрешение протокола ICMPv6 с типом ICMP:

windows_firewall_rule 'CoreNet-Rule' do
  rule_name 'CoreNet-ICMP6-LR2-In'
  display_name 'Core Networking - Multicast Listener Report v2 (ICMPv6-In)'
  local_port 'RPC'
  protocol 'ICMPv6'
  icmp_type '8'
end

Блокировка WinRM по HTTP на конкретном IP:

windows_firewall_rule 'Disable WinRM over HTTP' do
  local_port '5985'
  protocol 'TCP'
  firewall_action :block
  local_address '192.168.1.1'
end

Удаление существующего правила

windows_firewall_rule 'Remove the SSH rule' do
  rule_name 'ssh'
  action :delete
end

Ресурс windows_font

Страница ресурса windows_font

Используйте ресурс windows_font для установки файлов шрифтов в Windows. По умолчанию шрифт берется из кулинарной книги с помощью ресурса, но также можно указать источник URI.

Новое в Chef Infra Client 14.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса windows_font:

windows_font 'name' do
  font_name      String # default value: 'name' unless specified
  source         String
  action         Symbol # defaults to :install if not specified
end

где:

  • windows_font — ресурс.
  • name — имя, данное блоку ресурса.
  • action — определяет шаги, которые Chef Infra Client предпримет для приведения узла к желаемому состоянию.
  • font_name и source — доступные свойства этого ресурса.

Действия


Ресурс windows_font имеет следующие действия:

:install
Установить шрифт в системный каталог шрифтов. (по умолчанию)
:nothing
Этот блок ресурса не выполняет никаких действий, если не уведомлен другим ресурсом о выполнении действия. После уведомления этот блок ресурса выполняется немедленно или ставится в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс windows_font имеет следующие свойства:

font_name
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для установки имени шрифта для установки, если оно отличается от имени блока ресурса.

source
Тип Ruby: Строка

Локальный путь к файлу системы или URI, используемый для получения файла шрифта.


Общие функциональные возможности ресурсов


Ресурсы 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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса windows_font в рецептах:

Установка шрифта из источника https:

windows_font 'Custom.otf' do
  source 'https://example.com/Custom.otf'
end

ресурс windows_package

страница ресурса windows_package

Используйте ресурс windows_package для управления пакетами на платформе Microsoft Windows. Ресурс windows_package поддерживает следующие форматы установщиков:

  • Пакет Microsoft Installer (MSI)
  • Система установщиков Nullsoft Scriptable Install (NSIS)
  • Inno Setup (inno)
  • Wise
  • InstallShield
  • Пользовательские установщики, например установка файла, не являющегося .msi, который включает установщик на основе .msi

Для обеспечения идемпотентности действия :install или для включения действия :remove без указанного свойства source, package_name ДОЛЖЕН точно соответствовать имени, используемому установщиком пакета. Названия установленных пакетов, о которых знает Windows, можно найти в разделе Установка и удаление программ, в выводе команды ohai packages или в свойстве DisplayName в одном из следующих элементов реестра Windows:

  • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall
  • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall
  • HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall

Примечание

Если установлено несколько версий пакета с одинаковым отображаемым именем, все эти пакеты будут удалены, если не указана версия в свойстве version или если она не может быть определена в файле установщика, указанном в свойстве source.

Примечание

Во многих случаях лучше использовать ресурс package вместо этого. Это связано с тем, что когда ресурс package используется в рецепте, клиент Chef Infra Client будет использовать данные, собранные Ohai в начале выполнения Chef Infra Client, чтобы определить правильное приложение пакета. Использование ресурса package позволяет создавать рецепты, которые можно использовать на многих платформах.

Синтаксис


Блок ресурса windows_package управляет пакетом на узле, как правило, устанавливая его. Самый простой способ использования ресурса windows_package:

windows_package 'package_name'

который установит указанный пакет с использованием всех параметров по умолчанию и действия по умолчанию (:install).

Полный синтаксис всех свойств, доступных для ресурса windows_package:

windows_package 'name' do
  checksum                    String
  installer_type              Symbol
  options                     String
  package_name                String
  remote_file_attributes      Hash
  returns                     String, Integer, Array
  source                      String # default value: "The resource block's name"
  timeout                     String, Integer # default value: "600 (seconds)"
  version                     String
  action                      Symbol # defaults to :install if not specified
end

где:

  • windows_package — это ресурс.
  • name — это имя, данное блоку ресурса.
  • action определяет, какие шаги клиент Chef Infra Client выполнит для приведения узла в желаемое состояние.
  • checksum, installer_type, options, package_name, remote_file_attributes, returns, source, timeout и version — это доступные свойства этого ресурса.

Действия


Ресурс windows_package имеет следующие действия:

:install
По умолчанию. Установка пакета. Если версия указана, устанавливается указанная версия пакета.
:nothing
Этот блок ресурса не действует, пока другой ресурс не уведомит его о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения клиента Chef Infra Client.
:remove
Удаление пакета.

Свойства


Ресурс windows_package имеет следующие свойства:

checksum
Тип Ruby: Строка

Контрольная сумма SHA-256 файла. Используется для предотвращения повторной загрузки файла. Если локальный файл соответствует контрольной сумме, Chef Infra Client не загружает его. Используется, когда URL задаётся свойством source.

installer_type
Тип Ruby: Символ Допустимые значения: :custom, :inno, :installshield, :msi, :nsis, :wise

Символ, определяющий тип пакета. Возможные значения: :custom (например, для установки файла без расширения .msi, содержащего установщик на основе .msi), :inno (Inno Setup), :installshield (InstallShield), :msi (пакет Microsoft Installer (MSI)), :nsis (Nullsoft Scriptable Install System (NSIS)), :wise (Wise).

options
Тип Ruby: Строка

Одна или несколько дополнительных опций, передаваемых команде.

package_name
Тип Ruby: Строка

Необязательное свойство для установки имени пакета, если оно отличается от имени блока ресурса.

remote_file_attributes
Тип Ruby: Словарь

Это свойство позволяет определить словарь свойств и их значений, если исходный пакет для установки находится в удалённом месте. Этот словарь будет использован ресурсом remote_file, который загрузит исходный пакет.

returns
Тип Ruby: Строка, целое число, массив целых чисел | Значение по умолчанию: 0 (success) and 3010 (success where a reboot is necessary)

Список кодов возврата, разделённых запятыми, указывающих на успех или неудачу команды пакета, которая была запущена.

source
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Путь к пакету в локальной файловой системе. Расположение пакета может быть URL-адресом.

Если свойство source не указано, имя пакета ДОЛЖНО точно совпадать с именем, отображаемым в "Установка и удаление программ" или точно совпадать со свойством DisplayName в соответствующем ключе реестра, который может быть одним из следующих:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall
HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall

Примечание

Если установлено несколько версий пакета с одинаковым отображаемым именем, все эти пакеты будут удалены, если не указана версия в свойстве version или если она не может быть определена в файле установщика, указанном в свойстве source.

timeout
Тип Ruby: Строка, целое число | Значение по умолчанию: 600 (seconds)

Время ожидания (в секундах) перед истечением времени.

version
Тип Ruby: Строка

Версия пакета, который нужно установить или обновить.


Общие функциональные возможности ресурса


Ресурсы 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, которое нужно выполнить, и :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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса windows_package в рецептах:

Установка пакета:

windows_package '7zip' do
  action :install
  source 'C:\7z920.msi'
end

Указание URL для атрибута source:

windows_package '7zip' do
  source 'http://www.7-zip.org/a/7z938-x64.msi'
end

Указание пути и контрольной суммы:

windows_package '7zip' do
  source 'http://www.7-zip.org/a/7z938-x64.msi'
  checksum '7c8e873991c82ad9cfc123415254ea6101e9a645e12977dcd518979e50fdedf3'
end

Изменение атрибутов ресурса remote_file:

Ресурс windows_package может указать пакет в удалённом месте с помощью свойства remote_file_attributes. Это использует ресурс remote_file для загрузки содержимого по указанному URL и передаёт словарь, изменяющий свойства ресурса remote_file.

windows_package '7zip' do
  source 'http://www.7-zip.org/a/7z938-x64.msi'
  remote_file_attributes ({
    :path => 'C:\7zip.msi',
    :checksum => '7c8e873991c82ad9cfc123415254ea6101e9a645e12977dcd518979e50fdedf3'
  })
end

Загрузка пакета nsis (Nullsoft):

windows_package 'Mercurial 3.6.1 (64-bit)' do
  source 'http://mercurial.selenic.com/release/windows/Mercurial-3.6.1-x64.exe'
  checksum 'febd29578cb6736163d232708b834a2ddd119aa40abc536b2c313fc5e1b5831d'
end

Загрузка пользовательского пакета:

windows_package 'Microsoft Visual C++ 2005 Redistributable' do
  source 'https://download.microsoft.com/download/6/B/B/6BB661D6-A8AE-4819-B79F-236472F6070C/vcredist_x86.exe'
  installer_type :custom
  options '/Q'
end

windows_pagefile resource

windows_pagefile resource page

Используйте ресурс windows_pagefile для настройки параметров файла подкачки в Windows.

Новинка в Chef Infra Client 14.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса windows_pagefile:

windows_pagefile 'name' do
  automatic_managed      true, false
  initial_size           Integer
  maximum_size           Integer
  path                   String # default value: 'name' unless specified
  system_managed         true, false
  action                 Symbol # defaults to :set if not specified
end

где:

  • windows_pagefile — ресурс.
  • name — имя блока ресурса.
  • action определяет, какие шаги предпримет Chef Infra Client для приведения узла в нужное состояние.
  • automatic_managed, initial_size, maximum_size, path и system_managed — доступные свойства этого ресурса.

Действия


Ресурс windows_pagefile имеет следующие действия:

:delete
Удаляет указанный файл подкачки.
:nothing
Этот блок ресурса не выполняет действий, пока не получит уведомление от другого ресурса. После уведомления этот блок либо выполняется немедленно, либо добавляется в очередь для выполнения в конце выполнения Chef Infra Client.
:set
Настраивает файл подкачки по умолчанию, создавая его, если он не существует. (по умолчанию)

Свойства


Ресурс windows_pagefile имеет следующие свойства:

automatic_managed
Тип Ruby: true, false

Включает автоматическое управление начальным и максимальным размером файла подкачки. Установка значения true игнорирует свойства initial_size и maximum_size.

initial_size
Тип Ruby: Целое число

Начальный размер файла подкачки в мегабайтах.

maximum_size
Тип Ruby: Целое число

Максимальный размер файла подкачки в мегабайтах.

path
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для задания имени файла подкачки, если оно отличается от имени блока ресурса.

system_managed
Тип Ruby: true, false

Настраивает, управляет ли система размером файла подкачки.


Общие функциональные возможности ресурсов


Ресурсы 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:

not_if

Запретить выполнение ресурса, когда условие возвращает true.

only_if

Разрешить выполнение ресурса только в том случае, если условие возвращает true.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса windows_pagefile в рецептах:

Установить систему для управления файлами подкачки:

windows_pagefile 'Enable automatic management of pagefiles' do
  automatic_managed true
end

Удалить файл подкачки:

windows_pagefile 'Delete the pagefile' do
  path 'C'
  action :delete
end

Переключиться на управление файлами подкачки системой:

windows_pagefile 'Change the pagefile to System Managed' do
  path 'E:'
  system_managed true
  action :set
end

Создать файл подкачки с начальным и максимальным размером:

windows_pagefile 'create the pagefile with these sizes' do
  path 'f:'
  initial_size 100
  maximum_size 200
end

windows_path ресурс

страница ресурса windows_path

Используйте ресурс windows_path для управления переменной среды PATH в Microsoft Windows.

Новинка в Chef Infra Client 13.4.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса windows_path:

windows_path 'name' do
  path      String # default value: 'name' unless specified
  action    Symbol # defaults to :add if not specified
end

где:

  • windows_path — ресурс.
  • name — имя блока ресурса.
  • action определяет, какие шаги предпримет Chef Infra Client для приведения узла в нужное состояние.
  • path — свойство, доступное для этого ресурса.

Действия


Ресурс windows_path имеет следующие действия:

:add
Добавить элемент в системный путь. (по умолчанию)
:nothing
Этот блок ресурса не выполняет действий, пока не получит уведомление от другого ресурса. После уведомления этот блок либо выполняется немедленно, либо добавляется в очередь для выполнения в конце выполнения Chef Infra Client.
:remove
Удалить элемент из системного пути.

Свойства


У ресурса windows_path следующие свойства:

path
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для установки значения пути, если оно отличается от имени блока ресурса.


Общие функции ресурсов


Ресурсы Chef включают общие свойства, уведомления и защитные механизмы ресурсов.

Общие свойства

Следующие свойства общие для всех ресурсов:

compile_time

Тип Ruby: true, false | Значение по умолчанию: false

Управляет фазой, в которой ресурс выполняется на узле. Установите в значение true, чтобы запустить его во время построения коллекции ресурсов (compile phase). Установите в значение false, чтобы запустить его во время настройки узла клиентом Chef Infra (converge phase).

ignore_failure

Тип Ruby: true, false, :quiet | Значение по умолчанию: false

Продолжать выполнение рецепта, если ресурс завершится неудачно по любой причине. :quiet не будет отображать полный стек отладки, и рецепт продолжит выполнение, если ресурс завершится неудачно.

retries

Тип Ruby: Целое число | Значение по умолчанию: 0

Количество попыток перехвата исключений и повторного выполнения ресурса.

retry_delay

Тип Ruby: Целое число | Значение по умолчанию: 2

Задержка в секундах между попытками повтора.

sensitive

Тип Ruby: true, false | Значение по умолчанию: false

Обеспечить, чтобы конфиденциальные данные ресурсов не регистрировались клиентом Chef Infra.

Уведомления

notifies

Тип Ruby: Символ, 'Chef::Resource[String]'

Ресурс может уведомить другой ресурс о выполнении действия при изменении его состояния. Укажите 'resource[name]', :action, который должен выполнить ресурс, а затем :timer для этого действия. Ресурс может уведомить больше одного ресурса; для каждого уведомляемого ресурса используйте инструкцию notifies.

Если указанный ресурс не существует, возникает ошибка. В отличие от этого, subscribes не завершится ошибкой, если исходный ресурс не найден.

Таймер указывает момент во время выполнения клиента Chef Infra, в котором выполняется уведомление. Доступны следующие таймеры:

:before

Указывает, что действие над уведомленным ресурсом должно выполняться до обработки блока ресурса, в котором находится уведомление.

:delayed

По умолчанию. Указывает, что уведомление должно быть поставлено в очередь и затем выполнено в конце выполнения клиента Chef Infra.

: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, в котором выполняется уведомление. Доступны следующие таймеры:

: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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса windows_path в рецептах:

Добавление Sysinternals в системный путь:

windows_path 'C:\Sysinternals' do
  action :add
end

Удаление 7-Zip из системного пути:

windows_path 'C:\7-Zip' do
  action :remove
end

Ресурс windows_printer

Страница ресурса windows_printer

Используйте ресурс windows_printer для настройки принтеров Windows. Этот ресурс автоматически установит драйвер, указанный в свойстве driver_name, и автоматически создаст порт принтера, используя либо свойство ipv4_address, либо свойство port_name.

Новинка в Chef Infra Client 14.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса windows_printer:

windows_printer 'name' do
  comment           String
  create_port       true, false # default value: true
  default           true, false # default value: false
  device_id         String # default value: 'name' unless specified
  driver_name       String
  ipv4_address      String
  location          String
  port_name         String
  share_name        String
  shared            true, false # default value: false
  action            Symbol # defaults to :create if not specified
end

где:

  • windows_printer — ресурс.
  • name — имя, данное блоку ресурса.
  • action — определяет действия, которые клиент Chef Infra предпримет, чтобы привести узел в желаемое состояние.
  • comment, create_port, default, device_id, driver_name, ipv4_address, location, port_name, share_name и shared — доступные свойства этого ресурса.

Действия


Ресурс windows_printer имеет следующие действия:

:create
Создает новый принтер и порт принтера, если они еще не существуют. (по умолчанию)
:delete
Удаляет существующий принтер. Обратите внимание, что этот ресурс не удаляет связанный порт принтера.
:nothing
Этот блок ресурса не действует, если не уведомлен другим ресурсом о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения клиента Chef Infra.

Свойства


Ресурс windows_printer имеет следующие свойства:

comment
Тип Ruby: Строка

Необязательное описание очереди принтера.

create_port
Тип Ruby: true, false | Значение по умолчанию: true

Создать порт принтера для принтера. Установите это значение в false и укажите свойство port_name, если для создания порта используется ресурс windows_printer_port.

Новинка в Chef Infra Client 17.3

default
Тип Ruby: true, false | Значение по умолчанию: false

Определяет, будет ли это принтер по умолчанию для системы.

device_id
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для установки имени очереди принтера, если оно отличается от имени блока ресурса. Пример: HP LJ 5200 in fifth floor copy room.

driver_name
Тип Ruby: Строка | REQUIRED

Точное имя драйвера принтера, установленного в системе.

ipv4_address
Тип Ruby: Строка

IP-адрес принтера, например, 10.4.64.23

location
Тип Ruby: Строка

Расположение принтера, например, Fifth floor copy room.

port_name
Тип Ruby: Строка | Значение по умолчанию: The resource block name or the ipv4_address prepended with IP_.

Имя порта.

Новое в Chef Infra Client 17.3

share_name
Тип Ruby: Строка

Имя, используемое для идентификации общего принтера.

shared
Тип Ruby: true, false | Значение по умолчанию: false

Определяет, является ли принтер общим.


Функциональность общего ресурса


Ресурсы 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]', действие, которое нужно выполнить, и затем :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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса windows_printer в рецептах:

Создание принтера:

windows_printer 'HP LaserJet 5th Floor' do
  driver_name 'HP LaserJet 4100 Series PCL6'
  ipv4_address '10.4.64.38'
end

Удаление принтера:

Примечание: это не удаляет связанный порт принтера. См. windows_printer_port выше, чтобы узнать, как удалить порт.

windows_printer 'HP LaserJet 5th Floor' do
  action :delete
end

Создание порта принтера и принтера, использующего этот порт (ново в 17.3)

windows_printer_port '10.4.64.39' do
  port_name 'My awesome printer port'
  snmp_enabled true
  port_protocol 2
end

windows_printer 'HP LaserJet 5th Floor' do
  driver_name 'HP LaserJet 4100 Series PCL6'
  port_name 'My awesome printer port'
  ipv4_address '10.4.64.38'
  create_port false
end

Ресурс windows_printer_port

Страница ресурса windows_printer_port

Используйте ресурс windows_printer_port для создания и удаления портов принтеров TCP/IPv4 в Windows.

Ново в Chef Infra Client 14.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса windows_printer_port:

windows_printer_port 'name' do
  ipv4_address       String # default value: 'name' unless specified
  port_name          String
  port_number        Integer # default value: 9100
  port_protocol      Integer # default value: 1
  snmp_enabled       true, false # default value: false
  action             Symbol # defaults to :create if not specified
end

где:

  • windows_printer_port — это ресурс.
  • name — это имя, заданное для блока ресурса.
  • action определяет действия, которые Chef Infra Client предпримет, чтобы привести узел в желаемое состояние.
  • ipv4_address, port_name, port_number, port_protocol и snmp_enabled — это доступные свойства этого ресурса.

Действия


Ресурс windows_printer_port имеет следующие действия:

:create
Создать или обновить порт принтера. (по умолчанию)
:delete
Удалить существующий порт принтера.
:nothing
Этот блок ресурса не выполняется, если другой ресурс не уведомит его о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс windows_printer_port имеет следующие свойства:

ipv4_address
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для IPv4-адреса принтера, если он отличается от имени блока ресурса.

port_name
Тип Ruby: Строка | Значение по умолчанию: The resource block name or the ipv4_address prepended with IP_.

Имя порта.

port_number
Тип Ruby: Целое число | Значение по умолчанию: 9100

Номер TCP-порта.

port_protocol
Тип Ruby: Целое число | Значение по умолчанию: 1 Разрешенные значения: 1, 2

Протокол порта принтера: 1 (RAW) или 2 (LPR).

snmp_enabled
Тип Ruby: true, false | Значение по умолчанию: false

Определяет, включен ли SNMP на порте.


Функциональность общего ресурса


Ресурсы Chef включают общие свойства, уведомления и блокировки ресурсов.

Общие свойства

Следующие свойства являются общими для каждого ресурса:

compile_time

Тип Ruby: true, false | Значение по умолчанию: false

Управляет фазой, в которой ресурс выполняется на узле. Установите в значение true, чтобы выполнить его во время построения коллекции ресурсов (compile phase). Установите в значение false, чтобы выполнить его во время конфигурирования узла клиентом Chef Infra (converge phase).

ignore_failure

Тип Ruby: true, false, :quiet | Значение по умолчанию: false

Продолжать выполнение рецепта, если ресурс завершился ошибкой по любой причине. :quiet не отобразит полный стек вызовов, и рецепт продолжит выполнение, если ресурс завершится ошибкой.

retries

Тип Ruby: Целое число | Значение по умолчанию: 0

Количество попыток перехватить исключения и повторить ресурс.

retry_delay

Тип Ruby: Целое число | Значение по умолчанию: 2

Задержка в секундах между попытками повтора.

sensitive

Тип Ruby: true, false | Значение по умолчанию: false

Обеспечить, чтобы конфиденциальные данные ресурса не регистрировались клиентом Chef Infra.

Уведомления

notifies

Тип Ruby: Символ, 'Chef::Resource[String]'

Ресурс может уведомить другой ресурс о выполнении действия при изменении его состояния. Укажите 'resource[name]', :action, который должен выполнить ресурс, и затем :timer для этого действия. Ресурс может уведомлять несколько ресурсов; используйте инструкцию notifies для каждого уведомляемого ресурса.

Если указанный ресурс не существует, возникает ошибка. В отличие от этого, subscribes не завершится ошибкой, если исходный ресурс не найден.

Таймер определяет момент во время выполнения клиента Chef Infra, в котором выполняется уведомление. Доступны следующие таймеры:

:before

Указывает, что действие над уведомлённым ресурсом должно быть выполнено до обработки блока ресурса, в котором расположено уведомление.

:delayed

По умолчанию. Указывает, что уведомление должно быть помещено в очередь и затем выполнено в конце выполнения клиента Chef Infra.

: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, в котором выполняется уведомление. Доступны следующие таймеры:

: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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса windows_printer_port в рецептах:

Удалить порт принтера

windows_printer_port '10.4.64.37' do
  action :delete
end

Удалить порт с пользовательским именем порта

windows_printer_port '10.4.64.38' do
  port_name 'My awesome port'
  action :delete
end

Создать порт с дополнительными параметрами

windows_printer_port '10.4.64.39' do
  port_name 'My awesome port'
  snmp_enabled true
  port_protocol 2
end

Ресурс windows_security_policy

Страница ресурса windows_security_policy

Используйте ресурс windows_security_policy для установки политики безопасности на платформе Microsoft Windows.

Новое в Chef Infra Client 16.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса windows_security_policy:

windows_security_policy 'name' do
  secoption      String # default value: 'name' unless specified
  secvalue       String
  action         Symbol # defaults to :set if not specified
end

где:

  • windows_security_policy — это ресурс.
  • name — это имя, присвоенное блоку ресурса.
  • action определяет шаги, которые выполнит клиент Chef Infra для перевода узла в желаемое состояние.
  • secoption и secvalue — это доступные свойства этого ресурса.

Действия


Ресурс windows_security_policy имеет следующие действия:

:nothing
Этот блок ресурса не действует, если не уведомлён другим ресурсом о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения клиента Chef Infra.
:set
Установить политику безопасности Windows (по умолчанию)

Свойства


Ресурс windows_security_policy имеет следующие свойства:

secoption
Тип Ruby: Строка | Значение по умолчанию: The resource block's name | REQUIRED Допустимые значения: "AuditPolicyChange", "ClearTextPassword", "EnableAdminAccount", "EnableGuestAccount", "ForceLogoffWhenHourExpire", "LSAAnonymousNameLookup", "LockoutBadCount", "LockoutDuration", "LockoutDuration", "MaximumPasswordAge", "MinimumPasswordAge", "MinimumPasswordLength", "NewAdministratorName", "NewGuestName", "PasswordComplexity", "PasswordHistorySize", "RequireLogonToChangePassword", "ResetLockoutCount"

Имя политики, которая должна быть установлена на платформе Windows для поддержания её безопасности.

secvalue
Тип Ruby: Строка | REQUIRED

Значение политики, которое должно быть установлено для имени политики.


Общие функциональные возможности ресурсов


Ресурсы Chef включают общие свойства, уведомления и фильтры ресурсов.

Общие свойства

Следующие свойства общие для каждого ресурса:

compile_time

Тип Ruby: true, false | Значение по умолчанию: false

Управляет фазой, в которой ресурс выполняется на узле. Установите в значение true, чтобы выполнить его во время построения коллекции ресурсов (compile phase). Установите в значение false, чтобы выполнить его во время конфигурирования узла клиентом Chef Infra (converge phase).

ignore_failure

Тип Ruby: true, false, :quiet | Значение по умолчанию: false

Продолжать выполнение рецепта, если ресурс завершился ошибкой по любой причине. :quiet не отобразит полный стек вызовов, и рецепт продолжит выполнение, если ресурс завершится ошибкой.

retries

Тип Ruby: Целое число | Значение по умолчанию: 0

Количество попыток перехватить исключения и повторить ресурс.

retry_delay

Тип Ruby: Целое число | Значение по умолчанию: 2

Задержка в секундах между попытками повтора.

sensitive

Тип Ruby: true, false | Значение по умолчанию: false

Обеспечить, чтобы конфиденциальные данные ресурса не регистрировались клиентом Chef Infra.

Уведомления

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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса windows_security_policy в рецептах:

Установить учетную запись администратора в состояние Enabled:

windows_security_policy 'EnableAdminAccount' do
  secvalue       '1'
  action         :set
end

Переименовать учетную запись администратора:

windows_security_policy 'NewAdministratorName' do
  secvalue       'AwesomeChefGuy'
  action         :set
end

Установить учетную запись Гостя в состояние Disabled:

windows_security_policy 'EnableGuestAccount' do
  secvalue       '0'
  action         :set
end

Ресурс windows_service

Страница ресурса windows_service

Используйте ресурс windows_service для создания, удаления или управления службой на платформе Microsoft Windows.

Синтаксис


Блок ресурса windows_service управляет состоянием службы на машине под управлением Microsoft Windows. Например:

windows_service 'BITS' do
  action :configure_startup
  startup_type :manual
end

Полный синтаксис всех свойств, доступных для ресурса windows_service:

windows_service 'name' do
  binary_path_name      String
  delayed_start         true, false # default value: false
  dependencies          String, Array
  description           String
  desired_access        Integer # default value: 983551
  display_name          String
  error_control         Integer # default value: 1
  init_command          String
  load_order_group      String
  pattern               String
  reload_command        String, false
  restart_command       String, false
  run_as_password       String
  run_as_user           String # default value: "LocalSystem"
  service_name          String # default value: 'name' unless specified
  service_type          Integer # default value: "SERVICE_WIN32_OWN_PROCESS"
  start_command         String, false
  startup_type          Symbol # default value: :automatic
  status_command        String, false
  stop_command          String, false
  supports              Hash # default value: {"restart"=>nil, "reload"=>nil, "status"=>nil}
  timeout               Integer
  action                Symbol # defaults to :nothing if not specified
end

где:

  • windows_service — это ресурс.
  • name — это имя, присвоенное блоку ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • binary_path_name, display_name, desired_access, delayed_start, dependencies, description, error_control, init_command, load_order_group, pattern, reload_command, restart_command, run_as_password, run_as_user, service_name, service_type, start_command, startup_type, status_command, stop_command, supports и timeout — это свойства этого ресурса, с указанным типом Ruby. См. раздел «Свойства» ниже, чтобы узнать больше о всех свойствах, которые можно использовать с этим ресурсом.

Действия


Ресурс windows_service имеет следующие действия:

:configure
Настройка существующей службы. Новое в Chef Client 14.0.
:configure_startup
Настройка службы на основе значения свойства startup_type.
:create
Создание службы на основе значения свойств binary_path_name, service_name и/или display_name. Новое в Chef Client 14.0.
:delete
Удаление службы на основе значения свойства service_name. Новое в Chef Client 14.0.
:disable
Отключить службу. Это действие эквивалентно типу запуска Disabled на платформе Microsoft Windows.
:enable
Включить службу при загрузке. Это действие эквивалентно типу запуска Automatic на платформе Microsoft Windows.
:nothing
По умолчанию. Ничего не делать со службой.
:reload
Перезагрузка конфигурации этой службы. Это действие не поддерживается на платформе Windows и вызовет ошибку при использовании.
:restart
Перезапустить службу.
:start
Запустить службу и поддерживать её работу до остановки или отключения.
:stop
Остановить службу.

Свойства


Ресурс windows_service имеет следующие свойства:

binary_path_name
Тип Ruby: Строка

Полный путь к исполняемому файлу службы. Путь также может включать аргументы для службы автозапуска. Требуется для действий :create и :configure

Новое в Chef Client 14.0

delayed_start
Тип Ruby: true, false | Значение по умолчанию: false

Установить тип запуска на отложенный запуск. Это применимо только если startup_type — :automatic

Новое в Chef Client 14.0

dependencies
Тип Ruby: Строка, Массив

Указатель на массив имен служб или групп порядка загрузки, разделенных нулями. Укажите nil или пустую строку, если у службы нет зависимостей. Зависимость от группы означает, что эта служба может работать, если хотя бы один член группы работает после попытки запустить всех членов группы.

Новое в Chef Client 14.0

description
Тип Ruby: Строка

Описание службы.

Новое в Chef Client 14.0

desired_access
Тип Ruby: Целое число | Значение по умолчанию: 983551

Новое в Chef Client 14.0

display_name
Тип Ruby: Строка

Используемое пользователем отображаемое имя для идентификации службы. Длина этой строки не должна превышать 256 символов.

Новое в Chef Client 14.0

error_control
Тип Ruby: Целое число | Значение по умолчанию: 1

Новое в Chef Client 14.0

load_order_group
Тип Ruby: Строка

Имя группы(групп) загрузки службы.

Новое в Chef Client 14.0

pattern
Тип Ruby: Строка | Значение по умолчанию: The value provided to 'service_name' or the resource block's name

Шаблон для поиска в таблице процессов.

reload_command
Тип Ruby: Строка, ложь

Команда для перезагрузки конфигурации службы.

restart_command
Тип Ruby: Строка, ложь

Команда для перезапуска службы.

run_as_password
Тип Ruby: Строка

Пароль для пользователя, указанного в run_as_user.

run_as_user
Тип Ruby: Строка | Значение по умолчанию: localsystem

Пользователь, под которым выполняется служба Microsoft Windows.

service_name
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для установки имени службы, если оно отличается от имени блока ресурсов.

service_type
Тип Ruby: Целое число | Значение по умолчанию: 16

Новое в Chef Client 14.0

start_command
Тип Ruby: Строка, ложь

Команда для запуска службы.

startup_type
Тип Ruby: Символ | Значение по умолчанию: :automatic Разрешенные значения: :automatic, :disabled, :manual

Используется для указания типа запуска службы.

status_command
Тип Ruby: Строка, ложь

Команда для проверки состояния работы службы.

stop_command
Тип Ruby: Строка, ложь

Команда для остановки службы.

supports
Тип Ruby: Словарь | Значение по умолчанию: {"restart"=>nil, "reload"=>nil, "status"=>nil}

Список свойств, контролирующих, как Chef Infra Client пытается управлять службой: :restart, :reload, :status. Для :restart скрипт init или другой поставщик служб может использовать команду перезапуска; если :restart не указано, Chef Infra Client пытается остановить, а затем запустить службу. Для :reload скрипт init или другой поставщик служб может использовать команду перезагрузки. Для :status скрипт init или другой поставщик служб может использовать команду состояния для определения, запущена ли служба; если :status не указано, Chef Infra Client пытается сопоставить service_name с таблицей процессов как регулярное выражение, если шаблон не указан как свойство параметра. Значение по умолчанию: { restart: false, reload: false, status: false } для всех платформ (за исключением семейства платформ Red Hat, для которых значение по умолчанию — { restart: false, reload: false, status: true }.)

timeout
Тип Ruby: Целое число | Значение по умолчанию: 60

Время ожидания (в секундах) перед таймаутом.


Функциональность общего ресурса


Ресурсы 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, которые необходимо выполнить, и :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.

Примеры


В следующих примерах показаны различные подходы к использованию ресурса windows_service в рецептах:

Запуск служб

Запустить службу с типом запуска manual:

windows_service 'BITS' do
  action :configure_startup
  startup_type :manual
end

Создание служб

Создать службу с именем chef-client:

windows_service 'chef-client' do
  action :create
  binary_path_name "C:\opscode\chef\bin"
end

Создать службу с service_name и display_name:

windows_service 'Setup chef-client as a service' do
  action :create
  display_name 'CHEF-CLIENT'
  service_name 'chef-client'
  binary_path_name "C:\opscode\chef\bin"
end

Создать службу с типом запуска manual:

windows_service 'chef-client' do
  action :create
  binary_path_name "C:\opscode\chef\bin"
  startup_type :manual
end

Создать службу с типом запуска disabled:

windows_service 'chef-client' do
  action :create
  binary_path_name "C:\opscode\chef\bin"
  startup_type :disabled
end

Создать службу с типом запуска automatic и включенным отложенным запуском:

windows_service 'chef-client' do
  action :create
  binary_path_name "C:\opscode\chef\bin"
  startup_type :automatic
  delayed_start true
end

Создать службу с описанием:

windows_service 'chef-client' do
  action :create
  binary_path_name "C:\opscode\chef\bin"
  startup_type :automatic
  description "Chef client as service"
end

Удаление служб

Удалить службу с именем chef-client:

windows_service 'chef-client' do
  action :delete
end

Удалить службу с свойством service_name:

windows_service 'Delete chef client' do
  action :delete
  service_name 'chef-client'
end

Настройка служб

Изменить существующую службу с автоматического запуска на ручное:

windows_service 'chef-client' do
  action :configure
  binary_path_name "C:\opscode\chef\bin"
  startup_type :manual
end

Ресурс windows_share

Страница ресурса windows_share

Используйте ресурс windows_share для создания, изменения и удаления общих папок Windows.

Новое в Chef Infra Client 14.7.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса windows_share:

windows_share 'name' do
  ca_timeout                  Integer # default value: 0
  change_users                Array # default value: []
  concurrent_user_limit       Integer # default value: 0
  continuously_available      true, false # default value: false
  description                 String
  encrypt_data                true, false # default value: false
  full_users                  Array # default value: []
  path                        String
  read_users                  Array # default value: []
  scope_name                  String # default value: "*"
  share_name                  String # default value: 'name' unless specified
  temporary                   true, false # default value: false
  action                      Symbol # defaults to :create if not specified
end

где:

  • windows_share — это ресурс.
  • name — имя блока ресурса.
  • action определяет действия Chef Infra Client для достижения желаемого состояния узла.
  • ca_timeout, change_users, concurrent_user_limit, continuously_available, description, encrypt_data, full_users, path, read_users, scope_name, share_name и temporary — доступные свойства этого ресурса.

Действия


Ресурс windows_share имеет следующие действия:

:create
Создание или изменение общего ресурса Windows. (по умолчанию)
:delete
Удаление существующей общей папки Windows.
:nothing
Этот блок ресурса не выполняет действий, пока не получит уведомление от другого ресурса. После получения уведомления, этот блок ресурса либо выполняется сразу, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс windows_share имеет следующие свойства:

ca_timeout
Тип Ruby: Целое число | Значение по умолчанию: 0

Таймаут непрерывной доступности общего ресурса.

change_users
Тип Ruby: Массив | Значение по умолчанию: []

Пользователи, которые должны иметь права «изменение» общего ресурса в формате домен\имя_пользователя.

concurrent_user_limit
Тип Ruby: Целое число | Значение по умолчанию: 0

Максимальное количество одновременно подключенных пользователей к общему ресурсу.

continuously_available
Тип Ruby: true, false | Значение по умолчанию: false

Указывает, что общий ресурс доступен непрерывно.

description
Тип Ruby: Строка

Описание, которое будет применено к общему ресурсу.

encrypt_data
Тип Ruby: true, false | Значение по умолчанию: false

Указывает, что общий ресурс зашифрован.

full_users
Тип Ruby: Массив | Значение по умолчанию: []

Пользователи, которые должны иметь права «полный контроль» общего ресурса в формате домен\имя_пользователя.

path
Тип Ruby: Строка

Путь к папке для общего доступа. Требуется при создании. Если общий ресурс уже существует по другому пути, он удаляется и создается заново.

read_users
Тип Ruby: Массив | Значение по умолчанию: []

Пользователи, которые должны иметь права «чтения» общего ресурса в формате домен\имя_пользователя.

scope_name
Тип Ruby: Строка | Значение по умолчанию: *

Имя области общего ресурса.

share_name
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для установки имени общего ресурса, если оно отличается от имени блока ресурса.

temporary
Тип Ruby: true, false | Значение по умолчанию: false

Срок существования нового общего ресурса SMB. Временный общий ресурс не сохраняется после следующей перезагрузки компьютера.


Общая функциональность ресурсов


Ресурсы 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 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.

Примеры


В следующих примерах демонстрируются различные подходы к использованию ресурса windows_share в рецептах:

Создание общего доступа:

windows_share 'foo' do
  action :create
  path 'C:\foo'
  full_users ['DOMAIN_A\some_user', 'DOMAIN_B\some_other_user']
  read_users ['DOMAIN_C\Domain users']
end

Удаление общего доступа:

windows_share 'foo' do
  action :delete
end

Ресурс windows_shortcut

Страница ресурса windows_shortcut

Используйте ресурс windows_shortcut для создания ярлыков файлов в Windows.

Новое в Chef Infra Client 14.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса windows_shortcut:

windows_shortcut 'name' do
  arguments          String
  cwd                String
  description        String
  iconlocation       String
  shortcut_name      String # default value: 'name' unless specified
  target             String
  action             Symbol # defaults to :create if not specified
end

где:

  • windows_shortcut — это ресурс.
  • name — это имя, данное блоку ресурса.
  • action определяет, какие шаги Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • arguments, cwd, description, iconlocation, shortcut_name и target — это доступные свойства этого ресурса.

Действия


Ресурс windows_shortcut имеет следующие действия:

:create
Создать или изменить ярлык Windows. (по умолчанию)
:nothing
Этот блок ресурса не действует, пока не получит уведомление от другого ресурса для выполнения действия. После получения уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце работы Chef Infra Client.

Свойства


Ресурс windows_shortcut имеет следующие свойства:

arguments
Тип Ruby: Строка

Аргументы, которые нужно передать целевому объекту при выполнении ярлыка.

cwd
Тип Ruby: Строка

Рабочая директория, используемая при выполнении целевого объекта.

description
Тип Ruby: Строка

Описание ярлыка

iconlocation
Тип Ruby: Строка

Иконка для ярлыка. Принимает формат path, index, где индекс — это файл иконки. Подробности см. в документации Майкрософт .

shortcut_name
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для установки имени ярлыка, если оно отличается от имени блока ресурса.

target
Тип Ruby: Строка

Назначение, к которому указывает ярлык.


Общие функциональные возможности ресурсов


Ресурсы 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, которое нужно выполнить, и :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.

Примеры


В следующих примерах демонстрируются различные подходы к использованию ресурса windows_shortcut в рецептах:

Создание ярлыка с описанием:

windows_shortcut 'C:\shortcut_dir.lnk' do
  target 'C:\original_dir'
  description 'Make a shortcut to C:\original_dir'
end

Ресурс windows_task

Страница ресурса windows_task

Используйте ресурс windows_task для создания, удаления или запуска задачи планировщика Windows.

Новое в Chef Infra Client 13.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса windows_task:

windows_task 'name' do
  backup                              Integer, false # default value: 5
  command                             String
  cwd                                 String
  day                                 String, Integer
  description                         String
  disallow_start_if_on_batteries      true, false # default value: false
  execution_time_limit                String, Integer # default value: "PT72H (72 hours in ISO8601 duration format)"
  force                               true, false # default value: false
  frequency                           Symbol
  frequency_modifier                  Integer, String # default value: 1
  idle_time                           Integer
  interactive_enabled                 true, false # default value: false
  minutes_duration                    String, Integer
  minutes_interval                    String, Integer
  months                              String
  password                            String
  priority                            Integer # default value: 7
  random_delay                        String, Integer
  run_level                           Symbol # default value: :limited
  start_day                           String # default value: The current date.
  start_time                          String
  start_when_available                true, false # default value: false
  stop_if_going_on_batteries          true, false # default value: false
  task_name                           String # default value: 'name' unless specified
  user                                String # default value: The localized SYSTEM user for the node.
  action                              Symbol # defaults to :create if not specified
end

где:

  • windows_task — это ресурс.
  • name — это имя, данное блоку ресурса.
  • action определяет, какие шаги Chef Infra Client предпримет, чтобы привести узел в нужное состояние.
  • backup, command, cwd, day, description, disallow_start_if_on_batteries, execution_time_limit, force, frequency, frequency_modifier, idle_time, interactive_enabled, minutes_duration, minutes_interval, months, password, priority, random_delay, run_level, start_day, start_time, start_when_available, stop_if_going_on_batteries, task_name и user — это доступные свойства данного ресурса.

Действия


Ресурс windows_task имеет следующие действия:

:create
Создает запланированную задачу или обновляет существующую задачу, если какие-либо свойства были изменены. (по умолчанию)
:delete
Удаляет запланированную задачу.
:disable
Отключает запланированную задачу.
:enable
Включает запланированную задачу.
:end
Завершает выполнение запланированной задачи.
:nothing
Этот блок ресурса не действует, пока не получит уведомление от другого ресурса о необходимости выполнить действие. После получения уведомления, этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:run
Выполняет запланированную задачу.

Свойства


Ресурс windows_task имеет следующие свойства:

backup
Тип Ruby: Целое число, false | Значение по умолчанию: 5

Количество резервных копий задачи при изменении/удалении. Установите в false, чтобы отключить резервные копии.

Новая функция в Chef Infra Client 17.0

command
Тип Ruby: Строка

Команда, которая будет выполняться запланированной задачей Windows.

cwd
Тип Ruby: Строка

Директория, из которой будет выполняться задача.

day
Тип Ruby: Строка, Целое число

День(и) недели, в которые запускается задача.

  • Используйте это свойство при установке frequency на :monthly или :weekly.
  • Допустимые значения с частотой :weekly — это MON-SUN или *.
  • Допустимые значения с частотой :monthly — это 1-31, MON-SUN и LASTDAY.
  • Используйте MON-SUN или LASTDAY, если вы устанавливаете frequency_modifier как «ПЕРВОЕ, ВТОРОЕ, ТРЕТЬЕ и т.д.», иначе используйте 1-31.
  • Несколько дней должны быть разделены запятыми. Например, 1, 2, 3 или MON, WED, FRI.
description
Тип Ruby: Строка

Описание задачи.

Новая функция в Chef Client 14.7

disallow_start_if_on_batteries
Тип Ruby: true, false | Значение по умолчанию: false

Запретить запуск задачи, если система питается от батареи.

Новая функция в Chef Client 14.4

execution_time_limit
Тип Ruby: Строка, Целое число | Значение по умолчанию: PT72H (72 hours in ISO8601 duration format)

Максимальное время выполнения задачи. Это поле принимает либо секунды, либо значение длительности в формате ISO8601.

force
Тип Ruby: true, false | Значение по умолчанию: false

При использовании с create, будет обновлять задачу.

frequency
Тип Ruby: Символ Допустимые значения: :daily, :hourly, :minute, :monthly, :none, :on_idle, :on_logon, :once, :onstart, :weekly

Частота выполнения задачи.

Примечание

Это свойство требуется в Chef Infra Client 14.1 или более поздних версиях.

Примечание

Значение :once требует установки свойства start_time.

frequency_modifier
Тип Ruby: Целое число, Строка | Значение по умолчанию: 1
  • Для частоты :minute допустимые значения — от 1 до 1439
  • Для частоты :hourly допустимые значения — от 1 до 23
  • Для частоты :daily допустимые значения — от 1 до 365
  • Для частоты :weekly допустимые значения — от 1 до 52
  • Для частоты :monthly допустимые значения — ('FIRST', 'SECOND', 'THIRD', 'FOURTH', 'LAST') ИЛИ 1-12.
    • Например, если пользователь хочет запускать задачу каждую second week of the month, используйте значение frequency_modifier как SECOND. Несколько значений для недель месяца должны быть разделены запятыми, например, "FIRST, THIRD, LAST".
    • Для запуска задачи каждый (n) месяц используйте значения от 1 до 12.
idle_time
Тип Ruby: Целое число

Для частоты :on_idle, время (в минутах) без активности пользователя, которое должно пройти для запуска задачи, от 1 до 999.

interactive_enabled
Тип Ruby: true, false | Значение по умолчанию: false

Разрешить запуск задачи в интерактивном или неинтерактивном режиме. Требуется установить пользователя и пароль.

minutes_duration
Тип Ruby: Строка, Целое число
minutes_interval
Тип Ruby: Строка, Целое число
months
Тип Ruby: Строка

Месяцы года, в которые запускается задача, например: JAN, FEB или *. Несколько месяцев должны быть разделены запятыми. Например, Jan, Feb, Mar, Dec.

password
Тип Ruby: Строка

Пароль пользователя. Свойство user должно быть установлено, если используется это свойство.

priority
Тип Ruby: Целое число | Значение по умолчанию: 7

Используется для установки уровней приоритета в диапазоне от 0 до 10.

random_delay
Тип Ruby: Строка, Целое число

Задержка запуска задачи на заданное время (в секундах).

run_level
Тип Ruby: Символ | Значение по умолчанию: :limited Допустимые значения: :highest, :limited

Запуск с привилегиями :limited или :highest.

start_day
Тип Ruby: Строка | Значение по умолчанию: The current date.

Указывает первую дату запуска задачи в формате ДД/ММ/ГГГГ.

start_time
Тип Ruby: Строка

Указывает время запуска задачи в формате ЧЧ:мм.

start_when_available
Тип Ruby: true, false | Значение по умолчанию: false

Разрешить запуск задачи в любое время после истечения запланированного времени.

Новая функция в Chef Client 14.15

stop_if_going_on_batteries
Тип Ruby: true, false | Значение по умолчанию: false

Параметр запланированной задачи при переключении системы на питание от батареи.

Новая функция в Chef Client 14.4

task_name
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для установки имени задачи, если оно отличается от имени блока ресурса. Пример: Task Name или /Task Name

user
Тип Ruby: Строка | Значение по умолчанию: The localized SYSTEM user for the node.

Пользователь, от имени которого будет выполняться задача.


Общие функциональные возможности ресурса


Ресурсы 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 действие, которое должно быть выполнено, и затем :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.

Примеры


В следующих примерах демонстрируются различные подходы к использованию ресурса windows_task в рецептах:

Создайте запланированную задачу для запуска каждые 15 минут как пользователь администратор:

windows_task 'chef-client' do
  user 'Administrator'
  password 'password'
  command 'chef-client'
  run_level :highest
  frequency :minute
  frequency_modifier 15
end

Создайте запланированную задачу для запуска каждые 2 дня:

windows_task 'chef-client' do
  command 'chef-client'
  run_level :highest
  frequency :daily
  frequency_modifier 2
end

Создайте запланированную задачу для запуска в определенные дни недели:

windows_task 'chef-client' do
  command 'chef-client'
  run_level :highest
  frequency :weekly
  day 'Mon, Thu'
end

Создайте запланированную задачу для запуска только один раз:

windows_task 'chef-client' do
  command 'chef-client'
  run_level :highest
  frequency :once
  start_time '16:10'
end

Создайте запланированную задачу для запуска в текущий день каждые 3 недели и задержкой до 1 минуты:

windows_task 'chef-client' do
  command 'chef-client'
  run_level :highest
  frequency :weekly
  frequency_modifier 3
  random_delay '60'
end

Создайте запланированную задачу для запуска еженедельно, начиная с 28 декабря 2018 года:

windows_task 'chef-client 8' do
  command 'chef-client'
  run_level :highest
  frequency :weekly
  start_day '12/28/2018'
end

Создайте запланированную задачу для запуска каждую понедельник, пятницу каждые 2 недели:

windows_task 'chef-client' do
  command 'chef-client'
  run_level :highest
  frequency :weekly
  frequency_modifier 2
  day 'Mon, Fri'
end

Создайте запланированную задачу для запуска при бездействии компьютера с длительностью бездействия 20 минут:

windows_task 'chef-client' do
  command 'chef-client'
  run_level :highest
  frequency :on_idle
  idle_time 20
end

Удалите задачу с именем «старая задача»:

windows_task 'old task' do
  action :delete
end

Включите задачу с именем «chef-client»:

windows_task 'chef-client' do
  action :enable
end

Отключите задачу с именем «ProgramDataUpdater» с TaskPath «\Microsoft\Windows\Application Experience\ProgramDataUpdater»

windows_task '\Microsoft\Windows\Application Experience\ProgramDataUpdater' do
  action :disable
end

ресурс windows_uac

страница ресурса windows_uac

Ресурс windows_uac настраивает UAC на узлах Windows, устанавливая ключи реестра по адресу HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

Новое в Chef Infra Client 15.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса windows_uac:

windows_uac 'name' do
  consent_behavior_admins       Symbol # default value: :prompt_for_consent_non_windows_binaries
  consent_behavior_users        Symbol # default value: :prompt_for_creds
  detect_installers             true, false
  enable_uac                    true, false # default value: true
  prompt_on_secure_desktop      true, false # default value: true
  require_signed_binaries       true, false # default value: false
  action                        Symbol # defaults to :configure if not specified
end

где:

  • windows_uac — это ресурс.
  • name — имя, заданное для блока ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет для приведения узла к желаемому состоянию.
  • consent_behavior_admins, consent_behavior_users, detect_installers, enable_uac, prompt_on_secure_desktop и require_signed_binaries — доступные свойства этого ресурса.

Действия


Ресурс windows_uac имеет следующие действия:

:configure
Настраивает UAC, устанавливая ключи реестра по адресу HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System. (по умолчанию)
:nothing
Этот блок ресурса не действует, пока не будет уведомлен другим ресурсом о выполнении действия. После уведомления этот блок ресурса выполняется немедленно или помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс windows_uac имеет следующие свойства:

consent_behavior_admins
Тип Ruby: Символ | Значение по умолчанию: :prompt_for_consent_non_windows_binaries Допустимые значения: :no_prompt, :prompt_for_consent, :prompt_for_consent_non_windows_binaries, :prompt_for_creds, :secure_prompt_for_consent, :secure_prompt_for_creds

Поведение запроса повышения привилегий для администраторов в режиме утверждения администратора. Устанавливает HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\EnableLUA\ConsentPromptBehaviorAdmin.

consent_behavior_users
Тип Ruby: Символ | Значение по умолчанию: :prompt_for_creds Допустимые значения: :auto_deny, :prompt_for_creds, :secure_prompt_for_creds

Поведение запроса повышения привилегий для стандартных пользователей. Устанавливает HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\EnableLUA\ConsentPromptBehaviorUser.

detect_installers
Тип Ruby: true, false

Обнаружение установок приложений и запрос повышения привилегий. Устанавливает HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\EnableLUA\EnableInstallerDetection.

enable_uac
Тип Ruby: true, false | Значение по умолчанию: true

Включить или отключить режим утверждения администратора UAC. Если это изменено, требуется перезагрузка системы. Устанавливает HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\EnableLUA.

prompt_on_secure_desktop
Тип Ruby: true, false | Значение по умолчанию: true

Переключение на защищенный рабочий стол при запросе повышения привилегий. Устанавливает HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\EnableLUA\PromptOnSecureDesktop.

require_signed_binaries
Тип Ruby: true, false | Значение по умолчанию: false

Поднимать привилегии только для подписанных и проверенных исполняемых файлов. Устанавливает HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\EnableLUA\ValidateAdminCodeSignatures.


Общие функции ресурса


Ресурсы 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

Защиты

Свойство guard может использоваться для оценки состояния узла во время фазы выполнения Chef Infra Client. Основываясь на результатах этой оценки, свойство guard сообщает Chef Infra Client, следует ли продолжать выполнение ресурса. Свойство guard принимает либо строковое значение, либо значение блока Ruby:

  • Строка выполняется как команда оболочки. Если команда возвращает 0, защита применяется. Если команда возвращает любое другое значение, то свойство guard не применяется. Строковые защиты в powershell_script выполняют команды Windows PowerShell и могут возвращать true в дополнение к 0.
  • Блок выполняется как код Ruby, который должен вернуть либо true, либо false. Если блок возвращает true, свойство guard применяется. Если блок возвращает false, свойство guard не применяется.

Свойство guard полезно для обеспечения идемпотентности ресурса, позволяя этому ресурсу проверить желаемое состояние по мере его выполнения и, если желаемое состояние присутствует, не выполнять никаких действий Chef Infra Client.

Свойства

Следующие свойства могут использоваться для определения защиты, которая оценивается во время фазы выполнения Chef Infra Client:

not_if

Запретить выполнение ресурса, когда условие возвращает true.

only_if

Разрешить выполнение ресурса только в том случае, если условие возвращает true.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса windows_uac в рецептах:

Отключить запросы UAC для администратора:

windows_uac 'Disable UAC prompts for the admin' do
  enable_uac true
  prompt_on_secure_desktop false
  consent_behavior_admins :no_prompt
end

Полностью отключить UAC:

windows_uac 'Disable UAC entirely' do
  enable_uac false
end

Ресурс windows_update_settings

Страница ресурса windows_update_settings

Используйте ресурс windows_update_settings для управления различными параметрами обновления Windows.

Новое в Chef Infra Client 17.3.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса windows_update_settings:

windows_update_settings 'name' do
  automatic_update_option                  Integer, Symbol # default value: :download_and_schedule
  automatically_install_minor_updates      true, false # default value: false
  block_windows_update_website             true, false # default value: false
  custom_detection_frequency               Integer # default value: 22
  disable_automatic_updates                true, false # default value: false
  disable_os_upgrades                      true, false # default value: false
  elevate_non_admins                       true, false # default value: true
  enable_detection_frequency               true, false # default value: false
  no_reboot_with_users_logged_on           true, false # default value: true
  scheduled_install_day                    String # default value: "Everyday"
  scheduled_install_hour                   Integer
  target_wsus_group_name                   String
  update_other_ms_products                 true, false # default value: true
  wsus_server_url                          String
  action                                   Symbol # defaults to :set if not specified
end

где:

  • windows_update_settings — это ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет, какие действия Chef Infra Client предпримет для приведения узла в желаемое состояние.
  • automatic_update_option, automatically_install_minor_updates, block_windows_update_website, custom_detection_frequency, disable_automatic_updates, disable_os_upgrades, elevate_non_admins, enable_detection_frequency, no_reboot_with_users_logged_on, scheduled_install_day, scheduled_install_hour, target_wsus_group_name, update_other_ms_products и wsus_server_url — доступные свойства этого ресурса.

Действия


Ресурс windows_update_settings имеет следующие действия:

:nothing
Этот блок ресурса не действует, пока не будет уведомлен другим ресурсом о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:set
Установить параметры Windows Update. (по умолчанию)

Свойства


Ресурс windows_update_settings имеет следующие свойства:

automatic_update_option
Тип Ruby: Целое число, Символ | Значение по умолчанию: :download_and_schedule Допустимые значения: :download_and_notify, :download_and_schedule, :local_admin_decides, :notify

Управление действиями при обнаружении обновлений. Это позволяет вам уведомлять, автоматически загружать и уведомлять об установке, автоматически загружать и планировать установку или позволить локальному администратору принять решение о действиях.

automatically_install_minor_updates
Тип Ruby: true, false | Значение по умолчанию: false

Автоматическая установка незначительных обновлений.

block_windows_update_website
Тип Ruby: true, false | Значение по умолчанию: false

Блокировать доступ к веб-сайту Windows Update.

custom_detection_frequency
Тип Ruby: Целое число | Значение по умолчанию: 22

Если вы решили переопределить частоту обнаружения по умолчанию для ОС, укажите свой выбор здесь. Допустимые значения: 0-22

disable_automatic_updates
Тип Ruby: true, false | Значение по умолчанию: false

Отключить Windows Update.

disable_os_upgrades
Тип Ruby: true, false | Значение по умолчанию: false

Отключить обновления ОС.

elevate_non_admins
Тип Ruby: true, false | Значение по умолчанию: true

Разрешить обычным учетным записям временно повышать свои привилегии для установки обновлений.

enable_detection_frequency
Тип Ruby: true, false | Значение по умолчанию: false

Используется для переопределения значения по умолчанию ОС относительно частоты проверки обновлений

no_reboot_with_users_logged_on
Тип Ruby: true, false | Значение по умолчанию: true

Запрещает перезагрузку ОС, пока кто-то находится на консоли.

scheduled_install_day
Тип Ruby: Строка | Значение по умолчанию: Everyday Допустимые значения: "Everyday", "Friday", "Monday", "Saturday", "Sunday", "Thursday", "Tuesday", "Wednesday"

День недели, чтобы сообщить Windows, когда устанавливать обновления.

scheduled_install_hour
Тип Ruby: Целое число

Если вы выбрали запланированный день установки, выберите час в этот день для установки.

target_wsus_group_name
Тип Ruby: Строка

Добавьте узел в целевую группу WSUS.

update_other_ms_products
Тип Ruby: true, false | Значение по умолчанию: true

Позволяет другим продуктам Майкрософт получать обновления тоже.

wsus_server_url
Тип Ruby: Строка

URL вашего сервера WSUS, если вы его используете.


Общие возможности ресурсов


Ресурсы 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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса windows_update_settings в рецептах:

Установить параметры Windows Update:

windows_update_settings 'Settings to Configure Windows Nodes to automatically receive updates' do
  disable_os_upgrades true
  elevate_non_admins true
  block_windows_update_website true
  automatically_install_minor_updates true
  scheduled_install_day 'Friday'
  scheduled_install_hour 18
  update_other_ms_products true
  action :enable
end

Ресурс windows_user_privilege

Страница ресурса windows_user_privilege

Ресурс windows_user_privilege позволяет добавлять и устанавливать принципала (пользователь/группа) для указанного привилегии. См.: https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/user-rights-assignment

Новое в Chef Infra Client 16.0.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса windows_user_privilege:

windows_user_privilege 'name' do
  principal      String # default value: 'name' unless specified
  privilege      Array, String
  users          Array, String
  action         Symbol # defaults to :add if not specified
end

где:

  • windows_user_privilege — это ресурс.
  • name — имя, заданное для блока ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет для перевода узла в желаемое состояние.
  • principal, privilege и users — доступные для этого ресурса свойства.

Действия


Ресурс windows_user_privilege имеет следующие действия:

:add
Добавить привилегию пользователя. (по умолчанию)
:clear
Очистить все привилегии пользователя
:nothing
Этот блок ресурса не выполняется, пока не будет уведомлен другим ресурсом о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:remove
Удалить привилегию пользователя
:set
Установить привилегии, перечисленные в свойстве privilege, только для пользователей, перечисленных в свойстве users.

Свойства


Ресурс windows_user_privilege имеет следующие свойства:

principal
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для добавления пользователя к заданной привилегии. Используйте только с действиями add и remove.

privilege
Тип Ruby: Массив, Строка | REQUIRED

Одна или несколько привилегий для установки для пользователей.

users
Тип Ruby: Массив, Строка

Необязательное свойство для установки привилегии для заданных пользователей. Используйте только с действием set.


Общие возможности ресурсов


Ресурсы 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]', действие, которое необходимо выполнить, и затем :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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса windows_user_privilege в рецептах:

Установить привилегию SeNetworkLogonRight для группы Builtin Administrators и пользователей Authenticated:

windows_user_privilege 'Network Logon Rights' do
  privilege      'SeNetworkLogonRight'
  users          ['BUILTIN\Administrators', 'NT AUTHORITY\Authenticated Users']
  action         :set
end

Добавить привилегию SeDenyRemoteInteractiveLogonRight к группам пользователей Builtin Guests и Local Accounts:

windows_user_privilege 'Remote interactive logon' do
  privilege      'SeDenyRemoteInteractiveLogonRight'
  users          ['Builtin\Guests', 'NT AUTHORITY\Local Account']
  action         :add
end

Предоставить только группам Builtin Guests и Administrator привилегию SeCreatePageFile:

windows_user_privilege 'Create Pagefile' do
  privilege      'SeCreatePagefilePrivilege'
  users          ['BUILTIN\Guests', 'BUILTIN\Administrators']
  action         :set
end

Удалить привилегию SeCreatePageFile из группы Builtin Guests:

windows_user_privilege 'Create Pagefile' do
  privilege      'SeCreatePagefilePrivilege'
  users          ['BUILTIN\Guests']
  action         :remove
end

Удалить всех пользователей из привилегии SeDenyNetworkLogonRight:

windows_user_privilege 'Allow any user the Network Logon right' do
  privilege      'SeDenyNetworkLogonRight'
  action         :clear
end

windows_workgroup ресурс

Страница ресурса windows_workgroup

Используйте ресурс windows_workgroup для присоединения или изменения рабочей группы Windows-хоста.

Новая возможность в Chef Infra Client 14.5.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса windows_workgroup:

windows_workgroup 'name' do
  password            String
  reboot              Symbol # default value: :immediate
  user                String
  workgroup_name      String # default value: 'name' unless specified
  action              Symbol # defaults to :join if not specified
end

где:

  • windows_workgroup — это ресурс.
  • name — это имя, данное блоку ресурса.
  • action определяет шаги, которые Chef Infra Client выполнит для приведения узла в желаемое состояние.
  • password, reboot, user и workgroup_name — это доступные свойства этого ресурса.

Действия


Ресурс windows_workgroup имеет следующие действия:

:join
Обновление рабочей группы. (по умолчанию)
:nothing
Этот блок ресурса не выполняется, если не уведомлен другим ресурсом о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс windows_workgroup имеет следующие свойства:

password
Тип Ruby: Строка

Пароль для локального администратора. Требуется, если используется свойство user.

reboot
Тип Ruby: Символ | Значение по умолчанию: :immediate Разрешенные значения: :never, :reboot_now, :request_reboot

Управляет поведением перезагрузки системы после присоединения к рабочей группе. Немедленная перезагрузка, после завершения выполнения Chef Infra Client или никогда. Обратите внимание, что перезагрузка необходима для того, чтобы изменения вступили в силу.

user
Тип Ruby: Строка

Локальный пользователь-администратор для использования при изменении рабочей группы. Требуется, если используется свойство password.

workgroup_name
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для установки имени рабочей группы, если оно отличается от имени блока ресурса.


Общее функционирование ресурсов


Ресурсы 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.

Примеры


В следующих примерах показаны различные подходы к использованию ресурса windows_workgroup в рецептах:

Присоединение к рабочей группе:

windows_workgroup 'myworkgroup'

Присоединение к рабочей группе с использованием определённого пользователя:

windows_workgroup 'myworkgroup' do
  user 'Administrator'
  password 'passw0rd'
end

Ресурс yum_package

Страница ресурса yum_package

Используйте ресурс 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: Hash | Значение по умолчанию: {"before"=>false, "after"=>false}

Очистить кэш в оперативной памяти до или после операции Yum, устанавливающей, обновляющей или удаляющей пакет. Принимает Hash в формате: { :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

и в виде Hash:

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

Очистка нескольких пакетов:

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]', действие, которое нужно выполнить, и затем :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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса 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

Ресурс yum_repository

Страница документации ресурса yum_repository

Используйте ресурс yum_repository для управления файлом конфигурации репозитория Yum, расположенным по адресу /etc/yum.repos.d/repositoryid.repo на локальной машине. Этот файл конфигурации определяет, какие репозитории использовать, как обрабатывать кэшированные данные и т.д.

Новое в Chef Infra Client 12.14.

Синтаксис


Полный синтаксис всех свойств ресурса yum_repository:

yum_repository 'name' do
  baseurl                    String, Array
  clean_metadata             true, false # default value: true
  cost                       String
  description                String # default value: "Yum Repository"
  enabled                    true, false # default value: true
  enablegroups               true, false
  exclude                    String
  failovermethod             String
  fastestmirror_enabled      true, false
  gpgcheck                   true, false # default value: true
  gpgkey                     String, Array
  http_caching               String
  include_config             String
  includepkgs                String
  keepalive                  true, false
  make_cache                 true, false # default value: true
  max_retries                String, Integer
  metadata_expire            String
  metalink                   String
  mirror_expire              String
  mirrorlist                 String
  mirrorlist_expire          String
  mode                       String, Integer # default value: "0644"
  options                    Hash
  password                   String
  priority                   String
  proxy                      String
  proxy_password             String
  proxy_username             String
  repo_gpgcheck              true, false
  report_instanceid          true, false
  reposdir                   String # default value: "/etc/yum.repos.d/"
  repositoryid               String # default value: 'name' unless specified
  skip_if_unavailable        true, false
  source                     String
  sslcacert                  String
  sslclientcert              String
  sslclientkey               String
  sslverify                  true, false
  throttle                   String, Integer
  timeout                    String
  username                   String
  action                     Symbol # defaults to :create if not specified
end

где:

  • yum_repository — это ресурс.
  • name — имя блока ресурса.
  • action определяет, какие действия Chef Infra Client выполнит для приведения узла в нужное состояние.
  • baseurl, clean_metadata, cost, description, enabled, enablegroups, exclude, failovermethod, fastestmirror_enabled, gpgcheck, gpgkey, http_caching, include_config, includepkgs, keepalive, make_cache, max_retries, metadata_expire, metalink, mirror_expire, mirrorlist, mirrorlist_expire, mode, options, password, priority, proxy, proxy_password, proxy_username, repo_gpgcheck, report_instanceid, reposdir, repositoryid, skip_if_unavailable, source, sslcacert, sslclientcert, sslclientkey, sslverify, throttle, timeout и username — доступные свойства этого ресурса.

Действия


Ресурс yum_repository имеет следующие действия:

:create
Создать репозиторий на основе свойств. (по умолчанию)
:delete
Удалить репозиторий.
:makecache
Принудительно создать кэш репозитория. Это также происходит автоматически при обновлении репозитория.
:nothing
Этот блок ресурса не выполняет действия, пока не получит уведомление от другого ресурса. После уведомления этот блок ресурса выполняется немедленно или помещается в очередь для выполнения в конце выполнения Chef Infra Client.

Свойства


Ресурс yum_repository имеет следующие свойства:

baseurl
Тип Ruby: Строка, Массив

URL каталога, в котором находится каталог repodata репозитория Yum. Может быть http://, https:// или ftp:// URL. Вы можете указать несколько URL в одном блоке baseurl.

clean_metadata
Тип Ruby: true, false | Значение по умолчанию: true

Определяет, нужно ли очистить все загруженные из репозитория Yum пакеты, находящиеся в кэше каталога.

cost
Тип Ruby: Строка

Относительная стоимость доступа к этому репозиторию. Полезно для взвешивания пакетов одного репозитория как больше/меньше, чем любых других.

description
Тип Ruby: Строка | Значение по умолчанию: Yum Repository

Описание канала репозитория, которое отображается в параметре «имя» в файле .conf репозитория.

enabled
Тип Ruby: true, false | Значение по умолчанию: true

Указывает, следует ли Yum использовать этот репозиторий.

enablegroups
Тип Ruby: true, false

Указывает, будет ли Yum разрешать использование групп пакетов для этого репозитория.

exclude
Тип Ruby: Строка

Список пакетов, которые нужно исключить из обновлений или установок. Это должен быть список, разделённый пробелами. Разрешены оболочки оболочки с использованием подстановочных знаков (например, * и ?).

failovermethod
Тип Ruby: Строка Допустимые значения: "priority", "roundrobin"

Способ определения переключения на новый сервер в случае отказа текущего сервера. Может быть roundrobin или priority. roundrobin случайным образом выбирает URL из списка URL для начала и переходит к каждому из них при возникновении ошибки связи с хостом. priority начинается с первого baseurl в списке и последовательно их просматривает.

fastestmirror_enabled
Тип Ruby: true, false

Указывает, использовать ли самый быстрый зеркало из конфигурации репозитория, если в этой конфигурации перечислены несколько зеркал.

gpgcheck
Тип Ruby: true, false | Значение по умолчанию: true

Указывает, следует ли Yum выполнять проверку подписи GPG для пакетов, полученных из репозитория.

gpgkey
Тип Ruby: Строка, Массив

URL, указывающий на файл ключа GPG в формате ASCII-armored для репозитория. Используется, если Yum нуждается в открытом ключе для проверки пакета, а необходимый ключ не был импортирован в базу данных RPM. Если этот параметр установлен, Yum автоматически импортирует ключ из указанного URL. Можно указать несколько URL аналогично параметру baseurl. Если для установки пакета из репозитория требуется ключ GPG, все ключи, указанные для этого репозитория, будут установлены. Можно указать несколько URL аналогично параметру baseurl. Если для установки пакета из репозитория требуется ключ GPG, все ключи, указанные для этого репозитория, будут установлены.

http_caching
Тип Ruby: Строка Допустимые значения: "all", "none", "packages"

Определяет, как Yum указывает HTTP-кэшам обрабатывать HTTP-загрузки. Этот параметр может принимать следующие значения:

  • all — все HTTP-загрузки должны быть кэшированы
  • packages — только загрузки пакетов RPM должны быть кэшированы, но не загрузки метаданных репозитория
  • none — никакие HTTP-загрузки не должны быть кэшированы.

Рекомендуется использовать значение по умолчанию all, если не наблюдаются проблемы, связанные с кэшированием.

include_config
Тип Ruby: Строка

Внешний файл конфигурации в формате url://to/some/location.

includepkgs
Тип Ruby: Строка

Обратное свойству exclude. Это список пакетов, которые вы хотите использовать из репозитория. Если этот параметр содержит только один пакет, то это всё, что Yum увидит из репозитория.

keepalive
Тип Ruby: true, false

Определяет, используется ли HTTP/1.1 keep-alive с этим репозиторием.

make_cache
Тип Ruby: true, false | Значение по умолчанию: true

Определяет, сохраняются ли загруженные Yum файлы пакетов в каталогах кэша. Используя кэшированные данные, вы можете выполнять определённые операции без подключения к сети.

max_retries
Тип Ruby: Строка, Целое число

Количество попыток повторной попытки получения файла перед возвращением ошибки. Установка этого значения в 0 заставляет Yum пытаться неограниченно.

metadata_expire
Тип Ruby: Строка

Время (в секундах), по истечении которого метаданные истекут. Если загруженные в настоящее время метаданные младше указанного значения, Yum не обновит метаданные для хранилища. Если вы обнаружите, что Yum не загружает информацию об обновлениях так часто, как вам хотелось бы, уменьшите значение этого параметра. Вы также можете изменить значение по умолчанию, используя секунды, на дни, часы или минуты, добавив соответственно d, h или m. Значение по умолчанию составляет шесть часов, что соответствует запуску yum-updates один раз в час. Также можно использовать слово never, что означает, что метаданные никогда не истекут.

Примечание

При использовании файла metalink файл metalink должен всегда быть новее метаданных хранилища из-за проверки, поэтому это время ожидания также применяется к файлу metalink.

metalink
Тип Ruby: Строка

Указывает URL-адрес файла metalink для repomd.xml. Список зеркал для всего хранилища генерируется путем преобразования зеркал для файла repomd.xml в baseurl.

mirror_expire
Тип Ruby: Строка

Время (в секундах), по истечении которого кэш локального списка зеркал истечет. Если текущий список зеркал имеет возраст менее этого значения в секундах, Yum не загрузит другую копию списка зеркал, он имеет тот же дополнительный формат, что и metadata_expire. Если вы обнаружите, что Yum не загружает списки зеркал так часто, как вам хотелось бы, уменьшите значение этого параметра. Вы также можете изменить значение по умолчанию, используя секунды, на дни, часы или минуты, добавив соответственно d, h или m.

mirrorlist
Тип Ruby: Строка

URL-адрес файла, содержащего список baseurl. Это можно использовать вместо или вместе с параметром baseurl. С этим параметром можно использовать переменные подстановки, описанные ниже.

mirrorlist_expire
Тип Ruby: Строка

Указывает время (в секундах), по истечении которого локальный кэш списка зеркал истечёт. Если текущий список зеркал имеет возраст меньше указанного значения, Yum не загрузит другую копию списка зеркал. Вы также можете изменить значение по умолчанию, используя секунды, на дни, часы или минуты, добавив соответственно d, h или m.

mode
Тип Ruby: Строка, целое число | Значение по умолчанию: 0644

Режим разрешений файла .repo на диске. Это полезно для сценариев, когда секреты содержатся в файле repo. Если это значение установлено на 600, обычные пользователи не смогут использовать Yum search, Yum info и т.д.

options
Тип Ruby: Хэш

Указывает параметры хранилища.

password
Тип Ruby: Строка

Пароль для использования с именем пользователя для аутентификации по принципу «пользователь/пароль».

priority
Тип Ruby: Строка

Присваивает приоритет хранилищу, где значение приоритета находится в диапазоне от 1 до 99 включительно. Приоритеты используются для обеспечения упорядоченной защиты хранилищ. Пакеты из хранилищ с более низким приоритетом (большее числовое значение) никогда не будут использоваться для обновления пакетов, которые были установлены из хранилища с более высоким приоритетом (меньшее числовое значение). Хранилища с наименьшим числовым приоритетом имеют наивысший приоритет.

proxy
Тип Ruby: Строка

URL-адрес прокси-сервера, который должен использовать Yum.

proxy_password
Тип Ruby: Строка

Пароль для этого прокси.

proxy_username
Тип Ruby: Строка

Имя пользователя для использования с прокси.

repo_gpgcheck
Тип Ruby: true, false

Определяет, должен ли Yum выполнять проверку подписи GPG для repodata из этого хранилища.

report_instanceid
Тип Ruby: true, false

Определяет, нужно ли сообщать идентификатор экземпляра при использовании Amazon Linux AMIs и хранилищ.

reposdir
Тип Ruby: Строка | Значение по умолчанию: /etc/yum.repos.d/

Директория, в которой должны храниться файлы хранилища Yum

Новое в Chef Infra Client 16.9

repositoryid
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для установки имени хранилища, если оно отличается от имени блока ресурса.

skip_if_unavailable
Тип Ruby: true, false

Разрешить Yum продолжить, если с этим хранилищем нельзя связаться по какой-либо причине.

source
Тип Ruby: Строка

Использовать пользовательский источник шаблона вместо стандартного.

sslcacert
Тип Ruby: Строка

Путь к директории, содержащей базы данных центров сертификации, которые Yum должен использовать для проверки SSL-сертификатов.

sslclientcert
Тип Ruby: Строка

Путь к SSL-сертификату клиента, который Yum должен использовать для подключения к хранилищам/удаленным сайтам.

sslclientkey
Тип Ruby: Строка

Путь к закрытому ключу SSL-клиента, который Yum должен использовать для подключения к хранилищам/удаленным сайтам.

sslverify
Тип Ruby: true, false

Определяет, будет ли Yum проверять SSL-сертификаты/хосты.

throttle
Тип Ruby: Строка, целое число

Включить ограничение пропускной способности для загрузок.

timeout
Тип Ruby: Строка

Количество секунд ожидания соединения перед истечением времени ожидания. По умолчанию 30 секунд. Это может быть слишком коротким временем для очень перегруженных сайтов.

username
Тип Ruby: Строка

Имя пользователя для использования с аутентификацией по принципу «пользователь/пароль» для доступа к хранилищу.


Общие возможности ресурса


Ресурсы 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.

Примеры


В следующих примерах демонстрируются различные подходы к использованию ресурса yum_repository в рецептах:

Добавление внутреннего корпоративного репозитория:

yum_repository 'OurCo' do
  description 'OurCo yum repository'
  mirrorlist 'http://artifacts.ourco.org/mirrorlist?repo=ourco-8&arch=$basearch'
  gpgkey 'http://artifacts.ourco.org/pub/yum/RPM-GPG-KEY-OURCO-8'
  action :create
end

Удаление репозитория:

yum_repository 'CentOS-Media' do
  action :delete
end

Ресурс zypper_package

Страница ресурса zypper_package

Используйте ресурс zypper_package для установки, обновления и удаления пакетов с помощью Zypper для платформ SUSE Enterprise и openSUSE.

Примечание

Во многих случаях лучше использовать ресурс package вместо этого. Это связано с тем, что при использовании ресурса package в рецепте Chef Infra Client будет использовать данные, собранные Ohai в начале выполнения Chef Infra Client, чтобы определить правильное применение пакета. Использование ресурса package позволяет автору рецепта создавать рецепт, который может использоваться на многих платформах.

Синтаксис


Полный синтаксис всех свойств, доступных для ресурса zypper_package:

zypper_package 'name' do
  allow_downgrade      true, false # default value: true
  global_options       String, Array
  gpg_check            true, false # default value: "true"
  options              String, Array
  package_name         String, Array
  source               String
  timeout              String, Integer
  version              String, Array
  action               Symbol # defaults to :install if not specified
end

где:

  • zypper_package — это ресурс.
  • name — имя, присвоенное блоку ресурса.
  • action определяет действия, которые Chef Infra Client предпримет, чтобы привести узел в желаемое состояние.
  • allow_downgrade, global_options, gpg_check, options, package_name, source, timeout и version — доступные свойства этого ресурса.

Действия


Ресурс zypper_package имеет следующие действия:

:install
По умолчанию. Устанавливает пакет. Если указана версия, устанавливает указанную версию пакета.
:lock
Заблокирует пакет zypper на определенной версии.
:nothing
Этот блок ресурса не выполняет действий, пока не будет уведомлен другим ресурсом о выполнении. После уведомления этот блок ресурса выполняется либо немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:purge
Очистка пакета. Это действие обычно удаляет файлы конфигурации, а также сам пакет.
:reconfig
Переконфигурировать пакет. Это действие требует файла ответов.
:remove
Удалить пакет.
:unlock
Разблокирует пакет zypper, чтобы он мог быть обновлен до более новой версии.
:upgrade
Установить пакет и/или убедиться, что пакет является последней версией.

Свойства


Ресурс zypper_package имеет следующие свойства:

allow_downgrade
Тип Ruby: true, false | Значение по умолчанию: true

Разрешить понижение версии пакета для удовлетворения требований к версии.

Новое в Chef Client 13.6

global_options
Тип Ruby: Строка, Массив

Один или несколько дополнительных параметров команды, которые передаются в команду. Например, общие директивы zypper, такие как --no-recommends. Обратитесь к странице справки zypper для получения полного списка.

Новое в Chef Client 14.6

gpg_check
Тип Ruby: true, false | Значение по умолчанию: true

Проверьте подпись GPG пакета. Также может контролироваться на уровне сайта с помощью параметра конфигурации zypper_check_gpg.

options
Тип Ruby: Строка, Массив

Один или несколько дополнительных параметров команды, которые передаются в команду.

package_name
Тип Ruby: Строка, Массив

Необязательное свойство для установки имени пакета, если оно отличается от имени блока ресурса.

source
Тип Ruby: Строка

Необязательный путь к пакету на локальном файловом хранилище.

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 включают общие свойства, уведомления и защитные свойства ресурсов.

Общие свойства

Следующие свойства являются общими для каждого ресурса:

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.

Несколько пакетов

Ресурс может указать несколько пакетов и/или версий для платформ, использующих менеджеры пакетов 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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса zypper_package в рецептах:

Установка пакета с помощью менеджера пакетов:

zypper_package 'name of package' do
  action :install
end

Установка пакета с помощью локального файла:

zypper_package 'jwhois' do
  action :install
  source '/path/to/jwhois.rpm'
end

Установка без использования рекомендуемых пакетов в качестве зависимости:

package 'apache2' do
  options '--no-recommends'
end

Ресурс zypper_repository

Страница ресурса zypper_repository

Используйте ресурс zypper_repository для создания репозиториев пакетов Zypper в системах SUSE Enterprise Linux и openSUSE. Этот ресурс обеспечивает полную совместимость с ресурсом zypper_repository в существующем кулинарном руководстве zypper.

Новинка в Chef Infra Client 13.3.

Синтаксис


Полный синтаксис для всех свойств, доступных для ресурса zypper_repository:

zypper_repository 'name' do
  autorefresh            true, false # default value: true
  baseurl                String
  cookbook               String # default value: "The cookbook containing the resource"
  description            String
  enabled                true, false # default value: true
  gpgautoimportkeys      true, false # default value: true
  gpgcheck               true, false # default value: true
  gpgkey                 String, Array # default value: []
  keeppackages           true, false # default value: false
  mirrorlist             String
  mode                   String, Integer # default value: "0644"
  path                   String
  priority               Integer # default value: 99
  refresh_cache          true, false # default value: true
  repo_name              String # default value: 'name' unless specified
  source                 String
  type                   String # default value: "NONE"
  action                 Symbol # defaults to :create if not specified
end

где:

  • zypper_repository — ресурс.
  • name — имя, заданное для блока ресурса.
  • action — определяет, какие действия Chef Infra Client выполнит для приведения узла в желаемое состояние.
  • autorefresh, baseurl, cookbook, description, enabled, gpgautoimportkeys, gpgcheck, gpgkey, keeppackages, mirrorlist, mode, path, priority, refresh_cache, repo_name, source и type — доступные свойства для данного ресурса.

Действия


Ресурс zypper_repository имеет следующие действия:

:create
Добавить новый репозиторий Zypper. (по умолчанию)
:nothing
Этот блок ресурса не действует, пока не будет уведомлен другим ресурсом о выполнении действия. После уведомления этот блок ресурса выполняется немедленно или помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:refresh
Обновить репозиторий Zypper.
:remove
Удалить репозиторий Zypper.

Свойства


Ресурс zypper_repository имеет следующие свойства:

autorefresh
Тип Ruby: true, false | Значение по умолчанию: true

Определяет, будет ли репозиторий автоматически обновляться.

baseurl
Тип Ruby: Строка

Базовый URL для репозитория Zypper, например http://download.opensuse.org.

cookbook
Тип Ruby: Строка | Значение по умолчанию: The cookbook containing the resource

Кулинарное руководство, откуда берётся шаблон файла репозитория. Требуется только в случае использования пользовательского шаблона для файла репозитория.

description
Тип Ruby: Строка

Описание репозитория, которое будет отображено командой zypper repos.

enabled
Тип Ruby: true, false | Значение по умолчанию: true

Определяет, будет ли репозиторий включён.

gpgautoimportkeys
Тип Ruby: true, false | Значение по умолчанию: true

Автоматически импортировать указанный ключ при настройке репозитория.

gpgcheck
Тип Ruby: true, false | Значение по умолчанию: true

Определяет, будет ли выполняться проверка подписи GPG репозитория.

gpgkey
Тип Ruby: Строка, Массив | Значение по умолчанию: []

Расположение ключа(ей) репозитория для импорта.

keeppackages
Тип Ruby: true, false | Значение по умолчанию: false

Определяет, сохраняются ли пакеты.

mirrorlist
Тип Ruby: Строка

URL списка зеркал, который будет использоваться.

mode
Тип Ruby: Строка, Целое число | Значение по умолчанию: 0644

Режим файла репозитория.

path
Тип Ruby: Строка

Относительный путь от базового URL репозитория.

priority
Тип Ruby: Целое число | Значение по умолчанию: 99

Определяет приоритет репозитория Zypper.

refresh_cache
Тип Ruby: true, false | Значение по умолчанию: true

Определяет, нужно ли обновлять кэш пакетов.

repo_name
Тип Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для установки имени репозитория, если оно отличается от имени блока ресурса.

source
Тип Ruby: Строка

Имя шаблона для файла репозитория. Необходимо только если вы используете пользовательский шаблон для файла репозитория.

type
Тип Ruby: Строка | Значение по умолчанию: NONE

Указывает тип репозитория.


Общие функциональные возможности ресурса


Ресурсы 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.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса zypper_repository в рецептах:

Добавить репозиторий Apache на openSUSE Leap 15:

zypper_repository 'apache' do
  baseurl 'http://download.opensuse.org/repositories/Apache'
  path '/openSUSE_Leap_15.2'
  type 'rpm-md'
  priority '100'
end

Удалить репозиторий с именем ‘apache’:

zypper_repository 'apache' do
  action :delete
end

Обновить репозиторий с именем ‘apache’:

zypper_repository 'apache' do
  action :refresh
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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API