我有以下木偶模板文件solr.json.erb:
{
"servers" : [ {
"port" : "<%= jmx_port %>",
"host" : "localhost",
"queries" : [
<% @markets.each do |market| -%>
{
"outputWriters" : [ {
"@class" : "com.googlecode.jmxtrans.model.output.StdOutWriter",
} ],
"obj" : "solr/market_<%= market %>:type=queryResultCache,id=org.apache.solr.search.LRUCache",
"attr" : [ "hits","hitratio"]
},
<% end -%>
],
"numQueryThreads" : 2
} ]
}
我想在puppet中执行此测试之前测试将模板应用于某些测试参数的结果。
我该怎么做?
之前,我试过像这样的脚本,my_script.ruby
require 'erb'
require 'ostruct'
namespace = OpenStruct.new(:jmx_port => 9200, :markets=> ['CH', 'FR'])
template = File.open("solr.json.erb", "rb").read;
puts ERB.new(template).result(namespace.instance_eval { binding })
但它没有用,因为OpenStruct没有instance variables
,因此我无法使用@markets
。
文档提到您可以使用以下命令检查语法: http://docs.puppetlabs.com/guides/templating.html
erb -P -x -T '-' mytemplate.erb | ruby -c
但这不是我要问的。 我要求将一些测试参数(jmx_port = 9200,markets = ['CH','FR'])应用到模板中。
我该怎么做?
答案 0 :(得分:6)
我认为你不需要openstruct的东西。这对我有用:
require 'erb'
#Test Variables
jmx_port = 9200
@markets = ['CH', 'FR']
temp = File.open("testerb.erb", "rb").read;
renderer = ERB.new(temp)
puts output = renderer.result()
虽然我确实需要改变你的模板:
我已从您模板中的-
中删除了-%>
。这些使它无法编译,因为它们应该与<%=
{
"servers" : [ {
"port" : "<%= jmx_port %>",
"host" : "localhost",
"queries" : [
<% @markets.each do |market| %>
{
"outputWriters" : [ {
"@class" : "com.googlecode.jmxtrans.model.output.StdOutWriter",
} ],
"obj" : "solr/market_<%= market %>:type=queryResultCache,id=org.apache.solr.search.LRUCache",
"attr" : [ "hits","hitratio"]
},
<% end %>
],
"numQueryThreads" : 2
} ]
}
答案 1 :(得分:5)
如果为ERB打开修剪模式,则不必删除“ - %&gt;”来自模板:
renderer = ERB.new(temp, nil, '-')