Chef - как написать собственный ресурс, содержащий DSL для "execute"
Я написал шеф definition
что сообщения на наш чат-сервер.
Поскольку определения больше не рекомендуются, как я могу переписать это как ресурс? Меня особенно интересует, как использовать "событийные" способы запуска кода.
файл chat\definitions\post.rb
:
define :chat_post do
chat_url = 'https://chat.our.company/hooks/abcdef1234567890'
message = params[:name]
execute "echo" do
command "curl -m 5 -i -X POST -d \"payload={"text": "#{message}"\" #{chat_url}"
ignore_failure true
end
end
Телефонный код в рецепте:
artifacts.each do |artifactItem|
# deploy stuff
# ...
chat_post "#{node['hostname']}: Deployed #{artifact_name}-#{version}"
end
Теперь я прочитал документацию шеф-повара и попробовал разные вещи (а точнее: Module
, library
и resource
) и прочитайте документацию о пользовательских ресурсах шеф-повара, но безуспешно.
Может кто-нибудь, пожалуйста, направьте меня: как преобразовать этот код в resource
, если это правильный способ сделать это (шеф 12,6+)?
Я был бы признателен
- где в кулинарной книге находится ресурс рецепта (
chat/recipes
или какое-то другое место?) - как должен выглядеть код (преобразование из моего определения выше)
- как называется новый код (из другого рецепта) и нужны ли там какие-либо включения
1 ответ
Из документа custom_resource следует сделать что-то подобное (не проверено):
в chat/resources/message.rb
:
property :chat_url, String, default: 'https://chat.our.company/hooks/abcdef1234567890'
property :message, String, name_property: true
action :send
execute "echo #{message}" do
command "curl -m 5 -i -X POST -d \"payload={"text": "#{message}"\" #{chat_url}"
ignore_failure true
end
end
А теперь в другой кулинарной книге:
artifacts.each do |artifactItem|
# prepare the message:
chat_message "#{node['hostname']}: Deployed #{artifact_name}-#{version}" do
action :nothing
end
# deploy stuff
# dummy code follow
deploy artifactItem['artifact_name'] do
source "whatever_url/#{artifactItem}
notifies :send,"chat_message[#{node['hostname']}: Deployed #{artifactItem["artifact_name"]}-#{artifactItem['artifact_name']}]"
end
end
По умолчанию уведомления задерживаются, поэтому ресурс chat_message будет срабатывать только в конце запуска.
развернуть кулинарную книгу придется depends
на chat
поваренная книга, чтобы иметь возможность вызывать его custom_resource.