Запускайте блок шеф-повара, только если шоколад устанавливает пакет

У меня возникла проблема с определением того, был ли установлен пакет или уже был установлен с помощью функции шеф-повара 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

Спасибо


person Nick Pendleton    schedule 14.12.2016    source источник


Ответы (1)


Ваш фрагмент атрибутов неверен. Для простоты я предполагаю, что он должен быть:

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

Chocolatey не должен устанавливать пакет, если он уже установлен. Так что это должно работать нормально:

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

Без :immediately он перезапустит IIS ОДИН РАЗ в конце запуска шеф-повара, независимо от количества пакетов. Если вы добавите :immediately, ваш IIS будет перезапускаться после каждой установки пакета.

Он не перезапустит IIS, если пакет уже установлен.

person Szymon Szypulski    schedule 14.12.2016
comment
Поскольку OP, похоже, считает сброс необязательным для некоторых пакетов, добавление unless package['should_notify'].nil? или if package['should_notify'] == 'reset_iis' в конце строки уведомления, чтобы избежать уведомлений, если они не нужны. - person Tensibai; 14.12.2016