如何将每个数组元素放在双引号中

时间:2016-07-08 14:42:56

标签: ruby chef chef-recipe chef-solo

在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"]

4 个答案:

答案 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\"" }