厨师 - 需要一个轻重量 "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.