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"]
。
我需要将默认属性(来自食谱依赖项)设置为包含在数据包中的值。我希望将属性设置为 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"]
。