【问题标题】:Chef just ignores return block厨师只是忽略返回块
【发布时间】:2018-10-30 23:24:19
【问题描述】:

厨师菜鸟警报!!!!

所以,我有这个代码

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-infra chef-recipe


    【解决方案1】:

    您应该熟悉Chef Client Overview。尤其是重置节点属性阶段、编译资源收集阶段、收敛节点阶段的顺序。

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

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

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

    【讨论】:

    • 非常感谢。这确实有道理
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-21
    • 2020-09-04
    相关资源
    最近更新 更多