厨师中的node.run_state是否应该在整个厨师 - 客户端运行中存活下来?

时间:2017-01-09 16:42:40

标签: chef

我有自定义资源。当该资源收敛时,我想将所述资源安装的软件包存入node.run_state [:installed_pa​​ckages]。但是当我稍后在另一个食谱(同一个客户端运行)中读取该值时,它似乎是零。

我唯一的想法是在资源申报时评估?如果是这样,我将如何实现我的目标?

这是我的自定义资源片段,将项目放入run_state:

    # Push the desired package into the run_state
    if (node.run_state[:installed_packages] == nil) then
        node.run_state[:installed_packages] = Set.new
    end
    node.run_state[:installed_packages].add("/tmp/#{rpm_name}.rpm")

这是我正在使用这些值的模板资源:

template '/tmp/my_script.sh' do
    source 'my_script.sh.erb'
    owner 'root'
    group 'root'
    mode '0755'
    variables({
        :packages => node.run_state[:installed_packages] || Array.new,
    })

    action :nothing
end

1 个答案:

答案 0 :(得分:2)

很难从你的节目中看出来,但你认为“后来”可能是“之前”。使用lazy {}帮助程序延迟对值的评估,直到稍后。有关何时发生特定代码位的详细信息,请参阅https://coderanger.net/two-pass/