ksh Ресурс
Эта страница сгенерирована из исходного кода Chef Chef source code. Чтобы предложить изменение, отредактируйте файл ksh.rb и отправьте запрос на вытягивание в Chef репозиторий.
Используйте ресурс 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 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.
Примеры
У этого ресурса нет примеров.
© 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/ksh/