在Chef内,该属性如下所示:
default['cluster']['ipaddress'] = ["10.211.130.108", "10.211.242.203"]
在Chef配方中,我使用map
:
json_nodes = node['consul']['cluster']['ipaddress'].map { |s| "#{s.to_s}:8300" }
bash 'configuring file.json' do
code <<-EOH
echo #{json_nodes} > "/home/user1/file.json"
EOH
end
我在文件/home/user1/file.json
中得到以下输出:
[10.211.130.108:8300, 10.211.242.203:8300]
输出应该有双引号,如下所示:
["10.211.130.108:8300", "10.211.242.203:8300"]
答案 0 :(得分:1)
怎么样:
[
{
"item_id":456,
"user_id":42,
"type":"word",
"name":"ordre de mission"
},
{
"item_id":456,
"user_id":42,
"type":"excel",
"name":"horaires"
},
{
"item_id":456,
"user_id":42,
"type":"pdf",
"name":"facture"
}
]
我没有你的数据,但这是我控制台的一个例子:
"documents"
请注意,当我将.join放在最后时,它会将它们全部串在一个字符串中。
json_nodes = node['cluster']['ipaddress'].map { |s| "#{s.to_s}:8300" }
答案 1 :(得分:1)
当您按照制作方式使用Chef(并且不要调用bash ......)时,事情变得容易多了。你的问题转化为在Chef中解决它是:
file "/home/user1/file.json" do
content node['consul']['cluster']['ipaddress'].map { |s| "#{s}:8300" }.to_s
end
如果您需要非root用户所有权和读取权限,请查看owner
and mode
options of the file resource。
答案 2 :(得分:0)
此代码将执行您在自己的答案中指定的内容。这有点奇怪,你瞄准的字符串看起来像一个数组声明。
a = ['10.211.130.108','10.211.242.203']
a.map! { |s| "\"#{s}:8300\"" }
result = "[#{a.join(',')}]"
puts result
# Output: ["10.211.130.108:8300","10.211.242.203:8300"]
答案 3 :(得分:-1)
我能够使用以下内容获得双引号:
json_nodes = node['cluster']['ipaddress'].map { |s| "\"#{s.to_s}:8300\"" }