【问题标题】:Chef loop doesn't execute when resource is notified by another resource当另一个资源通知资源时,厨师循环不执行
【发布时间】:2017-12-21 04:59:48
【问题描述】:

我正在编写一个在 ec2 实例上安装 Splunk 的厨师食谱。我只想在实例的初始设置上安装 Splunk。该配方不需要运行第二次。

我使用通知仅在满足条件时执行后续代码块:

#install splunk
dpkg_package 'splunkforwarder' do
    source '/tmp/splunkforwarder.deb'
    action :nothing
    notifies :run, 'execute[configure-splunk]', :immediately
end

这里是通知的块

commands = ['command1', 'command2', 'etc']
commands.each do |i|
    execute "configure-splunk" do
        command i
        action :nothing
    end
end

问题在于,当调用“configure-splunk”时,它似乎只运行列表中的最后一个命令,而不是循环遍历所有命令。我在这里错过了什么?

【问题讨论】:

    标签: chef-infra chef-recipe


    【解决方案1】:

    没错,当您有多个具有相同名称+类型对的资源时,当您查找该名称时,只有最后一个可用。

    你可能想要的是:

    execute "configure-splunk" do
        command commands.join(' && ')
        action :nothing
    end
    

    【讨论】:

    • 这是为什么呢?似乎一个循环应该评估列表中的所有项目,而不管项目的内容如何?
    • 不是循环,而是notifies :run, 'execute[configure-splunk]'。当您有冲突的名称时,Chef 会选择使用该名称添加的最新资源作为接收通知的资源。
    猜你喜欢
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    相关资源
    最近更新 更多