Hash中的RUBY HASH;没有将String隐式转换为Integer(TypeError)

时间:2017-01-04 19:05:27

标签: ruby chef erb

我试图解决类型错误,但我不确定错误的位置。我假设它将在我的client.rb文件中。我试图根据其位置A或位置B填写正确的IP地址的ERB文件。如果它在位置A然后取第一个IP地址并填入,然后在另一行上执行相同的第二个IP地址位置A的IP地址

Data Bag / JSON

{
  "id": "sources",
   "A": {"primary": "127.0.0.1", "secondary": "127.0.0.2"},
   "B": {"primary": "127.0.0.1", "secondary": "127.0.0.2"}
}

ERB FILE

:server <%=sources["primary"]%>
:server <%=sources["secondary"]%>

客户食谱

data_bag = search(:win_sources,'id:sources')
case servername
when /^smd(.*)/
  sources = data_bag["B"]
...
end

1 个答案:

答案 0 :(得分:2)

Chef的search方法始终返回一系列匹配项。因此,您的data_bag变量可能包含一个包含单个元素的数组:您想要的哈希值。

您可以使用以下内容对此进行规范化:

data_bags = search(:win_sources,'id:sources')
if data_bags.size == 1
  data_bag = data_bags.first
else
  raise 'More or less than one sources data bag found!'
end