循环处理复杂的数据结构

时间:2019-01-31 17:41:51

标签: yaml jinja2

我正在使用Ansible和Jinja2填充一些配置文件。我正在尝试遍历复杂的数据结构,但无法获取它来打印我所需的内容。

这是我的数据结构的一个示例:

nodes:
  server-1:
    attrib1: value1
    containers:
      - name: container-1
        ip: 10.2.33.223
      - name: container-2
        ip: 10.2.33.239
  server-2:
    attrib1: value1
    containers:
      - name: container-3
        ip: 10.2.34.48
      - name: container-4
        ip: 10.2.34.50

这是有趣的剧本

- hosts: localhost
  vars_files:
    - "vars/nodes.yml"
  tasks:
  - name: create configs
    template:
      src: "template.j2"
      dest: "config.cfg"

jinja2模板将是这样,但我无法正确理解

{% for container in nodes.containers %}
  {{ container.name }}: {{ container.ip }}
{% endfor %}

我正在尝试获取所有这样的容器名称和IP:

container-1: 10.2.33.223
container-2: 10.2.33.229
container-3: 10.2.34.48
container-4: 10.2.34.50

任何帮助将不胜感激:)

1 个答案:

答案 0 :(得分:0)

阅读文档无所不能:)

此Jinja2代码从我的数据结构中获取了我需要的东西:

{% for key, value in nodes.iteritems() %}
  {% for container in value.containers %}
    {{ container.name }}: {{ container.ip }}
  {% endfor %}
{% endfor %}

我仍然需要完全理解字典和列表之间的区别:)