2016-02-22 55 views
2

對於服務器重建,我想根據上次運行的結果跳過我的食譜的某個部分。廚師 - 跳過上次運行狀態的資源

例如,我們有一個資源來啓動Weblogic服務器。

weblogic_server "server_name" do 
    action :start 
end 

這些創業公司在構建過程中需要大量的時間。如果它在最後的構建中成功運行,我想跳過這一點,以避免在重建時等待太久。事情是這樣的:

weblogic_server "server_name" do 
    action :start 
    not_if { it_was_run_successfully_during_the_previous_run } 
end 

我知道這樣做是有劇本在WebLogic服務器狀態檢查的最佳途徑,但是這是給其他球隊,我需要一個臨時解決方案。

我想到了JSON格式的日誌文件,引用了構建的不同步驟。

e.g:

{ 
    "provisioning"   : true, 
    "start_weblogic_servers : true, 
    "configuring_ohs"  : false 
} 

在這種情況下,我會爲這個日誌文件的模板資源,然後在運行過程中更新值。然後在每一次運行中,我都會首先檢查這個文件,並根據我找到的值跳過正確的部分。

還有更好的方法嗎?

回答

0

Nabeel Amjad解決方案爲我工作。請按照下列步驟:

action :nothing

file '/tmp/logfile' do 
    action: nothing 
end 

設置你的資源來通知file資源創建file資源運行

weblogic_server 'server_name' do 
    action :start 
    notifies :create, 'file[/tmp/logfile]', :immediately 
end 

添加保護not_if,將跳過後將來如果該文件存在於該資源上,則執行該資源服務器

weblogic_server 'server_name' do 
    action :start 
    notifies :create, 'file[/tmp/logfile]', :immediately 
    not_if { ::File.exist?('/tmp/logfile') } 
end 
+0

很酷,很高興解決了! –

1

我過去所做的是創建一個空文件,如果存在,那麼你跳過它(not_if do ::File.exists?('/path/to/some_empty_file') end)。當構建成功或者不創建或刪除這些文件時,您可以獲得一些代碼,但我意識到這可能不是最好的方法,但只要我記得,它就可以爲我工作。

如果你真的想要的話,你可以有一些腳本檢查服務器狀態(比如5分鐘的時間間隔),然後相應地調整那個空文件(刪除它或保留它)。