Ресурс dsc_script
Эта страница создана на основе исходного кода Chef. Чтобы предложить изменения, отредактируйте файл dsc_script.rb и отправьте запрос на добавление изменений в репозиторий Chef.
Страница справочника по ресурсам
Windows PowerShell — это командная оболочка и язык сценариев, ориентированные на задачи, разработанные компанией Microsoft. Windows PowerShell использует документоориентированный подход к управлению машинами под управлением Microsoft Windows, аналогичный подходу, используемому для управления машинами под управлением Unix и Linux. Windows PowerShell — это платформа, не зависящая от инструментов, которая поддерживает использование Chef для управления конфигурациями.
Desired State Configuration (DSC) — это функция Windows PowerShell, которая предоставляет набор расширений языка, командлетов и ресурсов, которые можно использовать для декларативного конфигурирования программного обеспечения. DSC похож на Chef, поскольку оба инструмента являются идемпотентными, используют похожие подходы к концепции ресурсов, описывают конфигурацию системы, а затем выполняют шаги, необходимые для выполнения этой конфигурации. Наиболее важное различие между Chef и DSC заключается в том, что Chef использует Ruby, а DSC предоставляется в виде данных конфигурации изнутри Windows PowerShell.
Многие ресурсы DSC сопоставимы со встроенными ресурсами Chef Infra. Например, как DSC, так и Chef имеют ресурсы file, package и service. Ресурс dsc_script наиболее полезен для тех ресурсов DSC, которые не имеют прямого сравнения с ресурсом в Chef, таких как ресурс Archive, пользовательский ресурс DSC, существующий сценарий DSC, выполняющий важную задачу, и так далее. Используйте ресурс dsc_script для внедрения кода, определяющего конфигурацию DSC, непосредственно в рецепт Chef Infra.
Примечание
Для использования ресурса dsc_script с Chef Infra требуется Windows PowerShell 4.0.
Примечание
Служба WinRM должна быть включена. (Используйте winrm quickconfig для включения службы.)
Предупреждение
Ресурс dsc_script не может использоваться в одном списке запуска с dsc_resource. Это связано с тем, что ресурс dsc_script требует, чтобы RefreshMode в Local Configuration Manager был установлен в 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: String
Код для скрипта конфигурации DSC. Это свойство не может использоваться совместно со свойством
command.
command-
Тип Ruby: String
Путь к допустимому файлу данных Windows PowerShell, содержащему скрипт конфигурации DSC. Этот файл данных должен быть способен запускаться независимо от Chef и должен генерировать допустимую конфигурацию DSC. Это свойство не может использоваться совместно со свойством
code.
configuration_data-
Тип Ruby: String
Данные конфигурации для скрипта DSC. Данные конфигурации должны быть допустимым файлом данных Windows PowerShell. Это свойство не может использоваться совместно со свойством
configuration_data_script.
configuration_data_script-
Тип Ruby: String
Путь к допустимому файлу данных Windows PowerShell, который также содержит узел с именем
localhost. Это свойство не может использоваться совместно со свойствомconfiguration_data.
configuration_name-
Тип Ruby: String
Имя допустимого командлета Windows PowerShell. Имя может содержать только буквы (a-z, A-Z), цифры (0-9) и символ подчеркивания (_), и должно начинаться с буквы. Имя не может быть пустым или null. Это свойство не может использоваться совместно со свойством
code.
cwd-
Тип Ruby: String
Текущий рабочий каталог.
environment-
Тип Ruby: Hash
Хэш переменных среды в формате
({'ENV_VARIABLE' => 'VALUE'}). (Эти переменные должны существовать для успешного выполнения команды.)
flags-
Тип Ruby: Hash
Передача параметров в скрипт DSC, указанный свойством
command. Параметры определяются как пары «ключ-значение», где значение каждого ключа — это передаваемый параметр. Это свойство не может использоваться в одном рецепте со свойствомcode. Например:flags ({ :EditorChoice => 'emacs', :EditorFlags => '--maximized' }).
imports-
Тип Ruby: Array
Предупреждение
Это свойство ОБЯЗАТЕЛЬНО использовать с атрибутом
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: Integer
Время ожидания (в секундах) до истечения времени ожидания команды.
Вспомогательный элемент 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 (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 InfraClient.
Уведомления
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: Символ, '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
© 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/dsc_script/