Jinja2嵌套循环模板,用于处理两个列表中的Ansible YAML变量

顶点

我是自动化和敏捷的第一个月,正在经历所有学习过程,但是我有一项工作需要花好几天的时间来尝试找出到目前为止没有太大的进展,因此,我将非常感谢您提供的所有提示和技巧。

我在Ansible all_vars.yml代码中有一个带有变量的YAML文件,等待在角色中运行,例如以下示例:

pg_hba:
  - section: "DEFAULT"
    entries:
      - { type: local, database: all, user: all, auth_method: trust }
      - { type: host, database: all, user: all, address: 127.0.0.1/32, auth_method: trust }
      - { type: host, database: all, user: all, address: 174.34.2.0/24, auth_method: md5, comment: "Private Wifi" }
  - section: "DBA"
    entries:
      - { type: host, database: all, user: all, address: 192.168.2.130/32, auth_method: md5, comment: "Name" }
      - { type: host, database: all, user: all, address: 174.34.2.156/32, auth_method: md5, comment: "Name" }

并且Jinja2模板中的输出处理格式约为。像这样:

# TYPE  DATABASE   USER           CIDR-ADDRESS          METHOD #
######
# DEFAULT
######

{% for client in pg_hba %}
{{ '{:10}'.format(client.type) }} {{ '{:15}'.format(client.database) }} {{ '{:20}'.format(client.user) }} {{ '{:20}'.format(client.address|default('')) }} {{ '{:10}'.format(client.auth_method) }} {% if client.comment is defined %} # {{ client.comment|default("") }}
{% endif %}
{% endfor %}

{% if replication_group is defined %}

# REPLICATION
##########

{% for item in groups[ replication_group ] %}
{{ '{:10}'.format("host") }} {{ '{:15}'.format("replication") }} {{ '{:20}'.format("postgres") }} {{ '{:20}'.format(hostvars[item].ansible_default_ipv4.address+"/32") }} {{ '{:10}'.format("trust") }}
{% endfor %}
{% endif %}

输出,呈现预期的示例:

# DEFAULT
######
local       all                all                                                         trust
host        all                all                           127.0.0.1/32          trust 
host        all                all                           174.34.2.0/24         md5    # Private WiFi

# REPLICATION
#########
host       replication     postgres             174.34.2.14/32       trust

问题是,没有多个节和多个条目列表的示例工作得很好,就像我们在pg_hba下只留下一个带有3个条目项的列表,没有子目录并通过Jinja2处理它一样,但是当我尝试应用类似逻辑来做时嵌套循环(至少在我看来是这样),并尝试遍历每个部分,然后遍历内部的条目,我无法弄清楚。

弗拉基米尔·博特卡

下面的模板迭代嵌套循环

{% for item in pg_hba %}
{% if item.section == 'DEFAULT' %}
#########
# DEFAULT
#########
{% for client in item.entries %}
{{ '{:10}'.format(client.type) }} {{ '{:15}'.format(client.database) }} {{ '{:20}'.format(client.user) }} {{ '{:20}'.format(client.address|default('')) }} {{ '{:10}'.format(client.auth_method) }} {% if client.comment is defined %} # {{ client.comment|default("") }}{% endif %}

{% endfor %}
{% endif %}
{% endfor %}

{% for item in pg_hba %}
{% if item.section == 'DBA' %}
#####
# DBA
#####
{% for client in item.entries %}
{{ '{:10}'.format(client.type) }} {{ '{:15}'.format(client.database) }} {{ '{:20}'.format(client.user) }} {{ '{:20}'.format(client.address|default('')) }} {{ '{:10}'.format(client.auth_method) }} {% if client.comment is defined %} # {{ client.comment|default("") }}{% endif %}

{% endfor %}
{% endif %}
{% endfor %}

#########
# DEFAULT
#########
local      all             all                                       trust      
host       all             all                  127.0.0.1/32         trust      
host       all             all                  174.34.2.0/24        md5         # Private Wifi

#####
# DBA
#####
host       all             all                  192.168.2.130/32     md5         # Name
host       all             all                  174.34.2.156/32      md5         # Name

这是你要找的吗?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Jinja2模板中循环Ansible变量数组以创建嵌套字典

