Ansible yaml 到 xml
Ansible yaml to xml
我正在尝试使用 yaml 剧本创建 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 instead of 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>
我正在尝试使用 yaml 剧本创建 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 instead of 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>