我正在为aws基础设施建立一个ansible项目,需要编辑多个XML文件,主要是添加嵌套元素。一段时间后,我得到了一个示例,运行起来比我预期的要难。
await self.close()
这导致将嵌套元素添加到第一个经过格式化的HostPort元素的末尾
- name: HTTPS Config - Add SSLConfig to VHost.xml
xml:
path: /usr/local/WowzaStreamingEngine/conf/VHost.xml
xpath: "/descendant::HostPort[1]"
pretty_print: Yes
add_children:
- SSLConfig:
_:
- KeyStorePath: Censored
- KeyStorePassword: 'XXXXXX'
- CipherSuites: "{{ ciphersuites }}"
- Protocols: 'TLSv1,TLSv1.1,TLSv1.2'
when: wowza_install.changed
现在的第一个问题(或多或少)是第二个示例“ HTTPS Config-Logging SSL”,即使我给了选项<?xml version="1.0" encoding="UTF-8"?>
<Root version="2">
<VHost>
<Description></Description>
<HostPortList>
<HostPort>
<!-- Many more stuff -->
<Port>1935</Port>
<HTTPIdent2Response></HTTPIdent2Response>
<SSLConfig>
<KeyStorePath>Censored</KeyStorePath>
<KeyStorePassword>XXXXXX</KeyStorePassword>
<SSLProtocol>TLS</SSLProtocol>
<CipherSuites>List_of_CipherSuites</CipherSuites>
<Protocols>TLSv1,TLSv1.1,TLSv1.2</Protocols>
</SSLConfig>
</HostPort>
<!-- More HostPort definitions -->
</HostPortList>
</VHost>
</Root>
,它也会插入未格式化的xml。对于前面的示例“ HTTPS Config-将SSLConfig添加到VHost.xml”,该示例很好地工作,在该示例中,插入的XML的格式正确。
pretty_print: Yes
- name: HTTPS Config - Logging SSL
xml:
path: /usr/local/WowzaStreamingEngine/conf/Server.xml
xpath: "/descendant::Server/Properties"
pretty_print: Yes
add_children:
- Name: 'sslLogConnectionInfo'
- Value: 'false'
- Type: 'Boolean'
when: wowza_install.changed
第二个也是比较烦人的部分是重新运行我的ansible项目会第二次添加xml标记,在获取新设置时我通过注册<?xml version="1.0" encoding="UTF-8"?>
<Root version="2">
<Server>
<Name>Name</Name>
<Description>Description</Description>
<!-- all kind of stuff which is not relevant -->
<Properties>
<Name>sslLogConnectionInfo</Name><Value>false</Value><Type>Boolean</Type></Properties>
</Server>
</Root>
避免了此操作。我尝试使用woza_install
而不是set_children
,但这会覆盖元素中所有现有的子级。由于我对xpaths比较陌生,因此我认为我的错误是选择了“ wanded”元素(“ / descendant ::”)的所有子元素,然后用add_children
将其删除。
因此欢迎您提出关于我所缺少的任何建议。