【问题标题】:chef LWRP remote_file_notification厨师 LWRP 远程文件通知
【发布时间】:2015-11-06 20:43:31
【问题描述】:

我有一个 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,因为该操作已在收敛时间运行(无需使用 ruby​​ 块延迟代码)。您能否发布日志向我们展示哪些资源已更新(或未更新)以及何时/以何种顺序?
  • 我认为我不需要使用 ruby​​ 块,但它总是返回 false。我想知道这是不是因为它是在编译时评估的,而不是在 remote_file 实际运行之后。

标签: chef-infra lwrp


【解决方案1】:

我不确定您是否可以使用 ruby​​_block 延迟 new_resource.updated_by_last_action(您试图在您的提供程序执行之外运行它?)。由于您的提供程序操作已经在收敛时间运行,因此我通常不会在这里使用 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 之后)。您正在此时和那里聚合您关心的资源,并检查它是否已更改(并相应地更新您的自定义资源)。

【讨论】:

  • 我会尝试使用some_file.run_action(:create)。我认为那是我缺少的部分。
猜你喜欢
  • 2014-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-26
相关资源
最近更新 更多