厨师LWRP remote_file_notification

时间:2015-11-06 12:26:17

标签: chef lwrp

我有一个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没有得到通知,但我不确定原因。

1 个答案:

答案 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)。你正在融合你所关心的资源&在那里,并检查它是否已更改(并相应地更新您的自定义资源)。