2017-08-10 7 views
0

Jinja2にループforを書き込んでいます。リストの終わりまでリスト変数を連結し続けます。変数に文字列を格納しています。ループが完了したら、変数を出力します。Jinja2のループ変数外部ループへのアクセス

{% set HOSTLIST = groups['master'] | map('extract', hostvars, ['ansible_default_ipv4', 'address'])| list %} 
{% set TEST = "spark://" %} 
{% for host in HOSTLIST %} 
    {% set sample = TEST + host %} 
    {% set TEST = sample+',' %} 
{% endfor %} 

{{ TEST }} 

を次のように

それを実行するためのコードがある誰もが私たちが間違いをしているところ、私を指すことができます。

次のように私たちの出力は次のようになります。

spark:// 

をしかし、予想される出力は次のようにする必要があります。このようにそれを使用しないのはなぜ

spark://192.168.49.111:7077,192.168.49.112:7077, 

答えて

1

?ループ内で外側のスコープの変数を変更する

spark://{{ groups['master'] | map('extract', hostvars, ['ansible_default_ipv4', 'address']) | map('regex_replace','$',':7077') | list | join(',') }} 

あなたの元の要求をのみ、いくつかのフープを介してジャンプして解決され、Jinja2: Change the value of a variable inside a loopを参照してください。

+0

ありがとうございましたが、私はもう1つの条件を追加します 出力をsparkにしたい://10.0.2.124:7077,10.0.2.156:7077 ここでポート番号は変数 ' PORT' – Bidyut

+0

修正された内容を参照してください –

+0

私はポートをハードコーディングする必要はありません、ポートは可変のものとして渡す必要があります。 – Bidyut

関連する問題