2014-02-19 34 views
2

我想改變使用執行資源的寶石來源,但我只需要這樣做一次。我如何才能知道與廚師的文件內容

remove_rubygems = 'gem sources -r http://rubygems.org/' 

execute 'change sources to our gem server' do 
    command "#{remove_rubygems} && gem sources -a http://mygemserver" 
    creates "~/.gemrc" 
end 

這一切,因爲當我執行這個資源多次.gemrc文件樣子吧。

[email protected]:~$ gem source 
*** CURRENT SOURCES *** 

http://mygemserver/ 
http://mygemserver/ 
http://mygemserver/ 
http://mygemserver/ 
... 

然後,我想mygemserver在.gemrc文件一次。

我該怎麼辦?

有沒有什麼辦法在執行我的資源之前知道.gemrc的內容。

回答

2

請勿在您的路徑中使用~/;這就是爲什麼creates行無法防止在文件已存在時運行execute資源。

execute 'change sources to our gem server' do 
    command "#{remove_rubygems} && gem sources -a http://mygemserver" 
    creates "/root/.gemrc" 
end 

另外,如果您想檢查文件是否包含特定行:

execute 'change sources to our gem server' do 
    command "#{remove_rubygems} && gem sources -a http://mygemserver" 
    not_if "grep -F -q -e http://mygemserver/ ~/.gemrc" # this uses a shell, so the 
                 # tilde should work here. 
end 
+0

好答案!我仍然在學習'主廚'... – hek2mgl

+0

對於像我這樣的新手來說,你可能會提到''自己創建''會確保文件不會被覆蓋。 (雖然手冊已經提到它,它聽起來是邏輯的,...現在:) – hek2mgl

+1

@ hek2mgl,謝謝 - 我已經更新了這個更清晰,並且還有'not_if'回答適用於一個案例'創造'不處理。 –