LWRP 领导者 remote_file_notification

chef LWRP remote_file_notification

我有一个 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 没有收到通知,但我不确定为什么。

我不确定您是否可以使用 ruby_block 延迟 new_resource.updated_by_last_action(您正试图 运行 它超出您的提供商的执行范围?)。由于您的提供者操作已经 运行ning 在收敛时间,我通常不会在这里使用 ruby 块。我会做类似的事情:

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

立即在 remote_file 上调用 run_action 的另一个好处是您不再使用 DSL 创建 remote_file 资源并将其添加到资源集合,然后等待厨师在未来某个时间收敛它(然后等待您的 ruby_block 之后)。您正在当时和那里聚合您关心的资源,并检查它是否已更改(并相应地更新您的自定义资源)。