Dan*_*are 2 python jinja2 ansible
我已经阅读了很多关于 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
Run Code Online (Sandbox Code Playgroud)
我想用这些变量生成一个模板,如果我在 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']}]
Run Code Online (Sandbox Code Playgroud)
我正在 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 %}
Run Code Online (Sandbox Code Playgroud)
Ansible 错误: "AnsibleUndefinedVariable: list object has no element {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
Run Code Online (Sandbox Code Playgroud)
如果您可以重构 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
Run Code Online (Sandbox Code Playgroud)
这种方式CONT_PLANE_PROT_V4是一个带有两个键RANGES和的字典HOSTS,它们是字符串列表。
然后你可以这样做:
{% for r in CONT_PLANE_PROT_V4['RANGES'] %}
Statement1 {{ r }}
{% endfor %}
{% for h in CONT_PLANE_PROT_V4['HOSTS'] %}
Statement2 {{ h }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
使用您的原始数据,您有一个CONT_PLANE_PROT_V4包含字典作为元素的列表,每个字典内部都有不同的键。您必须编写更复杂的模板来处理此结构。
| 归档时间: |
|
| 查看次数: |
16317 次 |
| 最近记录: |