chef-infra - 厨师只是忽略返回块
问题描述
厨师菜鸟警报!!!!
所以,我有这个代码
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 Client Overview。尤其是Reset节点属性阶段,Compile资源收集阶段,Converge节点阶段的顺序。
每次编译资源之前,在重置阶段,Ohai 信息都会重新加载。如果目标是为您的 if 语句重新加载 Ohai,则不需要您在此处拥有的 Ohai 资源。该 Ohai 资源将在收敛阶段运行。在编译阶段,if 块在该 Ohai 资源之前运行。这也意味着 if 语句将在编译阶段而不是在 chef 客户端运行期间返回。
作为基本规则; 资源在收敛期间运行,但任何不在ruby_block
资源中的 ruby 代码在编译期间运行。这意味着任何 if 语句在编译期间以当前客户端运行之前的节点状态完成。
希望这有助于消除一些困惑。
推荐阅读
- elasticsearch - 基于元素的Elasticsearch脚本排序存在于数组中
- kubernetes - Kubernetes 卷挂载设置类型检查失败
- tcp - 如何启用 NVIDIADeepstreamSDK Azure IoTEdge 模块从本地 rtsp 接收消息?
- laravel - 在 Laravel 中从多对多关系中获取不同或唯一的记录
- ruby-on-rails - 在omniauth 更新后Rails 服务器停止运行(中断设计)
- weka - 读取 csv 文件但使用制表符分隔符
- php - Phpoffice 库不能写超过 14 位数字
- azure - Azure Function App 无法更新表行
- php - PHP 8 评论错误
- json - 我有一个提供一些文本数据的 api,但文本在 ListStyle 中不起作用