Ресурс chef_sleep
Эта страница сгенерирована из исходного кода клиента Chef Infra. Чтобы предложить изменение, отредактируйте файл chef_sleep.rb и отправьте запрос на вытягивание в репозиторий Chef Infra Client.
Используйте ресурс 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[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_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 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/chef_sleep/