来自分类Dev

如何填充存储在 Ansible 变量中的 Jinja2 模板?

来自分类Dev

包含模板中的Jinja2变量

来自分类Dev

Ansible中的if语句与Jinja2变量

来自分类Dev

Ansible将变量写入YAML文件

来自分类Dev

用Ansible变量填充Jinja2模板?

来自分类Dev

Ansible jinja2 模板使用变量进行查找

来自分类Dev

使用Python更改YAML中的特定变量

来自分类Dev

Jinja2 与 Ansible,循环中的多个变量

来自分类Dev

在jinja2中,如何两次包含相同的模板,但传递不同的变量

来自分类Dev

在jinja2中,如何两次包含相同的模板,但要传递不同的变量

来自分类Dev

Ansible /Jinja2 引用列表项中的变量键是相同的字典

来自分类Dev

使用Ansible打印在YAML文件中缩进的变量值

来自分类Dev

ANSIBLE:访问YAML广告资源中的“深度”变量

来自分类Dev

如何在Azure中的两个Yaml管道之间传递变量值

来自分类Dev

如何在Jekyll YAML配置中访问多个嵌套变量

来自分类Dev

在模板中访问jinja2全局变量

来自分类Dev

使用url作为我的jinja2模板中的变量?

来自分类Dev

在Jinja2模板中调用构造的变量名称?

来自分类Dev

在Azure管道中将变量传递到Yaml模板(如参数)

来自分类Dev

更新Jinja2模板变量

来自分类Dev

Assemble.io:布局中的YAML前置变量

来自分类Dev

在AzurePowerShellV5内联脚本中引用yaml变量

来自分类Dev

Azure Devops YAML管道中的多个变量组

来自分类Dev

如何从AWS Lambda函数访问YAML文件中的变量?

来自分类Dev

在Azure Devops YAML管道中访问容器资源变量

来自分类Dev

在Spring application.yaml中读取docker env变量

来自分类Dev

在Azure Devops生成管道YAML中合并变量

来自分类Dev

在两个以上数据框内的相同变量的嵌套列表内循环相关性测试

Related 相关文章

  1. 1

    在Jinja2模板中循环Ansible变量数组以创建嵌套字典

  2. 2

    如何填充存储在 Ansible 变量中的 Jinja2 模板?

  3. 3

    包含模板中的Jinja2变量

  4. 4

    Ansible中的if语句与Jinja2变量

  5. 5

    Ansible将变量写入YAML文件

  6. 6

    用Ansible变量填充Jinja2模板?

  7. 7

    Ansible jinja2 模板使用变量进行查找

  8. 8

    使用Python更改YAML中的特定变量

  9. 9

    Jinja2 与 Ansible,循环中的多个变量

  10. 10

    在jinja2中,如何两次包含相同的模板,但传递不同的变量

  11. 11

    在jinja2中,如何两次包含相同的模板,但要传递不同的变量

  12. 12

    Ansible /Jinja2 引用列表项中的变量键是相同的字典

  13. 13

    使用Ansible打印在YAML文件中缩进的变量值

  14. 14

    ANSIBLE:访问YAML广告资源中的“深度”变量

  15. 15

    如何在Azure中的两个Yaml管道之间传递变量值

  16. 16

    如何在Jekyll YAML配置中访问多个嵌套变量

  17. 17

    在模板中访问jinja2全局变量

  18. 18

    使用url作为我的jinja2模板中的变量?

  19. 19

    在Jinja2模板中调用构造的变量名称?

  20. 20

    在Azure管道中将变量传递到Yaml模板(如参数)

  21. 21

    更新Jinja2模板变量

  22. 22

    Assemble.io:布局中的YAML前置变量

  23. 23

    在AzurePowerShellV5内联脚本中引用yaml变量

  24. 24

    Azure Devops YAML管道中的多个变量组

  25. 25

    如何从AWS Lambda函数访问YAML文件中的变量?

  26. 26

    在Azure Devops YAML管道中访问容器资源变量

  27. 27

    在Spring application.yaml中读取docker env变量

  28. 28

    在Azure Devops生成管道YAML中合并变量

  29. 29

    在两个以上数据框内的相同变量的嵌套列表内循环相关性测试

热门标签

归档