2017-08-10 211 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

感謝您的優雅的答案,但我想再添加一個條件, 我希望輸出爲spark://10.0.2.124:7077,10.0.2.156:7077 這裏端口號將作爲變量' PORT' – Bidyut

+0

看到修改的答案 –

+0

我不想硬編碼端口,端口應該作爲變量傳遞。 – Bidyut