2016-09-13 3 views
0

В настоящее время у меня есть рецепт шефа чего я отправляю сообщения в чат, внутри цикла:Chef - нужен легкий вес «очередь» (за жизнь рецепта)

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 

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

ответ

3

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

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.

+0

Спасибо. 'chat_post' на самом деле находится под' chat/определений/post.rb' ... Я думаю, что это «вспомогательный метод» (поскольку мы совершенно не понимаем как реализовать его как объект ресурса/поставщика/LWRP ...). Хотя уведомления, основанные на событиях, кажутся лучшим способом сделать это ... – vikingsteve

+0

Вам нужно будет перенести его на специальный ресурс, чтобы это сделать, но это должно быть довольно легко :) – coderanger

+0

Хорошо, спасибо @coderanger. Я задал еще один вопрос о том, что, может быть, вы можете помочь? http://stackoverflow.com/questions/39488843/chef-how-to-write-a-custom-resource-containing-dsl-for-execute – vikingsteve

0

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

+1

Правда, но, вероятно, это не очень хорошая идея. Глобальное состояние должно использоваться только в качестве последнего средства, и особенно необходимо использовать «run_state», поскольку это общий глобальное пространство имен. – coderanger

 Смежные вопросы

  • Нет связанных вопросов^_^