我试图解决类型错误,但我不确定错误的位置。我假设它将在我的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
答案 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