【问题标题】:Run chef block only if chocolatey is installing package仅当巧克力正在安装软件包时才运行厨师块
【发布时间】:2016-12-14 00:33:31
【问题描述】:

我在确定某个软件包是否已安装或已使用 Chef 的 Chocolatey_package 功能安装时遇到问题。几乎,我正在安装一个需要 iisreset 之后的包。我只想在安装包时重置 iis,而不是在后续执行 chef-client 时重置 iis(因为包已经安装,chocolatey 将提前退出)。

我将正在安装的软件包存储在属性文件中。它使用以下格式:

{'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

谢谢

【问题讨论】:

    标签: chef-infra chef-recipe chocolatey


    【解决方案1】:

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

    [{ '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 运行结束时重新启动 IIS ONCE,无论包的数量如何。如果您添加:immediately,您的 IIS 将在每​​个软件包安装后重新启动。

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

    【讨论】:

    • 由于 OP 似乎认为某些软件包的重置是可选的,因此在通知行的末尾添加 unless package['should_notify'].nil?if package['should_notify'] == 'reset_iis' 以避免在不需要时发出通知。
    猜你喜欢
    • 2018-07-16
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多