我有一个LWRP下载文件作为其步骤的一部分,我想使用它来指示资源是否已更改
action: install do
# some other stuff here
remote_file "/some/file" do
source node[:mycookbook][:source_file]
mode 00755
action :create
notifies :run, 'ruby_block[set_status]', :immediately
end
ruby_block 'set_status' do
block do
new_resource.updated_by_last_action(true)
end
end
end
在我的食谱中,我有:
my_provider do
# configure
notifies :run, 'something_else', :immediately
end
如果remote_file运行似乎没关系,something_else
没有得到通知,但我不确定原因。
答案 0 :(得分:2)
我不确定您是否可以使用ruby_block延迟partial_fit
(您尝试在执行提供程序之外运行它?)。由于您的提供者操作已经在收敛时运行,我通常不会在这里使用ruby块。我会做类似的事情:
new_resource.updated_by_last_action
立即在action: install do
# some other stuff here
some_file = remote_file "/some/file" do
source node[:mycookbook][:source_file]
mode 00755
action :nothing
notifies :run, 'ruby_block[set_status]', :immediately
end
some_file.run_action(:create)
new_resource.updated_by_last_action(true) if some_file.updated_by_last_action?
end
上调用run_action
的另一个好处是,您不再使用DSL创建remote_file
资源并将其添加到资源集合中,然后等待厨师在未来的某个时间汇聚它(然后等待你的ruby_block)。你正在融合你所关心的资源&在那里,并检查它是否已更改(并相应地更新您的自定义资源)。