Sac*_*orn 2 jinja2 ansible ansible-playbook
我想在我的角色的defaults/main.yml中生成一个ip地址列表(使用最后8位的范围,因此120-190转换为xxx120 - xxx190),然后使用它创建新的网络接口并生成新的配置文件.我试过这种方法:
默认/ 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 %}
Run Code Online (Sandbox Code Playgroud)
我得到的所有生成的配置文件是:
s
e
r
v
e
r
:
6
6
6
6
s
e
r
v
e
r
1
:
6
Run Code Online (Sandbox Code Playgroud)
所以我的猜测是我没有生成一个列表而只是一个长字符串,当我在template.conf.j2中使用for循环时,我迭代单个字符.我尝试使用这个问题的答案,但我得到的只是语法错误.什么可能有助于我的想法?
如果您希望将变量列为JSON列表,则应将变量格式化为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 }}"
Run Code Online (Sandbox Code Playgroud)