我想到的方法是:
- name: ...
set_fact:
_forwards: '{% set _r = [] %}{%
for _g in _guests %}{{
_r.append({
"p_from_interface": "!lxcbr0",
"p_from_port": hostvars[_g].ansible_port,
"p_to_host": _g,
"p_to_port": 22,
}) }}{%
endfor %}{{
_r
}}'
vars:
_guests: '{{
hostvars
| dictselectattr("location", "eq", inventory_hostname)
| list
}}'
在这里,我为以下任务准备数据,这些数据将添加相应的iptables
规则。有没有办法使它更具可读性?
答案 0 :(得分:2)
我认为:
我认为您的问题的一部分是线路噪声与问题的实际“肉”混合在一起;与以下内容进行对比:
_forwards: |
{%- set r = [] -%}
{%- for g in guests %}{%
set _ = r.append({
"p_from_interface": "!lxcbr0",
"p_from_port": hostvars[g].ansible_port,
"p_to_host": g,
"p_to_port": 22,
})
%}{% endfor -%}
{{ r }}
我还想指出,jinja vars是块作用域的,因此您不需要在其下划线加下划线,以防止它们从jinja模板中“漏出”; r
和g
在其他任何地方都无法使用。