厨师 - 需要一个轻重量 "queue"(为了食谱的生命)
Chef - need a light weight "queue" (for the life of the recipe)
目前我有一个厨师食谱,我 post 消息聊天,在一个循环中:
artifacts.each do |artifactItem|
# Deploy the artifact
#...
# Post to chat
chat_post "deployed artifact #{artifact_name}"
end
我的聊天结果是这样的:
chef [BOT]
deployed artifact A
chef [BOT]
deployed artifact B
chef [BOT]
deployed artifact C
我想知道 - 在 Chef 中是否有一个简单的 "queue" 机制,我可以在其中排队我的部署消息,并一次 post 它们全部(当我的食谱完成时)?如果是这样,代码看起来如何。
您可以使用 node.run_state
保存当前厨师 运行 可以访问的临时数据。
最简单的方法是使用延迟通知系统。
artifacts.each do |artifactItem|
# Deploy the artifact
#...
# Post to chat
r = chat_post "deployed artifact #{artifact_name}" do
action :nothing
end
ruby_block "notification for #{artifact_name}" do
block { }
notifies :someaction, r
end
end
或类似的东西,确保你检查通知使用什么操作(无论 chat_post
资源上的默认操作是什么。此外,这假设 chat_post
是一个资源而不是一些一种辅助方法。如果它不是资源,您可能需要两个 ruby_blocks
.
目前我有一个厨师食谱,我 post 消息聊天,在一个循环中:
artifacts.each do |artifactItem|
# Deploy the artifact
#...
# Post to chat
chat_post "deployed artifact #{artifact_name}"
end
我的聊天结果是这样的:
chef [BOT]
deployed artifact A
chef [BOT]
deployed artifact B
chef [BOT]
deployed artifact C
我想知道 - 在 Chef 中是否有一个简单的 "queue" 机制,我可以在其中排队我的部署消息,并一次 post 它们全部(当我的食谱完成时)?如果是这样,代码看起来如何。
您可以使用 node.run_state
保存当前厨师 运行 可以访问的临时数据。
最简单的方法是使用延迟通知系统。
artifacts.each do |artifactItem|
# Deploy the artifact
#...
# Post to chat
r = chat_post "deployed artifact #{artifact_name}" do
action :nothing
end
ruby_block "notification for #{artifact_name}" do
block { }
notifies :someaction, r
end
end
或类似的东西,确保你检查通知使用什么操作(无论 chat_post
资源上的默认操作是什么。此外,这假设 chat_post
是一个资源而不是一些一种辅助方法。如果它不是资源,您可能需要两个 ruby_blocks
.