2016-11-16 6 views
2

私はIPアドレスのリストを生成したい(最後の8ビットの範囲を使用するので、120-190はxxx120-xxx190に変換される)default/main.yml in my新しいネットワークインターフェイスを作成し、新しい設定ファイルを生成するために使用します。jinjaテンプレート内の指定された範囲を使用してipのリストを作成する

デフォルト/ main.yml:私はこのアプローチを試みた

ip_list: "{%for address_end in range(50,99)%} 192.168.0.{{address_end}}{%endfor%}" conf_list: "{%for ip in ip_list%}server {{ip}}:6666 {%endfor%}"

して、テンプレートに

template.conf.j2それを使用する:

{% for conf_line in conf_list %} 
{{conf_line}} 
{% endfor %} 

すべて私は生成された設定ファイルに入っていた:

  s 
      e 
      r 
      v 
      e 
      r 


      : 
      6 
      6 
      6 
      6 

      s 
      e 
      r 
      v 
      e 
      r 

      1 
      : 
      6 

ので、私の推測では、私はリストが、ちょうど長い文字列を生成していないよということであると私はtemplate.conf.j2にforループを使用したとき、私は、単一の文字を反復処理します。私はthis問題への答えを使ってみましたが、私はすべて構文エラーでした。何が私を助けてくれるのでしょうか?

答えて

6

varsをリストにしたい場合は、varsをJSONリストとしてフォーマットする必要があります。
1.1.1.1 2.2.2.2 3.3.3.3は文字列です。
['1.1.1.1', '2.2.2.2', '3.3.3.3']はリストに変換されます。

しかし、別のアプローチがあなたのためにあります:

ip_list: "{{ lookup('sequence', 'start=50 count=12 format=192.168.0.%d', wantlist=True) }}" 
conf_list: "{{ ip_list | map('regex_replace','(.*)','server \\1:6666') | list }}" 
+0

代替案はクールだと思われますが、私の場合はどのようにしてバースをJSONリストとしてフォーマットしますか? – Sackhorn

+1

答えの私の例のリストに従ってください:ip-addressesの周りに一重引用符を置き、各アドレスの後にコンマを置き、両括弧を角括弧で置きます。 –

+0

JSONのリストはどのように見えるのですか?jinjaのテンプレートの構文に問題があります。私の場合にこれが適用できるかどうかを知りたがっています:) – Sackhorn

1

Kostantinの答えは非常に役立ったが、私はちょうど私の場合生成する設定項目はそれほど複雑な方法で解決することができることに気づきました。代わりに、リストや神社のテンプレート・ファイル内の文字列変数の変数を反復処理しようとしているのtemplate.conf.j2で行ったように:

{% for conf_line in conf_list %} 
{{conf_line}} 
{% endfor %} 

あなただけデフォルトで文字列を生成しながら、新しい行の兆候を挿入入ることができる/メイン .yml:

conf_list: "{%for ip in ip_list%}server {{ip}}:6666\n{%endfor%}" 

、その後、ちょうどこのようtemplate.conf.j2にその文字列全体を挿入します。

{{conf_line}} 

しかし、私はコンスタンチンが提案したIPアドレス以外のIPアドレスのリストを生成する方法は他にありません。

関連する問題