2014-01-14 26 views
1

我的廚師食譜中有很多地方需要按順序運行操作,並且需要在多個地方引用該順序。例如,一個操作序列是「停止Tomcat,重新編譯應用程序,啓動Tomcat」,這可以通過「應用程序源樹變化」等事件觸發。Chef的鏈接/分組資源

我需要能夠的操作都需要從各種資源(包括:delayed功能)都notifies屬性,再加上subscribes屬性上的序列本身,因爲序列可以通過資源在其他配方被觸發,觸發這些序列是將會重啓Tomcat,但實際上並不依賴於Tomcat配方。

什麼是管理這些操作組的最佳方式?

我從the Chef docs看到的方式來處理,這是有什麼相關的事件通知所有這些操作的順序:

git 'repo' do 
    notifies :stop, 'service[tomcat]', :delayed 
    notifies :run, 'recompile_app', :delayed 
    notifies :start, 'service[tomcat]', :delayed 
end 

但是,也有相當多的資源的事件可能是這個序列由此觸發,並且此級別的代碼重複似乎效率低下且容易出錯。

有沒有更好的方法來處理這個問題?

+0

如果你有很多地方某種代碼重複,你應該將它解壓縮到庫中(http://docs.opscode.com/essentials_c ookbook_libraries.html)或LWRP(http://docs.opscode.com/lwrp_custom.html)。 –

回答

0

聽起來像是你想要一個LWRPdefinition。 LWRP將爲資源集合創建一個包裝,所以它只會在資源集合中出現一次。這就像廚師的延伸。定義將包裝一系列資源,但每個資源仍然存在於資源集合中。

在你的榜樣,我會用一個定義:

define :my_thing do 
    git 'repo' do 
    # ... 
    end 

    service 'tomcat' do 
    action :stop 
    end 

    execute 'recompile_app' do 
    action :run 
    end 

    service 'tomcat' do 
    action :start 
    end 
end 

來源:

+0

什麼是替代這些定義的「訂閱」使用的適當方式?簡單地添加一個'subscribes'子句並不適合我。如果包含它的食譜,我有一些資源需要調用該定義,否則不需要。 – spiffytech

+0

登錄被翻轉。 – sethvargo

+0

你的意思是哪個登錄名?另外,我如何以延遲的方式調用這個定義,就像我的文章中的資源一樣? – spiffytech