Несложная манипуляция xml похожа на lineinfile

В Ansible я ищу технику, которая похожа на lineinfile или replace, но для файлов XML при использовании шаблонов это не вариант. Похоже на очень распространенную потребность.

С XML файлами, однако, необходимо указать xpath, чтобы гарантировать, что элемент присутствует/отсутствует в правильном месте в DOM.

Решение должно гарантировать, что существует механизм замены существующего node, который может выглядеть немного иначе, чем целевой node.

Тривиальный пример XML файла:

<?xml version="1.0" encoding="ISO-8859-1"?>
<datasources-configuration xmlns:myns="http://org.someorg.ds/config">
  <datasources>
    <!-- various other xml -->
    <datasource>
        <name>MyDS</name>
        <jdbcUrl>...</jdbcUrl>
    </datasource>
  </datasources>
  <!-- various other xml -->
</datasources-configuration>

Я хочу, чтобы гарантировать, что полный многострочный блок XML будет вставлен/заменен в целевой XML файл, если будет определено определенное выражение xpath. Например, чтобы добавить следующий источник данных к источникам данных:

   <datasource>
      <name>AnotherDS</name>
      <jdbcUrl>...</jdbcUrl>
   </datasource>

Лучшее, что я видел, это этот настраиваемый модуль, который разбивает его собственные примеры: https://github.com/cmprescott/ansible-xml

Имеется ли такой модуль или рекомендации по решению?

Ответ 1

Я просто изучал это сам и обнаружил модуль ansible-xml, который выглядит как отличный вариант.