how to test the result of applying a puppet template to given test parameters

此生再无相见时 提交于 2019-12-21 17:26:54

问题


I have the following puppet template file 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
  } ]
}

and I want to test the result of applying the template to some test parameters before executing this in puppet.

how can I do that?

before, I tried with a script like this, 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 })

but it didn't work out, because OpenStruct does not have instance variables, so I cannot use @markets.

the documentation mentions that you can check the syntax with this command: http://docs.puppetlabs.com/guides/templating.html

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

but that's not what i am asking. i am asking to get the result of applying some test parameters (jmx_port=9200, markets=['CH', 'FR']) to the template.

how can I do that?


回答1:


I dont think you need the openstruct stuff. This works for me:

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()

Though I did have to alter your template a fraction:

I've removed the - from the -%> you had in your template. These prevented it from compiling, as they're supposed to be paired with <%=

{
  "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
  } ]
}



回答2:


If you turn on trim mode for ERB, you don't have to remove the "-%>" from the template:

renderer = ERB.new(temp, nil, '-')


来源:https://stackoverflow.com/questions/18202485/how-to-test-the-result-of-applying-a-puppet-template-to-given-test-parameters

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!