2016-12-14 48 views
0

我在確定包是否已安裝或已經使用廚師的chocolatey_package功能安裝時遇到問題。非常好,我正在安裝一個需要之後需要iisreset的軟件包。我只希望在安裝軟件包時重置iis,而不要在隨後執行主廚客戶端時(因爲包已安裝,巧克力會提早退出)。只有巧克力在安裝包時才運行廚師塊

我正在存儲哪些軟件包正在安裝在屬性文件中。它使用以下格式:

{'name'=>'blah', 'version'=>'1.0.0'[, 'should_notify'=>'reset iis']} 

這是我迄今爲止,代碼明智的。 ?我怎麼能基於什麼行動的巧克力進行修改這個分支(安裝或

include_recipe 'chocolatey::default' 

node['cookbook-name']['choco_packages'].each{ |package| 
    chocolatey package['name'] do 
    version package['version'] 
    action :install 

    if package.instance_variable_defined?(:@should_notify) && package.should_notify == 'reset iis' 
    notify :run, 'execute[reset iis]', :immediately 
    end 
    end 
} 

execute 'reset iis' do    
    command 'iisreset' 
    action :nothing 
end 

感謝

回答

1

你的屬性代碼段是不正確的,爲了簡單起見,我會認爲它應該是:

[{ 'name' => 'blah', 'version' => '1.0.0', 'should_notify' => 'restart_iis' }] 

的巧克力shouldn't install the package if it's installed already.所以這應該很好地工作:

node['cookbook-name']['choco_packages'].each do |package| 
    chocolatey package['name'] do 
    version package['version'] 
    notifies :run, "execute[#{package['should_notify']}]" 
    end 
end 

execute 'reset iis' do 
    command 'iisreset' 
    action :nothing 
end 

w ^沒有:immediately它會重新啓動IIS ONCE在廚師運行結束時,不管包的數量。如果您將添加:immediately,則在安裝每個軟件包後,您的IIS將重新啓動。

如果軟件包已安裝,它將不會重新啓動IIS。

+1

由於OP似乎認爲某些軟件包的重置是可選的,因此在通知行末尾添加'unless'package ['should_notify']。nil?'或'if package ['should_notify'] =='reset_iis''如果不需要的話可以避免通知。 – Tensibai

相關問題