cmprescott.xml
ansible-xml
Ansible Modul zur Manipulation von XML-Dateien und -Strings. Dieses Modul befindet sich derzeit in der Entwicklungsphase für Ansible. Es wird voraussichtlich im Rahmen von Ansible 2.4.0 Mitte September veröffentlicht. Daher sollten alle Probleme an ansible gemeldet werden.
Installation
- Dieses Modul benötigt Python-Bindings für
libxml
in Version 2.3 oder höher. Dies ist normalerweise in einem Paket namenspython-lxml
enthalten. Installieren Sie es mitapt-get install python-lxml
,yum install python-lxml
oderpip install lxml
. - Dieses Modul ist NICHT in Ansible v2.3 und älter enthalten. Installieren Sie es mit
git clone https://github.com/cmprescott/ansible-xml.git
, oderansible-galaxy install cmprescott.xml
. Gültige Installationsverzeichnisse sind das Bibliotheksverzeichnis des Playbooks, das Rollenverzeichnis des Playbooks und die Einbeziehung im Playbook, oder der Modulpfad von Ansible.
Hinweise
- Ursprüngliches Modul von @github_rhinception erstellt.
- Am 2015-05-05 übergab @tbielawa das Projekt an @cmprescott, um Problem #16 zu lösen.
- Am 2017-08-08 wurde dieses Modul in Ansible integriert.
- Diese Software ist unter den Bedingungen der GPLv3-Lizenz verfügbar.
- Hallo, wir haben Unit-Tests!
Was ist XPath?
"XPath verwendet Pfad-Ausdrücke, um Knoten oder Knoten-Mengen in einem XML-Dokument auszuwählen. Der Knoten wird durch das Verfolgen eines Pfades oder von Schritten ausgewählt."
Im Grunde ist es eine Syntax, die es Ihnen ermöglicht, spezifische Elemente oder Attribute in einer XML-Datei auszuwählen.
Erfahren Sie mehr im Mozilla Developer Network
Unittests
In diesem Repository sind auch Unittests enthalten. Verwenden Sie diese zusätzlich zur Travis-CI Konfiguration, wenn Sie weitere Beispiele benötigen.
Beispiele
Gegeben:
<?xml version='1.0' encoding='UTF-8'?>
<business type="bar">
<name>Tasty Beverage Co.</name>
<beers>
<beer>Rochefort 10</beer>
<beer>St. Bernardus Abbot 12</beer>
<beer>Schlitz</beer>
</beers>
<rating subjective="true">10</rating>
<website>
<mobilefriendly />
<address>http://tastybeverageco.com</address>
</website>
</business>
Entfernen Sie das Attribut subjective
des Ratings:
xml:
path: /foo/bar.xml
xpath: /business/rating/@subjective
state: absent
Setzen Sie das Rating auf 11:
xml:
path: /foo/bar.xml
xpath: /business/rating
value: 11
Ermitteln Sie die Anzahl der Bier-Knoten:
xml:
path: /foo/bar.xml
xpath: /business/beers/beer
count: yes
register: hits
debug:
var: hits.count
Fügen Sie ein Element phonenumber
zum Element business
hinzu. Implizites
mkdir -p
Verhalten, wo zutreffend (übergeordnete XML-Knoten werden automatisch erstellt):
xml:
path: /foo/bar.xml
xpath: /business/phonenumber
value: 555-555-1234
Fügen Sie mehrere Biere zum Bier-Element hinzu, wobei eine vars.yaml Datei mit folgendem Inhalt angenommen wird:
new_beers:
- beer: "Old Rasputin"
- beer: "Old Motor Oil"
- beer: "Old Curmudgeon"
Dann würde die Playbook-Syntax so aussehen:
xml:
path: /foo/bar.xml
xpath: /business/beers
add_children: '{{ new_beers }}'
Das Gleiche, aber inline:
xml:
path: /foo/bar.xml
xpath: /business/beers
add_children:
- beer: "Old Rasputin"
- beer: "Old Motor Oil"
- beer: "Old Curmudgeon"
Fügen Sie ein Element validxhtml
zum Element website
hinzu. Beachten Sie, dass
state
standardmäßig present
ist und value
für Elemente standardmäßig
null
ist. Das Ergebnis ist etwa <website><validxhtml />...</website>
:
xml:
path: /foo/bar.xml
xpath: /business/website/validxhtml
Fügen Sie ein leeres Attribut validatedon
zum Element validxhtml
hinzu. Dies macht das letzte Beispiel tatsächlich überflüssig, aufgrund des impliziten
Verhaltens zur Erstellung von übergeordneten Knoten. Das Ergebnis ist etwa
<website><validxhtml validatedon='' />...</website>
:
xml:
path: /foo/bar.xml
xpath: /business/website/validxhtml/@validatedon
(1/2) Entfernen Sie alle Kinder vom Website-Element:
xml:
path: /foo/bar.xml
xpath: /business/website/*
state: absent
(2/2) Entfernen Sie alle Kinder vom Website-Element:
xml:
path: /foo/bar.xml
xpath: /business/website
children: []
Frage? Wenn Sie <beers><child01 /><child02 /></beers>
haben,
was passiert, wenn Sie sagen:
xml:
path: /foo/bar.xml
xpath: /beers
value
wird standardmäßig auf ein Element gesetzt, so dass dies die Kinder-Elemente löschen würde.
ansible-galaxy install cmprescott.xml