2015-08-28 45 views
1

我有一個配方,它刪除一個空的日誌目錄,然後在下一步中用符號鏈接替換它。廚師 - Dir.exists?警衛將符號鏈接處理爲目錄

directory "#{ENV['GS_HOME']}/logs/" do 
    action :delete 
    only_if { ::Dir.exists?("#{ENV['GS_HOME']}/logs/") } 
end 

它可以在第一時間左右,但在下一個廚師的客戶端運行時,它不應該刪除現在是到另一個目錄的鏈接項目,我收到一個錯誤:

Errno::ENOTDIR 
-------------- 
Not a directory @ dir_s_rmdir ... 

爲什麼警衛是否會將鏈接視爲目錄而不是跳過,但是資源動作會正確識別它,而不是一個,並且會失敗?最好的解決辦法是什麼?

+0

可能的答案:http://stackoverflow.com/a/22898010/2777098 –

回答

1

第一次,警衛檢查它是否是一個目錄。隨後運行它可以檢查文件目錄是否是符號鏈接。嘗試

directory "#{ENV['GS_HOME']}/logs/" do 
    action :delete 
    only_if { ::Dir.exist?("#{ENV['GS_HOME']}/logs/") || !::File.symlink?("#{ENV['GS_HOME']}/logs/") } 
end 
+0

是的,謝謝!在刪除File類路徑上的最後一個斜線後完成工作。 –