如何在 jinja2 模板中构建这个循环
how to contruct this loop in jinja2 template
我有一个后续任务
---
- name: Add inventory hosts to hosts file
template: src=hosts.j2 dest=/etc/hosts owner=root group=root mode=0644
with_dict: hosts
jinja 模板看起来像这样
{% for host in hosts %}
{{ host }}{% for domain in item.value.domains %} {{ host }}.{{ domain }}{% endfor %}{% if item.value.alias is defined %}{% for domain in item.value.domains %} {{ item.value.alias }}.{{ domain }}{% endfor %}{% endif %}
{% endfor %}
hosts 字典所在的位置
主机:
'server1':
domains:
- 'com'
- 'net'
alias: 'opendj'
'server2':
domains:
- 'org'
alias: 'metadata'
我得到
server1 server1.org metadata.org
server2 server2.org metadata.org
我应该怎么做才能达到正确的状态,即
server1 server1.com server1.net opendj.com opendj.net
server2 server2.org metadata.org
谢谢
这看起来会做你想做的事:
{% for host in hosts %}
{{ host }} {% for d in hosts[host]['domains'] %} {{ host }}.{{ d }}{% endfor %} {% for d in hosts[host]['domains'] %} {{ hosts[host]['alias'] }}.{{ d }}{% endfor %}
{% endfor %}
或者,如果您想要稍微漂亮一点的版本:
{% for host in hosts %}
{{ host -}}
{% for d in hosts[host]['domains'] %} {{ host }}.{{ d }}{% endfor -%}
{% for d in hosts[host]['domains'] %} {{ hosts[host]['alias'] }}.{{ d }}{% endfor %}
{% endfor %}
{{ host -}}
和 {% endfor -%}
语句末尾的 -
将取消尾随的换行符,否则会出现在这些位置。
并且如果您只想打印出定义了 alias
的别名:
{% for host in hosts %}
{{ host -}}
{% for d in hosts[host]['domains'] %} {{ host }}.{{ d }}{% endfor -%}
{% if hosts[host]['alias'] is defined %}
{% for d in hosts[host]['domains'] %} {{ hosts[host]['alias'] }}.{{ d }}{% endfor %}
{% endif %}
{% endfor %}
我有一个后续任务
---
- name: Add inventory hosts to hosts file
template: src=hosts.j2 dest=/etc/hosts owner=root group=root mode=0644
with_dict: hosts
jinja 模板看起来像这样
{% for host in hosts %}
{{ host }}{% for domain in item.value.domains %} {{ host }}.{{ domain }}{% endfor %}{% if item.value.alias is defined %}{% for domain in item.value.domains %} {{ item.value.alias }}.{{ domain }}{% endfor %}{% endif %}
{% endfor %}
hosts 字典所在的位置
主机:
'server1':
domains:
- 'com'
- 'net'
alias: 'opendj'
'server2':
domains:
- 'org'
alias: 'metadata'
我得到
server1 server1.org metadata.org
server2 server2.org metadata.org
我应该怎么做才能达到正确的状态,即
server1 server1.com server1.net opendj.com opendj.net
server2 server2.org metadata.org
谢谢
这看起来会做你想做的事:
{% for host in hosts %}
{{ host }} {% for d in hosts[host]['domains'] %} {{ host }}.{{ d }}{% endfor %} {% for d in hosts[host]['domains'] %} {{ hosts[host]['alias'] }}.{{ d }}{% endfor %}
{% endfor %}
或者,如果您想要稍微漂亮一点的版本:
{% for host in hosts %}
{{ host -}}
{% for d in hosts[host]['domains'] %} {{ host }}.{{ d }}{% endfor -%}
{% for d in hosts[host]['domains'] %} {{ hosts[host]['alias'] }}.{{ d }}{% endfor %}
{% endfor %}
{{ host -}}
和 {% endfor -%}
语句末尾的 -
将取消尾随的换行符,否则会出现在这些位置。
并且如果您只想打印出定义了 alias
的别名:
{% for host in hosts %}
{{ host -}}
{% for d in hosts[host]['domains'] %} {{ host }}.{{ d }}{% endfor -%}
{% if hosts[host]['alias'] is defined %}
{% for d in hosts[host]['domains'] %} {{ hosts[host]['alias'] }}.{{ d }}{% endfor %}
{% endif %}
{% endfor %}