Все ресурсы инфраструктуры
В этом справочнике описаны все доступные ресурсы для Chef Infra Client, включая список действий, свойств и примеры использования.
Общие возможности
Свойства и действия в этом разделе применяются ко всем ресурсам.
Действия
Следующие действия могут использоваться с любым ресурсом:
: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 Client.
Примеры
Следующие примеры показывают, как использовать общие свойства в рецепте.
Используйте общее свойство 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
Ограничения
Свойство ограничения может использоваться для оценки состояния узла во время фазы выполнения 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.
Аргументы
Следующие аргументы могут использоваться со свойствами ограничения 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 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
Ленивая оценка
В некоторых случаях значение свойства нельзя узнать до фазы выполнения работы 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 -
Указывает, что уведомление должно быть выполнено немедленно, по каждому уведомлённому ресурсу.
Уведомления
Ресурс может уведомить другой ресурс о необходимости выполнить действие при изменении его состояния. Укажите '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
Подписки
Ресурс может следить за другим ресурсом и затем выполнять действие, если состояние отслеживаемого ресурса изменяется. Укажите '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 обрабатывает рецепты в двух фазах:
- Сначала каждый ресурс в объекте узла идентифицируется, и создаётся коллекция ресурсов. Все рецепты загружаются в определённом порядке, а затем идентифицируются действия, указанные в каждом из них. Это также называется «фазой компиляции».
- Затем Chef Infra Client настраивает систему в соответствии с порядком ресурсов в коллекции ресурсов. Каждый ресурс проверяет узел и выполняет необходимые шаги для завершения действия. Это также называется «фазой выполнения».
Обычно действия обрабатываются во время фазы выполнения работы Chef Infra Client. Однако иногда необходимо выполнить действие во время фазы компиляции. Например, ресурс может быть настроен на установку пакета во время фазы компиляции, чтобы убедиться, что приложение доступно другим ресурсам во время фазы выполнения.
Примечание
Используйте ресурс chef_gem для установки 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.
Использование пользовательских ресурсов предпочтительнее принудительного выполнения во время компиляции
Выполнение во время компиляции часто используется для установки gem перед их использованием в коде рецепта.
Это плохая практика, поскольку gem могут зависеть от других gem, которые могут потребовать установки компиляторов во время компиляции.
build_essential 'Install compilers' do
compile_time true
end
chef_gem 'aws-dsk' do
compile_time true
end
require 'aws-sdk'
Лучшая стратегия — перенести код, которому требуется этот драгоценный камень, в пользовательский ресурс. Поскольку все действия пользовательских ресурсов выполняются во время слияния, это откладывает необходимость в этом драгоценном камне до более позднего этапа выполнения 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.
: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 (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.
Примеры
В следующих примерах показаны различные подходы к использованию ресурса 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.
Примечание
Синтаксис
Блок ресурса 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 для приведения узла в желаемое состояние. -
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
Удаление нескольких пакетов (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[Строка]'
Ресурс может уведомить другой ресурс о действии при изменении его состояния. Укажите
'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
Защитные свойства
Свойство guard может использоваться для оценки состояния узла во время фазы выполнения Chef Infra Client. На основании результатов этой оценки свойство guard используется для указания Chef Infra Client, следует ли ему продолжать выполнение ресурса. Свойство guard принимает либо строковое значение, либо значение блока Ruby:
- Строка выполняется как команда оболочки. Если команда возвращает
0, защитное свойство применяется. Если команда возвращает любое другое значение, то защитное свойство не применяется. Строковые защитные свойства в powershell_script выполняют команды Windows PowerShell и могут возвращатьtrueв дополнение к0. - Блок выполняется как код Ruby, который должен возвращать либо
true, либоfalse. Если блок возвращаетtrue, защитное свойство применяется. Если блок возвращаетfalse, защитное свойство не применяется.
Свойство guard полезно для обеспечения идемпотентности ресурса, позволяя ресурсу проверять желаемое состояние во время его выполнения, а затем, если желаемое состояние присутствует, 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[Строка]'
Ресурс может уведомить другой ресурс о выполнении действия при изменении его состояния. Укажите
'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_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
Добавление Nginx PPA, автоматическое определение ключа и URL репозитория:
apt_repository 'nginx-php' do
uri 'ppa:nginx/stable'
end
Добавление JuJu PPA, получение ключа с сервера ключей 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[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_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’s –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: Строка, Целое число
Имя или ID группы, которые должны быть изменены перед выполнением команды.
-
returns - Тип в Ruby: Целое число, Массив | Значение по умолчанию:
0Возвращаемое значение команды. Может быть массивом допустимых значений. При несоответствии возвращаемого значения(й) генерируется исключение.
-
timeout - Тип в Ruby: Целое число, Строка, Число с плавающей точкой | Значение по умолчанию:
3600Время ожидания (в секундах) команды перед истечением времени.
-
user - Тип в Ruby: Строка, Целое число
Имя или ID пользователя, которые должны быть изменены перед выполнением команды.
-
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[Строка]'
Ресурс может уведомить другой ресурс о необходимости принять действия при изменении его состояния. Укажите
'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.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса 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. Этот модуль добавляет функциональность в стиле оболочки к файлу конфигурации 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
страница ресурса batchИспользуйте ресурс batch для выполнения скрипта пакетной обработки с помощью интерпретатора cmd.exe в Windows. Ресурс batch создаёт и выполняет временный файл (подобно тому, как ведёт себя ресурс скрипта), а не выполняет команду непосредственно. Команды, которые выполняются с помощью этого ресурса, по своей природе не идемпотентны, так как обычно уникальны для среды, в которой они выполняются. Используйте 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: Строка
Имя пользователя идентификатора пользователя, с которым необходимо запустить новый процесс. Имя пользователя может быть указано необязательно с доменом, например, domainuser или user@my.dns.domain.com в формате универсального имени принципала (UPN). Его также можно указать без домена просто как user, если вместо этого домен указан с помощью атрибута domain. Только в Windows, если это свойство указано, необходимо указать свойство password.
-
password - Тип Ruby: Строка
Только для Windows: Пароль пользователя, указанного свойством user. Это свойство обязательно, если user указано в Windows, и может быть указано только при указании user. Свойство sensitive для этого ресурса автоматически будет установлено в значение true, если указан пароль.
-
domain - Тип Ruby: Строка
Только для Windows: Домен пользователя, указанного свойством user. Если не указано, имя пользователя и пароль, указанные свойствами user и password, будут использоваться для разрешения этого пользователя по отношению к домену, в котором система, на которой выполняется Chef Infra Client, присоединена к домену, или, если эта система не присоединена к домену, она будет разрешать пользователя как локального учётную запись на этой системе. Альтернативный способ указать домен — оставить это свойство неопределённым и указать домен как часть свойства 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.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса 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 по-прежнему определит правильный поставщик для использования на основе платформы, независимо от расширения файла.
Примечание
Синтаксис
Полный синтаксис всех свойств, доступных для ресурса 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[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.
Примеры
В следующих примерах показаны различные подходы к использованию ресурса 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 имеет три режима работы:
| Режим | Описание |
|---|---|
| Автономный | По умолчанию. Никакие кулинарные книги не загружаются, и список выполнения пуст. |
| Solo | 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 Server, чтобы получить список выполнения, атрибуты и кулинарные книги узла. Режим Chef Infra Client активируется с помощью опций -z или --client. Вы также можете указать файл конфигурации с помощью -c CONFIG, а URL-адрес сервера с помощью -S SERVER_URL. |
Конфигурация
chef-shell определяет, какой файл конфигурации загрузить, на основе следующего:
- Если файл конфигурации указан с помощью опции
-c, chef-shell будет использовать указанный файл конфигурации - Если задан NAMED_CONF, chef-shell загрузит ~/.chef/NAMED_CONF/chef_shell.rb
- Если NAMED_CONF не задан, chef-shell загрузит ~/.chef/chef_shell.rb, если он существует
- Если 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 Server, скопируйте настройки 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 Server. chef-shell можно запустить как клиент Chef Infra Client, чтобы проверить функциональность, доступную только при подключении Chef Infra Client к серверу Chef Infra Server, например, поиск или доступ к данным, хранящимся в пакетах данных.
chef-shell может использовать те же учетные данные, что и knife, при подключении к серверу Chef Infra Server. Убедитесь, что настройки в chef-shell.rb совпадают с настройками в config.rb, а затем используйте опцию -z в качестве части команды. Например:
chef-shell -z
Управление
Когда chef-shell настроен для доступа к серверу Chef Infra Server, chef-shell может перечислять, отображать, искать и редактировать кулинарные книги, клиентов, узлы, роли, среды, файлы политики и пакеты данных.
Синтаксис для управления объектами на сервере Chef Infra Server выглядит следующим образом:
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.
"Hello World"
Этот пример демонстрирует, как запустить 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 интерпретировал его как escape-последовательность.
Примеры
В следующих примерах показаны различные подходы к использованию ресурса 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]',: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.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса 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 Infra.
Синтаксис
Синтаксис использования ресурса 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 Infra.
-
complete -
Используется для указания, определяет ли этот ресурс полностью chef-client. Если
true, любые свойства, не указанные в этом ресурсе, будут сброшены до значений свойств по умолчанию.
-
ignore_failure - Тип Ruby: true, false | Значение по умолчанию:
falseПродолжать выполнение рецепта, если ресурс завершится неудачей по любой причине.
-
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
-
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"Принять Chef EULA
-
chef_server_url - Тип Ruby: Строка |
REQUIREDURL сервера Chef Infra Server.
-
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: Строка
Указанный в файле политики узла, который должен использоваться при запуске 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 Server, для определения применяемой конфигурации.Примечание
По умолчанию эта конфигурация использует значение
node.name, которое устанавливается во время загрузки. Жесткая кодировка этого значения в конфигурацииclient.rbизбегает логики на сервере Chef Infra Server, которая выполняет DNS-поиски и может завершиться сбоем в случае сбоя DNS. Чтобы пропустить это значение по умолчанию и вместо этого использовать встроенную логику сервера Chef Infra Server, установите это свойство в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 Server.policy_nameтакже должен быть указан при установке этого свойства.
-
policy_name - Тип Ruby: Строка
Имя политики, определяемое настройкой
nameв файле Policyfile.rb.policy_groupпри установке этого свойства.
-
policy_persist_run_list - Тип Ruby: true, false
Переопределять списки выполнения, определённые в файле Policyfile, с помощью
run_list, определённого на сервере Chef Infra Server.Новое в 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 Server, соединения с 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. См. 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 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[Строка]'
Ресурс может уведомить другой ресурс о выполнении действия при изменении его состояния. Укажите
'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_launchd в рецептах:
Настройка запуска Клиента Chef Infra по расписанию:
chef_client_launchd 'Setup the Chef Infra Client to run every 30 minutes' do
interval 30
action :enable
end
Отключение запуска Клиента Chef Infra по расписанию:
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 на запуск в виде запланированной задачи Windows. Этот ресурс также создаст указанную директорию для логов, если она не существует.
Новое в Клиенте Chef Infra 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 предпримет для приведения узла в нужное состояние. -
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. (по умолчанию)
:nothing- Этот блок ресурса не действует, пока не будет вызван другим ресурсом для выполнения действия. После получения уведомления этот блок либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Клиента Chef Infra.
:remove- Удалить запланированную задачу Windows для запуска Клиента Chef Infra.
Свойства
Ресурс chef_client_scheduled_task имеет следующие свойства:
-
accept_chef_license - Тип Ruby: true, false | Значение по умолчанию:
falseПринять соглашение об использовании и услугах онлайн-мастера Chef. См. 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.
-
priority - Тип Ruby: Целое число | Значение по умолчанию:
7Устанавливает приоритет уровня от 0 до 10.
Новое в Клиенте Chef Infra 17.5
-
run_on_battery - Тип Ruby: true, false | Значение по умолчанию:
trueЗапускать задачу Клиента Chef Infra при питании от батарей.
-
splay - Тип Ruby: Целое число, Строка | Значение по умолчанию:
300Случайное число секунд от 0 до X, добавляемое к интервалу, чтобы избежать одновременного выполнения всех команд chef-client.
-
start_date - Тип Ruby: Строка
Дата начала задачи в формате дд/мм/гггг (например, 17.12.2020).
-
start_time - Тип Ruby: Строка
Время начала задачи в формате ЧЧ:мм (например, 14:00). Если частота задана в минутах, время начала по умолчанию будет текущим временем плюс указанное количество минут.
-
task_name - Тип Ruby: Строка | Значение по умолчанию:
chef-clientИмя создаваемой запланированной задачи.
-
use_consistent_splay - Тип Ruby: true, false | Значение по умолчанию:
falseВсегда использовать одно и то же случайное значение для сдвига на каждом узле, чтобы обеспечить постоянную частоту выполнения chef-client.
Новое в Клиенте Chef Infra 17.5
-
user - Тип Ruby: Строка | Значение по умолчанию:
SystemИмя пользователя, от имени которого запускается Клиент Chef Infra.
Общие функции ресурсов
Ресурсы 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 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, то защитный механизм применяется. Если блок возвращаетfalse, то защитный механизм не применяется.
Свойство guard полезно для обеспечения идемпотентности ресурса, позволяя ресурсу проверять желаемое состояние во время выполнения и, если желаемое состояние присутствует, не предпринимать никаких действий 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 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Путь к каталогу конфигурации.
-
cpu_quota - Тип Ruby: Целое число, строка
systemd CPUQuota для запуска процесса chef-client. Это процентное значение от общего времени процессора, доступного в системе. Если система имеет более одного ядра, это значение может быть больше 100.
Введено в Chef Infra Client 16.5
-
daemon_options - Тип Ruby: Массив | Значение по умолчанию:
[]Массив параметров для передачи команде chef-client.
-
delay_after_boot - Тип Ruby: Строка | Значение по умолчанию:
1minВремя ожидания после загрузки системы, прежде чем интервал начнётся. Это выражается как системный временной интервал, например,
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Интервал ожидания между выполнениями. Это выражается как системный временной интервал, например,
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 не выполнялись одновременно. Это выражается как системный временной интервал, например,
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[Строка]'
Ресурс может уведомить другой ресурс о выполнении действия при изменении его состояния. Укажите
'resource[name]', действие, которое должен выполнить ресурс, и затем:timerдля этого действия. Ресурс может уведомить более одного ресурса; для каждого уведомляемого ресурса используйте инструкциюnotifies.Если указанный ресурс не существует, возникает ошибка. В отличие от этого,
subscribesне завершится ошибкой, если исходный ресурс не найден.
Таймер определяет момент во время выполнения Клиента Chef Infra, в котором выполняется уведомление. Доступны следующие таймеры:
:before-
Указывает, что действие над уведомленным ресурсом должно быть выполнено до обработки блока ресурса, в котором находится уведомление.
:delayed-
По умолчанию. Указывает, что уведомление должно быть помещено в очередь и затем выполнено в конце выполнения Клиента Chef Infra.
-
: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, в котором выполняется уведомление. Доступны следующие таймеры:
: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_client_systemd_timer в рецептах:
Настройка Клиента Chef Infra для запуска с заданным интервалом в 30 минут по умолчанию:
chef_client_systemd_timer 'Run Chef Infra Client as a systemd timer'
Запуск Клиента Chef Infra каждый час:
chef_client_systemd_timer 'Run Chef Infra Client every 1 hour' do
interval '1hr'
end
Запуск Клиента Chef Infra с дополнительными параметрами, передаваемыми клиенту:
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. Это позволяет Клиенту Chef Infra общаться с внутренними зашифрованными ресурсами без ошибок.
Новое в Клиенте Chef Infra 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 предпримет для приведения узла в желаемое состояние. -
cert_nameиcertificate— доступные свойства этого ресурса.
Действия
Ресурс chef_client_trusted_certificate имеет следующие действия:
:add- Добавить доверенный сертификат в каталог доверенных сертификатов Клиента Chef Infra (по умолчанию)
:nothing- Этот блок ресурса не действует, пока не будет уведомлен другим ресурсом о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Клиента Chef Infra.
:remove- Удалить доверенный сертификат из каталога доверенных сертификатов Клиента Chef Infra
Свойства
Ресурс 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 (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]', действие, которое должен выполнить ресурс, и затем: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.
Примеры
В следующих примерах демонстрируются различные подходы к использованию ресурса 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 -
Указывает, что уведомление должно быть выполнено немедленно для каждого уведомленного ресурса.
Синтаксис для
notifies:notifies :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_itemData bag — это контейнер связанных data bag items, где каждый отдельный 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 items.
Синтаксис
Синтаксис использования ресурса 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 сервера базы данных для каждой среды. Окружения также позволяют организациям уверенно переносить новые релизы куков из стадии разработки в производство, постепенно тестируя релизы в тестовых средах перед запуском в производстве.
Используйте ресурс 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]', действие, которое должен выполнить ресурс, и: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]', действие, которое должно быть выполнено, и: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 для установки gem только для экземпляра Ruby, предназначенного для chef-клиента. Если gem устанавливается из локального файла, его необходимо добавить в узел с помощью ресурсов remote_file или cookbook_file.
Ресурс chef_gem работает со всеми теми же свойствами и опциями, что и ресурс gem_package, но не принимает свойство gem_binary, поскольку всегда использует экземпляр Ruby, в котором работает chef-client. В дополнение к выполнению действий, аналогичных ресурсу gem_package, ресурс chef_gem выполняет следующие действия:
- Выполняет свои действия немедленно, до сходимости, позволяя использовать gem в рецепте сразу после установки.
- Выполняет
Gem.clear_pathsпосле действия, гарантируя, что gem знает об изменениях, так что его можно использовать сразу после установки.
Предупреждение
Ресурсы chef_gem и gem_package оба используются для установки Ruby gem. На любом компьютере, на котором установлен Chef Infra Client, есть два экземпляра Ruby. Один — стандартный, системный экземпляр Ruby, а другой — выделенный экземпляр, доступный только для Chef Infra Client. Используйте ресурс chef_gem для установки gem в экземпляр Ruby, предназначенный для Chef Infra Client. Используйте ресурс gem_package для установки всех остальных gem (то есть для установки gem по всей системе).
Синтаксис
Полный синтаксис всех свойств, доступных для ресурса 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- По умолчанию. Установка gem. Если версия указана, устанавливается указанная версия gem.
:nothing- Этот блок ресурса не выполняет никаких действий, пока другой ресурс не уведомит его о необходимости выполнения. После уведомления этот блок либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:purge- Удаление gem. Это действие обычно удаляет конфигурационные файлы, а также сам gem.
:reconfig- Переконфигурирование gem. Это действие требует файла ответов.
:remove- Удаление gem.
:upgrade- Установка gem и/или обеспечение того, что gem является последней версией.
Свойства
Ресурс chef_gem имеет следующие свойства:
-
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: Строка | Значение по умолчанию:
The `gem` binary included with Chef Infra Client.Путь к бинарному файлу gem, который будет использоваться для установки. По умолчанию используется тот же экземпляр 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 -
…
-
complete -
Указывает, полностью ли этот ресурс определяет chef-клиент. Если
true, любые свойства, не указанные в этом ресурсе, будут сброшены до значений по умолчанию.
-
groups -
…
-
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 -
…
-
remove_groups -
…
-
remove_users -
…
-
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
-
users -
…
Примеры
У этого ресурса нет примеров.
Ресурс 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 gem.
-
type - Тип Ruby: Словарь | Значение по умолчанию:
{"report"=>true, "exception"=>true}Тип обработчика для регистрации, например, :report, :exception или оба.
Общие функциональные возможности ресурсов
Ресурсы 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_handler в рецептах:
Включить обработчик ‘MyHandler’
Следующий пример демонстрирует, как включить вымышленный обработчик ‘MyHandler’, который находится на диске по адресу /etc/chef/my_handler.rb. Обработчик будет настроен на работу с Chef Infra Client и получит значения для метода инициализации обработчика:
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 Client, а затем создает отчет после завершения выполнения.
cookbook_versions.rb:
Следующий настраиваемый обработчик определяет, как кулинарные книги и версии кулинарных книг, используемые во время выполнения Chef Infra Client, будут компилироваться в отчет с использованием класса Chef::Log в Chef Infra Client:
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 Client.
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 Client:
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 Client и может использоваться для исключений и отчетов. Он сериализует данные отчета об ошибках в файл JSON. Этот обработчик можно включить одним из следующих способов.
Добавив следующие строки Ruby-кода в файл client.rb или solo.rb, в зависимости от того, как запускается Chef Infra Client:
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во время выполнения -
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: Symbol, 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
-
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: 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_organization
Страница ресурса chef_organizationИспользуйте ресурс chef_organization для взаимодействия с объектами организаций, существующими на сервере Chef Infra.
Синтаксис
Синтаксис использования ресурса 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во время выполнения -
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]', действие, которое должно быть выполнено, и затем: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во время выполнения -
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 -
…
-
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 -
Указывает, что уведомление должно быть выполнено немедленно для каждого уведомленного ресурса.
Синтаксис для
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 -
…
-
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: Symbol, 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_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: String, Array |
REQUIREDСписок администраторов, которые должны иметь доступ к элементу. Соответствует параметру «admin» при использовании плагина chef-vault knife. Может быть указан как строка с разделителем запятых или как массив.
-
clients - Тип в Ruby: String, Array
Запрос поиска API-клиентов узлов, которые должны иметь доступ к элементу.
-
data_bag - Тип в Ruby: String |
REQUIREDНабор данных, содержащий элемент.
-
environment - Тип в Ruby: String
Chef среда данных, если хранятся значения по средам.
-
id - Тип в Ruby: String | Значение по умолчанию:
The resource block's nameИмя элемента набора данных, если оно отличается от имени блока ресурса.
-
raw_data - Тип в Ruby: Hash, Mash (Hash-подобный) | Значение по умолчанию:
{}Необработанные данные в виде Ruby Hash, которые будут сохранены в элементе.
-
search - Тип в Ruby: String | Значение по умолчанию:
*:*Запрос поиска, который соответствует тому же, что используется для клиентов, сохраняется в элементе как поле.
Общая функциональность ресурсов
Ресурсы 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_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 в рецептах:
Включение функции checksumFiles Chocolatey
chocolatey_feature 'checksumFiles' do
action :enable
end
Отключение функции checksumFiles Chocolatey
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. Файл не передаётся, когда контрольные суммы совпадают. Передаются только файлы, требующие обновления, с сервера Chef Infra на узел.
Синтаксис
Блок ресурса cookbook_file управляет файлами, используя файлы, которые существуют в каталоге /files кулинарной книги. Например, чтобы записать главную страницу для веб-сайта Apache:
cookbook_file '/var/www/customers/public_html/index.php' do
source 'index.php'
owner 'web_admin'
group 'web_admin'
mode '0755'
action :create
end
где:
-
'/var/www/customers/public_html/index.php'— путь к файлу, который нужно создать -
'index.php'— файл в каталоге/filesв кулинарной книге, используемый для создания этого файла (содержание файла в кулинарной книге станет содержанием файла на узле) -
owner,groupиmodeопределяют разрешения
Полный синтаксис для всех свойств, доступных для ресурса cookbook_file:
cookbook_file 'name' do
atomic_update true, false
backup Integer, false # default value: 5
cookbook String
force_unlink true, false # default value: false
group String, Integer
inherits true, false
manage_symlink_source true, false
mode String, Integer
owner String, Integer
path String # default value: 'name' unless specified
rights Hash
source String, Array
verify String, Block
action Symbol # defaults to :create if not specified
endгде:
-
cookbook_file— ресурс. -
name— имя, заданное для блока ресурса. -
actionопределяет действия, которые Chef Infra Client предпримет для приведения узла в желаемое состояние. -
atomic_update,backup,cookbook,force_unlink,group,inherits,manage_symlink_source,mode,owner,path,rights,sourceиverify— свойства этого ресурса со указанным типом Ruby. См. раздел «Свойства» ниже для получения дополнительной информации обо всех свойствах, которые можно использовать с этим ресурсом.
Действия
Ресурс cookbook_file имеет следующие действия:
:create- По умолчанию. Создать файл. Если файл уже существует (но не совпадает), обновить этот файл в соответствии с указанными данными.
:create_if_missing- Создать файл только в том случае, если он не существует. Если файл существует, ничего не происходит.
:delete- Удалить файл.
:nothing- Этот блок ресурса не действует, пока другой ресурс не уведомит его о необходимости совершить действие. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:touch- Создать метку файла. Это обновляет временные метки доступа (atime) и изменения файла (mtime). (Это действие может быть использовано с этим ресурсом, но обычно используется только с ресурсом file.)
Свойства
Ресурс cookbook_file имеет следующие свойства:
-
atomic_update - Тип в Ruby: true, false | Значение по умолчанию:
False if modifying /etc/hosts, /etc/hostname, or /etc/resolv.conf within Docker containers. Otherwise default to the client.rb 'file_atomic_update' config value.Выполнять атомарные обновления файлов на основе каждого ресурса. Установите в true для атомарных обновлений файлов. Установите в false для неатомарных обновлений файлов. Это значение переопределяет
file_atomic_update, которое является глобальным значением, найденным в файлеclient.rb.
-
backup - Тип в Ruby: Целое число, false | Значение по умолчанию:
5Количество резервных копий, которые нужно сохранить в
/var/chef/backup(для платформ на основе UNIX и Linux) илиC:/chef/backup(для платформы Microsoft Windows). Установите вfalse, чтобы предотвратить сохранение резервных копий.
-
cookbook - Тип в Ruby: Строка | Значение по умолчанию:
The current cookbook nameКулинарная книга, в которой находится файл (если он не находится в текущей кулинарной книге).
-
force_unlink - Тип в Ruby: true, false | Значение по умолчанию:
falseКак Chef Infra Client обрабатывает определенные ситуации, когда целевой файл оказывается не файлом. Например, когда целевой файл является символьной ссылкой. Установите в
true, чтобы Chef Infra Client удалил целевой файл, который не является файлом, и заменил его указанным файлом. Установите вfalse, чтобы Chef Infra Client выдал ошибку.
-
group - Тип в Ruby: Целое число, Строка
Строка или идентификатор, который идентифицирует владельца группы по имени группы или SID, включая полные имена групп, такие как
domain\groupилиgroup@domain. Если это значение не указано, существующие группы остаются неизменными, а новые назначения групп используют группу по умолчаниюPOSIX(если доступна).
-
inherits - Тип в Ruby: true, false | Значение по умолчанию:
trueТолько Microsoft Windows. Наследует ли файл права из родительского каталога.
-
manage_symlink_source - Тип Ruby: true, false | Значение по умолчанию:
true(с предупреждением)
Изменяет поведение ресурса файла, если он указывает на символическую ссылку. Когда это значение установлено в
true, Chef Infra Client будет управлять разрешениями символической ссылки или заменит символическую ссылку обычным файлом, если у ресурса есть содержимое. Когда это значение установлено вfalse, Chef будет следовать символической ссылке и будет управлять разрешениями и содержимым целевого файла символической ссылки.По умолчанию используется
true, но выводится предупреждение, что значение по умолчанию будет изменено наfalseв будущей версии; явное задание этого значения вtrueилиfalseподавляет это предупреждение.
-
mode - Тип Ruby: Целое число, Строка
Если
modeне указано, и если файл уже существует, используется существующий режим файла. Еслиmodeне указано, файла не существует, и действие:createуказано, Chef Infra Client предполагает значение маски'0777', а затем применяет umask для системы, на которой будет создан файл, к значениюmask. Например, если umask в системе равен'022', Chef Infra Client использует значение по умолчанию'0755'.Поведение отличается в зависимости от платформы.
Системы на базе UNIX и Linux: строка из 3-5 символов в кавычках, определяющая восьмеричный режим, передаваемый в chmod. Например:
'755','0755'или00755. Если значение задано как строка в кавычках, оно работает точно так же, как будто передана командаchmod. Если значение задано как целое число, добавьте ноль (0) к значению, чтобы убедиться, что оно интерпретируется как восьмеричное число. Например, чтобы назначить права чтения, записи и выполнения для всех пользователей, используйте'0777'или'777'; для тех же прав плюс бит «склейки» используйте01777или'1777'.Microsoft Windows: строка из 3-5 символов в кавычках, определяющая восьмеричный режим, который преобразуется в права для безопасности Microsoft Windows. Например:
'755','0755'или00755. Разрешены значения до'0777'(без битов «склейки»), и они имеют то же значение в Microsoft Windows, что и в UNIX, где4равноGENERIC_READ,2равноGENERIC_WRITE, а1равноGENERIC_EXECUTE. Это свойство не может использоваться для задания:full_control. Это свойство не имеет эффекта, если не указано, но когда оно иrightsуказаны оба, эффекты суммируются.
-
owner - Тип Ruby: Целое число, Строка
Строка или идентификатор, определяющий владельца группы по имени пользователя или SID, включая полные имена пользователей, такие как
domain\userилиuser@domain. Если это значение не указано, существующие владельцы остаются неизменными, а новые назначения владельца используют текущего пользователя (при необходимости).
-
path - Тип Ruby: Строка
Путь к месту назначения, в котором должен быть создан файл. Например:
file.txt.Microsoft Windows: Путь, начинающийся с косой черты (
/), будет указывать на корень текущего рабочего каталога процесса Chef Infra Client. Этот путь может отличаться от системы к системе. Поэтому использование пути, начинающегося с косой черты (/), не рекомендуется.
-
rights - Тип Ruby: Целое число, Строка
Только Microsoft Windows. Разрешения для пользователей и групп в среде Microsoft Windows. Например:
rights <permissions>, <principal>, <options>, где<permissions>определяет права, предоставляемые субъекту,<principal>— имя группы или пользователя, а<options>— словарь с одним (или несколькими) расширенными параметрами прав.
-
source - Тип Ruby: Строка, Массив | Значение по умолчанию:
The resource block's nameИмя файла в
COOKBOOK_NAME/files/defaultили путь к файлу, расположенному вCOOKBOOK_NAME/files. Путь должен включать имя файла и его расширение. Это можно использовать для распространения определенных файлов в зависимости от используемой платформы — см. Спецификацию файлов для получения дополнительной информации.
-
verify - Тип Ruby: Строка, Блок
Блок или строка, возвращающая
trueилиfalse. Строка, когдаtrueвыполняется как системная команда.Блок — произвольный Ruby, определенный в блоке ресурса с помощью свойства
verify. Когда блокtrue, Chef Infra Client будет продолжать обновлять файл по мере необходимости.Например, это должно возвращать
true:cookbook_file '/tmp/baz' do verify { 1 == 1 } endЭто должно возвращать
true:cookbook_file '/etc/nginx.conf' do verify 'nginx -t -c %{path}' endЭто должно возвращать
true:cookbook_file '/tmp/bar' do verify { 1 == 1} endА это должно возвращать
true:cookbook_file '/tmp/foo' do verify do |path| true end endВ то время как это должно возвращать
false:cookbook_file '/tmp/turtle' do verify '/usr/bin/false' endЕсли строка или блок возвращают
false, запуск Chef Infra Client прекращается, и возвращается ошибка.
Атомарные обновления файлов
Атомарные обновления используются с ресурсами на основе файлов, чтобы обеспечить возможность обновления файлов при обновлении двоичного файла или при исчерпании дискового пространства.
Атомарные обновления включены по умолчанию. Их можно управлять глобально с помощью параметра file_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 включают общие свойства, уведомления и средства защиты ресурсов.
Общие свойства
Следующие свойства общие для каждого ресурса:
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.
Уточнение файла
Кулинарная книга часто разрабатывается для работы на нескольких платформах и часто должна распространять определенный файл на конкретную платформу. Кулинарная книга может быть разработана для поддержки распространения файлов по платформам, гарантируя, что на каждой системе окажется правильный файл.
Шаблон уточнения файла зависит от двух вещей: пути поиска и атрибута источника. Используется первый совпадающий шаблон:
- /host-$fqdn/$source
- /$platform-$platform_version/$source
- /$platform/$source
- /default/$source
- /$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
Управление файлами dotfiles
Следующий пример демонстрирует использование ресурсов directory и cookbook_file для управления файлами dotfiles. Файлы dotfiles определяются структурой данных JSON, похожей на:
"files": {
".zshrc": {
"mode": '0755',
"source": "dot-zshrc"
},
".bashrc": {
"mode": '0755',
"source": "dot-bashrc"
},
".bash_profile": {
"mode": '0755',
"source": "dot-bash_profile"
},
}
а затем следующие ресурсы управляют файлами dotfiles:
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(БУЛЕВО, по умолчанию: «false»), -
foreground(БУЛЕВО, по умолчанию: «false»), -
kill-after(в секундах), -
signal(имя, например, «HUP» или число)
Новое в Chef Infra Client 15.7
-
-
user - Тип Ruby: Строка | Значение по умолчанию:
rootИмя пользователя, который запускает команду. Если свойство пользователя изменено, исходный пользователь для программы 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[Строка]'
Ресурс может уведомить другой ресурс о действии при изменении его состояния. Укажите
'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 в рецептах:
Запуск программы через указанный интервал
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 как 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[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_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: Хэш | Значение по умолчанию:
{}Хэш, содержащий дополнительные произвольные переменные окружения, в которых будет выполняться задача 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]', :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_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 (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.
Примеры
У этого ресурса нет примеров.
ресурс директории
страница ресурса директорииИспользуйте ресурс 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 предпримет для приведения узла к желаемому состоянию -
group,inherits,mode,owner,path,recursive, иrights— это свойства этого ресурса, с указанным типом Ruby. Подробную информацию обо всех свойствах этого ресурса см. в разделе «Свойства» ниже.
Действия
Ресурс directory имеет следующие действия:
:create- По умолчанию. Создать директорию. Если директория уже существует (но не соответствует), обновить эту директорию в соответствии с требованиями.
:delete- Удалить директорию.
:nothing- Этот блок ресурса не действует, пока не будет уведомлен другим ресурсом о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения клиента Chef Infra.
Свойства
Ресурс 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', а затем применяет к значению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указаны оба, эффекты суммируются.
-
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'], и Джулиан, и Луис не смогут прочитать документ. Например:
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, а затем разрешения на чтение и запись предоставляются корневому пользователю.
directory "#{node[:nginx][:dir]}/shared/certificates" do
owner 'root'
group 'root'
mode '0755'
recursive true
end
Перезагрузка конфигурации
Следующий пример показывает, как перезагрузить конфигурацию chef-клиента с помощью ресурса 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
Управление файлами 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
Ресурс dmg_package
Страница ресурса dmg_packageИспользуйте ресурс dmg_package для установки пакета из файла .dmg. Ресурс извлечет файл dmg из удаленного URL, закрепит его с помощью macOS' hdidutil, скопирует приложение (.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-заголовки (например, куки) для ресурса
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[Строка]'
Ресурс может уведомить другой ресурс о выполнении действия при изменении его состояния. Укажите
'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 Client. На основании результатов этой оценки свойство блока затем используется для указания клиенту Chef Infra, нужно ли продолжать выполнение ресурса. Свойство блока принимает либо строковое значение, либо значение Ruby-блока:
- Строка выполняется как командная строка. Если команда возвращает
0, применяется блокировка. Если команда возвращает любое другое значение, свойство блока не применяется. Строковые блокировки в powershell_script выполняют команды Windows PowerShell и могут возвращатьtrueв дополнение к0. - Блок выполняется как код Ruby, который должен вернуть либо
true, либоfalse. Если блок возвращаетtrue, применяется свойство блока. Если блок возвращаетfalse, свойство блока не применяется.
Свойство блока полезно для обеспечения идемпотентности ресурса, позволяя этому ресурсу проверить желаемое состояние во время его выполнения, а затем, если желаемое состояние присутствует, ничего не делать клиенту Chef Infra.
СвойстваСледующие свойства могут быть использованы для определения блока, который оценивается во время фазы выполнения Chef Infra Client:
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 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_resourceWindows 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 ArrayObject[]Chef::Util::Powershell:PSCredentialPSCredentialFalsebool($false)FixnumIntegerFloatDoubleHashHashtableTruebool($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, в котором выполняется уведомление. Доступны следующие таймеры:
: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.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса 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_scriptWindows PowerShell — это основанная на задачах командная оболочка и язык сценариев, разработанный Microsoft. Windows PowerShell использует подход, ориентированный на документы, для управления машинами на базе Microsoft Windows, аналогично подходу, используемому для управления машинами на базе Unix и Linux. Windows PowerShell — это платформа, независимая от инструментов, которая поддерживает использование Chef для управления конфигурациями.
Конфигурация желаемого состояния (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 предпримет для приведения узла в желаемое состояние. -
code,command,configuration_data,configuration_data_script,configuration_name,cwd,environment,flags,importsиtimeout— это свойства этого ресурса с указанным типом Ruby. Более подробную информацию обо всех свойствах, которые могут быть использованы с этим ресурсом, см. в разделе «Свойства».
Действия
Ресурс dsc_script имеет следующие действия:
:nothing- Этот блок ресурса не действует, пока не получит уведомление от другого ресурса о выполнении действия. После получения уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Клиента Chef Infra.
: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) и символ подчеркивания (_) и должно начинаться с буквы. Имя не может быть пустым. Это свойство нельзя использовать совместно со свойством
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 Помощник
Используйте помощник 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 и принудительно устанавливает локаль на English+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Определяет, будет ли скрипт выполняться с повышенными правами для обхода Управления доступом пользователей (UAC) от блокировки процесса при интерактивном запуске. Это приведет к выполнению процесса в рамках сеанса пакетного входа вместо интерактивного входа. Пользователь, запускающий chef-client, должен иметь разрешения «Заменить маркер уровня процесса» и «Настроить квоты памяти для процесса». Пользователь, запускающий команду, должен иметь разрешение «Вход в систему в качестве пакетной задачи». Поскольку это требует входа в систему, свойства user и password являются обязательными.
Новое в Chef Client 13.3
-
environment - Тип в Ruby: Хэш
Хэш переменных окружения в формате
({'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. Свойство sensitive для этого ресурса автоматически будет установлено в true, если указан пароль.
Новое в Chef Client 12.21
-
returns - Тип в Ruby: Целое число, массив | Значение по умолчанию:
0Возвращаемое значение команды. Может быть массивом принятых значений. Исключение возникает, когда возвращаемое значение(я) не совпадает(ют).
-
timeout - Тип в Ruby: Целое число, строка, число с плавающей точкой | Значение по умолчанию:
3600Время ожидания (в секундах) команды перед истечением срока действия.
-
user - Тип в Ruby: Строка, целое число
Имя пользователя идентификатора пользователя, с которым нужно запустить новый процесс. Имя пользователя можно необязательно указать с доменом, т.е.
domain\userилиuser@my.dns.domain.comв формате универсального имени принципала (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 вместе для обеспечения работы MySQL на узле, работающем на Amazon EC2. Этот пример выполняет следующие действия:
- Проверка наличия 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 { ::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 Recipe для создания переменной, которая может использоваться другими ресурсами в том же рецепте. В этом примере 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 'tomcat' do
action :start
end
а НЕ что-то вроде этого:
execute 'start-tomcat' do
command '/etc/init.d/tomcat start'
action :run
end
Нет оснований использовать ресурс execute для управления службой, так как ресурс service предоставляет свойство start_command напрямую, что обеспечивает рецепту полный контроль над выпущенной командой более чистым и прямым способом.
Использование помощника поиска языка Infra для поиска пользователей:
Следующий пример демонстрирует, как использовать метод search в языке Chef Infra для поиска пользователей:
# 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. Если это значение не указано, существующие группы остаются без изменений, а новые назначения групп используют групповую (если доступна).
-
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: Целое число, строка
Процитированная строка из 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: Строка
Полный путь к файлу, включая имя файла и его расширение. Например:
/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 создаст файлы так, чтобы наследование списков управления доступом работало должным образом.
Безопасность файлов в 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 (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.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса 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.
Примечание
Синтаксис
Блок ресурса 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 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.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса 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 Client, существуют две реализации Ruby. Одна — стандартная, системная версия Ruby, а другая — специальная версия, доступная только Chef Infra Client. Используйте ресурс chef_gem для установки gem в версию Ruby, предназначенную для Chef Infra Client. Используйте ресурс 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 Client для приведения узла к нужному состоянию. -
clear_sources,gem_binary,include_default_source,options,package_name,source,timeoutиversion— доступные свойства этого ресурса.
Действия
Ресурс gem_package имеет следующие действия:
:install- Установить пакет. Если указана версия, установить указанную версию пакета. (по умолчанию)
:nothing- Этот блок ресурса не выполняется, пока не будет уведомлен другим ресурсом о выполнении действия. После уведомления этот блок ресурса выполняется немедленно или помещается в очередь для выполнения в конце выполнения Chef Infra Client.
: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 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: Строка
Версия пакета для установки или обновления.
Функциональность ресурса gem_package
Ресурсы 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.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса gem_package в рецептах:
Следующие примеры демонстрируют различные подходы к использованию ресурса gem_package в рецептах:
Установка gem файла из локальной файловой системы
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 или использовать, когда ветка в репозитории исходного кода называется
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), которая не существует в репозитории исходного кода. Chef Infra Client затем свободно может принудительно проверить эту ветку на любой коммит, не уничтожая локальную историю существующей ветки.
Например, чтобы явно отслеживать ветку master репозитория исходного кода:
revision 'master'Используйте команды
git rev-parseиgit ls-remote, чтобы убедиться, что Chef Infra Client правильно синхронизирует коммиты. (Chef Infra Client всегда выполняетgit ls-remoteв репозитории исходного кода, чтобы убедиться, что коммит внесён в правильный репозиторий.)
-
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[Строка]'
Ресурс может уведомить другой ресурс о действии при изменении его состояния. Укажите
'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.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса 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
Уведомление о ресурсе после проверки out
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 для управления локальной группой.
Синтаксис
Полный синтаксис для всех свойств, доступных для ресурса 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\nruby\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[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_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.shURL скрипта установки, по умолчанию — из репозитория 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.shURL 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[Строка]'
Ресурс может уведомить другой ресурс о действии при изменении его состояния. Укажите
'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
Средства защиты
Свойство guard может использоваться для оценки состояния узла во время фазы выполнения Chef Infra Client. Основываясь на результатах этой оценки, свойство guard используется для указания Chef Infra Client, следует ли продолжать выполнение ресурса. Свойство guard принимает строковое значение или значение 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 Installer (Automate Installer) —https://your.bldr.url/bldr/v1
-
channel - Тип Ruby: Символ, строка | Значение по умолчанию:
:stableПередает
--channelс указанным каналом для команды hab
-
gateway_auth_token - Тип Ruby: Строка
Токен аутентификации для доступа к http-порту удаленного монитора.
-
health_check_interval - Тип Ruby: Целое число | Значение по умолчанию:
30Интервал (секунды) проверки работоспособности.
-
remote_sup - Тип Ruby: Строка | Значение по умолчанию:
127.0.0.1:9632Адрес удаленного шлюза управления монитором.
-
remote_sup_http - Тип Ruby: Строка | Значение по умолчанию:
127.0.0.1:9631IP-адрес и порт, используемые для связи с удаленным монитором. Если это значение недействительно, ресурс обновит конфигурацию монитора каждый раз при запуске 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. Доступны следующие таймеры:
: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:
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 при установке, а вместо этого создайте пользователя приложения с помощью ресурса user Chef
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 для одного или нескольких сервисов 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.
:run- Действие
runобрабатывает установку Habitat с помощью ресурсаhabitat_install, гарантирует, что установлены соответствующие версии пакетовcore/hab-supиcore/hab-launcherс помощьюhabitat_package, затем добавляет соответствующие определения системной инициализации и управляет службой. (по умолчанию) :stop
Свойства
Ресурс habitat_sup имеет следующие свойства:
-
auth_token - Тип Ruby: Строка
Токен аутентификации для доступа к частной организации на bldr. Это значение используется для шаблонизации соответствующего файла службы.
-
auto_update - Тип Ruby: true, false | Значение по умолчанию:
falseПередает
--auto-update. Это задаст диспетчер Habitat на автоматическое обновление всякий раз, когда выпущена стабильная версия.
-
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"Указывает на принятие лицензии Habitat, если установлено значение
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 Service для установки.
-
sup_version - Тип Ruby: Строка
Позволяет выбрать версию supervisor для установки.
Примечание
Если указана версия, также будет установлена эта версия 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.example.com'
end
Использование update_condition
habitat_sup 'default' do
bldr_url 'https://bldr.example.com'
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.example.com:4222'
event_stream_token 'myawesomea2clitoken='
event_stream_cert '/hab/cache/ssl/mycert.crt'
end
Предоставление конкретных версий
habitat_sup 'default' do
bldr_url 'https://bldr.example.com'
sup_version '1.5.50'
launcher_version '13458'
service_version '0.6.0' # WINDOWS ONLY
end
Установка последней версии пакетов для сохранения
habitat_sup ‘default’ do bldr_url ‘https://bldr.example.com’ 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[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_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[Строка]'
Ресурс может уведомить другой ресурс о выполнении действия при изменении его состояния. Укажите
'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_package
Страница ресурса homebrew_packageИспользуйте ресурс homebrew_package для управления пакетами для платформы macOS.
Примечание
Начиная с Chef Infra Client 16, ресурс homebrew теперь принимает массив пакетов для одновременной установки нескольких пакетов.
Примечание
Новое в 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 Client при выполнении команды.
Chef Infra Client по умолчанию попытается выполнить команду Homebrew от имени владельца исполняемого файла
/usr/local/bin/brew. Если этот исполняемый файл не существует, Chef Infra Client попытается найти пользователя, выполнивwhich brew. Если этот исполняемый файл не найден, Chef Infra Client выведет сообщение об ошибке:Could not find the 'brew' executable in /usr/local/bin or anywhere on the path..Установите это свойство, чтобы указать владельца Homebrew в ситуациях, когда Chef Infra Client не может автоматически определить правильного владельца.
-
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[Строка]'
Ресурс может уведомить другой ресурс о необходимости выполнить действие при изменении его состояния. Укажите
'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
Защитные свойства
Свойство 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.
Несколько пакетов
Ресурс может указывать несколько пакетов и/или версий для платформ, использующих менеджеры пакетов 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
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 предпримет для приведения узла в нужное состояние. -
homebrew_path,owner,tap_nameиurl— доступные свойства этого ресурса.
Действия
Ресурс homebrew_tap имеет следующие действия:
:nothing- Этот блок ресурса не выполняет действий, пока не получит уведомление от другого ресурса. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:tap- Добавить Homebrew tap. (по умолчанию)
:untap- Удалить Homebrew tap.
Свойства
Ресурс homebrew_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- Выполнить немедленное обновление.
Свойства
Ресурс homebrew_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]', :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 с указанным интервалом:
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
-
domain_user - Тип 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
IP-адрес хоста в интернете для сетевого интерфейса.
-
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 nameIP-адрес, который должен быть назначен сетевому интерфейсу. Если не указан, будет использовано имя ресурса.
-
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 ресурс
страница ресурса 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 (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.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса inspec_waiver в рецептах:
Активировать по умолчанию освобождение в сегменте соответствия кулинарии openssh:
inspec_waiver 'openssh' do
action :add
end
Активировать все освобождения в сегменте соответствия кулинарии 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 в фазу соответствия, используя свойство «имя» для идентификации управления:
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 не обновляется и не генерирует уведомления (как ресурс журнала). Это сделано для сохранения возможности использования ресурса, не вызывая увеличение обновленного счетчика ресурсов, чем ноль. Поскольку ресурс не обновляет состояние управляемого узла, это поведение все еще согласуется с моделью управления конфигурацией. Вместо этого вы должны использовать события для наблюдения за изменениями конфигурации для фазы соответствия. Возможна цепочка уведомлений двух ресурсов с помощью ресурса 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 предпримет для перевода узла в требуемое состояние. -
backup,control,expiration,file_path,justificationиrun_test— это доступные свойства данного ресурса.
Действия
Ресурс inspec_waiver_file_entry имеет следующие действия:
:add- (по умолчанию)
:nothing- Этот блок ресурса не действует, если другой ресурс не уведомит его о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения клиента Chef Infra.
: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[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.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса 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 для управления пакетами (используя Image Packaging System (IPS)) на платформе Solaris 11.
Примечание
Синтаксис
Блок ресурса 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 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.
Примеры
В следующих примерах демонстрируются различные подходы к использованию ресурса 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 Client выполнит для приведения узла в желаемое состояние. -
load_dir,modname,optionsиunload_dir— доступные свойства этого ресурса.
Действия
Ресурс kernel_module имеет следующие действия:
:blacklist- Поместить модуль ядра в черный список.
:disable- Отключить модуль ядра. Новинка в Chef Infra Client 15.2.
:enable- Включить модуль ядра. Обратный эффект для действий :disable
:install- Загрузить модуль ядра и гарантировать его загрузку при перезагрузке. (по умолчанию)
:load- Загрузить модуль ядра.
:nothing- Этот блок ресурса не выполняется, пока другой ресурс не уведомит его о выполнении действия. После уведомления этот блок ресурса выполняется немедленно или помещается в очередь для выполнения в конце выполнения Chef Infra Client.
: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, andworking_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 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.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса 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 Client выполнит для приведения узла в желаемое состояние. -
group,link_type,mode,owner,target_fileиto— это свойства этого ресурса, со своим типом в Ruby. См. раздел «Свойства» ниже, чтобы узнать больше о всех свойствах, которые можно использовать с этим ресурсом.
Действия
Ресурс link имеет следующие действия:
:create- По умолчанию. Создать ссылку. Если ссылка уже существует (но не совпадает), обновить эту ссылку, чтобы она соответствовала.
:delete- Удалить ссылку.
:nothing- Этот блок ресурса не выполняется, пока не будет уведомлен другим ресурсом о выполнении действия. После уведомления этот блок ресурса выполняется немедленно или помещается в очередь для выполнения в конце выполнения Chef Infra Client.
Свойства
Ресурс 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 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.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса 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, а параметры следуют соглашениям этой команды. Для получения подробностей о работе инструмента см. страницу руководства 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 Client предпримет для приведения узла к желаемому состоянию. -
domain,host,key,userиvalue— доступные свойства этого ресурса.
Действия
Ресурс macos_userdefaults имеет следующие действия:
:delete- Удаление ключа из домена.
:nothing- Этот блок ресурса не выполняется, пока не будет уведомлен другим ресурсом о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
: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, которые принимает команда defaults от Apple, будут преобразованы: 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: Строка
Путь к файлу, в котором хранится битовая карта write-intent.
-
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(для проверки вывода команды mount на предмет наличия). Специальное блочное устройство или удаленный узел, метка или 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: String | Значение по умолчанию:
The resource block's nameДиректория (или путь), в которой будет смонтировано устройство. По умолчанию используется имя блока ресурсов, если не указано другое.
-
options - Тип в Ruby: Массив, Строка | Значение по умолчанию:
["defaults"]Массив или список опций для монтирования, разделенные запятыми.
-
pass - Тип в Ruby: Целое число, false | Значение по умолчанию:
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 вместе для обеспечения работы MySQL на узле, работающем на Amazon EC2. В этом примере выполняется следующее:
- Проверка наличия 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: Строка
Один (или несколько) дополнительных параметров команды, передаваемых команде.
-
package_name - Тип Ruby: Строка
Необязательное свойство для установки имени пакета, если оно отличается от имени блока ресурсов.
-
source - Тип Ruby: Строка
Локальный путь к файлу или URL-адрес пакета MSU.
-
timeout - Тип Ruby: Строка, целое число | Значение по умолчанию:
3600Время ожидания в секундах перед истечением времени.
Общие функциональные возможности ресурсов
Ресурсы 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.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса 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 ничего не делает и всегда запускает уведомления, которые на нём заданы. Используйте его для сокращения кода блоков уведомлений, общих для нескольких ресурсов, и предоставьте единую цель для других ресурсов для уведомлений. В отличие от большинства ресурсов, его действие по умолчанию — :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 выполнит для приведения узла в желаемое состояние.
Действия
Ресурс notify_group имеет следующие действия:
:nothing- Этот блок ресурса не выполняется, если не уведомлён другим ресурсом для выполнения действия. После уведомления этот блок ресурса выполняется немедленно или помещается в очередь для выполнения в конце выполнения клиента Chef Infra.
:run
Свойства
Этот ресурс не имеет свойств.
Общие функциональные возможности ресурсов
Ресурсы 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.
Примеры
В следующих примерах демонстрируются различные подходы к использованию ресурса 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.
Синтаксис
Полный синтаксис всех свойств, доступных ресурсу ohai:
ohai 'name' do
plugin String
action Symbol # defaults to :reload if not specified
endгде:
-
ohai— ресурс. -
name— имя, присвоенное блоку ресурса. -
action— определяет действия, которые Клиент Chef Infra предпримет для приведения узла в желаемое состояние. -
plugin— свойство, доступное для данного ресурса.
Действия
Ресурс ohai имеет следующие действия:
:nothing- Этот блок ресурса не действует, пока не будет уведомлён другим ресурсом о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце работы Клиента Chef Infra.
:reload- Перезагружает данные Ohai. (по умолчанию)
Свойства
Ресурс ohai имеет следующие свойства:
-
plugin - Тип в Ruby: Строка
Конкретные данные атрибутов Ohai для перезагрузки. Это свойство ведет себя аналогично указанию атрибутов при запуске Ohai в командной строке и принимает атрибут, который вы хотите перезагрузить, вместо фактического имени плагина. Например, вы можете передать
ipaddressдля перезагрузкиnode['ipaddress'], даже если эти данные поступают от плагинаNetwork. Если это свойство не указано, Клиент Chef Infra перезагрузит все плагины.
Общая функциональность ресурсов
Ресурсы 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 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.
Примечание
Синтаксис
Блок ресурса 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[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_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[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_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. Если не указан существующий ключ, ресурс автоматически сгенерирует беспарольный ключ с сертификатом. Если предоставлен закрытый ключ и сертификат CA, сертификат будет подписан с их использованием.
Примечание
Этот ресурс был переименован с 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 предпримет для приведения узла в желаемое состояние. -
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.
Уведомления
-
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, в котором выполняется уведомление. Доступны следующие таймеры:
: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.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса 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 списка отзыва сертификатов (CRL) в формате 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 предпримет, чтобы привести узел в желаемое состояние. -
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.
Свойства
Ресурс 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 конфигурирует узел (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.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса 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 Package
Поставщик пакетов RubyGems пытается использовать API RubyGems для установки gems без запуска нового процесса, когда это возможно. Команда gems для установки будет запущена в следующих условиях:
- Если указано свойство
gem_binary(в виде хэша, строки или файла .gemrc), Chef Infra Client запустит эту команду для проверки настроек среды и затем ещё раз для установки gem. - Если параметры установки указаны как строка, Chef Infra Client запустит команду gems с этими параметрами при установке gem.
- Chef installer будет искать команду gem в
PATHвместо того, чтобы использовать текущую среду gem. В рамкахenforce_default_pathsкаталогиbinдобавляются вPATH, что означает, что при отсутствии других RubyGems, установка всё равно будет производиться относительно него.
Укажите с хэшем
Вы должны предоставить параметры установки в виде хэша, если вы не используете явный параметр gem_binary с ресурсом gem_package. Этот подход позволяет поставщику установить gem без необходимости запуска внешнего процесса gem.
Следующие параметры RubyGems доступны для включения в хэш и передаются в RubyGems DependencyInstaller:
:env_shebang:force:format_executable:ignore_dependencies:prerelease:security_policy:wrappers
Дополнительную информацию об этих параметрах см. в документации RubyGems: https://docs.ruby-lang.org/en/2.2.0/Gem/DependencyInstaller.html.
Примерgem_package 'bundler' do
options(prerelease: true, format_executable: false)
end
Укажите со строкой
Когда используется явныйgem_binary, параметры должны передаваться как строка. Когда не используется явный gem_binary, Chef Infra Client вынужден запускать процесс gems для установки gems (что использует больше системных ресурсов), когда параметры передаются как строка. Строковые параметры передаются непосредственно команде gems и должны быть указаны так же, как если бы они были переданы в командной строке. Например, --prerelease для предварительной версии gem. Пример gem_package 'nokogiri' do
gem_binary('/opt/ree/bin/gem')
options('--prerelease --no-format-executable')
end
Укажите с файлом .gemrc
Параметры могут быть указаны в файле .gemrc. По умолчанию ресурсgem_package будет использовать Ruby интерфейс для установки gems, игнорируя файл .gemrc. Ресурс gem_package может быть принудительно настроен на использование команды gems (и чтение файла .gemrc) путем добавления атрибута gem_binary в блок кода. Шаблон с именем gemrc.erb расположен в каталоге /templates кулинарной книги:
:sources:
- http://<%= node['gem_file']['host'] %>:<%= node['gem_file']['port'] %>/
Рецепт может быть составлен следующим образом:
- Создаёт файл
.gemrcна основе шаблонаgemrc.erb - Выполняет команду
Gem.configuration - Устанавливает пакет с помощью файла
.gemrc
template '/root/.gemrc' do
source 'gemrc.erb'
action :create
notifies :run, 'ruby_block[refresh_gemrc]', :immediately
end
ruby_block 'refresh_gemrc' do
action :nothing
block do
Gem.configuration = Gem::ConfigFile.new []
end
end
gem_package 'di-ruby-lvm' do
gem_binary '/opt/chef/embedded/bin/gem'
action :install
end
Действия
У ресурса пакет следующие действия:
: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для этого действия. Ресурс может уведомить несколько ресурсов; используйте операторnotifiesдля каждого уведомляемого ресурса.Если ссылаемый ресурс не существует, возникает ошибка. В отличие от этого,
subscribesне завершится ошибкой, если исходный ресурс не найден.Таймер указывает момент во время выполнения Chef Infra Client, в котором выполняется уведомление. Доступны следующие таймеры:
:before-
Указывает, что действие над уведомлённым ресурсом должно выполняться до обработки блока ресурса, в котором находится уведомление.
:delayed-
По умолчанию. Указывает, что уведомление должно быть поставлено в очередь и затем выполнено в конце выполнения Chef Infra Client.
-
:immediate,:immediately -
Указывает, что уведомление должно быть выполнено немедленно для каждого уведомлённого ресурса.
Синтаксис для
notifies:notifies :action, 'resource[name]', :timer
-
options - Тип Ruby: Строка
Одна (или несколько) дополнительных опций, которые передаются команде.
-
package_name - Тип Ruby: Строка, Массив
Имя пакета. Значение по умолчанию:
nameблока ресурса. См. раздел «Синтаксис» выше для получения дополнительной информации.
-
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для этого действия.Обратите внимание, что
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.
Примечание
Синтаксис
Блок ресурса 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[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.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса 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для выполнения и: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.
Примеры
У этого ресурса нет примеров.
ресурс 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[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.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса 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.
Примечание
Синтаксис
Полный синтаксис всех свойств, доступных для ресурса 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[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.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса 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]',: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.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса 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, необходимы разрешения «Замена токена уровня процесса» и «Настройка квот памяти для процесса». Пользователю, запускающему команду, необходимо разрешение «Вход в систему в качестве пакетной задачи». Поскольку для этого требуется вход в систему, необходимо указать свойства пользователя и пароля.
Новое в 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будет использована 64-битная версия оболочки Windows PowerShell для оценки значений строк для свойствnot_ifиonly_if. Установите это значение в: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[Строка]'
Ресурс может уведомлять другой ресурс о действиях при изменении его состояния. Укажите
'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.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса 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
Использование атрибута flags
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[Строка]'
Ресурс может уведомить другой ресурс о выполнении действия при изменении его состояния. Укажите
'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.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса 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 для создания и удаления ключей реестра в Microsoft Windows.
Примечание
64-битные версии Microsoft Windows имеют 32-битную совместимую оболочку в реестре, которая отражает и перенаправляет определенные ключи (и их значения) в определённые места (или логические представления) в реестре.
Клиент Chef Infra может получить доступ к любому отражённому или перенаправленному ключу реестра. Архитектура машины, на которой работает Клиент Chef Infra, используется в качестве значения по умолчанию (без перенаправления). Доступ к расположению SysWow64 должен быть указан для перенаправления. Обычно это необходимо только для обеспечения совместимости с 32-битными приложениями, работающими в 64-битной операционной системе.
Дополнительную информацию см. на странице: Регистровое отражение.
Синтаксис
Блок ресурса 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— путь к ключу реестра. Путь должен включать раздел реестра, который можно указать либо полным именем, либо трех- или четырехбуквенным сокращением. Например, оба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— путь к ключу реестра. Путь должен включать раздел реестра, который можно указать либо полным именем, либо трех- или четырехбуквенным сокращением. Например, оба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— путь к ключу реестра. Путь должен включать раздел реестра, который можно указать либо полным именем, либо трех- или четырехбуквенным сокращением. Например, оба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 определил архитектуру во время выполнения).Чтобы читать или писать 32-битные ключи реестра на 64-битных машинах под управлением Microsoft Windows, свойство
architectureдолжно быть установлено в значение:i386. Значение:x86_64можно использовать для принудительной записи в 64-битное расположение реестра, но это значение менее полезно, чем значение по умолчанию (:machine), так как Chef Infra Client возвращает исключение, если:x86_64используется, и машина оказывается 32-битной (в то время как с:machineChef Infra Client может получить доступ к ключу реестра на 32-битной машине).
-
key - Тип в Ruby: Строка | Значение по умолчанию:
The resource block's nameПуть к расположению, в котором создается ключ реестра или из которого ключ реестра удаляется. Значение по умолчанию:
nameблока ресурса. Смотрите раздел «Синтаксис» выше для получения дополнительной информации. Путь должен включать раздел реестра, который можно указать либо полным именем, либо трех- или четырехбуквенным сокращением. Например, оба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-разрядный ключ, на 64-разрядной версии Microsoft Windows вы увидите вывод “Найден 32-разрядный ключ”:
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: Целое число, false | Значение по умолчанию:
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, false | Значение по умолчанию:
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]', действие, которое нужно выполнить, и затем :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.
Рекурсивные каталоги
Ресурс 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 Client управляет рекурсивными структурами каталогов:
- Кулинария с именем
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 Client запускается, ресурс remote_directory сообщит Chef Infra Client о копировании древовидной структуры каталогов из кулинарии в файловую систему, используя структуру, определенную в кулинарии:
/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 Client будет управлять правами доступа ко всей древовидной структуре каталогов ниже /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 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, что гарантирует, что настройки безопасности существующих файлов останутся неизменными.
Примеры
В следующих примерах демонстрируются различные подходы к использованию ресурса 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'; для тех же прав плюс бит «клейкости» используйте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блока ресурса. См. раздел «Синтаксис» выше для получения дополнительной информации.
-
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'Используя UNC Microsoft Windows:
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 для обеспечения возможности обновления файлов при обновлении бинарных файлов или при исчерпании дискового пространства.
Атомарные обновления включены по умолчанию. Их можно управлять глобально, используя настройку 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 Authentication в заголовках:
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 для установки пакетов, связанных с заданным идентификатором Red Hat Subscription Manager Errata. Это полезно, если необходимо установить пакеты для устранения одной уязвимости на ваших хостах.
Новое в 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- Установка пакета для определённого идентификатора ошибки. (по умолчанию)
:nothing- Этот блок ресурса не выполняет действий, пока не получит уведомление от другого ресурса для выполнения действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь на выполнение в конце выполнения Chef Infra Client.
Свойства
Ресурс rhsm_errata имеет следующие свойства:
-
errata_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[Строка]'
Ресурс может прослушивать другой ресурс и затем предпринять действие, если состояние прослушиваемого ресурса изменится. Укажите '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[Строка]'
Ресурс может уведомить другой ресурс о необходимости предпринять действие, когда его состояние изменится. Укажите
'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_errata_level в рецептах:
Укажите уровень errata, отличный от имени ресурса
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: Строка, Массив
Строка или массив ключей активации для использования при регистрации; вы также должны указать свойство «организация», при использовании этого свойства.
-
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: Строка
Среда, которую использовать при регистрации; требуется при использовании свойств имени пользователя и пароля.
-
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, RPM «katello-agent» будет установлен.
-
organization - Тип Ruby: Строка
Организация для использования при регистрации; требуется при использовании свойства ‘activation_key’.
-
password - Тип Ruby: Строка
Пароль для использования при регистрации. Это свойство не применимо при использовании ключа активации. Если указано, также необходимо указать имя пользователя и среду.
-
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: Строка
Имя пользователя для использования при регистрации. Это свойство не применимо при использовании ключа активации. Если указано, также необходимо указать пароль и среду.
Общие возможности ресурсов
Ресурсы 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.
Примеры
В следующих примерах показаны различные подходы к использованию ресурса 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[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.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса 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 nameIP-адрес целевого маршрута.
Общие функциональные возможности ресурсов
Ресурсы 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.
Примеры
Этот ресурс не имеет примеров.
Ресурс 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 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.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса 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 Client, чтобы привести узел к желаемому состоянию. -
code,creates,cwd,environment,flags,group,path,returns,timeout,userиumask— свойства этого ресурса с указанным типом Ruby. Более подробную информацию о всех свойствах, которые можно использовать с этим ресурсом, см. в разделе «Свойства».
Действия
Ресурс ruby имеет следующие действия:
:nothing- Этот блок ресурса не действует, пока не будет уведомлен другим ресурсом о принятии действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
: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 для защиты этого ресурса от идемпотентности.
Этот ресурс является базовым для ряда других ресурсов, используемых для скриптинга на конкретных платформах. Более подробную информацию о конкретных ресурсах для конкретных платформ см. в следующих разделах:
Изменено в 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 в формате Universal Principal Name (UPN). Также можно указать без домена просто как user, если вместо этого домен указан с помощью атрибута domain. Только в Windows, если это свойство указано, свойство password должно быть указано.
-
password - Тип Ruby: Строка
Только Windows: Пароль пользователя, указанного свойством user. Значение по умолчанию: nil. Это свойство обязательно, если user указано в Windows и может быть указано только если указано 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 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.
Уведомления
-
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.
Интерпретатор защитных свойств
Любой ресурс, который передает строковую команду, также может указать интерпретатор, который будет использоваться для оценки этой строковой команды. Это делается с помощью свойства guard_interpreter для указания ресурса на основе скрипта.
Свойство 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, операторы защиты не наследуют свойства, определенные ресурсом на основе скрипта.
Предупреждение
Ресурсы 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, связанному со службой. Используйте
init_command, чтобы избежать необходимости указывать переопределения для свойствstart_command,stop_commandиrestart_command. Если это свойство не указано, Chef Infra Client будет использовать команду init по умолчанию для используемого поставщика служб.
-
options - Тип Ruby: Массив, Строка
Только для платформы Solaris. Параметры для передачи команде службы. Подробные сведения о возможных параметрах см. в руководстве
svcadm.
-
parameters - Тип Ruby: Хэш
Только для Upstart: Хэш параметров, передаваемых команде службы для использования в определении службы.
-
pattern - Тип Ruby: Строка | Значение по умолчанию:
The value provided to 'service_name' or the resource block's nameШаблон для поиска в таблице процессов.
-
priority - Тип Ruby: Целое число, Строка, Хэш
Только для платформ Debian. Относительный приоритет программы для упорядочения запуска и завершения работы. Может быть целым числом или хэшем. Целое число используется для определения уровней запуска; уровни остановки составляют 100-число. Хэш используется для определения значений для определенных уровней запуска. Например,
{ 2 => [:start, 20], 3 => [:stop, 55] }задаст приоритет двадцать для уровня запуска два и приоритет пятьдесят пять для уровня запуска три.
-
reload_command - Тип Ruby: Строка, false
Команда, используемая для перезагрузки конфигурации службы.
-
restart_command - Тип Ruby: Строка, false
Команда, используемая для перезапуска службы.
-
run_levels - Тип Ruby: Массив
Только для платформ RHEL: Конкретные уровни запуска, под которыми будет работать служба.
-
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скрипт 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: Целое число | Значение по умолчанию:
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, которое должен выполнить ресурс, и затем: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.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса 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. В этом примере выполняется следующее:
- Проверяется, есть ли у узла 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 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 с ресурсами, управляемыми с помощью System Resource Controller (SRC). Это связано с тем, что System Resource Controller (SRC) не имеет стандартного механизма для включения и отключения служб при загрузке системы.
Один из способов включения или отключения служб, управляемых System Resource Controller (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.
Примечание
Синтаксис
Полный синтаксис всех свойств, доступных для ресурса 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
Удаление (с очисткой) нескольких пакетов:
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 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.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса 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[Строка]'
Ресурс может уведомить другой ресурс о действиях при изменении его состояния. Укажите
'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
Защитные свойства
Свойство 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.
Примеры
В следующих примерах показаны различные подходы к использованию ресурса 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:
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- Клонирование или получение исходного кода. При наличии проверки в режиме 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[Строка]'
Ресурс может уведомить другой ресурс о выполнении действия при изменении его состояния. Укажите
'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.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса 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 требуется версия 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 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.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса 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 Client предпримет для приведения узла в желаемое состояние. -
content,triggers_reload,unit_name,userиverify— доступные свойства для этого ресурса.
Действия
Ресурс systemd_unit имеет следующие действия:
:create- Создать файл единицы systemd, если он ещё не существует.
:delete- Удалить файл единицы systemd, если он существует.
:disable- Убедиться, что единица не будет запущена после следующей загрузки системы.
:enable- Убедиться, что единица будет запущена после следующей загрузки системы.
:mask- Убедиться, что единица не будет запущена, даже для удовлетворения зависимостей.
:nothing- Этот блок ресурсов не действует, пока другой ресурс не уведомит его о действии. После уведомления, этот блок ресурсов либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Клиента Chef Infra.
: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 файла единицы, описывающий свойства управляемых 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.
Уведомления
-
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.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса 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
ресурс шаблона
страница ресурса шаблонаШаблон кулинарной книги — это шаблон Embedded 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значение umask для системы, в которой должен быть создан файл. Например, если 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Полный путь к файлу, включая имя файла и его расширение.
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, что гарантирует, что настройки безопасности существующих файлов останутся неизменными.
Использование шаблонов
Для использования шаблона необходимо сделать два шага:
- В рецепт необходимо добавить ресурс шаблона
- В кулинарную книгу необходимо добавить шаблон Embedded 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)
Уточнение файла
Кулинарная книга часто разрабатывается для работы на многих платформах и часто требует распространения определённой темы для конкретной платформы. Кулинарная книга может быть разработана для поддержки распространения шаблонов по платформам, гарантируя, что правильный шаблон попадает на каждый компьютер.
Шаблон уточнения шаблона зависит от двух вещей: пути поиска и источника. Используется первый сопоставленный шаблон:
/host-$fqdn/$source/$platform-$platform_version/$source/$platform/$source/default/$source/$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 Infra кеширует шаблон при первом запросе. При каждом последующем запросе этого шаблона клиент Chef Infra сравнивает этот запрос с шаблоном, расположенным на сервере Chef Infra. Если шаблоны одинаковые, передача не происходит.
Переменные
Шаблон Embedded 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 Infra оценивает выражения и инструкции Ruby. Переменные, перечисленные в параметре variables ресурса шаблона и в объекте узла, оцениваются. Клиент Chef Infra затем передает эти переменные в шаблон, где они будут доступны как переменные экземпляра в шаблоне. Объект узла можно получить так, как будто он входит в состав рецепта, используя тот же синтаксис.
Например, простой ресурс шаблона, такой как этот:
node['fqdn'] = 'latte'
template '/tmp/foo' do
source 'foo.erb'
variables(x_men: 'are keen')
end
И простой шаблон Embedded 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 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 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 '/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 для определения списка инструментов конфигурации, а затем использовать этот список инструментов в ресурсе шаблон для обеспечения того, что все эти инструменты конфигурации используют один и тот же ключ 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, которая использует шаблон, определённый ресурсом шаблон:
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 для ресурса шаблон указывает, какой шаблон использовать. Свойство notifies для шаблона указывает, что execute[forward_ipv4] (определяется ресурсом execute) должно быть помещено в очередь и выполнено в конце выполнения Chef Infra Client.
Установить IP-адрес с использованием переменных и шаблона
В следующем примере показано, как ресурс шаблон может быть использован в рецепте для объединения настроек, хранящихся в файле атрибутов, переменных в рецепте и шаблона для установки 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 для выполнения команды с использованием шаблона, определённого ресурсом шаблон:
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 для ресурса шаблон указывает, какой шаблон использовать. Свойство notifies для шаблона указывает, что 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[Строка]'
Ресурс может уведомить другой ресурс о выполнении действия при изменении его состояния. Укажите
'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.
СвойстваСледующие свойства могут использоваться для определения защиты, которая оценивается во время фазы выполнения выполнения Клиента Chef Infra:
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. По умолчанию, действия, доступные ресурсу user, обрабатываются после начала выполнения Клиента Chef Infra. Это означает, что системные атрибуты, добавленные или измененные ресурсом user во время выполнения Клиента Chef Infra, должны быть перезагружены, прежде чем они станут доступными для Клиента Chef Infra. Эти системные атрибуты могут быть перезагружены двумя способами: взятием значений в начале следующего выполнения Клиента Chef Infra или использованием ресурса ohai для перезагрузки системных атрибутов во время текущего выполнения Клиента Chef Infra.
Синтаксис
Блок ресурса 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 выполнит для приведения узла в желаемое состояние -
comment,force,gid,home,iterations,manage_home,non_unique,password,salt,shell,system,uidиusername— свойства этого ресурса, с указанным типом Ruby. См. раздел «Свойства» ниже, чтобы получить больше информации обо всех свойствах, которые могут использоваться с этим ресурсом.
Действия
Ресурс user имеет следующие действия:
:create- По умолчанию. Создает пользователя с заданными свойствами. Если пользователь уже существует (но не соответствует), обновите этого пользователя, чтобы он соответствовал.
:lock- Заблокировать пароль пользователя.
:manage- Управлять существующим пользователем. Это действие ничего не делает, если пользователь не существует.
:modify- Изменить существующего пользователя. Это действие вызывает исключение, если пользователь не существует.
:nothing- Этот блок ресурса не действует, пока другой ресурс не сообщит ему об этом. После уведомления этот блок ресурса либо выполняется немедленно, либо ставится в очередь на выполнение в конце выполнения Клиента Chef Infra.
:remove- Удалить пользователя.
:unlock- Разблокировать пароль пользователя.
Свойства
Ресурс user имеет следующие свойства:
-
comment - Тип Ruby: String
Один или несколько комментариев о пользователе.
-
force - Тип Ruby: true, false
Принудительно удалить пользователя. Может быть использован только с действием
:remove.Предупреждение
Использование этого свойства может оставить систему в несогласованном состоянии. Например, учетная запись пользователя будет удалена, даже если пользователь залогинен. Домашний каталог пользователя будет удален, даже если этот каталог используется несколькими пользователями.
-
gid - Тип Ruby: String, Integer
Идентификатор группы. Это свойство ранее называлось
group, и оба продолжают работать.
-
home - Тип Ruby: String
Расположение домашнего каталога.
-
iterations - Тип Ruby: Integer
Только для платформы macOS. Количество итераций для пароля с хешем тени 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: String
Хеш пароля shadow.
-
salt - Тип Ruby: String
Хеш SALTED-SHA512-PBKDF2.
-
shell - Тип Ruby: String
Логический терминал.
-
system - Тип Ruby: true, false
Создать системного пользователя. Это свойство может быть использовано с
useraddв качестве поставщика для создания системного пользователя, который передает флаг-rресурсуuseradd.
-
uid - Тип Ruby: String, Integer
Числовой идентификатор пользователя.
-
username - Тип Ruby: String
Имя пользователя. Значение по умолчанию:
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: Integer | Значение по умолчанию:
0Количество попыток перехватить исключения и повторить ресурс.
retry_delay-
Тип Ruby: Integer | Значение по умолчанию:
2Задержка в секундах между попытками повтора.
sensitive-
Тип Ruby: true, false | Значение по умолчанию:
falseОбеспечьте, чтобы конфиденциальные данные ресурсов не регистрировались Клиентом Chef Infra.
Уведомления
-
notifies -
Тип Ruby: Symbol, '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: 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 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 в рецептах:
Создание системного пользователя
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 (и выше) вычисляет хеш пароля shadow с использованием SALTED-SHA512-PBKDF2. Длина значения хеша shadow составляет 128 байт, значение соли — 32 байта, а целое число задаёт количество итераций. Следующий код вычислит хеши паролей shadow для 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
Использование вычисленного хеша пароля shadow с ресурсом 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 Client предпримет, чтобы привести узел в желаемое состояние. -
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 Client.
Свойства
Ресурс 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 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.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса 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[Строка]'
Ресурс может отслеживать другой ресурс и выполнять действие, если состояние отслеживаемого ресурса изменится. Укажите '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: Строка
Политика аудита, заданная категорией или подкатегорией, применяется на уровне пользователя, если указан пользователь. Если указан пользователь, исключите пользователя. Нельзя использовать include и exclude одновременно.
-
failure - Тип Ruby: true, false
Укажите аудит при ошибке. Установив это свойство в true, ресурс включит аудит ошибки для категории или подкатегории. Успех — по умолчанию и применяется, если ни успех, ни ошибка не указаны.
-
full_privilege_auditing - Тип Ruby: true, false
Установка этого параметра политики аудита в true заставит выполнить аудит всех изменений привилегий, кроме SeAuditPrivilege. Установка этого свойства может привести к более быстрому заполнению журналов.
-
include_user - Тип Ruby: Строка
Политика аудита, заданная категорией или подкатегорией, применяется на уровне пользователя, если указан пользователь. Если указан пользователь, включите пользователя. Нельзя использовать include и exclude одновременно.
-
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[Строка]'
Ресурс может уведомить другой ресурс о действии при изменении его состояния. Укажите
'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:
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[Строка]'
Ресурс может уведомить другой ресурс о действии при изменении его состояния. Укажите
'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_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- Добавляет записи только для чтения в список управления доступом к закрытому ключу сертификата.
: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[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_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[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 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[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_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 ничего не делать.
СвойстваСледующие свойства могут быть использованы для определения охраны, которая оценивается во время фазы выполнения выполнения Клиента Chef Infra:
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 для перевода узла в желаемое состояние. -
change_users,description,full_users,namespace_name,read_usersиroot— это доступные свойства для этого ресурса.
Действия
Ресурс windows_dfs_namespace имеет следующие действия:
:create- Создает пространство имен dfs на сервере. (по умолчанию)
:delete- Удаляет пространство имен DFS, включая директорию на диске.
:nothing- Этот блок ресурса не действует, пока не получит уведомление от другого ресурса о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Клиента Chef Infra.
Свойства
Ресурс 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 (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_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[Строка]'
Ресурс может уведомить другой ресурс о выполнении действия при изменении его состояния. Укажите
'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_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: String | Значение по умолчанию:
ARecordРазрешённые значения:"ARecord", "CNAME", "PTR"Тип записи для создания, может быть ARecord, CNAME или PTR.
-
target - Тип Ruby: String |
REQUIREDЦель для записи.
-
zone - Тип Ruby: String |
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 продолжать выполнение ресурса. Свойство защитного механизма принимает либо строковое значение, либо значение блока Ruby:
- Строка выполняется как команда оболочки. Если команда возвращает
0, защитный механизм применяется. Если команда возвращает любое другое значение, свойство защитного механизма не применяется. Строковые защитные механизмы в powershell_script выполняют команды Windows PowerShell и могут возвращатьtrueв дополнение к0. - Блок выполняется как код Ruby, который должен возвращать либо
true, либоfalse. Если блок возвращаетtrue, свойство защитного механизма применяется. Если блок возвращаетfalse, свойство защитного механизма не применяется.
Свойство защитного механизма полезно для обеспечения идемпотентности ресурса, позволяя этому ресурсу проверять желаемое состояние по мере выполнения и, если желаемое состояние присутствует, не выполнять никаких действий клиенту Chef Infra.
СвойстваСледующие свойства могут использоваться для определения защитного механизма, который оценивается во время фазы выполнения 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 установлено в «Domain».
-
server_type - Тип Ruby: Строка | Значение по умолчанию:
DomainРазрешённые значения:"Domain", "Standalone"Тип DNS-сервера, Domain или Standalone.
-
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 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 '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 Client для приведения узла к желаемому состоянию. -
all,feature_name,install_method,management_tools,sourceиtimeout- доступные свойства этого ресурса.
Действия
Ресурс windows_feature имеет следующие действия:
:delete- Удаление роли или функции Windows из образа.
:install- Установка роли или функции Windows. (по умолчанию)
:nothing- Этот блок ресурса не выполняет никаких действий, пока другой ресурс не уведомит его о выполнении действия. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:remove- Удаление роли или функции Windows.
Свойства
Ресурс windows_feature имеет следующие свойства:
-
all - Тип Ruby: true, false | Значение по умолчанию:
falseУстановить все подфункции.
-
feature_name - Тип Ruby: Массив, Строка | Значение по умолчанию:
The resource block's nameИмя функции(ей) или роли(ей) для установки, если они отличаются от имени блока ресурса. Одна и та же функция может иметь разные имена в зависимости от используемого базового метода установки (например, DHCPServer vs DHCP; DNS-Server-Full-Role vs 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]', :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 в рецептах:
Установить функцию 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 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.
Примеры
В следующих примерах демонстрируются различные подходы к использованию ресурса 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, но требует установки инструментария для удаленного администрирования сервера на несерверных выпусках 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 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_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 Client предпримет для приведения узла в желаемое состояние. -
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 Client.
Свойства
Ресурс 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 для использования протокола, начинающегося с 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[Строка]'
Ресурс может уведомлять другой ресурс о выполнении действия при изменении его состояния. Укажите
'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_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 (MSI)
- Система скриптового установщика Nullsoft (NSIS)
- Inno Setup (inno)
- Wise
- InstallShield
- Пользовательские установщики, такие как установка файла, отличного от .msi, который содержит установщик на основе .msi
Для обеспечения идемпотентности действия :install или действия :remove без указанного свойства source, package_name ДОЛЖЕН точно совпадать с именем, используемым установщиком пакета. Имена установленных пакетов, о которых знает Windows, можно найти в Add/Remove programs, в выводе ohai packages или в свойстве DisplayName в одном из следующих элементов реестра Windows:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\UninstallHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\UninstallHKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
Примечание
Если установлено несколько версий пакета с одинаковым отображаемым именем, все эти пакеты будут удалены, если не указана версия в свойстве version или если она не может быть обнаружена в файле установщика, указанном в свойстве source.
Примечание
Синтаксис
Блок ресурса 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 (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не указано, имя пакета ДОЛЖНО точно совпадать с отображаемым именем, найденным в Add/Remove programs, или точно совпадать со свойством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[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_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
Страница ресурса windows_pagefileИспользуйте ресурс 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]', действие, которое необходимо выполнить, и :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_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 для управления переменной среды пути в 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: Строка
Расположение принтера, например,
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]', :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_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 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_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 Client предпримет для приведения узла в желаемое состояние. -
secoptionиsecvalue— это доступные для этого ресурса свойства.
Действия
Ресурс windows_security_policy имеет следующие действия:
:nothing- Этот блок ресурса не действует, пока не будет уведомлен другим ресурсом о выполнении действия. После уведомления этот блок ресурса выполняется немедленно или помещается в очередь для выполнения в конце выполнения Chef Infra Client.
: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 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_security_policy в рецептах:
Установить учетную запись администратора в состояние «Включено»:
windows_security_policy 'EnableAdminAccount' do
secvalue '1'
action :set
end
Переименовать учетную запись администратора:
windows_security_policy 'NewAdministratorName' do
secvalue 'AwesomeChefGuy'
action :set
end
Установить учетную запись гостя в состояние «Выключено»:
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: Строка, false
Команда для перезагрузки конфигурации службы.
-
restart_command - Тип Ruby: Строка, false
Команда для перезапуска службы.
-
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: Строка, false
Команда для запуска службы.
-
startup_type - Тип Ruby: Символ | Значение по умолчанию:
:automaticДопустимые значения::automatic, :disabled, :manualИспользуется для указания типа запуска службы.
-
status_command - Тип Ruby: Строка, false
Команда для проверки состояния службы.
-
stop_command - Тип Ruby: Строка, false
Команда для остановки службы.
-
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[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_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, где индекс — это файл иконки для использования. См. документацию Microsoft по подробностям
-
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[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_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и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как «FIRST, SECOND, THIRD и т. д.», в противном случае используйте 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 для этого действия.
Обратите внимание, что 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 минут как пользователь Administrator:
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» с путем задачи «\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
Защиты
Свойство защиты может использоваться для оценки состояния узла во время фазы выполнения 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_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Разрешает другим продуктам Microsoft получать обновления тоже.
-
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 (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_user_privilege в рецептах:
Установить привилегию SeNetworkLogonRight для группы Builtin Administrators и пользователей Authenticated Users:
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') недоступна, поскольку объем данных, необходимых для разбора, слишком велик.
Примечание
Синтаксис
Полный синтаксис всех свойств, доступных для ресурса 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 } или Array в формате [ :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: Строка, Массив
Один из следующих вариантов: имя пакета, имя пакета и его архитектура, имя зависимости. Значение по умолчанию: имя блока ресурса. Смотрите раздел «Синтаксис» выше для получения дополнительной информации.
-
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]', :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.
Примеры
В следующих примерах показаны различные подходы к использованию ресурса 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 каталога, в котором находится каталог репозитория Yum. Может быть
http://,https://илиftp://URL. Вы можете указать несколько URL в одномbaseurl.
-
clean_metadata - Тип Ruby: true, false | Значение по умолчанию:
trueУказывает, нужно ли очистить все загруженные пакеты из репозитория Yum и хранящиеся в каталоге кеша.
-
cost - Тип Ruby: Строка
Относительная стоимость доступа к этому репозиторию. Полезно для взвешивания пакетов одного репозитория как больше/меньше, чем у любого другого.
-
description - Тип Ruby: Строка | Значение по умолчанию:
Yum RepositoryОписание канала репозитория и соответствует параметру «name» в конфигурационном файле репозитория.
-
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, указывающий на файл ASCII-зашифрованного ключа GPG для репозитория. Используется, если Yum нуждается в открытом ключе для проверки пакета, а необходимый ключ не был импортирован в базу данных RPM. Если этот параметр задан, Yum автоматически импортирует ключ из указанного URL. Может быть указано несколько URL, так же как и для параметра baseurl. Если для установки пакета из репозитория требуется ключ GPG, все ключи, указанные для этого репозитория, будут установлены. Может быть указано несколько URL, так же как и для параметра baseurl. Если для установки пакета из репозитория требуется ключ GPG, все ключи, указанные для этого репозитория, будут установлены.
-
http_caching - Тип Ruby: Строка Допустимые значения:
"all", "none", "packages"Определяет, как кэши HTTP от поставщиков будут обрабатывать любые HTTP-загрузки, выполняемые Yum. Этот параметр может принимать следующие значения:
-
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: Строка
Пароль, используемый с именем пользователя для аутентификации по протоколу basic.
-
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 AMI и хранилищ.
-
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: Строка
Имя пользователя для аутентификации по протоколу basic в хранилище.
Функциональность общего ресурса
Ресурсы 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.
Примечание
Синтаксис
Полный синтаксис всех свойств, доступных для ресурса 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/