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