Ansible XML Модуль добавления вложенных потомков - PullRequest
0 голосов
/ 21 мая 2019

Я настраиваю 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.

Так что любые предложения о том, чего мне не хватает, приветствуются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...