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