首页 > 解决方案 > 厨师只是忽略返回块

问题描述

厨师菜鸟警报!!!!

所以,我有这个代码

ohai 'reload' do
  action :reload
end


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

如果安装了“ffmpeg”,我希望配方返回控制权

我没有为 Ohai 做任何安装或配置。Chef zero run 说插件路径 /etc/chef/ohai/plugins 不存在,但它也说:

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

但是 Chef 只​​是忽略了 if 块。当我在启用“信息”级别的情况下运行厨师零时,厨师甚至没有提到它。

我也尝试过它的另一种变体

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

但同样的结果。大厨怎么这么奇怪?还是因为我没有费心学习红宝石?为什么所有 Chef 资源都假定每个人都知道所有基础知识。

标签: chef-infrachef-recipe

解决方案


您应该熟悉Chef Client Overview。尤其是Reset节点属性阶段,Compile资源收集阶段,Converge节点阶段的顺序。

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

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

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


推荐阅读