我正在尝试使用 yaml playbook 创建 xml 文件。 XML 应该如下所示:
<accessControl>
<ipRanges>
<ipRange>
<ip>
<int>00</int>
<int>00</int>
<int>00</int>
<int>000</int>
</ip>
<mask>
<int>255</int>
<int>255</int>
<int>255</int>
<int>0</int>
</mask>
</ipRange>
<null/>
</ipRanges>
</accessControl>
我不知道如何创建提供多个相同标签(< int >)的ansible任务。我正在寻找类似循环的东西或者还有其他方法吗?
编辑: 即我有这样的 XML:
<accessControl>
<ipRanges>
<ipRange>
</ipRange>
<null/>
</ipRanges>
</accessControl>
我需要将IP和MASK添加到标签中来实现:
<accessControl>
<ipRanges>
<ipRange>
<ip>
<int>127</int>
<int>0</int>
<int>0</int>
<int>1</int>
</ip>
<mask>
<int>255</int>
<int>255</int>
<int>255</int>
<int>0</int>
</mask>
</ipRange>
<null/>
</ipRanges>
</accessControl>
我可以在列表、字典、元组中提供 IP 和掩码 - 这并不重要。 对于这个问题,我们假设它是这样的: ['127.0.0.1', '255.255.255.0']
最佳答案
例如,给定数据
ip: ['127.0.0.1', '255.255.255.0']
模板
shell> cat test.xml.j2
<accessControl>
<ipRanges>
<ipRange>
<ip>
{% for item in ip %}
{% if loop.index is odd %}
{% for i in item.split('.') %}
<int>{{ i }}</int>
{% endfor %}
{% endif %}
{% endfor %}
</ip>
<mask>
{% for item in ip %}
{% if loop.index is even %}
{% for i in item.split('.') %}
<int>{{ i }}</int>
{% endfor %}
{% endif %}
{% endfor %}
</mask>
</ipRange>
<null/>
</ipRanges>
</accessControl>
和任务
- template:
src: test.xml.j2
dest: test.xml
给予
shell> cat test.xml
<accessControl>
<ipRanges>
<ipRange>
<ip>
<int>127</int>
<int>0</int>
<int>0</int>
<int>1</int>
</ip>
<mask>
<int>255</int>
<int>255</int>
<int>255</int>
<int>0</int>
</mask>
</ipRange>
<null/>
</ipRanges>
</accessControl>
您可以使用slice notation而不是even/odd指标测试
<ip>
{% for item in ip[0::2] %}
{% for i in item.split('.') %}
<int>{{ i }}</int>
{% endfor %}
{% endfor %}
</ip>
<mask>
{% for item in ip[1::2] %}
{% for i in item.split('.') %}
<int>{{ i }}</int>
{% endfor %}
{% endfor %}
</mask>
关于xml - Ansible yaml 到 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70418925/