Chef infra 厨师只是忽略了返回块

Chef infra 厨师只是忽略了返回块,chef-infra,chef-recipe,Chef Infra,Chef Recipe,厨师长注意 所以,我有这个代码 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

厨师长注意

所以,我有这个代码

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块。当我在启用信息级别的情况下运行Chef zero时,Chef甚至没有提到它

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

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

但同样的结果。为什么厨师这么奇怪?还是因为我没有学习ruby?为什么所有厨师资源都假设每个人都知道所有的基本知识。

你应该熟悉这些知识。特别是重置节点属性阶段、编译资源收集阶段和收敛节点阶段的顺序

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

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


希望这有助于澄清一些困惑。

非常感谢。这确实有道理