加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 如何测试将puppet模板应用于给定测试参数的结果

发布时间:2020-12-17 03:55:21 所属栏目:百科 来源:网络整理
导读:我有以下puppet模板文件solr.json.erb: { "servers" : [ { "port" : "%= jmx_port %","host" : "localhost","queries" : [ % @markets.each do |market| -% { "outputWriters" : [ { "@class" : "com.googlecode.jmxtrans.model.output.StdOutWriter",} ],"
我有以下puppet模板文件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没有实例变量,所以我不能使用@markets.

文档提到您可以使用此命令检查语法:
http://docs.puppetlabs.com/guides/templating.html

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

但这不是我要问的.
我要求获得将一些测试参数(jmx_port = 9200,markets = [‘CH’,’FR’])应用于模板的结果.

我怎样才能做到这一点?

解决方法

我不认为你需要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 %>","queries" : [
      <% @markets.each do |market| %>
    {
      "outputWriters" : [ {
        "@class" : "com.googlecode.jmxtrans.model.output.StdOutWriter",<% end %>
    ],"numQueryThreads" : 2
  } ]
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读