Ansible XML模块添加嵌套子级

时间:2019-05-21 15:47:38

标签: xml xpath ansible

我正在为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将其删除。

因此欢迎您提出关于我所缺少的任何建议。

0 个答案:

没有答案