4

次のパペット テンプレート ファイル 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
  } ]
}

これをパペットで実行する前に、テンプレートをいくつかのテストパラメーターに適用した結果をテストしたいと思います。

どうやってやるの?

前に、このようなスクリプトで試してみました 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 })

instance variablesしかし、OpenStructには がなく、使用できないため、うまくいきませんでし@marketsた。

ドキュメントには、次のコマンドで構文を確認できることが記載されています: http://docs.puppetlabs.com/guides/templating.html

erb -P -x -T '-' mytemplate.erb | ruby -c

しかし、それは私が求めていることではありません。テンプレートにいくつかのテスト パラメーター (jmx_port=9200、markets=['CH', 'FR']) を適用した結果を取得するよう求めています。

どうやってやるの?

4

2 に答える 2

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
  } ]
}
于 2013-08-28T08:32:37.850 に答える