Ресурс windows_package
Эта страница сгенерирована из исходного кода Chef Infra Client. Чтобы предложить изменение, отредактируйте файл windows_package.rb и отправьте запрос на вытягивание в репозиторий Chef Infra Client.
Используйте ресурс windows_package для управления пакетами на платформе Microsoft Windows. Ресурс windows_package поддерживает следующие форматы установщиков:
- Пакет Microsoft Installer (MSI)
- Система установки Nullsoft Scriptable Install (NSIS)
- Inno Setup (inno)
- Wise
- InstallShield
- Пользовательские установщики, такие как установка файла, не являющегося .msi, который включает в себя установщик на базе .msi
Для обеспечения идемпотентности действия :install или для включения действия :remove без указанного свойства source, package_name ДОЛЖЕН точно совпадать с именем, используемым установщиком пакета. Имена установленных пакетов, о которых знает Windows, можно найти в разделе «Добавление и удаление программ», в выводе 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 Installer (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не указано, имя пакета ДОЛЖНО точно совпадать с отображаемым именем, найденным в «Добавление и удаление программ», или точно совпадать со свойством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, в котором выполняется уведомление. Доступны следующие таймеры:
: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_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
© 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/windows_package/