Chef infra chef中的node.run_状态是否应该在整个chef客户端运行后继续存在?

Chef infra chef中的node.run_状态是否应该在整个chef客户端运行后继续存在?,chef-infra,Chef Infra,我有一个自定义资源。当该资源聚合时,我希望将所述资源安装的包隐藏到node.run_state[:installed_packages]中。但当我稍后在另一个配方(同一个客户端运行)中读取该值时,它似乎为零 我唯一的想法是在资源声明时对其进行评估?如果是这样,我将如何实现我的目标 下面是我的自定义资源的一个片段,它将项目置于运行状态: # Push the desired package into the run_state if (node.run_state[:install

我有一个自定义资源。当该资源聚合时,我希望将所述资源安装的包隐藏到node.run_state[:installed_packages]中。但当我稍后在另一个配方(同一个客户端运行)中读取该值时,它似乎为零

我唯一的想法是在资源声明时对其进行评估?如果是这样,我将如何实现我的目标

下面是我的自定义资源的一个片段,它将项目置于运行状态:

    # 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

很难从你的表演中分辨出来,但你认为“以后”可能是“以前”。使用
lazy{}
helper将值的计算延迟到以后。有关特定代码位何时发生的更多详细信息,请参阅。

这正是我所需要的。对于遇到此问题的任何其他人,以下是Chef关于lazy的文档: