7

次のパペットのサンプル テンプレートがあります。

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

market=['UK','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.each do を適用する代わりに、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
  } ],
}

これは動作しません。

それで、それを機能させる方法は?または、パペット テンプレートを変更して最後のコンマを削除する方法を教えてください。

4

4 に答える 4

3

puppet labs サイト ( https://ask.puppetlabs.com/question/4195/joining-array-from-hieraconcat-other-value-in-erb/ ) でこの形式のソリューションを見ました。

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

このコードを使用すると、配列を取得して各要素のバリエーションを作成し、適切な結合テキストでそれらをすべて結合できます (最後に偽のコンマは含まれません)。

于 2014-10-23T20:49:48.363 に答える