我感到困惑的在廚師的資源模型的邏輯順序only_if和not_if。廚師only_if和not_if在同一資源
在下面的例子中,假設一個名爲的/ tmp/foo的包含單詞酒吧:
execute "rm /tmp/foo" do
action :run
only_if "ls /tmp/foo"
not_if "grep bar /tmp/foo"
end
會發生什麼?是only_if和not_if獨家?和?要麼?哪個先到?爲什麼?
我感到困惑的在廚師的資源模型的邏輯順序only_if和not_if。廚師only_if和not_if在同一資源
在下面的例子中,假設一個名爲的/ tmp/foo的包含單詞酒吧:
execute "rm /tmp/foo" do
action :run
only_if "ls /tmp/foo"
not_if "grep bar /tmp/foo"
end
會發生什麼?是only_if和not_if獨家?和?要麼?哪個先到?爲什麼?
按照代碼中給出的順序運行。每種方法的內部基本歸結爲@guards << Guard.new(*args)
,所以他們隱式追蹤訂單。這兩個條款必須「通過」運行的行動。一般來說,這是一個壞主意,因爲它非常難以閱讀,如果你必須留下一個非常好的評論。
在總體規劃方面,「only_if」類似於「如果」和「not_if」類似,除非(或者,如果!)
所以它總是建議要麼將gaurd檢查在貴資源。
例如:
下面的代碼將創建用戶「亞當」,如果用戶不存在:
not_if 'grep adam /etc/passwd', :user => 'adam'
下面的代碼將創建foo.txt的,只有在目錄「/tmp目錄」是存在的:
file '/tmp/foo.txt' do
action :create
only_if { ::Dir.exist?("/tmp") }
end
請同時參閱廚師文檔"Gaurds"得到進一步澄清。