Chef 只​​是忽略了 return 块

Chef just ignores return block

大厨菜鸟警报!!!!

所以,我有这个代码

ohai 'reload' do
  action :reload
end


if node['packages'].keys.include?('ffmpeg')
  return
end

如果安装了 'ffmpeg',我希望配方 return 控制

我没有为 Ohai 做任何安装或配置。厨师零 运行 说插件路径 /etc/chef/ohai/plugins 不存在但它也说:

"- 重新 运行 ohai 并将结果合并到节点属性中"..所以我想这可行

但是 Chef 只​​是忽略了 if 块。当我 运行 厨师零启用 "info" 级别时,厨师甚至没有提到它。

我也试过另一种变体

return if node['packages'].keys.include?('ffmpeg')

但是结果一样。为什么厨师这么奇怪?还是因为我懒得学习 ruby?为什么所有 Chef 资源都假定每个人都了解所有基础知识。

您应该熟悉 Chef Client Overview。特别是重置节点属性阶段,编译资源收集阶段,收敛节点的顺序相.

Ohai 信息在每次编译资源之前,在重置阶段重新加载。如果目标是为您的 if 语句重新加载 Ohai,则不需要您在此处拥有的 Ohai 资源。该 Ohai 资源将 运行 在收敛阶段。在编译阶段,Ohai 资源之前的 if 块 运行s。这也意味着 if 语句将 return 在编译阶段而不是在厨师客户端 运行.

作为一般规则;收敛期间的资源 运行 但编译期间不在 ruby_block 资源 运行 中的任何 ruby 代码。这意味着任何 if 语句在编译期间以当前客户端之前的节点状态完成 运行.

希望这有助于消除一些困惑。