厨师只是忽略了返回区块

时间:2018-05-21 10:12:30

标签: chef chef-recipe

主厨noob alert !!!!

所以,我有这个代码

ohai 'reload' do
  action :reload
end


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

如果安装'ffmpeg',我希望配方返回控制

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

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

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

我也尝试了另一种变体

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

但结果相同。为什么厨师这么奇怪?或者它似乎是因为我没有学习红宝石?为什么所有Chef资源都假定每个人都知道所有基础知识。

1 个答案:

答案 0 :(得分:1)

您应该熟悉Chef Client Overview。特别是重置节点属性阶段,编译资源集合阶段和汇聚节点阶段的顺序。

在重置阶段,每次编译资源之前都会重新加载Ohai信息。如果目标是为你的if语句重新加载Ohai,那么你在这里的Ohai资源是不需要的。 Ohai资源将在融合阶段运行。在编译阶段,if块在Ohai资源之前运行。这也意味着if语句将在编译阶段返回,而不是在Chef客户端运行期间返回。

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

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