Руководство по настраиваемым ресурсам
Клиент Chef Infra поставляется с более чем 150 встроенными ресурсами для управления конфигурацией системы, такими как directory, remote_file и windows_firewall. С помощью настраиваемых ресурсов вы можете расширить встроенные возможности клиента Chef Infra, создав переиспользуемые ресурсы для использования в любой точке вашей инфраструктуры.
- Доставка непосредственно в кулинарии
- Использование встроенных ресурсов клиента Chef Infra и любого дополнительного пользовательского кода Ruby (при необходимости)
- Ведение себя так же, как и существующие встроенные ресурсы в ваших рецептах
Синтаксис
Макет настраиваемого ресурса:
provides :resource_name
property :property_name, RubyType, default: 'value'
action :action_a do
# a mix of built-in Chef Infra resources and Ruby
end
action :action_b do
# a mix of built-in Chef Infra resources and Ruby
end
Первое указанное действие — это действие по умолчанию.
Создание настраиваемого ресурса
Вы напишете код для настраиваемого ресурса в файле Ruby и расположите его в каталоге /resources кулинарии (сначала нужно сгенерировать ресурс). Этот код:
- Определяет свойства настраиваемого ресурса
- Загружает текущее состояние свойств для существующих ресурсов
- Определяет каждое действие, которое может выполнить настраиваемый ресурс
Генерация настраиваемого ресурса
Каталог resources по умолчанию в кулинарии не существует. Сгенерируйте каталог resources и файл ресурса из каталога chef-repo/cookbooks с помощью команды:
chef generate resource PATH_TO_COOKBOOK RESOURCE_NAME
Например, эта команда генерирует ресурс site в кулинарии custom_web:
chef generate resource cookbooks/custom_web site
Каталог кулинарии custom_web с настраиваемым ресурсом имеет следующую структуру:
├ cookbooks
├ custom_web
├ .delivery
| └ project.toml
├ recipes
| └ default.rb
├ resources
| └ site.rb
├ test
| └ integration
| | └ default
| | | └ default_test.rb
├ .gitignore
├ CHANGELOG.md
├ chefignore
├ kitchen.yml
├ LICENSE
├ metadata.rb
├ Policyfile.rb
└ README.md
Пример ресурса
Этот пример site использует встроенные ресурсы Chef Infra: file, service и package, и включает действия :create и :delete. Он также предполагает существование пользовательского шаблона httpd. Код в этом настраиваемом ресурсе аналогичен типичному рецепту, поскольку он использует встроенные ресурсы клиента Chef Infra, с добавлением определения свойств и действий для этого настраиваемого ресурса.
provides :site
property :homepage, String, default: '<h1>Hello world!</h1>'
action :create do
package 'httpd'
service 'httpd' do
action [:enable, :start]
end
file '/var/www/html/index.html' do
content new_resource.homepage
end
end
action :delete do
package 'httpd' do
action :remove
end
file '/var/www/html/index.html' do
action :delete
end
end
где
-
site— имя настраиваемого ресурса. Операторprovidesделает настраиваемый ресурс доступным для использования в рецептах. -
homepageустанавливает значение по умолчанию HTML для файлаindex.htmlсо значением по умолчанию'<h1>Hello world!</h1>'. - блок
actionиспользует встроенный набор ресурсов, чтобы сообщить клиенту Chef Infra, как установить Apache, запустить службу и создать содержимое файла, расположенного по адресу/var/www/html/index.html -
action :create— это ресурс по умолчанию (поскольку он указан первым);action :deleteдолжен быть вызван явно (поскольку это не действие по умолчанию)
После написания вы можете использовать настраиваемый ресурс в рецепте с тем же синтаксисом, что и встроенные ресурсы клиента Chef Infra.
Синтаксис
Вызов ресурса в рецепте по его resource_name. Например:
Дополнительная информация
Ознакомьтесь с интерактивным руководством по Chef: Расширение Chef Infra: Настраиваемые ресурсы
См. Словарь настраиваемых ресурсов для описания доступных методов.
© 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/custom_resources/