【发布时间】:2015-06-11 08:46:27
【问题描述】:
我正在尝试使用内置在厨师食谱中的哈希填充 json 字符串,但一直遇到错误“符号作为数组索引”。我在 stackoverflow 和谷歌上的搜索让我无处可去,我只是好奇这里发生了什么。我对 Ruby 不是很好,所以如果代码有点不对,请原谅我。
属性文件:
node.default[:server][:sumologic][:sources][:apache] = Hash.new
node.default[:server][:sumologic][:sources][:apache][:type] = "LocalFile"
node.default[:server][:sumologic][:sources][:apache][:name] = "Apache Logs"
node.default[:server][:sumologic][:sources][:apache][:path_expression] = "/var/log/httpd/*.log"
node.default[:server][:sumologic][:sources][:apache][:blacklist] = Array.new
node.default[:server][:sumologic][:sources][:apache][:blacklist] << "/var/log/httpd/access.log*"
node.default[:server][:sumologic][:sources][:apache][:blacklist] << "/var/log/httpd/error.log*"
node.default[:server][:sumologic][:sources][:apache][:blacklist] << "/var/log/httpd/ssl_request_log"
node.default[:server][:sumologic][:sources][:apache][:blacklist] << "/var/log/httpd/access_log"
node.default[:server][:sumologic][:sources][:apache][:blacklist] << "/var/log/httpd/error_log"
node.default[:server][:sumologic][:sources][:apache][:category] = "test-httpd"
模板erb文件:
{
"api.version": "v1",
"sources": [
<% sources.each do |source| %>
{
"sourceType" : "<%= source[:type] %>",
"name": "<%= source[:name] %>",
"pathExpression": "<%= source[:path_expression] %>",
<% if defined?(source[:blacklist]) %>
"blacklist": [
<% source[:blacklist].each do |listed, index| %>
<% if index < source[:blacklist].length - 1 %>
"<%= listed %>",
<% else %>
"<%= listed %>"
<% end %>
<% end %>
],
<% end %>
"category": "<%= source[:category] %>"
},
<% end %>
...
配方代码:
template '/opt/SumoCollector/sources.json' do
source 'sources.json.erb'
variables({
:sources => node[:server][:sumologic][:sources]
})
end
【问题讨论】:
标签: ruby chef-infra