运行 仅当 chocolatey 正在安装包时 chef 才会阻止

Run chef block only if chocolatey is installing package

我在使用 Chef 的 chocolatey_package 功能确定软件包是否已安装或已经安装时遇到问题。差不多,我正在安装一个需要 iisreset 的包。我只希望在安装包时重置 iis,而不是在后续执行 chef-client 时重置 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

谢谢

您的属性片段不正确,为简单起见,我假设它应该是:

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

Chocolatey 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

如果没有 :immediately,它将在 chef 运行 结束时 ONCE 重新启动 IIS,而不管包的数量。如果您添加 :immediately,您的 IIS 将在每​​次安装包后重新启动。

如果包已经安装,它不会重新启动 IIS。