主厨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资源都假定每个人都知道所有基础知识。
答案 0 :(得分:1)
您应该熟悉Chef Client Overview。特别是重置节点属性阶段,编译资源集合阶段和汇聚节点阶段的顺序。
在重置阶段,每次编译资源之前都会重新加载Ohai信息。如果目标是为你的if语句重新加载Ohai,那么你在这里的Ohai资源是不需要的。 Ohai资源将在融合阶段运行。在编译阶段,if块在Ohai资源之前运行。这也意味着if语句将在编译阶段返回,而不是在Chef客户端运行期间返回。
作为一般规则;汇聚期间运行资源,但编译期间不在ruby_block
资源中的任何ruby代码运行。这意味着在编译期间,任何if语句都是在当前客户端运行之前的节点状态下完成的。
希望这有助于消除一些困惑。