【问题标题】:Conditional attribute with data_bag_item in Chef?Chef中带有data_bag_item的条件属性?
【发布时间】:2015-04-28 12:10:13
【问题描述】:

我需要将默认属性(来自说明书依赖项)设置为我包含在数据包中的值。如果属性不存在,我希望将属性设置为 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"]):@ 987654324@.

我在这里做错了什么?

(EDIT我在学习 Chef 和在这里学习 Ruby 一样多。在条件条件下使用 defined 时我可能完全搞错了。我对这里的所有批评者持开放态度! )

【问题讨论】:

  • 嗨让-菲利普。你有资格这样做吗??我正在尝试做同样的事情,但是....
  • @AGL 我没有,这些天我再也不能和 Chef 一起玩了,抱歉。

标签: ruby chef-infra


【解决方案1】:

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

【讨论】:

  • 精度:default 用于省略node. 的属性文件中。属性文件中的default["something"]实际上是对node对象的default方法的调用,严格等价于node.default["something"] = "value"。该方法调用 set_or_return 方法来返回值或设置它(如果提供)。也就是说,避免在配方中使用node.default["something"],因为您将只获得默认值并忽略可能在角色或覆盖级别上覆盖它的内容。
猜你喜欢
  • 1970-01-01
  • 2019-06-07
  • 1970-01-01
  • 1970-01-01
  • 2022-07-05
  • 2016-02-16
  • 2021-07-03
  • 2010-09-15
  • 1970-01-01
相关资源
最近更新 更多