Руководство по настраиваемым ресурсам
Клиент Chef Infra поставляется более чем со 150 встроенными ресурсами для управления конфигурацией системы, такими как directory, remote_file и windows_firewall. С помощью настраиваемых ресурсов вы можете расширить встроенные возможности Chef Infra Client, чтобы создать многократно используемые ресурсы для использования в любой точке вашей инфраструктуры.
- Доставка непосредственно в кулинарные книги
- Использование встроенных ресурсов Chef Infra Client и любого дополнительного настраиваемого кода 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 Client, дополненные свойствами и определениями действий для этого настраиваемого ресурса.
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 Client, как установить Apache, запустить службу и затем создать содержимое файла по адресу/var/www/html/index.html -
action :create— это ресурс по умолчанию (поскольку он указан первым);action :deleteнеобходимо вызывать явно (поскольку это не действие по умолчанию)
После написания настраиваемый ресурс может быть использован в рецепте с тем же синтаксисом, что и встроенные ресурсы Chef Infra Client.
Синтаксис
Вызовите ресурс в рецепте по его 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/