Chef 中带有 data_bag_item 的条件属性?

Conditional attribute with data_bag_item in Chef?

我需要将默认属性(来自食谱依赖项)设置为包含在数据包中的值。我希望将属性设置为 data_bag_item 的值,如果不存在则设置为 nil。在 attribute.rb:

if defined?(data_bag_item('databag', 'item'))
    default["something"]["item"] = data_bag_item('databag', 'item')
else
    default["something"]["item"] = nil
end

稍后在我自己的食谱中,我正在检查变量是否设置为 nil 但它似乎失败并显示为错误(就像条件未执行因此 default["something"]["item"] 不是创建):No resource, method, or local variable named 'default' for 'Chef::Recipe "something"'.

我做错了什么?

(EDIT 我正在学习 Chef,就像我在这里学习 Ruby 一样多。在条件语句的情况下,我可能完全错误地使用 defined。我对这里的每一个批评者都持开放态度!)

我不确定你的食谱的完整上下文,但看起来你应该将 default 更改为 node。为什么? default 用于设置可以更改到每个部署的节点的值,但是当你是 运行 脚本时,你可以使用 node 来获取值。因此,只需在检查变量的地方将 default["something"]["item"] 更改为 node["something"]["item"]