我在确定是否已使用chef的chocolatey_package功能安装软件包时遇到问题。差不多,我正在安装一个需要iisreset的软件包。我只希望在安装软件包时重置iis,而不是在后续执行chef-client时(由于软件包已经安装,chocolatey会提前退出)。
我正在将属性文件中正在安装的软件包存储起来。它使用以下格式:
{'name'=>'blah', 'version'=>'1.0.0'[, 'should_notify'=>'reset iis']}
到目前为止,这是我所拥有的代码。如何根据chocolatey执行的操作(安装或?
)将其修改为分支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
由于
答案 0 :(得分:1)
您的属性代码段不正确,为简单起见,我认为它应该是:
[{ '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
,无论包数多少,它都会在主厨运行结束时重新启动IIS ONCE 。如果您要添加:immediately
,则每次安装包后都会重新启动IIS。
如果已经安装了软件包,它将不会重新启动IIS。