python - YAML 文件的 Jinja 语法

标签 python ansible jinja2

我已经阅读了很多关于 python 和 JINJA 中的循环的文章,但我没有找到解决我的问题的正确答案。我真的是编程新手,所以我一定遗漏了一些东西

我有以下YAML 文件

CONT_PLANE_PROT_V4:
  - RANGES:
    - 10.193.130.240/28
    - 10.193.135.240/28
  - HOSTS:
    - 10.193.131.131
    - 10.196.180.5

我想用这些变量生成一个模板,如果我在 Ansible 中打印变量,它会显示如下:

打印变量

[{u'RANGES': [u'10.193.130.240/28', u'10.193.135.240/28']}, {u'HOSTS': [u'10.193.131.131', u'10.196.180.5']}]

我在 JINJA 模板中尝试以下操作但没有成功:

神社模板

{% for list in CONT_PLANE_PROT_V4 %}
  {% for ips in CONT_PLANE_PROT_V4[list] %}      

    Statement1 {{RANGES_IPs}

  {% endfor %}
{% endfor %}

{% for list in CONT_PLANE_PROT_V4 %}
  {% for ips in CONT_PLANE_PROT_V4[list] %}  

    Statement2 {{HOSTS_IPs}}

  {% endfor %}
{% endfor %}

Ansible 错误: “AnsibleUndefinedVariable:列表对象没有元素 {u'RANGES':[u'10.193.130.240/28',u'10.193.135.240/28',u '10.183.64.240/28', u'10.183.60.240/28', u'10.183.106.240/28', u'10.36.12.240/28', u'10.128.64.240/28', u'10.44.12.240/28', u'10.213.12.240/28', u'10.111.64.240/28', u'10.193.80.240/28']}"}

请求: 您能否让我知道正确获取 2 个列表(4 个 IP)值的最佳方法或最简单方法。我将需要访问“RANGES”和“HOST”列表中的值。 “RANGES”列表中的值将用于语句 1,“HOSTS”列表中的值将用于语句 2。

像这样:

预期结果

statement1 10.193.130.240/28
statement1 10.193.135.240/28

statement2 10.193.131.131
statement2 10.196.180.5

最佳答案

如果您可以重构 YAML 数据,请像这样更改它:

CONT_PLANE_PROT_V4:
  RANGES:
    - 10.193.130.240/28
    - 10.193.135.240/28
  HOSTS:
    - 10.193.131.131
    - 10.196.180.5

这样 CONT_PLANE_PROT_V4 是一个字典,有两个键 RANGESHOSTS,它们是字符串列表。

然后你可以这样做:

{% for r in CONT_PLANE_PROT_V4['RANGES'] %}
    Statement1 {{ r }} 
{% endfor %}

{% for h in CONT_PLANE_PROT_V4['HOSTS'] %}
    Statement2 {{ h }}
{% endfor %}

使用您的原始数据,您有一个列表 CONT_PLANE_PROT_V4,其中包含字典作为元素,每个字典内部都有不同的键。您必须编写稍微复杂一点的模板来处理此结构。

关于python - YAML 文件的 Jinja 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46915278/

相关文章:

python - 地球卫星下方的天空可见区域

Ansible apt build-dep : "No package matching ..."

ansible - 使用另一个变量作为键YAML访问字典

python - 在 Jinja for 循环中设置变量不会在迭代之间持续存在

python - 访问文件中的第 n 个 pickle

python - AES:如何检测输入了错误的密码?

python - 我如何在 Django 中编写装饰器来检查两个单独的条件并相应地重定向?

jenkins - 使用 Ansible 配置 Jenkins 2.0

twitter-bootstrap-3 - Jinja/Wtform aria-需要验证

python - Flask - 访问模板中的配置变量