厨师Ruby挖掘错误的参数数量

时间:2018-02-05 17:33:51

标签: ruby chef chef-recipe

我正在尝试使用Chef / Ruby做一些非常简单的事情。我想做的就是以安全和干净的方式检查哈希中的密钥是否为nil

这是我的代码:

if node.dig('k1', 'k2', 'k3').nil?
  myvar1 = node['kA']['kB']['kC']
else
  myvar1 = node['k1']['k2']['k3']
end

但是,我得到Recipe Compile Error陈述:

ArgumentError
-------------
wrong number of arguments (given 1, expected 0)

我在这里做错了什么?我在这里阅读了dig的文档:http://ruby-doc.org/core-2.3.0_preview1/Hash.html#method-i-dig但它似乎没有帮助

我正在使用Ruby 2.3

2 个答案:

答案 0 :(得分:2)

我们没有将其添加到上面节点支持的API,因为它与现有的node.read方法重叠,这是您要在此处使用的方法。它看起来像一个哈希,但只支持方法的一个子集。

编辑:既然我不在手机上,你想要的完整代码可能就是:

node.read('k1', 'k2', 'k3') || node.read('kA', 'kB', 'kC')

除非false是有效值。

答案 1 :(得分:1)

结果node不是哈希,而是节点对象,因此.dig()不起作用。我最终使用了以下内容:

if node.read('k1', 'k2', 'k3').nil?
  myvar1 = node['kA']['kB']['kC']
else
  myvar1 = node['k1']['k2']['k3']
end