Ресурс log
Эта страница сгенерирована из исходного кода Chef. Чтобы предложить изменение, отредактируйте файл log.rb и отправьте запрос на вытягивание в репозиторий Chef.
Синтаксис
Блок ресурса 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.)
Поддерживаются следующие уровни журнала:
| Уровень журнала | Синтаксис |
|---|---|
| Fatal | Chef::Log.fatal('string') |
| Error | Chef::Log.error('string') |
| Warn | Chef::Log.warn('string') |
| Info | Chef::Log.info('string') |
| Debug | Chef::Log.debug('string') |
Примечание
Скобки необязательны, например, Chef::Log.info 'string' может быть использовано вместо Chef::Log.info('string').
Следующий пример показывает серию записей журнала Chef::Log типа fatal:
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
Полный рецепт — это upgrade.rb рецепт из кулинарной книги chef-splunk, которая поддерживается Chef.
Следующий пример демонстрирует использование нескольких 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
...
Полный рецепт находится в ebs_volume.rb рецепте кулинарной книги database, поддерживаемой Chef.
Общая функциональность ресурса
Ресурсы Chef включают общие свойства, уведомления и средства защиты ресурсов.
Общие свойства
Следующие свойства являются общими для всех ресурсов:
compile_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 InfraClient.
Уведомления
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.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса log в рецептах:
Установить уровень журнала по умолчанию
log 'a string to log'
Установить уровень журнала debug
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
© 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/log/