Ansible xml-manipulation ähnlich lineinfile

In Ansible, ich bin auf der Suche nach einer Technik, die funktioniert ähnlich wie lineinfile oder replace aber für XML-Dateien bei der Verwendung von Vorlagen ist keine option. Scheint ein sehr Häufig brauchen.

Mit XML-Dateien, obwohl, ist es notwendig, geben Sie eine xpath garantieren das element ist anwesend/abwesend von der richtigen Stelle in der DOM.

Muss die Lösung zu gewährleisten, gibt es einen Mechanismus, der Ersatz einer bestehenden Knoten, der könnte sieht ganz ein bisschen anders als der Zielknoten.

Triviales Beispiel XML-Datei:

<?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>

Ich möchte in der Lage sein, um sicherzustellen, eine vollständige mehrzeiligen block von XML wird eingefügt/ersetzt, die in die Ziel-XML-Datei mit einem bestimmten xpath-Ausdruck übereinstimmt. Zum Beispiel, fügen Sie die folgende Datenquelle, um Datenquellen:

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

Die besten, die ich gesehen habe, ist dieses benutzerdefinierte Modul bricht auf eigenen Beispiele: https://github.com/cmprescott/ansible-xml

Funktioniert so ein Modul vorhanden ist oder Lösungsvorschläge?

  • Warum sind die Vorlagen nicht eine option? Dein Beispiel sieht templateable zu mir.
  • Diese Datei wurde bereits Vorlagen durch eine separate, unabhängige baseline-Bestimmung. Templating durch neuere, inkrementelle playbooks und Rollen wegfliegen der Grundlinie.
  • Sie scheinen zu sein, fehlt der Punkt, templating, wenn es nicht eine Ausgabe-Datei genau, wie Sie wollen für die Umwelt. Können Sie teilen, was Sie tun, in der Template-spielen? dh das Spiel, das j2-Vorlage und alle notwendigen Inventar Variablen.
  • die baseline-Bestimmungen einer bekannten Konfiguration an der Zeit. später playbooks hinzufügen, löschen oder ändern von Teilbereichen, ohne zu wissen, den vollständigen Inhalt der Datei. Denken Sie an einen tomcat installieren, wissen Sie nicht, alle Ihre Datenquellen wenn Sie zuerst konfigurieren. Zur gleichen Zeit, eine spätere Rolle sollte nicht sein besorgt die gesamte Datei, das ist genau das, was eine Vorlage benötigen würde. Es gibt schließlich einen Grund, warum Sie haben linefile und ersetzen, für genau die Fälle, wenn Sie nicht wissen, oder kümmern uns um unzusammenhängende Abschnitte. Vielen Dank für Ihre Hilfe though.
  • Könnten Sie Befehl zum ausführen der Vorlage durch eine xslt -, übergabe, bestimmte Dinge, die als Parameter an das xslt. Für etwas leichter, aber immer noch xml-bewusst, check-out der utility-xmlstarlet: en.wikipedia.org/wiki/XMLStarlet
  • Guter Tipp, einmal sourceforge kommt, werde ich es versuchen. Danke @David
  • Sie können die install xmlstarlet von apt-get oder brauen. Ich in der Regel meiden sourceforge 🙂
  • brew installiert es von sourceforge, aber ich weiß, was du meinst.

InformationsquelleAutor Mike D | 2015-06-21
Schreibe einen Kommentar