仅当chocolatey正在安装包时才运行chef块

时间:2016-12-14 00:33:32

标签: chef chef-recipe chocolatey

我在确定是否已使用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

由于

1 个答案:

答案 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。