2017-09-20 33 views
0

在以下代碼的creates指令中,指定值包含(實際上是多個)通配符。當執行塊的「創建」值未完全知道時,廚師如何確保冪等性?

execute "Install Vagrant plugin: #{plugin}" do 
    environment ({ 'HOME' => ::Dir.home(user), 'USER' => user }) 
    command "vagrant plugin install #{plugin}" 
    creates "/home/#{user}/.vagrant.d/gems/*/gems/vagrant-berkshelf-*" 
end 

我希望沒有處理,其中只有一個目錄模式事先已知的情況廚師意法,而不是實際完整路徑。 Chef的執行文檔沒有明確說明creates是否會匹配模式,但經過測試後,我認爲它沒有,也不打算匹配模式。

這是這種情況,以上是否適合Chef :: Mixin :: ShellOut?還是會有另一個更多的廚師打算的方法?

如果是前者,我使用從計算器(12)的例子,以確定目錄是否存在匹配的圖案頗似creates指令的值以上,並使用該返回值來設定是否要運行預測有問題的執行塊。

任何提示,提示或建議,非常感謝!

  • Informatician

回答

1

你會使用not_ifonly_if後衛條款。 creates屬性只是not_if { ::File.exist?(the_path) }的幫手。在這種情況下,您可能需要的是not_if "vagrant plugin list | grep #{plugin}"或略乾淨的(IMO)not_if { shell_out!('vagrant plugin list').stdout.include?(plugin) }

+0

這是很好的,也是非常有價值的反饋。答案的第一部分('created'是'not_if'的助手,'not_if'或'only_if'的使用)絕對是我需要的。爲即將到來的特定任務提供一種簡單而清潔的方法,但這種方法已經超越和超越。非常感謝,謝謝coderanger! – Informatician

相關問題