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

今、私はシェフのドキュメントを読み、さまざまなことを試しました(正確にはModule、 a 、 a 、libraryおよび a )、シェフのカスタムリソースresourceに関するドキュメントを読みましたが、成功しませんでした。

誰かが私を案内してもらえますか:このコードを に変換する方法resource、それが適切な方法である場合 (chef 12.6+) ?

教えていただければ幸いです

  • レシピ リソースはクックブックのどこに配置されますか ( chat/recipes、または他の場所?)
  • コードがどのように見えるか (上記の私の定義から変換)
  • 新しいコードは (別のレシピから) どのように呼び出されますか?そこにインクルードが必要ですか?
4

1 に答える 1

3

custom_resource doc から、次のようなことを行う必要があります(テストされていません):

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 リソースは実行の最後にのみ起動します。

クックブックをデプロイするにはdependschatそのクックブックで custom_resource を呼び出せるようにする必要があります。

于 2016-09-14T14:44:51.723 に答える