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.

Другие вопросы по тегам