木偶模板删除最后一个逗号

问题描述 投票:7回答:3

我有以下木偶示例模板:

{
  "servers" : [ {
    "port" : 9200,
    "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
  } ],
}

将它应用于市场= ['英国','FR','IT'],我得到以下结果:

{
  "servers" : [ {
    "port" : 9200,
    "host" : "localhost",

    "queries" : [
            {
      "outputWriters" : [ { "@class" : "com.googlecode.jmxtrans.model.output.StdOutWriter" } ],
      "obj" : "solr/market_UK:type=queryResultCache,id=org.apache.solr.search.LRUCache",
      "attr" : [ "hits","hitratio" ]
    },
          {
      "outputWriters" : [ { "@class" : "com.googlecode.jmxtrans.model.output.StdOutWriter" } ],
      "obj" : "solr/market_FR:type=queryResultCache,id=org.apache.solr.search.LRUCache",
      "attr" : [ "hits","hitratio" ]
    },
          {
      "outputWriters" : [ { "@class" : "com.googlecode.jmxtrans.model.output.StdOutWriter" } ],
      "obj" : "solr/market_IT:type=queryResultCache,id=org.apache.solr.search.LRUCache",
      "attr" : [ "hits","hitratio" ]
    },
        ],
    "numQueryThreads" : 2
  } ],
}

问题是最后一个逗号,这使得它成为无效的solr配置。

而不是应用市场。我可以使用market.map和join(',')。但在这种情况下如何使用地图?

我可以使用如下地图:

<%= @markets.map{ |market| "hello_"+market }.join(',') -%>

这会打印hello_UK,hello_FR,hello_IT(注意我们在hello_IT之后没有逗号),但我需要这样的东西:

{
  "servers" : [ {
    "port" : 9200,
    "host" : "localhost",

    "queries" : [
      <% @markets.map |market| -%>
      {
      "outputWriters" : [ { "@class" : "com.googlecode.jmxtrans.model.output.StdOutWriter" } ],
      "obj" : "solr/market_<%= market %>:type=queryResultCache,id=org.apache.solr.search.LRUCache",
      "attr" : [ "hits","hitratio" ]
    },
    <% }.join(',') -%>
    ],
    "numQueryThreads" : 2
  } ],
}

这不起作用。

那么,如何让它发挥作用?或者如何修改我的木偶模板以删除最后一个逗号?

ruby erb puppet
3个回答
19
投票

这实际上是一个Ruby问题。由于这是一个数组,只需将.each更改为.each_with_index即可。然后,您可以将最终逗号包装在一个检查中,以查看当前索引值是否小于索引的大小。所以

<% @markets.each_with_index |market, i| -%>

然后

}<%= ',' if i < (@markets.size - 1) %>

3
投票

我在一个木偶实验室网站(https://ask.puppetlabs.com/question/4195/joining-array-from-hieraconcat-other-value-in-erb/)上看到了这种形式的解决方案。

<%= quorum.map{ |srv| "#{srv}:#{portNum}" }.join(',') %>

此代码允许您获取数组并创建每个元素的变体,然后将它们与适当的连接文本(最后不包括虚假逗号)一起连接起来。


0
投票

对于Puppet 4.10.12 Ben的答案对我不起作用,但是以下类似的语法做了。

server=<%= $servers.map |$server| { "${server['hostname']}:${server['port']}" }.join(',') %>
© www.soinside.com 2019 - 2024. All rights reserved.