2016-09-13 5 views
0

내가 루프 내부 요리사의 레시피를 가지고 (조리법의 삶) 경량 "큐"를 필요 같은 : 나는 궁금요리사 내가 채팅 메시지를 게시함으로써 현재

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/definitions/post.rb' 아래에 있습니다 ... 우리가 완전히 이해하지 못했기 때문에 "도우미 방법"이라고 생각합니다. 리소스/공급자/LWRP로 구현하는 법 ...). 이벤트 기반 알림이 더 좋은 방법 인 것처럼 보일지라도 ... – vikingsteve

+0

이 작업을 수행하려면 사용자 지정 리소스로 이식해야하지만 잘하면 꽤 쉬워야합니다. – coderanger

+0

Ok, thanks @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