Dictionary Ansible中复杂数据结构的动态生成

Dictionary Ansible中复杂数据结构的动态生成,dictionary,ansible,jinja2,ansible-template,Dictionary,Ansible,Jinja2,Ansible Template,我的想法是: -名称:。。。 设定事实: _转发:“{%set}ur=[]%}{% 对于_gin _guest%}{{ _r、 附加({ “p_from_interface”:“!lxcbr0”, “p_from_port”:hostvars[_g]。ansible_port, “p_to_host”:, “港口到港口”:22, }) }}{% endfor%}{{ _r }}' 变量: _客人:'{{ 霍斯瓦尔斯酒店 |dictselectattr(“位置”、“均衡器”、目录\u主机名) |名

我的想法是:

-名称:。。。
设定事实:
_转发:“{%set}ur=[]%}{%
对于_gin _guest%}{{
_r、 附加({
“p_from_interface”:“!lxcbr0”,
“p_from_port”:hostvars[_g]。ansible_port,
“p_to_host”:,
“港口到港口”:22,
}) }}{%
endfor%}{{
_r
}}'
变量:
_客人:'{{
霍斯瓦尔斯酒店
|dictselectattr(“位置”、“均衡器”、目录\u主机名)
|名单
}}'
在这里,我为以下任务准备数据,这些任务将添加相应的
iptables
规则。有没有办法让它更具可读性?

在我看来:

我认为你的问题的一部分是线路噪音与问题的实际“肉”混杂在一起;将其与以下内容进行对比:

_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变量是块范围的,所以不需要在它们前面加下划线,以防止它们从jinja模板中“泄漏”
r
g
将不会在其他任何地方提供。

在我看来:

我认为你的问题的一部分是线路噪音与问题的实际“肉”混杂在一起;将其与以下内容进行对比:

_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变量是块范围的,所以不需要在它们前面加下划线,以防止它们从jinja模板中“泄漏”
r
g
在其他任何地方都将不可用。

除此之外,我仍然认为
{{r.append(…)}
{%set=r.append(…)%}
好。实际上在这种特殊情况下,
{%-
-%}
是不需要的。Ansible模板是使用渲染的。如果在标记之前有空格是必要的。为了补充这一点,我仍然认为
{{r.append(…)}
{%set=r.append(…)%}
好。实际上在这种特殊情况下,
{%-
-%}
是不需要的。Ansible模板是使用渲染的。如果在标记之前有空格,这是必要的。