Шеф-повар - нужна легкая "очередь" (на всю жизнь по рецепту)

В настоящее время у меня есть рецепт шеф-повара, с помощью которого я размещаю сообщения в чате внутри цикла:

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

Я задаюсь вопросом - есть ли в шеф-поваре простой механизм "очереди", в котором я могу ставить в очередь свои сообщения о развертывании и публиковать их все сразу (после завершения моего рецепта)? Если так, как будет выглядеть код.

2 ответа

Решение

Самый простой способ сделать это - использовать систему отложенных уведомлений.

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,

Ты можешь использовать node.run_state сохранить временные данные, доступные для текущего запуска шеф-повара.

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