Я настраиваю ANSIBLE проект для инфраструктуры AWS и мне нужно отредактировать несколько файлов XML, в основном добавляя вложенные элементы. Через некоторое время я получил пример, который оказался тяжелее, чем я ожидал.
- 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
Это приводит к добавлению вложенного элемента в конец первого элемента HostPort в формате
<?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>
Первая проблема (более или менее) заключается в том, что второй пример «Конфигурация HTTPS - протоколирование SSL» вставляет XML-файл в неотформатированном виде, хотя я и выбрал опцию pretty_print: Yes
. Это хорошо работает для предыдущего примера «Конфигурация HTTPS - добавьте SSLConfig в VHost.xml», где вставленный XML отформатирован правильно.
- 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
<?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>
Вторая и более раздражающая часть заключается в том, что при повторном запуске моего ANSIBLE-проекта второй раз добавляется тег xml, которого я избежал, зарегистрировав woza_install
при получении новой настройки. Я попытался set_children
вместо add_children
, но это перезаписывает все существующие дочерние элементы в элементе. Так как я довольно новичок в xpaths, я предположил, что моей ошибкой является выбор всех дочерних элементов элемента «wanted» («/ Потомок ::»), который затем удаляется с помощью set_children
.
Так что любые предложения о том, чего мне не хватает, приветствуются.