2016-11-09 74 views
2

我正在寫一個廚師食譜,在此我需要執行一個操作(運行一批),只有當一個服務不工作。 我用這個片段:如果Windows服務正在運行,我可以使用衛兵給廚師嗎?

batch 'run commnad' do 
    cwd target_path + '/bin/win64' 
    code 'command to be executed' 
    not_if '::Win32::Service.exists?("Service name")' 
end 

但它似乎並不工作。看到this問題後,我改變了使用if子句代替保護和正常工作的過程:

if !::Win32::Service.exists?("Service name") then 
    batch 'Install zabbix agent' do 
    cwd target_path + '/bin/win64' 
    code 'command to be executed' 
    end 
end 

但這不應該是,我的理解,正確的方法來管理這一點,所以我想知道:爲什麼警衛不能正常工作?

謝謝, 米歇爾。

回答

3

您編寫not_if語句的方式將該命令作爲shell腳本運行。 shell不知道Ruby代碼,所以整個命令都會失敗。

爲了使用not_if與Ruby代碼,你應該把它而不是一個塊中:

not_if { Win32::Service.exists?("Service name") } 

看到更多的例子在這裏(搜索not_if在頁面上):
https://docs.chef.io/resource_common.html

+0

的{ }解決了這個問題。我沒有想到這一點。謝謝! – Mikyjpeg

+0

如果你想要做更多的Ruby-ish你也可以附加一個條件的批量資源調用,即 '批次'運行命令'做 ... 除非<邏輯禁用服務> – JackChance

相關問題