2

我写了一个厨师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

现在,我已经阅读了 chef 文档并尝试了各种方法(准确地说: a Module、 alibrary和 a resource)并阅读了有关chef custom resources的文档,但没有成功。

有人可以指导我:如何将此代码转换为 a resource,如果这是正确的方法(厨师 12.6+)?

我很高兴知道

  • 食谱资源在食谱中的哪个位置(chat/recipes或其他地方?)
  • 代码的外观(从我上面的定义转换)
  • 新代码是如何调用的(来自另一个配方),我需要在那里包含任何内容吗
4

1 回答 1

3

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 资源只会在运行结束时触发。

您部署说明书必须在说明书上才能调用其 custom_resource dependschat

于 2016-09-14T14:44:51.723 回答